Upload files into a workspace (the single ingest verb)
The one ingest path for every file type — base64 file bytes inside
JSON (no multipart). CSVs become new tables (mode: "table", the
default for .csv), append into an existing table (mode: "append"
tableId), or store as documents (mode: "document"); any other extension is stored as a document. Preflight validation is all-or-nothing: the whole request is rejected (count cap, per-file mode/extension/append-target) before any file is ingested. Per-file ingestion can still fail after preflight — the response is201when at least one file landed and422 UPLOAD_FAILEDwhen every file errored. Replaces the deprecatedPOST /workspaces/{workspaceId}/uploadsspelling (same contract).
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Transport-level replay protection — any v2 POST may send it
(1–255 printable ASCII characters; UUIDs recommended). The first
response for a key is recorded and replayed verbatim for retries
with the same key + method/path/body for 24 hours; replayed
responses carry the Idempotency-Replay: true response header.
Reusing a key with a different request — or retrying while the
original is still in flight — returns 409 IDEMPOTENCY_ERROR.
5xx responses are never recorded (the retry re-executes).
1 - 255^[\x21-\x7e]{1,255}$Path Parameters
Body
Per-request file cap enforced (over it → 413 TOO_MANY_FILES).
1Response
Per-file ingest results ({ results: [...] }); individual entries may be kind: "error".