curl --request POST \
--url https://origami.chat/api/v1/tables/{tableId}/rows \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"rows": [
{
"company-name": "Acme Corp",
"website": "acme.com"
},
{
"company-name": "Beta Inc",
"website": "beta.io"
}
]
}
'{
"batchId": "550e8400-e29b-41d4-a716-446655440000",
"tableRunId": "0b8ac9a5-2f6e-4a52-9d5c-6a1f0f1f2a3b"
}Insert rows
Insert rows into an existing table. Returns a batch ID immediately; poll
GET /batches/{batchId} for enrichment progress and results.
Column matching: Field names in each row object are matched to input columns
by slug (exact match). Only columns with kind: "input" are accepted;
enrichment and score columns are populated automatically. Use GET /tables to
discover available column slugs and their kinds.
Enrichment: By default (enrich: true), all auto-trigger enrichment columns run
immediately after insertion. Set enrich: false to insert data without triggering enrichment.
Credits: Credit shortfalls do not fail the insert synchronously; they surface later
in the batch’s failures.insufficientCredits (poll GET /batches/{batchId}).
Deduplication & exclusion lists apply automatically; the same table-level rules from the UI are enforced. Duplicate or excluded rows are inserted but may not enrich.
Limits:
- Maximum 100 rows per request.
- Free-plan tables are capped at 30 rows total.
curl --request POST \
--url https://origami.chat/api/v1/tables/{tableId}/rows \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"rows": [
{
"company-name": "Acme Corp",
"website": "acme.com"
},
{
"company-name": "Beta Inc",
"website": "beta.io"
}
]
}
'{
"batchId": "550e8400-e29b-41d4-a716-446655440000",
"tableRunId": "0b8ac9a5-2f6e-4a52-9d5c-6a1f0f1f2a3b"
}Authorizations
API key with og_live_ prefix. Create keys in Settings → API Keys.
Pass in the Authorization header:
Authorization: Bearer og_live_abc123...
Path Parameters
The table UUID. Use GET /tables to list available tables.
Body
Array of row objects to insert. Each row is a flat object mapping input column slugs to values. Maximum 100 rows per request.
1 - 100 elementsWhether to trigger enrichment after inserting rows.
Defaults to true. Set to false to insert data without
running enrichment; the batch will immediately be "complete".
Optional caller-generated UUID for idempotent retries. If a batch with this ID already exists for the organization, the server returns the existing batch (HTTP 200) without inserting rows again. Generate a UUID client-side and include it with every attempt to make retries safe after network failures.
Response
Idempotent replay: a batch with the provided batchId already exists.
The original batch ID is returned without inserting new rows.
Unique identifier for the batch. Use this to poll GET /batches/{batchId}
for progress and results.
Parent table-run for an enrich=true batch; null for
enrich=false inserts, pre-migration batches, and the rare setup
failure where no run was created. Correlates the
table.run.completed webhook (its data.run_id) and the durable
status read GET /api/v2/tables/{tableId}/runs/{tableRunId}.