Bank statement fraud detection API

Every statement comes back with signals to review: editing software, late changes and balances that do not add up.

Edited statements leave traces

Changing a statement takes a PDF editor and five minutes: open the bank's file, raise a salary line, save. The figures look right to a person reading them. Two things usually give it away. The file was last written by an editor instead of the bank's statement system, and the changed row no longer agrees with the running balance.

Every document comes back with an authenticity block that checks both. It names the software that wrote the PDF and when it was created and modified, tests the rows against the printed balances, and notices when your account has sent the exact file before. The signals are combined into a risk level so a queue can sort on it. They are reasons to look closer, and a clean result is no guarantee.

The signals

Each one comes with a code to branch on and a message to show a reviewer.

edited_with_software

The PDF was last written by an editor or converter rather than a bank's statement system.

modified_after_creation

The file was modified more than a minute after it was created.

balances_do_not_reconcile

The printed balances do not match the rows between them.

duplicate_file

Your account has sent this exact file before. The message names the earlier document.

image_only

A scan or photo, so there is no text layer to inspect for edits.

Risk level

High when an edit or late change coincides with balances that do not reconcile; medium for any one alone.

What a reviewer sees

The authenticity block on a document that needs a second look.

"authenticity": {
  "risk": "high",
  "signals": [
    { "code": "edited_with_software",
      "message": "Last written by an editor, not a bank's statement system." },
    { "code": "balances_do_not_reconcile",
      "message": "Rows differ from the printed balances by 1,200.00." }
  ],
  "producer": "Adobe Acrobat 23.0",
  "createdAt": "2026-09-30T08:12:44Z",
  "modifiedAt": "2026-10-14T21:03:10Z"
}

Pricing

$0.08

per page, scanned or digital

200

pages free, no card

$0.05

per page past 50,000 a month

The signals are part of every read. A six-page statement costs $0.48 with them included. No minimum, no contract, and a failed read is free.

See pricing

Frequently asked questions

More from the API

Try it on your own statements

200 pages free, no payment method. Test keys return fixtures for every case you need to handle.

Over 250,000 pages a month, or a security review to get through? [email protected]