202 with a job in status: "pending"; you then
wait for it to reach a terminal status (completed or failed).
Long-poll with ?wait=true (recommended)
Add ?wait=true to GET /jobs/{id} to hold the connection until the job is terminal, up to ~55s:
- If the job finishes within the window, you get the terminal job immediately.
- On timeout you still get
200with the job in its current (possiblyprocessing) state - just re-issue the same request to keep waiting. Image jobs usually finish in one wait; longer jobs may take a couple.
Plain polling
Omitwait to get the job’s current state immediately - status is pending (queued) or
processing (running) until it reaches a terminal completed / failed:
wait, space requests a few seconds apart and honor Retry-After on 429
(see Rate limits).
Cancelling a job
POST /jobs/{id}/cancel aborts a pending or in-flight job and returns its (now failed) state.
If the job had already started generating when you cancel, a partial cancellation charge of 1
CU applies - the provider was already doing work. Cancelling a job that is still
pending (not yet
started) is free.Firing many at once
Start N generations, collect their job ids, then poll each - there’s no batch endpoint, and that’s fine: creates are cheap and return immediately. Use Idempotency keys so a retried create doesn’t double-charge, andGET /jobs to re-list your jobs if you lose an id.
There are no webhooks in v1 - completion is via polling /
?wait=true.
