ResponsesErrors Overview

Errors Overview

Every transmute error is RFC 9457 application/problem+json with a type URI from a closed catalog. The shape, the catalog, and how to handle errors.

The shape

Every error — regardless of your Accept header — is application/problem+json (RFC 9457):

{
  "type": "https://docs.transmute.403fin.io/errors/invalid-input",
  "title": "Invalid input",
  "status": 400,
  "detail": "envelope field "to" is required",
  "instance": "/v1/convert",
  "requestId": "req_01J9Z3A8B2C3D4E5F6G7H8J9K0",
  "errors": [
    { "field": "to", "detail": "required" }
  ]
}
MemberMeaning
typeA URI from the closed catalog below — each resolves to its documentation page. Match on this, not on title or detail text.
statusThe HTTP status, repeated in the body
detailHuman-readable specifics. Never contains message content.
requestIdSame value as the X-Request-Id header — quote it to support
errors[]Optional field-level entries ({field, detail}) on validation-style failures

The one exception: protocol errors from POST /v1/oauth/token follow RFC 6749 ({"error": "invalid_client"} plain JSON) so standard OAuth libraries interoperate.

The closed catalog

The type catalog is closed — no error outside this list will ever be emitted, so you can switch on the slug exhaustively.

Portal slugs

The dashboard (portal) has its own slugs. They come from browser flows such as sign-in, team management, billing and accounting connections, and are never metered. account-suspended and internal can also appear there.

Handling guidance

  • Retry with backoff: rate-limited (honor Retry-After), internal, provider-error, portal-unavailable, portal-provider-error, sso-unavailable. Combine with idempotency so retries are free and safe.
  • Fix the request, don't retry: invalid-input, unsupported-*, charset, message-too-large, idempotency-conflict, conflict.
  • Fix credentials/config: unauthorized, forbidden-scope, forbidden-ip.
  • Act on your account: quota-exceeded (upgrade or wait for reset), connection-failed (re-connect the platform), account-suspended (contact support).

Remember the billing wrinkle: 400 and content-level 422s bill on live keys — the engine did real work to reject the message. Develop against test keys.