API Documentation
Convert bank statements to structured JSON via REST API. Automate your accounting workflow with a single HTTP call.
Overview
Authentication
Bearer token via API key (klm_live_...)
Rate Limit
Subject to your Pro Max page quota (1,200 pages/month)
Base URL
https://kliimorapdf.com/api/public/v1
Authentication
All API requests require a Bearer token in the Authorization header. Generate your API key from the Integrations page.
Authorization: Bearer klm_live_your_api_key_herePOST /convert/bank-statement
Upload a bank statement PDF and receive structured transaction data as JSON. Supports 80+ banks worldwide.
Request
| Field | Type | Required | Description |
|---|---|---|---|
| file | File | โ | PDF file (max 20MB) |
| bank | string | โ | Bank hint (e.g. "BCA", "Mandiri"). Auto-detected if omitted. |
| password | string | โ | PDF password (if encrypted) |
Example (cURL)
curl -X POST https://kliimorapdf.com/api/public/v1/convert/bank-statement \
-H "Authorization: Bearer klm_live_abc123..." \
-F "file=@statement.pdf" \
-F "bank=BCA"Example (JavaScript)
const form = new FormData();
form.append("file", pdfFile);
form.append("bank", "Mandiri"); // optional
const res = await fetch("https://kliimorapdf.com/api/public/v1/convert/bank-statement", {
method: "POST",
headers: { Authorization: "Bearer klm_live_abc123..." },
body: form,
});
const data = await res.json();
console.log(data.transactions); // Array of transactions
console.log(data.summary); // { total_debit, total_credit, net, last_balance }Response (200 OK)
{
"bank": "BCA",
"locale": "id",
"pages": 3,
"warnings": [],
"summary": {
"transactions": 45,
"total_debit": 15000000,
"total_credit": 20000000,
"net": 5000000,
"last_balance": 12500000
},
"transactions": [
{
"date": "01/04/2026",
"description": "Transfer BI-Fast dari BANK MANDIRI",
"debit": null,
"credit": 5000000,
"balance": 12500000,
"balanceOk": true
}
],
"quota": {
"used": 48,
"limit": 1200,
"remaining": 1152
}
}Error Responses
| Status | Code | Description |
|---|---|---|
| 401 | missing_api_key | No Authorization header |
| 401 | invalid_api_key | Key not found or revoked |
| 402 | quota_exceeded | Monthly page quota exhausted |
| 403 | pro_max_required | API requires Pro Max plan |
| 413 | file_too_large | File exceeds 20MB limit |
| 422 | password_required | PDF is encrypted, provide password field |
| 422 | parse_failed | Could not extract transactions from PDF |
Webhooks
Configure webhook endpoints in the Integrations page. After each successful conversion (UI or API), we POST a JSON payload to your endpoint:
{
"event": "conversion.completed",
"source": "api",
"tool": "bank_statement",
"bank": "BRI",
"pages": 2,
"transactions": 28,
"summary": {
"total_debit": 5000000,
"total_credit": 8000000,
"net": 3000000,
"last_balance": 3500000
},
"timestamp": "2026-05-18T10:30:00Z"
}Webhooks are fire-and-forget. If your endpoint returns a non-2xx status, the delivery is logged but not retried. You can view delivery history in the Integrations page.
Supported Banks
The API auto-detects the bank from the PDF content. You can also pass a bank hint for faster processing. See the full list of 80+ supported banks on the Banks page.
Ready to integrate?
Get your API key and start converting bank statements in minutes.