Skip to main content
POST
Append rows

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

database
string
required

Target database.

Query Parameters

table
string
required

Target table.

Body

The rows to append: a JSON {"data": [...]} envelope of rows keyed by column name (application/json), or an Arrow IPC stream of one record batch (application/vnd.apache.arrow.stream).

JSON row envelope for POST /v1/append/{database} and POST /v1/update/{database} — the Content-Type: application/json alternative to an Arrow IPC stream body. Rows are JSON objects keyed by column name, converted server-side into one Arrow batch against the table's schema.

A key the table has no column for adds one, typed from the values in the request and nullable, so earlier rows read back null for it. That is the table's behaviour and not this encoding's: an Arrow batch carrying a column the table lacks adds it on the same terms. What is specific to JSON is how a row is read — a nested object flattens to dot-path columns, an array becomes a list column, and the column's type is inferred from the values rather than stated by the caller.

A value whose type disagrees with a column the table already has is a 400, naming the column, the type it holds and the one offered; the write lands no rows. Growing past the table's max_fields is a 400 too. Neither is retryable as sent: change the value, or change the column with a schema patch first. Appending never creates a table — an unknown table name is a 404.

data
object[]
required

Rows as JSON objects keyed by column name.

Response

Rows appended. Body is an Arrow IPC row stream (application/vnd.apache.arrow.stream), or a JSON {"data": [...]} envelope.