API Documentation Business plan
Convert bank statements programmatically. A REST API that returns JSON, or exports straight to Excel, CSV, QBO, or OFX.
Authentication
Generate a key on the API Keys page, then send it as a Bearer token on every request.
Authorization: Bearer sk_live_xxxConvert a statement
Send multipart/form-data with a file field (PDF, PNG, JPG, WEBP), up to 20MB and 50 pages. Optional format: json (default), csv, xlsx, qbo, ofx.
curl -X POST https://statementflow.io/api/v1/convert \ -H "Authorization: Bearer sk_live_xxx" \ -F "file=@statement.pdf" \ -F "format=json"
Response (format=json):
{
"success": true,
"meta": { "bankName": "Chase Bank", "currency": "USD",
"pageCount": 3, "rowCount": 47,
"reconciled": true, "processingMs": 2340 },
"transactions": [
{ "date": "2026-10-02", "description": "Starbucks #1042",
"amount": -4.50, "balance": 65.73,
"category": "FOOD", "confidence": 0.98 }
]
}Any other format streams the file back with a content-disposition attachment header rather than JSON.
Usage
Returns your current quota for the billing cycle.
{ "success": true, "plan": "BUSINESS",
"pagesUsed": 320, "pagesLimit": 2000,
"pagesResetAt": "2027-01-01T00:00:00Z" }Rate limits
100 requests/hour per API key. Conversions also count against your monthly page quota (2,000 on Business), which refreshes each billing period — see pricing.
Error codes
Every error returns { success: false, error, message } with the status below.
| Code | HTTP | Meaning |
|---|---|---|
missing_api_key | 401 | No Bearer token provided. |
invalid_api_key | 401 | The API key is not valid. |
api_requires_business_plan | 403 | API access requires the Business plan. |
rate_limited | 429 | Over 100 requests in the last hour. |
no_file | 400 | No file field in the request. |
invalid_format | 400 | format must be json, csv, xlsx, qbo, or ofx. |
unsupported_format | 415 | File must be PDF, PNG, JPG, or WEBP. |
file_too_large | 413 | Over 20MB, or more than 50 pages. |
page_limit_exceeded | 402 | Monthly page quota reached. |
extraction_failed | 422 | Could not read the statement. |
no_transactions | 422 | No transactions found in the file. |