Parse a bank statement
Upload a PDF (or XLSX) statement and get structured transactions back. `?format=json` (default) returns ParseResponse; `?format=csv` returns the engine-serialized CSV. Redaction is its own route, POST /v1/redact. The file is parsed in memory and never written to disk.
Query Parameters
Header Parameters
Request Body
multipart/form-data
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/parse" \ -F pdf="string"{ "format_version": "string", "metadata": { "bank": "string", "account_holder": "string", "account_number_masked": "string", "statement_period_start": "2019-08-24T14:15:22Z", "statement_period_end": "2019-08-24T14:15:22Z", "opening_balance": "string", "closing_balance": "string" }, "totals": { "credit": "string", "debit": "string" }, "reconciliation": { "totals": "passed", "row_wise": "passed", "row_wise_reason": "string" }, "transactions": [ { "date": "2019-08-24T14:15:22Z", "narration": "string", "debit": "string", "credit": "string", "balance": "string", "reference": "string", "currency": "string", "has_time": true } ]}{ "error": "string", "error_class": "string", "format_version": "string", "marker_coverage": 0}{ "error": "string", "error_class": "string", "format_version": "string", "marker_coverage": 0}{ "error": "string", "error_class": "string", "format_version": "string", "marker_coverage": 0}{ "error": "string", "error_class": "string", "format_version": "string", "marker_coverage": 0}{ "error": "string", "error_class": "string", "format_version": "string", "marker_coverage": 0}Bill the owner's current overage (admin, manual) POST
Admin-only. Computes this cycle's overage from audit success counts and raises a Paystack invoice for it. Manual trigger until an end-of-cycle cron lands.
Submit a long parse as an async job POST
Queue a statement parse and stream engine progress over Server-Sent Events. Returns 202 with a job_id, an SSE stream_url, and a poll_url fallback. Mirrors /v1/parse: `?format=csv` is supported. json rides the SSE result event; csv bytes are fetched from /v1/parse/jobs/{id}/result. Use this for large statements; small ones are faster on the synchronous /v1/parse.