API Documentation
Integrate bank statement conversion into your applications
Postman Collection
Import our collection to test the API quickly
Authentication
All API requests require authentication using an API key. Include your API key in the Authorization header:
Authorization: Bearer uk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Endpoints
POST
/api/v1/extract
Upload a bank statement PDF or image for processing.
Request
| Parameter | Type | Description |
|---|---|---|
| file required | file | PDF, JPG, PNG, or other supported image format |
curl -X POST https://usstatementconverter.com/api/v1/extract \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "file=@statement.pdf"
import requests
response = requests.post(
"https://usstatementconverter.com/api/v1/extract",
headers={"Authorization": "Bearer YOUR_API_KEY"},
files={"file": open("statement.pdf", "rb")}
)
data = response.json()
file_id = data["file_id"]
const formData = new FormData();
formData.append('file', fileInput.files[0]);
const response = await fetch('https://usstatementconverter.com/api/v1/extract', {
method: 'POST',
headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
body: formData
});
const data = await response.json();
const fileId = data.file_id;
Response
{
"success": true,
"file_id": "doc_abc123...",
"original_name": "statement.pdf",
"page_count": 5,
"status": "processing"
}
GET
/api/v1/status
Check the processing status of an uploaded document. Poll this endpoint until status is "completed".
Request
| Parameter | Type | Description |
|---|---|---|
| file_id required | string | The file_id returned from the upload endpoint |
curl "https://usstatementconverter.com/api/v1/status?file_id=doc_abc123" \ -H "Authorization: Bearer YOUR_API_KEY"
import requests
import time
while True:
response = requests.get(
"https://usstatementconverter.com/api/v1/status",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={"file_id": file_id}
)
data = response.json()
if data["status"] == "completed":
break
time.sleep(2) # Poll every 2 seconds
async function waitForCompletion(fileId) {
while (true) {
const response = await fetch(
`https://usstatementconverter.com/api/v1/status?file_id=${fileId}`,
{ headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
);
const data = await response.json();
if (data.status === 'completed') return data;
await new Promise(r => setTimeout(r, 2000));
}
}
Response
{
"success": true,
"file_id": "doc_abc123...",
"status": "completed",
"page_count": 5,
"transaction_count": 47
}
GET
/api/v1/download
Download the extracted transactions in your preferred format.
Request
| Parameter | Type | Description |
|---|---|---|
| file_id required | string | The file_id returned from the upload endpoint |
| format | string | Output format: json, csv, or xlsx. Default: csv |
curl "https://usstatementconverter.com/api/v1/download?file_id=doc_abc123&format=json" \ -H "Authorization: Bearer YOUR_API_KEY"
response = requests.get(
"https://usstatementconverter.com/api/v1/download",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={"file_id": file_id, "format": "json"}
)
transactions = response.json()["transactions"]
const response = await fetch(
`https://usstatementconverter.com/api/v1/download?file_id=${fileId}&format=json`,
{ headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
);
const data = await response.json();
const transactions = data.transactions;
Response (JSON format)
{
"success": true,
"file_id": "doc_abc123...",
"transaction_count": 47,
"transactions": [
{
"date": "2024-01-15",
"type": "DEBIT",
"description": "TESCO STORES 1234",
"amountIn": null,
"amountOut": "45.67",
"balance": "1234.56"
}
]
}
GET
/api/v1/user
Get your account information and remaining quota.
curl "https://usstatementconverter.com/api/v1/user" \ -H "Authorization: Bearer YOUR_API_KEY"
response = requests.get(
"https://usstatementconverter.com/api/v1/user",
headers={"Authorization": "Bearer YOUR_API_KEY"}
)
quota = response.json()["quota"]
print(f"Pages remaining: {quota['remaining']}")
Response
{
"success": true,
"email": "user@example.com",
"plan": "professional",
"credits": 50,
"quota": {
"used": 150,
"limit": 400,
"remaining": 250,
"period": "month"
}
}
Error Handling
All errors return a JSON response with success: false and an error message:
{
"success": false,
"error": "Invalid or missing API key",
"hint": "Provide your API key in the Authorization header"
}
HTTP Status Codes
| Code | Description |
|---|---|
| 200 | Success |
| 400 | Bad request (invalid parameters) |
| 401 | Unauthorized (invalid or missing API key) |
| 403 | Forbidden (not authorized to access resource) |
| 404 | Not found |
| 429 | Quota exceeded |
| 500 | Server error |
Rate Limits
API usage is governed by your plan's page quota. Each page processed counts against your limit:
| Plan | Pages | Period |
|---|---|---|
| Free | 5 pages | per day |
| Professional | 400 pages | per month |
| Business | 1,000 pages | per month |
| Enterprise | 2,000 pages | per month |
Check your remaining quota using the /api/v1/user endpoint.