rate_limited | 429 | rpm or rpd quota exceeded | Read retryAfterMs, sleep, retry. recoverable: true. See Rate limits. |
invalid_request | 400 / 410 / 422 | Malformed body, invalid Idempotency-Key, oversize snapshot, empty publish | Fix the body and reissue. Do not retry the exact same request. |
auth | 401 / 403 | Missing / invalid / revoked key, missing scope | 401 → fix credential. 403 with requiredScopes → request an upscoped key. |
not_found | 404 | Resource missing OR cross-tenant access (silent denial) | Confirm the id is correct AND the key owns it. |
plan_limit | 402 | Plan ceiling hit (publish blocked, product cap exceeded) | Surface upgrade.upgradeUrl to the user as a CTA. See Plan limits. |
internal | 500 | Server bug | Surface requestId. Retry once with backoff, then escalate. |
conflict | 409 | Idempotency-Key in flight (same key still processing) | Wait retryAfterMs and retry with the same key. |
idempotency_conflict | 409 | Same Idempotency-Key reused with a different body | Generate a NEW Idempotency-Key. See Safe mutations. |
service_unavailable | 503 | Dependency outage or feature flag off | Retry with exponential backoff. |
tos_not_accepted | 451 | Calling user has not accepted the Terms of Service | Surface nextActions[0] (dashboard link). User must accept; agent cannot bypass. See ToS jurisdiction. |