v1

latestOpenAPI 3.1.02026-07-267154122.0 KB
Workspace

Upsert rows from a CSV file (same operation, CSV transport)

The CSV transport for POST /tables/{tableId}/rows/upsert: content is a base64-encoded CSV whose headers are input-column slugs (the same keys as JSON upsert rows) with one record per data row. Identical match/enrich semantics, identical per-batchId idempotency, identical row cap — a CSV with more than 100 data rows is rejected with 413 TOO_MANY_ROWS (split the file or page the JSON upsert).

post/tables/{tableId}/rows/upsert-file

Headers

Idempotency-Keystring

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).

Request body

contentstring required

Base64-encoded CSV. Headers are input-column slugs.

filenamestring
matchColumnsstring[] required
enrichboolean
reenrichUpdatedboolean
batchIdstring uuid

Response

Idempotent replay of an existing batchId (same receipt shape).

object'enrichment_run' required
idstring uuid required
batchIdstring uuid required

Legacy alias of id.