application/problem+json. Build your error handling against it once and it works
across every endpoint. Accept application/json as a compatibility fallback.
Problem shape
Some problems include extension members alongside the standard fields for
additional context, for example
code, realm, scope, resourceType, and
resourceId. Treat unknown extension members as optional.
Status codes
Handling errors
Branch first on the HTTP status andtype. When code is present, use it for the
specific product outcome. Several ACH debit errors intentionally share the same broad
problem type, so type alone cannot distinguish a limit, an ineligible bank, and a
program pause. Never branch on title, detail, or provider failure text; those are
human-readable and may change.
code is optional. For a code-less 409, treat the state as an unresolved concurrent
conflict: wait, read the affected resource, and replay only an idempotent request with
the same key and body. For any other unknown or code-less problem, show a safe generic
message, and do not invent product behavior.
Every response includes X-Request-ID and X-Correlation-ID headers. Persist both
with failed operations and include them when your support team escalates to Spritz.
They are transport metadata, not fields inside the Problem Details body.
code handling matrix.