Skip to main content
The Cloud SDKs are unpublished private-preview release candidates.
The Control API returns a canonical error envelope:

TypeScript

Generated requests throw FiredrillError for HTTP or decoding failures and FiredrillTimeoutError when the configured client deadline expires.
Lifecycle helpers may throw FiredrillLifecycleError, HostedRunRecoveryError, or HostedDrillsRecoveryError. Inspect their pending request or checkpoint and resume it; do not invent a new idempotency key.

Python

Generated requests raise status-specific exceptions such as BadRequestError, UnauthorizedError, ConflictError, or ServiceUnavailableError. Each extends the generated ApiError and carries status_code, headers, and a typed body.
The helper layer adds FiredrillLifecycleError, HostedRunRecoveryError, and HostedDrillsRecoveryError. Async cancellation remains CancelledError; it is not converted into success or silently retried.

Safe retry rules

  1. Read retryable; do not retry a terminal rejection as if it were transient.
  2. For an unsafe mutation, persist the exact request and Idempotency-Key before dispatch.
  3. If the response is uncertain, repeat that exact request with the same key.
  4. If an operationId is known, poll that operation instead of submitting again.
  5. A client timeout or disconnect means only that the client stopped waiting.
  6. Never treat a queued operation, partial receipt, or interrupted status as completion.
Changing an idempotency key changes the logical request. It is not a retry of an uncertain mutation.