StatementFlow

API Documentation

Convert bank statements programmatically. Available on the Business plan.

Authentication

Generate a key on the API Keys page. Send it as a Bearer token:

Authorization: Bearer sk_live_xxx

POST /api/v1/convert

multipart/form-data with a file field (PDF, PNG, JPG, WEBP). Optional format: json (default), csv, xlsx, qbo, ofx.

curl -X POST https://your-domain.com/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": "2024-10-02", "description": "POS PURCHASE",
      "amount": -4.23, "balance": 65.73,
      "category": "SHOPPING", "confidence": 0.98 }
  ]
}

GET /api/v1/usage

Returns your current quota.

{ "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).

Error codes

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.
unsupported_format415File must be PDF, PNG, JPG, or WEBP.
file_too_large413More pages than the per-file limit.
page_limit_exceeded402Monthly page quota reached.
extraction_failed422Could not read the statement.
no_transactions422No transactions found in the file.