- Idempotency
- On endpoints that support or require
Idempotency-Key, persist a stable key before sending a mutation. Retry the same operation with the same key and payload. Do not reuse it for edited input or assume that adding this header makes an unsupported endpoint retry-safe. - Lost responses
- A timeout does not prove a mutation failed. Read the recorded resource or use the endpoint's supported replay before issuing a new operation. Starting another Run is not the same as retrying the request that created it.
- Invalid input and conflicts
- Correct
400 input errors. For 409, reread state and inspect readiness, revision, or idempotency conflicts. Use a supplied repair action when available; do not blindly loop on conflicts. - Transient failures
- Honor
Retry-After when supplied on 429 or another retryable response. Use bounded exponential backoff, jitter, and a retry limit for temporary read failures or documented replay-safe mutations. Never blindly retry an unsafe write. - Authorization
- A
401 needs valid credentials; a 403 needs an access review, not a more powerful automatic fallback. Treat 404 as unavailable to this caller rather than proof that a record never existed. Do not probe other identities for hidden resources. - Connection exchange
- Follow the Universal request's polling interval,
slow_down, and Retry-After. Stop on denial or expiry. Its documented lost-response recovery uses the same private proof before the request expires; it is not a general retry rule for chat codes or other exchanges. - Universal renewal
- Serialize renewal per connection and atomically replace both tokens after success. A lost renewal response can be recovered within ten minutes using the same previous proof and key. A different key or late reuse of a spent proof ends the token family. On
invalid_grant, stop and reconnect with human review. See the agent guide for the full protocol. - Payloads
- Keep large content in the upload and PayloadRef flows. Inline Artifact text is limited to 1 MiB.