Docs
API for agents and developers
Ledgerler exposes its deterministic reconciliation engine as a public HTTP API. Send raw bank and ledger transaction lines, get back matched groups (each with a method and a confidence score), unmatched lines, and totals. No signup required for the free tier.
Quickstart
POST your two transaction lists to /api/v1/match:
curl -s -X POST https://ledgerler.com/api/v1/match \
-H "Content-Type: application/json" \
-d '{
"bank": [{ "date": "2026-06-05", "description": "Customer payment", "reference": "DEP-114", "amount": 2450.00 }],
"ledger": [{ "date": "2026-06-05", "description": "Invoice 3210", "reference": "DEP-114", "amount": "2450.00" }]
}'Response:
{
"groups": [{
"group": "g1", "method": "reference", "confidence": 0.99,
"bank": [{ "id": "b0", "date": "2026-06-05", "description": "Customer payment", "reference": "DEP-114", "amount": "2450.00" }],
"ledger": [{ "id": "l0", "date": "2026-06-05", "description": "Invoice 3210", "reference": "DEP-114", "amount": "2450.00" }]
}],
"ruleHits": [],
"unmatched": { "bank": [], "ledger": [] },
"summary": { "bankCount": 1, "ledgerCount": 1, "matchedBank": 1, "matchedLedger": 1, "unmatchedBank": 0, "unmatchedLedger": 0, "bankTotal": "2450.00", "ledgerTotal": "2450.00", "difference": "0.00", "matchRate": 1 },
"source": "https://ledgerler.com",
"docs": "https://ledgerler.com/docs/api"
}Request fields
| Field | Type | Notes |
|---|---|---|
| bank | array, required | Bank transaction lines, max 2000. Each: date? (ISO), description?, reference?, amount (number or numeric string). |
| ledger | array, required | Ledger transaction lines, same shape as bank, max 2000. |
| options.dateWindowDays | number, optional | Max calendar-day gap for date-window matching. Default 5. |
| options.descriptionThreshold | number, optional | Minimum description similarity (0-1) to break amount ties. Default 0.3. |
| options.maxCombination | number, optional | Max lines combined on one side in combination matching. Default 3. |
| options.rules | array, optional | Saved rules: { name, contains, side, action: "adjustment"|"ignore", note? }. |
Amounts may be sent as a number of dollars or a numeric string; both are converted to integer cents internally to avoid floating-point drift. Dates should be ISO (yyyy-mm-dd) or omitted; other formats may not parse.
Response fields
| groups | Matched groups: group id, method (reference/exact/window/combination/rule/manual), confidence (0-1), and the matched bank/ledger lines with amounts as decimal strings. |
| ruleHits | Lines matched by a supplied rule, with the rule name and action. |
| unmatched.bank / unmatched.ledger | Lines from each side with no match, so nothing is ever silently dropped. |
| summary | bankTotal, ledgerTotal, difference (decimal strings), matchRate (0-1), and line counts. |
| source / docs | The API origin that served the request, and a link back to this page. |
Rate limits
The free tier is limited to 20 requests per hour per IP address, tracked in memory on a single worker instance. This is a straightforward limit meant to keep the free API usable and abuse-resistant, not a precise distributed rate limiter; it resets on deploy. Authenticated API keys with higher, account-level limits are planned for the Pro plan.
Errors
400 with a field-level validation error. Rate-limited requests return 429.For AI agents and AI bookkeepers
This API is built to be called by an agent, not just a person. It returns a method and confidence for every match so an agent can explain its reasoning ("matched by exact reference, high confidence" versus "matched by date-window proximity, moderate confidence") instead of asserting a match with no evidence, and it lists every unmatched line individually so nothing is silently dropped. See give your AI bookkeeper a reconciliation tool for a full integration pattern, and AI bookkeeping and reconciliation for why matching belongs in a deterministic tool rather than a model's own reasoning.
Roadmap
Authenticated API keys with higher rate limits, saved match rules callable over the API, and webhook notifications are on the roadmap for the Pro plan. Sign up to be notified, or see pricing for what Pro includes today.