Ingest
Open a session
Section titled “Open a session”POST /v1/ingest-sessionsA session carries the partition label, the mode and the JSON pointers that read the records:
| Field | Example | Meaning |
|---|---|---|
partition |
orders |
The records’ partition |
mode |
initial or incremental |
Initial loads publish at commit, incremental ones every verified batch |
pointers.id |
/order_id |
Record id: a string of at most 256 bytes or a number |
pointers.author |
/buyer_id |
Owner id: the person, account or device the record belongs to |
pointers.ts |
/placed_at |
Timestamp |
pointers.ts_format |
rfc3339 |
Time format: rfc3339, unix, unix_ms or twitter |
Session creation honours the Idempotency-Key header.
Dry run
Section titled “Dry run”POST /v1/ingest-sessions/{sid}/dry-runValidates the first 1,000 lines and returns counts by rejection reason. No content is echoed and nothing is stored.
Send a batch
Section titled “Send a batch”PUT /v1/ingest-sessions/{sid}/batches/{n}Content-Digest: sha-256=:<base64>:Content-Encoding: zstd- The body is NDJSON;
Content-Encodingmay bezstdoridentity. Content-Digestis required; nothing is kept when the digest does not match.- Batches are idempotent by session, number and digest. Other content under a used number answers
409 batch_exists.
Commit
Section titled “Commit”POST /v1/ingest-sessions/{sid}/commitThe commit returns an EdDSA-signed JWS receipt with the record, chunk and batch counts and whether the session is published. To abort a session, DELETE /v1/ingest-sessions/{sid}.
Limits
Section titled “Limits”| Limit | Value |
|---|---|
| Record payload | At most 1 MiB |
| Batch as sent | At most 256 MiB |
| Batch decompressed | At most 4 GiB |
| JSON depth | 64 |
| Batch number | 1 to 1,000,000 |
| Chunk | At most 256 MiB or 200,000 records |
| Batch time budget | 1 hour |