Skip to main content
Business and protected endpoints return application/problem+json errors based on Request for Comments (RFC) 9457. Use the stable code, retry flags, and response headers instead of parsing detail text.

Parse the Problem Details fields

Each error response contains the same strict fields: The following response shows the public shape. Values vary by problem class:
The response never includes access tokens, proofs, cookies, provider credentials, private keys, idempotency keys, or raw request bodies.

Interpret HTTP status classes

Use the status to classify the failure before inspecting its code: Protected operations use these stable 503 codes: OAuth and OpenID Connect protocol endpoints use their protocol error grammar. They can return standard challenges instead of Problem Details.

Decide whether to retry

Treat submission_uncertain as the stronger safety signal. If it is true, do not send the financial mutation again. Follow these rules in order:
  1. If submission_uncertain is true, read the referenced operation until its state changes.
  2. If retryable is false, do not repeat the identical request. A true value only permits evaluating a retry after the stated condition is resolved; it never overrides submission_uncertain or authorizes resubmitting an uncertain mutation.
  3. If the response includes Retry-After, wait for that interval.
  4. If a DPoP challenge includes DPoP-Nonce, create a new proof with that nonce.
  5. For a mutation whose OpenAPI operation requires Idempotency-Key, retry only the identical request intent with its original key. For reads or protocol requests, follow that operation’s documented retry requirements.
See Track a financial operation for uncertain submissions and Retry a financial request safely for permanent request binding.

Preserve the request identifier

Every response includes X-Request-Id. The same value appears in a Problem Details body as request_id. You may send X-Request-Id with 8 to 128 characters from A-Z, a-z, 0-9, ., _, ~, or -. Perflo replaces an invalid value with a generated identifier.