Skip to main content
The Spritz API returns errors as RFC 9457 problem details: a standard, machine-readable JSON shape served as 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 and type. 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.
The linked-bank guide lists the complete ACH debit code handling matrix.