Skip to Content

Batch

Execute multiple API operations in a single HTTP request. Batch requests share the same authentication context (workspace and API key) as the caller.

Base URL

https://api.voxburst.io/v1/batch

Limits

LimitValue
Max operations per batch100
Max total request body5 MB
Max body per individual operation100 KB
Execution timeout60 seconds
Allowed methodsPOST, PATCH, DELETE

Breaking change: Individual operation bodies are now capped at 100 KB. Any batch request containing an operation whose body exceeds 100 KB is rejected with HTTP 422:

{ "error": "Operation body must not exceed 100KB" }

This limit applies per operation, independently of the 5 MB total batch limit.


Operation Schema

Each operation in the operations array has the following fields:

FieldTypeRequiredDescription
idstringYesClient-assigned operation identifier (1–64 chars). Returned in results for correlation.
methodstringYesHTTP method: POST, PATCH, or DELETE
pathstringYesAPI path to call (e.g. /v1/posts). Max 500 chars.
bodyobjectNoRequest body for the operation. Must not exceed 100 KB when serialized.
headersobjectNoAdditional headers to pass to the operation (string key-value pairs)

Execute Batch

POST /v1/batch

Execute multiple operations sequentially (default) or in parallel.

Auth: Required

Request Body

{ "operations": [ { "id": "create-post", "method": "POST", "path": "/v1/posts", "body": { "content": "Hello from batch!", "accountIds": ["acc_123"] } }, { "id": "delete-old", "method": "DELETE", "path": "/v1/posts/clxold1234567890" } ], "continueOnError": true, "parallel": false }
FieldTypeDefaultDescription
operationsarrayOperations to execute (1–100)
continueOnErrorbooleantrueContinue executing remaining operations when one fails
parallelbooleanfalseExecute operations concurrently instead of sequentially

Response

{ "results": [ { "id": "create-post", "status": 201, "body": { "id": "clxnew...", "status": "draft" } }, { "id": "delete-old", "status": 204, "body": null } ], "summary": { "total": 2, "succeeded": 2, "failed": 0, "skipped": 0 } }

The outer response is always HTTP 200. Individual operation results carry their own HTTP status codes. A skipped operation is one that was not attempted because a prior operation failed while continueOnError was false.


Batch Transaction

POST /v1/batch/transaction

Execute operations as a fail-fast sequence. Stops on the first failure — no subsequent operations are executed.

Auth: Required

Request Body: Same schema as POST /v1/batch.

This is not a true database transaction — there is no automatic rollback of already-completed operations. Use this endpoint when you want fail-fast semantics, not when you need atomic database guarantees.


Dry Run

POST /v1/batch/dry-run

Validate a batch request without executing any operations. Checks schema, limits, and authentication, but makes no changes.

Auth: Required

Request Body: Same schema as POST /v1/batch.

Response: Same format as POST /v1/batch, with each status reflecting validation result only.


Get Limits

GET /v1/batch/limits

Returns the current batch operation limits for this workspace.

Auth: Required

Response

{ "maxOperations": 100, "timeoutMs": 60000, "allowedMethods": ["POST", "PATCH", "DELETE"], "allowedPaths": [ "/v1/posts", "/v1/accounts", "/v1/media", "/v1/webhooks" ] }

Async Batch

POST /v1/batch/async

Submit a batch job for asynchronous processing. Returns immediately with a job ID to poll.

Auth: Required

Request Body: Same schema as POST /v1/batch.

Response

{ "data": { "jobId": "clrjob1234567890abc", "status": "QUEUED", "createdAt": "2026-04-09T12:00:00.000Z" } }

Get Async Job

GET /v1/batch/async/:jobId

Poll for the status and results of an async batch job.

Auth: Required

Response — while processing

{ "data": { "id": "clrjob1234567890abc", "status": "PROCESSING", "results": null, "summary": null, "error": null, "createdAt": "2026-04-09T12:00:00.000Z", "startedAt": "2026-04-09T12:00:01.000Z", "completedAt": null } }

Response — when completed

{ "data": { "id": "clrjob1234567890abc", "status": "COMPLETED", "results": [ { "id": "op1", "status": 201, "body": { "id": "clxnew..." } } ], "summary": { "total": 1, "succeeded": 1, "failed": 0, "skipped": 0 }, "error": null, "createdAt": "2026-04-09T12:00:00.000Z", "startedAt": "2026-04-09T12:00:01.000Z", "completedAt": "2026-04-09T12:00:03.000Z" } }

status values: QUEUED, PROCESSING, COMPLETED, FAILED. Returns 404 if the job is not found or does not belong to the calling workspace.


List Async Jobs

GET /v1/batch/async

List batch jobs for the workspace.

Auth: Required

Query Parameters

ParameterTypeDefaultDescription
limitinteger20Results per page (1–100)
statusstringAllFilter by status: QUEUED, PROCESSING, COMPLETED, FAILED

Response

{ "data": [ { "id": "clrjob1234567890abc", "status": "COMPLETED", "summary": { "total": 5, "succeeded": 4, "failed": 1, "skipped": 0 }, "error": null, "createdAt": "2026-04-09T12:00:00.000Z", "startedAt": "2026-04-09T12:00:01.000Z", "completedAt": "2026-04-09T12:00:05.000Z" } ] }
Last updated on