Bank statement extraction API

Bank statements in. Transactions out.

Fidex reads South African bank statement PDFs and returns every transaction as clean JSON, and flags the documents that don't look like they came straight from the bank.

Reads statements from

  • Absa
  • Bank Zero
  • Bidvest Bank
  • Capitec
  • FNB
  • GoTyme Bank
  • Investec
  • Nedbank
  • Standard Bank

Statements from other banks are still extracted. The bank-specific checks apply to the banks above.

How it works

One request in, one JSON document out.

  1. Upload

    POST up to 10 statement PDFs for one account, with the account holder's name and ID number.

  2. Poll

    Fidex processes the job in the background. Check the job until it's done.

  3. Get JSON

    You receive the bank, the account number, every transaction with date, description, amount and running balance, and any warnings.

Up to 10 PDFs per job, 100 pages each, 30 MB in total.

RequestREST · multipart
curl -X POST https://api.fidex.co.za/api/v1/jobs/bank-statement \
  -H "x-api-key: $FIDEX_API_KEY" \
  -F name="Thandi Mokoena" \
  -F id_number="8001015009087" \
  -F "documents[]=@statement.pdf"

# {"id": "b2a58d0d-…", "status": "queued"}

curl https://api.fidex.co.za/api/v1/jobs/b2a58d0d-… \
  -H "x-api-key: $FIDEX_API_KEY"
Responseabridged
{
  "status": "completed",
  "result": {
    "bank_name": "capitec",
    "account_number": "1234567890",
    "account_holder": {
      "submitted": "thandi mokoena",
      "extracted": "thandi mokoena",
      "match": true
    },
    "transaction_history": [
      { "date": "2026-09-30",
        "description": "Salary Acme Ltd",
        "amount": 18500.00, "balance": 21340.55 },
      { "date": "2026-10-01",
        "description": "POS Purchase Corner Grocer",
        "amount": -742.10, "balance": 20598.45 }
    ],
    "warnings": []
  },
  "message": ""
}

Checks

Flags for your reviewers, not verdicts.

Alongside the transactions, Fidex checks the document itself and tells you what it found. Your team makes the call.

Tampering signs

Every bank produces its statements with particular software. Fidex flags a PDF whose metadata doesn't match the bank it claims to be from, or that shows it passed through a PDF editor, converter or redaction tool.

Warningpdf meta indicates tampering software was used

Not a statement, not accepted

Documents that aren't bank statements are refused, and so are CSV exports converted to PDF, because a customer could have edited those before converting them.

Faileddocument 1: document is not a bank statement

Right person, right account

Fidex compares the account holder's name on the statement with the name you submit, and checks that several statements in one job belong to the same account.

Warningaccount holder name mismatch - expected "thandi mokoena", got "xolisa mokoena"

Password-protected PDFs

Most banks lock statements with the holder's ID number. Fidex opens them with the ID number you already sent, so there's no extra step.

Requestid_number="8001015009087"

Data handling

What we keep, and what we don't.

A bank statement says a lot about a person. Here is exactly what happens to each part of a job.

  • Your PDFs: deleted

    Uploaded statements are deleted as soon as the job has been processed. Fidex doesn't keep the original documents.

  • The results: temporarily kept for retrieval

    The extracted data is stored with the job, for as long as you specify. This allows job retrieval. After expiry, it is deleted

  • Outside models: nothing retained

    Where an external model helps read a statement, Fidex uses only providers with a zero-data-retention policy. They store nothing, and they don't train on it.

Want to see it on your own statements?

Tell us about the statements you process, and we'll take it from there.