bankstract

Errors

One error envelope, typed by error_class.

Every non-2xx response uses the same JSON envelope:

{
  "error": "no registered parser detected this source",
  "error_class": "ParseError",
  "format_version": null,
  "marker_coverage": null
}

Branch on error_class, not the human error string. marker_coverage is populated only for EmptyStatementError.

Status codes

StatusMeaning
200Success: ParseResponse JSON or CSV bytes, redacted bytes from /v1/redact, or an IntegrityReport from /v1/inspect
401Missing, invalid, or revoked key (AuthError)
402Subscription inactive (subscription_inactive), or a free cap reached on a route with no sample (free_limit_reached)
403The key or token is not allowed on this route (admin routes only)
413File over 50 MB (PayloadTooLarge)
422Parse failure: see error_class below
500Internal engine error

error_class (the 422 cases)

error_classWhat happenedWhat to do
EncryptedSourceErrorThe PDF is password-protectedRemove the password, re-upload
EmptyStatementErrorParsed clean, zero rows. High marker_coverage ≈ truly empty; low ≈ silent layout driftCheck the statement; if wrong, file an issue
LayoutDriftErrorBank detected, but the layout changedFile an issue with a redacted sample
ReconciliationErrorA totals or running-balance check failed, or the statement carried evidence for neitherLikely format drift. File an issue
removed_parameterA field this API no longer takes. redact=true on /v1/parse or /v1/parse/jobs (redaction is POST /v1/redact)Send the file to the new route
ResourceLimitErrorThe file took too long or too much memory to read and was stopped. Never a partial resultSend the original bank export, not an edited or re-saved copy
ParseErrorNo supported bank detected, or a non-statement PDFConfirm the bank is supported

Format drift on a supported bank is fixed within 48h (see Banks).

On this page