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
| 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. |
| unsupported_format | 415 | File must be PDF, PNG, JPG, or WEBP. |
| file_too_large | 413 | More pages than the per-file limit. |
| 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. |