Skip to main content
Submitting returns a job immediately. The result arrives when the checks finish, and the job is stored on your account so a dropped connection never loses an outcome.

Lifecycle

execution_state says whether the work finished. billing says what happened to the money. Neither implies the other: a complete job can be released (no definite answer), and a reserved job can still be running.

Polling

Read GET /api/v1/jobs/{id} every few seconds. Reading is free, never changes the job, and the same job can be read by any key on the account with the matching scope.

Idempotency

Every submission requires an Idempotency-Key header. Retrying with the same key and the same input returns the original job; nothing is started or charged twice. Input is canonicalised before comparison, so a differently ordered but equivalent body is the same request. The same key with a different input returns 409 idempotency_conflict.

Job envelope