bankstract

Quickstart

Make your first parse in under a minute.

1. Get an API key

Keys look like bsk_live_… (production, billed) or bsk_test_… (free up to 25 parses/owner/month, then a canned sample). Signing up auto-provisions your test key. Manage it from the dashboard: rotate the test key or issue live keys there. Or self-host and issue your own.

2. Send a statement

Post a PDF as multipart/form-data with your key as a Bearer token:

curl -X POST https://bankstract.logickoder.dev/v1/parse \
  -H "Authorization: Bearer bsk_live_xxx" \
  -F "pdf=@statement.pdf"
import requests

resp = requests.post(
    "https://bankstract.logickoder.dev/v1/parse",
    headers={"Authorization": "Bearer bsk_live_xxx"},
    files={"pdf": open("statement.pdf", "rb")},
)
data = resp.json()
print(data["totals"], len(data["transactions"]), "rows")
const form = new FormData()
form.append('pdf', file) // a File or Blob

const resp = await fetch('https://bankstract.logickoder.dev/v1/parse', {
  method: 'POST',
  headers: { Authorization: 'Bearer bsk_live_xxx' },
  body: form,
})
const data = await resp.json()

3. Read the response

{
  "format_version": "fbn-2026-01",
  "metadata": { "bank": "fbn", "account_number_masked": "****1111", "...": "..." },
  "totals": { "credit": "500.00", "debit": "120.00" },
  "row_wise_reconcilable": true,
  "transactions": [
    {
      "date": "2026-01-05T09:30:00",
      "narration": "FOO TRANSFER",
      "debit": "0",
      "credit": "500.00",
      "balance": "600.00",
      "reference": "REF1",
      "currency": "NGN"
    }
  ]
}

Money is always a decimal string ("500.00"), never a JSON number. Parse it with a decimal type, not a float, so you don't lose precision.

Next: Authentication, response formats, and the error envelope.

On this page