dataset.json:
Retry within a budget
For supported creates, a later attempt can recover an uncertain outcome using the same key. For an explicit error response, inspecterror.retryable and code before repeating it. Respect Retry-After when present; otherwise use bounded exponential backoff with jitter. Stop when the attempt or elapsed-time budget is exhausted and keep the operation record for later recovery.
Do not retry validation errors with unchanged input. Correcting the input is a new intended operation and should get a new key. The API behavior guide lists operations that support the header. The source SDKs implement bounded retries for eligible calls.
Inference after a lost response
ForPOST /v1/decide, /v1/systemone and the Claude Code hook, persist a unique Idempotency-Key alongside the exact request before the first attempt. If the reply is lost, resend both unchanged. A replay uses the original accepted model versions and tariffs, even if a named model was promoted in the meantime. Its settlement is not repeated.
Responses are retained for 24 hours. After that, the operation identity remains and the old key returns idempotency_response_expired; it never starts another inference. A still-running operation returns request_in_progress. A terminal failure remains the same failed operation. Reuse a key only for recovery; use a new one when you intentionally request another execution.
Each replay attempt consumes the account’s read quota, including pending, conflicting, failed and expired attempts. Respect Retry-After and use bounded backoff. Keep downstream actions such as assigning a ticket tied to your application’s operation ID so retries cannot duplicate them.
store: true independently controls learning and feedback storage. It is not required for replay. Usage history helps diagnose an operation but does not contain the saved answer; retrying the original request with its key retrieves that answer while it is retained. Preserve request IDs and charge metadata.
