Skip to main content
Every error response uses the same shape:
  • err_code is a stable, machine-readable string. Branch on this, never on msg.
  • msg is a human-readable explanation for logs and operators. Its wording may change at any time — do not parse it.
The code set may grow over time. Treat any err_code your integration does not recognize as non-retryable and surface it to an operator, rather than assuming success or blindly retrying.

Where err_code appears

Three places carry an err_code, and they are not one shared vocabulary: A blocker is not an error: it is expected output of a healthy 200. Match blocker codes against their own set — an err_* code will never appear there, and a blocker code will never appear in an error body.

HTTP status

Each operation’s OpenAPI responses are authoritative for which of these statuses it can return.

Error code catalog

The codes reachable from the API endpoints, with the recommended client action. This is the current known set; unknown codes should default to surface to operator.