files.upload is a single multipart POST. The Python and TypeScript
SDKs switch to a resumable upload session automatically at 32 MiB.
Call the session routes yourself when you need to resume after a drop or
stream from a source that is not in memory.
The workspace .txt ceiling is 1 GiB. A file at that boundary is uploaded as
four 256 MiB parts; it cannot use the 512 MiB single-request route. Other
document formats keep their existing format-specific ceilings.
- Python
- TypeScript
- curl
Session lifecycle
POST .../upload-sessions— returnssession_id,session_token,chunk_size,total_partsPUT .../parts/{part_number}— send each chunk withX-Upload-TokenGET .../upload-sessions/{session_id}— list landed parts after a dropPOST .../complete— concatenates parts and writes the ledger row (aJob)DELETE .../upload-sessions/{session_id}— abort and reclaim staged parts
ttl_seconds is optional on create.
When to use which
For
.txt, the 1 GiB contract covers workspace storage, ingestion,
search/read, and Parse. Split, Extract, and Ground currently reject .txt
sources above 256 MiB because those operations still materialize text in
memory.
Uploading still does not ingest. Call ingest after
the complete job succeeds.