Skip to main content
Workspace 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.

Session lifecycle

  1. POST .../upload-sessions — returns session_id, session_token, chunk_size, total_parts
  2. PUT .../parts/{part_number} — send each chunk with X-Upload-Token
  3. GET .../upload-sessions/{session_id} — list landed parts after a drop
  4. POST .../complete — concatenates parts and writes the ledger row (a Job)
  5. DELETE .../upload-sessions/{session_id} — abort and reclaim staged parts
The session token is not your API key. Send it on every part and on complete. Default session TTL is a server default; ttl_seconds is optional on create.

When to use which

Uploading still does not ingest. Call ingest after the complete job succeeds.