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).
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
Response
Idempotent replay of an existing batchId (same receipt shape).