Developer Documentation
Integrate parsing, reconciliation, exports, and webhook-driven workflows into your app, plugin, or finance operations stack.
Quick Start
- Go to API Keys and create a new key.
- Include the key in the
Authorizationheader:Bearer bsm_YOUR_KEY - POST your bank statement to
/api/v1/jobs - Poll
GET /api/v1/jobs/{id}or listen via webhooks for results
Authentication
All API requests require authentication via an API key sent in the Authorization header:
Authorization: Bearer bsm_YOUR_API_KEY
API keys can be scoped to specific permissions:
jobs:read— Read job status and resultsjobs:write— Create new parsing jobswebhooks:manage— Create/delete webhook endpointsexport:read— Export data as CSV/JSONusage:read— Read usage statistics
Code Examples
API Reference
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/jobs | Upload a bank statement for parsing |
| GET | /api/v1/jobs | List your parsing jobs |
| GET | /api/v1/jobs/{id} | Get job status and details |
| GET | /api/v1/jobs/{id}/results | Get parsed transactions |
| GET | /api/v1/jobs/{id}/export | Export results as CSV/JSON |
| GET | /api/v1/usage | Check API usage for the month |
| GET | /api/v1/status | Health check and plan info |
| POST | /api/v1/webhooks | Register a webhook endpoint |
| GET | /api/v1/webhooks | List webhook endpoints |
| DELETE | /api/v1/webhooks/{id} | Delete a webhook |
| POST | /api/v1/webhooks/test | Send a test webhook event |
Webhooks
Instead of polling, register webhook endpoints to receive real-time notifications. All payloads are signed with HMAC-SHA256 using your signing secret.
Events
job.createdA new parsing job has been submittedjob.completedJob finished successfully — results are readyjob.failedJob failed to processjob.reviewJob needs manual reviewusage.thresholdMonthly usage approached or exceeded limitPayload Example
{
"event": "job.completed",
"data": {
"job_id": "abc123",
"status": "completed",
"bank_name": "Chase",
"transactions_count": 42,
"created_at": "2025-01-15T10:30:00Z"
},
"timestamp": "2025-01-15T10:31:15Z"
}Signature Verification
Each delivery includes these headers: X-BSM-Signature, X-BSM-Timestamp, X-BSM-Delivery-Id. Compute HMAC-SHA256(signing_secret, "{timestamp}.{body}") and compare.
Rate Limits
| Plan | Requests / Minute |
|---|---|
| Free | 10 |
| Starter | 60 |
| Pro | 200 |
| Business | 1,000 |
If you exceed the limit you'll get a 429 Too Many Requests response. Wait and retry with exponential backoff.
Plugins & SDKs
Response Format
All responses use a consistent JSON envelope:
{
"ok": true,
"data": { ... },
"meta": {
"request_id": "req_abc123"
}
}Error responses set "ok": false and include a "detail" field with a human-readable message.