Skip to main content
Every request becomes a durable task. You submit it, get a task id back at once, and collect the result later by webhook or by polling. There is no synchronous endpoint.
The submit response is 200 with the task in QUEUED:
Poll it with the id (reference):

Lifecycle

Statuses

A task that hits a transient failure returns to QUEUED and runs again. It settles in FAILED only after its retries run out, so a PROCESSING → QUEUED step is normal. Polling omits response until the task is terminal. A failed task has a top-level error string instead:

Credits on submit and on poll

Prices, holds and limits are on Credits and limits.

Priority

priority accepts 1 to 10 and defaults to 1. Values outside that range are clamped, not rejected. The value is echoed in task metadata.
Execution order is not guaranteed by priority, submission time or account. For dependent work, wait for the first task to complete before you submit the next one.

Retention

You can poll a terminal task for 24 hours after it completes. After that, GET /v1/async/task/{id} returns 404 RESOURCE_NOT_FOUND, the same response as an unknown id or another account’s task. QUEUED and PROCESSING tasks stay visible however old they are. The 24-hour window also applies to result bodies in GET /v1/batches/{id}/items and grid reads. It limits public polling, not storage: the task record is kept, and its idempotencyKey stays reserved after the window closes (see Idempotency). Automatic webhook retries run on their own schedule, independent of this window.

Webhook or polling

Prefer webhooks. Use polling to recover what you did not receive. A robust client does both: it takes the webhook as the fast path and polls for any task it has not heard about well inside the 24-hour window.

Next steps

Webhooks

Payload, signatures and retries.

Batches and grids

Submit up to 10,000 tasks at once.