StatementFlow
API

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_xxx

Convert a statement

POST/api/v1/convert

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

GET/api/v1/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.

CodeHTTPMeaning
missing_api_key401No Bearer token provided.
invalid_api_key401The API key is not valid.
api_requires_business_plan403API access requires the Business plan.
rate_limited429Over 100 requests in the last hour.
no_file400No file field in the request.
invalid_format400format must be json, csv, xlsx, qbo, or ofx.
unsupported_format415File must be PDF, PNG, JPG, or WEBP.
file_too_large413Over 20MB, or more than 50 pages.
page_limit_exceeded402Monthly page quota reached.
extraction_failed422Could not read the statement.
no_transactions422No transactions found in the file.