How It Works Pricing FAQ
Log In Get Started

API Documentation

Integrate bank statement conversion into your applications

Postman Collection

Import our collection to test the API quickly

Download Collection

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.