Reference · 7 operations
Tables: column runs
Last updated from API version 2026-10-06 at (live spec, refreshed hourly). openapi.json
Runs
Estimate a column run (free, nothing held).
/api/v1/tables/{id}/columns/{columnId}/runs/estimate- Scope
- read
- Credits
- Free
- Idempotency-Key
- none
What a run of this column over scope would cost, priced from the
server catalog: cells, creditsMin (no enrichment match; AI cells
always cost), creditsMax (every cell charged), byCapability,
walletAvailable (null when unlimited) and excluded (cells that already
ran, unless scope.force, and cells another run is working on). During a
migration (shadow) every run endpoint is 409 TABLE_MIGRATING.
Parameters
- idpathstringrequired
The table id.
- columnIdpathstringrequired
The column id (a formula, ai, enrichment or action column).
Request body · application/json
TableRunEstimateRequest
- scopeTableRunScope0
Which cells a run takes.
mode:all(default),empty(cell empty),errored/skipped/stale(by cell state),selected(rowIds, at most 1,000),view(viewId).filter(the rows filter language) narrowsall,emptyandview. Cells that already ran are left out unlessforce(a new charge). - maxCreditsnumber0
Responses
200OK.Show schema
TableRunEstimateResponse
- 0
- 0
Metadata on every success response.
Errors
400 The request is invalid (VALIDATION_ERROR, CURSOR_MISMATCH, UNSUPPORTED_FILTER) · 401 Missing, invalid, expired or revoked key · 403 Missing scope, suspended workspace or unavailable identity · 404 Unknown resource or route. A resource in another workspace is also 404 · 409 IDEMPOTENCY_IN_PROGRESS (the first request with this key is still
running; `Retry-After` is the lease left, at most 60 s) or
IDEMPOTENCY_RESULT_UNAVAILABLE (the original result was too large to
store; `details.originalRequestId`).
· 422 IDEMPOTENCY_KEY_REUSED (the key was used with another body or operation), or an action that cannot run · 429 Rate limit reached · 500 Unexpected error · 503 The backend is unreachable; retry after `Retry-After`. Every error is {error: {type, code, message, requestId, docUrl}}; see error codes.
curl -X POST "https://app.owlbound.ai/api/v1/tables/$ID/columns/$COLUMN_ID/runs/estimate" \
-H "Authorization: Bearer $OWLBOUND_API_KEY" \
-H "Owlbound-Version: 2026-10-06" \
-H "Content-Type: application/json" \
-d '{
"scope": {
"mode": "all",
"rowIds": [
"<rowIds>"
],
"viewId": "<viewId>"
},
"maxCredits": 100
}'Run a column (formula, ai, enrichment or action).
/api/v1/tables/{id}/columns/{columnId}/runs- Scope
- enrich
- Credits
- Free
- Idempotency-Key
- required
Queues one cell per row of scope and returns 202 with the run. The
engine then forms batches of up to 25 cells whose maximum cost fits
maxCredits (required) and the column's daily cap, holds credits per batch
and capability, and settles what committed cells charged: enrichment only
for a value, AI for a value or no_result, errors never, formula never.
An action column holds the operation's catalog price only for rows
whose priced step can run (others hold nothing) and charges it once per
row whose result the operation charges (e.g. a newly found work email).
A run that reaches maxCredits ends capped (cells skipped with
RUN_CAPPED). 402 INSUFFICIENT_CREDITS when the wallet cannot cover
creditsMin; 429 CAP_EXCEEDED when the column's daily cap is reached.
Cells that already ran are re-run only with scope.force (a new charge).
Parameters
- idpathstringrequired
The table id.
- columnIdpathstringrequired
The column id (a formula, ai, enrichment or action column).
- Idempotency-Keyheaderstring
1 to 255 printable ASCII characters, scoped to the API key (a rotated key shares its predecessor's keys) and kept 24 h. Accepted on every POST, PATCH and DELETE (ignored on GET); required from v1 keys where the operation says
x-owlbound-idempotent: required(missing:400 VALIDATION_ERROR,param: Idempotency-Key). Same key and body after completion: the stored response is replayed withIdempotent-Replayed: true. Results over 64 KB are not stored; their replay is409 IDEMPOTENCY_RESULT_UNAVAILABLEwithdetails.originalRequestId(check state with a GET). Same key while the first request runs:409 IDEMPOTENCY_IN_PROGRESSwithRetry-After. Same key, other body or operation:422 IDEMPOTENCY_KEY_REUSED. A request that ended 5xx may be retried with the same key. 4xx results are stored and replayed too: a402 INSUFFICIENT_CREDITSreplays even after a top-up, so use a new Idempotency-Key after adding credits.min length 1max length 255
Request body (required) · application/json
TableRunCreateRequest
- scopeTableRunScope0
Which cells a run takes.
mode:all(default),empty(cell empty),errored/skipped/stale(by cell state),selected(rowIds, at most 1,000),view(viewId).filter(the rows filter language) narrowsall,emptyandview. Cells that already ran are left out unlessforce(a new charge). - maxCreditsnumberrequired
The most this run may charge; batches are formed under it.
min 0
Responses
202Accepted: the run is queued; the engine reserves and charges per batch.Show schema
TableRunResponse
- 0
- 0
Metadata on every success response.
Errors
400 The request is invalid (VALIDATION_ERROR, CURSOR_MISMATCH, UNSUPPORTED_FILTER) · 401 Missing, invalid, expired or revoked key · 402 Not enough credits (INSUFFICIENT_CREDITS). With an Idempotency-Key this
result is stored and replayed: after adding credits, retry with a new
Idempotency-Key.
· 403 Missing scope, suspended workspace or unavailable identity · 404 Unknown resource or route. A resource in another workspace is also 404 · 409 IDEMPOTENCY_IN_PROGRESS (the first request with this key is still
running; `Retry-After` is the lease left, at most 60 s) or
IDEMPOTENCY_RESULT_UNAVAILABLE (the original result was too large to
store; `details.originalRequestId`).
· 422 IDEMPOTENCY_KEY_REUSED (the key was used with another body or operation), or an action that cannot run · 429 Rate limit reached · 500 Unexpected error · 503 The backend is unreachable; retry after `Retry-After`. Every error is {error: {type, code, message, requestId, docUrl}}; see error codes.
curl -X POST "https://app.owlbound.ai/api/v1/tables/$ID/columns/$COLUMN_ID/runs" \
-H "Authorization: Bearer $OWLBOUND_API_KEY" \
-H "Owlbound-Version: 2026-10-06" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"maxCredits": 100
}'The table's column runs, newest first.
/api/v1/tables/{id}/runs- Scope
- read
- Credits
- Free
- Idempotency-Key
- Not used
Each run with its status, scope, estimate, cap, cell counts and credits
(reserved: holds still open; charged: settled).
Parameters
- idpathstringrequired
The table id.
- limitqueryinteger
Page size.
default 50min 1max 200 - cursorquerystring
Opaque cursor from
meta.page.nextCursor. Reusing it with other filters is400 CURSOR_MISMATCH.
Responses
200OK.Show schema
TableRunListResponse
- 0
- 0
Metadata on a paginated success response.
Errors
400 The request is invalid (VALIDATION_ERROR, CURSOR_MISMATCH, UNSUPPORTED_FILTER) · 401 Missing, invalid, expired or revoked key · 403 Missing scope, suspended workspace or unavailable identity · 404 Unknown resource or route. A resource in another workspace is also 404 · 409 IDEMPOTENCY_IN_PROGRESS (the first request with this key is still
running; `Retry-After` is the lease left, at most 60 s) or
IDEMPOTENCY_RESULT_UNAVAILABLE (the original result was too large to
store; `details.originalRequestId`).
· 429 Rate limit reached · 500 Unexpected error · 503 The backend is unreachable; retry after `Retry-After`. Every error is {error: {type, code, message, requestId, docUrl}}; see error codes.
curl "https://app.owlbound.ai/api/v1/tables/$ID/runs" \
-H "Authorization: Bearer $OWLBOUND_API_KEY" \
-H "Owlbound-Version: 2026-10-06"One column run.
/api/v1/tables/{id}/runs/{runId}- Scope
- read
- Credits
- Free
- Idempotency-Key
- Not used
Status queued, running, done, capped, cancelled or failed;
finishedAt is set once nothing is queued or held.
Parameters
- idpathstringrequired
The table id.
- runIdpathstringrequired
The run id.
Responses
200OK.Show schema
TableRunResponse
- 0
- 0
Metadata on every success response.
Errors
400 The request is invalid (VALIDATION_ERROR, CURSOR_MISMATCH, UNSUPPORTED_FILTER) · 401 Missing, invalid, expired or revoked key · 403 Missing scope, suspended workspace or unavailable identity · 404 Unknown resource or route. A resource in another workspace is also 404 · 409 IDEMPOTENCY_IN_PROGRESS (the first request with this key is still
running; `Retry-After` is the lease left, at most 60 s) or
IDEMPOTENCY_RESULT_UNAVAILABLE (the original result was too large to
store; `details.originalRequestId`).
· 429 Rate limit reached · 500 Unexpected error · 503 The backend is unreachable; retry after `Retry-After`. Every error is {error: {type, code, message, requestId, docUrl}}; see error codes.
curl "https://app.owlbound.ai/api/v1/tables/$ID/runs/$RUN_ID" \
-H "Authorization: Bearer $OWLBOUND_API_KEY" \
-H "Owlbound-Version: 2026-10-06"The run's cells: per-cell status, attempts and charge.
/api/v1/tables/{id}/runs/{runId}/cells- Scope
- read
- Credits
- Free
- Idempotency-Key
- Not used
One entry per cell of the run (the cell's run history for this run):
status, batch, attempts and attempt log, capability and credits charged
(chargedAt set once, with the committed outcome).
Parameters
- idpathstringrequired
The table id.
- runIdpathstringrequired
The run id.
- limitqueryinteger
Page size.
default 50min 1max 200 - cursorquerystring
Opaque cursor from
meta.page.nextCursor. Reusing it with other filters is400 CURSOR_MISMATCH.
Responses
200OK.Show schema
TableCellRunListResponse
- 0
- 0
Metadata on a paginated success response.
Errors
400 The request is invalid (VALIDATION_ERROR, CURSOR_MISMATCH, UNSUPPORTED_FILTER) · 401 Missing, invalid, expired or revoked key · 403 Missing scope, suspended workspace or unavailable identity · 404 Unknown resource or route. A resource in another workspace is also 404 · 409 IDEMPOTENCY_IN_PROGRESS (the first request with this key is still
running; `Retry-After` is the lease left, at most 60 s) or
IDEMPOTENCY_RESULT_UNAVAILABLE (the original result was too large to
store; `details.originalRequestId`).
· 429 Rate limit reached · 500 Unexpected error · 503 The backend is unreachable; retry after `Retry-After`. Every error is {error: {type, code, message, requestId, docUrl}}; see error codes.
curl "https://app.owlbound.ai/api/v1/tables/$ID/runs/$RUN_ID/cells" \
-H "Authorization: Bearer $OWLBOUND_API_KEY" \
-H "Owlbound-Version: 2026-10-06"Cancel a run.
/api/v1/tables/{id}/runs/{runId}/cancel- Scope
- enrich
- Credits
- Free
- Idempotency-Key
- optional
Queued cells are skipped (CANCELLED); batches that committed nothing
release their hold; batches with committed cells settle what they charged.
Cancelling a finished run returns it unchanged.
Parameters
- idpathstringrequired
The table id.
- runIdpathstringrequired
The run id.
- Idempotency-Keyheaderstring
1 to 255 printable ASCII characters, scoped to the API key (a rotated key shares its predecessor's keys) and kept 24 h. Accepted on every POST, PATCH and DELETE (ignored on GET); required from v1 keys where the operation says
x-owlbound-idempotent: required(missing:400 VALIDATION_ERROR,param: Idempotency-Key). Same key and body after completion: the stored response is replayed withIdempotent-Replayed: true. Results over 64 KB are not stored; their replay is409 IDEMPOTENCY_RESULT_UNAVAILABLEwithdetails.originalRequestId(check state with a GET). Same key while the first request runs:409 IDEMPOTENCY_IN_PROGRESSwithRetry-After. Same key, other body or operation:422 IDEMPOTENCY_KEY_REUSED. A request that ended 5xx may be retried with the same key. 4xx results are stored and replayed too: a402 INSUFFICIENT_CREDITSreplays even after a top-up, so use a new Idempotency-Key after adding credits.min length 1max length 255
Responses
200OK.Show schema
TableRunResponse
- 0
- 0
Metadata on every success response.
Errors
400 The request is invalid (VALIDATION_ERROR, CURSOR_MISMATCH, UNSUPPORTED_FILTER) · 401 Missing, invalid, expired or revoked key · 403 Missing scope, suspended workspace or unavailable identity · 404 Unknown resource or route. A resource in another workspace is also 404 · 409 IDEMPOTENCY_IN_PROGRESS (the first request with this key is still
running; `Retry-After` is the lease left, at most 60 s) or
IDEMPOTENCY_RESULT_UNAVAILABLE (the original result was too large to
store; `details.originalRequestId`).
· 422 IDEMPOTENCY_KEY_REUSED (the key was used with another body or operation), or an action that cannot run · 429 Rate limit reached · 500 Unexpected error · 503 The backend is unreachable; retry after `Retry-After`. Every error is {error: {type, code, message, requestId, docUrl}}; see error codes.
curl -X POST "https://app.owlbound.ai/api/v1/tables/$ID/runs/$RUN_ID/cancel" \
-H "Authorization: Bearer $OWLBOUND_API_KEY" \
-H "Owlbound-Version: 2026-10-06" \
-H "Idempotency-Key: $(uuidgen)"Cells
Run one cell again.
/api/v1/tables/{id}/rows/{rowId}/cells/{columnId}/retry- Scope
- enrich
- Credits
- Free
- Idempotency-Key
- required
A new run of one cell (trigger retry), 202. A cell that already has
a result needs force: true (a new charge); a cell queued or running in
another run is refused. maxCredits defaults to the cell's maximum cost.
Parameters
- idpathstringrequired
The table id.
- rowIdpathstringrequired
The row id.
- columnIdpathstringrequired
The column id (a formula, ai, enrichment or action column).
- Idempotency-Keyheaderstring
1 to 255 printable ASCII characters, scoped to the API key (a rotated key shares its predecessor's keys) and kept 24 h. Accepted on every POST, PATCH and DELETE (ignored on GET); required from v1 keys where the operation says
x-owlbound-idempotent: required(missing:400 VALIDATION_ERROR,param: Idempotency-Key). Same key and body after completion: the stored response is replayed withIdempotent-Replayed: true. Results over 64 KB are not stored; their replay is409 IDEMPOTENCY_RESULT_UNAVAILABLEwithdetails.originalRequestId(check state with a GET). Same key while the first request runs:409 IDEMPOTENCY_IN_PROGRESSwithRetry-After. Same key, other body or operation:422 IDEMPOTENCY_KEY_REUSED. A request that ended 5xx may be retried with the same key. 4xx results are stored and replayed too: a402 INSUFFICIENT_CREDITSreplays even after a top-up, so use a new Idempotency-Key after adding credits.min length 1max length 255
Request body · application/json
TableCellRetryRequest
- forceboolean0
- maxCreditsnumbermin 0
Responses
202Accepted: the run is queued; the engine reserves and charges per batch.Show schema
TableRunResponse
- 0
- 0
Metadata on every success response.
Errors
400 The request is invalid (VALIDATION_ERROR, CURSOR_MISMATCH, UNSUPPORTED_FILTER) · 401 Missing, invalid, expired or revoked key · 402 Not enough credits (INSUFFICIENT_CREDITS). With an Idempotency-Key this
result is stored and replayed: after adding credits, retry with a new
Idempotency-Key.
· 403 Missing scope, suspended workspace or unavailable identity · 404 Unknown resource or route. A resource in another workspace is also 404 · 409 IDEMPOTENCY_IN_PROGRESS (the first request with this key is still
running; `Retry-After` is the lease left, at most 60 s) or
IDEMPOTENCY_RESULT_UNAVAILABLE (the original result was too large to
store; `details.originalRequestId`).
· 422 IDEMPOTENCY_KEY_REUSED (the key was used with another body or operation), or an action that cannot run · 429 Rate limit reached · 500 Unexpected error · 503 The backend is unreachable; retry after `Retry-After`. Every error is {error: {type, code, message, requestId, docUrl}}; see error codes.
curl -X POST "https://app.owlbound.ai/api/v1/tables/$ID/rows/$ROW_ID/cells/$COLUMN_ID/retry" \
-H "Authorization: Bearer $OWLBOUND_API_KEY" \
-H "Owlbound-Version: 2026-10-06" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"force": false,
"maxCredits": 100
}'Models on this page
Shared objects the operations above link to. Clients must ignore fields they do not know.
TableRunScopeobject
Which cells a run takes. mode: all (default), empty (cell empty),
errored / skipped / stale (by cell state), selected (rowIds,
at most 1,000), view (viewId). filter (the rows filter language)
narrows all, empty and view. Cells that already ran are left out
unless force (a new charge).
- modestringallemptyerroredskippedstaleselectedview
- rowIdsarray of string0
- viewIdstring0
- filterany0
- forceboolean0
TableRunEstimateobject
- cellsintegerrequired0
- creditsMinnumberrequired0
- creditsMaxnumberrequired0
- 0
- walletAvailablenumber | nullrequired0
- excludedobjectrequired0
+ Show child fields− Hide child fields
- doneintegerrequired0
- activeintegerrequired0
TableRunCapabilityEstimateobject
- capabilityIdstringrequired0
- cellsintegerrequired0
- unitCreditsnumberrequired0
- creditsMinnumberrequired0
- creditsMaxnumberrequired0
ResponseMetaobject
Metadata on every success response.
- requestIdstringrequired0
- 0
- pagePageMeta0
Cursor pagination.
hasMoreis the only end signal; pages may be short. - dryRunboolean0
True only on a dry-run response (action operations).
CreditsMetaobject
- usednumberrequired0
Credits charged by this request. Reads are free.
- balancenumber0
- estimatednumber0
Dry run only (action operations).
- availablenumber0
Dry run only (action operations).
- reservationIdstring | null0
Async operations only; the job settles this reservation.
PageMetaobject
Cursor pagination. hasMore is the only end signal; pages may be short.
- nextCursorstring | nullrequired0
- hasMorebooleanrequired0
- limitintegerrequiredmin 1max 200
TableRunobject
- idstringrequired0
- workspaceIdstringrequired0
- tableIdstringrequired0
- columnIdstringrequired0
- triggerstringrequiredapiuiretryauto_runsource_sync
- 0
Which cells a run takes.
mode:all(default),empty(cell empty),errored/skipped/stale(by cell state),selected(rowIds, at most 1,000),view(viewId).filter(the rows filter language) narrowsall,emptyandview. Cells that already ran are left out unlessforce(a new charge). - statusstringrequiredqueuedrunningdonecancelledfailedcapped
- estimateanyrequired0
- maxCreditsnumberrequired0
- cellsobjectrequired0
+ Show child fields− Hide child fields
- totalintegerrequired0
- doneintegerrequired0
- failedintegerrequired0
- skippedintegerrequired0
- creditsobjectrequired0
+ Show child fields− Hide child fields
- reservednumberrequired0
- chargednumberrequired0
- createdAtnumberrequired0
- finishedAtnumber | nullrequired0
PagedResponseMetaobject
Metadata on a paginated success response.
- requestIdstringrequired0
- 0
- 0
Cursor pagination.
hasMoreis the only end signal; pages may be short.
TableCellRunobject
- idstringrequired0
- runIdstringrequired0
- rowIdstringrequired0
- columnIdstringrequired0
- statusstringrequiredqueuedrunningdoneno_resulterrorstaleskipped
- batchNointeger | nullrequired0
- attemptsintegerrequired0
- attemptLogarray of objectrequired0
- capabilityIdstring | nullrequired0
- creditsChargednumberrequired0
- chargedAtnumber | nullrequired0
- startedAtnumber | nullrequired0
- finishedAtnumber | nullrequired0