Skip to main content
A timeout is not an answer. Send an Idempotency-Key on every paid call, and a retry returns the first result instead of buying it again.
1–255 visible ASCII characters. Use one value per intent — a request id from your own system is ideal.

What it guarantees

Keys are scoped to the calling API key and the logical operation. Two keys, or two different source operations, can use the same string without colliding. The v1 and v2 direct-call path aliases identify the same logical operation.

Where it applies

Continuations without a key are refused. Their keys are scoped to the calling key and task. Keep the original signed state when retrying the same choice; use a new idempotency key for a newly reviewed action.

Retrying in practice

If that call times out on your side, send it again unchanged. You get the same run id, the same result and the same single charge.
While the first request is still running, a retry answers 409 request_in_progress with a retry_after_ms. Wait that long and retry; it is not an error, and nothing was charged twice.

Runs already in flight

A run that is still executing answers 202 with its id. Polling GET /v2/runs/{id} is always free and never starts anything new.