Ledger
Account balances, journal entries, and reconciliation status.
The Ledger API exposes the double-entry ledger backed by TigerBeetle. Every balance and reconciliation record traces to an immutable journal entry. See The ledger model for the conceptual overview.
Endpoints
| Method | Path | Description |
|---|---|---|
GET | /ledger/accounts/:accountId/balance | Current settled, pending, and reserved balance |
GET | /ledger/accounts/:accountId/entries | Paginated journal entries for an account |
GET | /ledger/reconciliation/:paymentId | Reconciliation status for a payment |
POST | /ledger/reconciliation/:paymentId/resolve | Manually resolve an unmatched payment |
GET /ledger/accounts/:accountId/balance
Returns the current balance for an account. Amounts are in INR paise (integer).
Authentication
ledger:read scope required.
Response — 200 OK
{
"accountId": "acc_01j4abc",
"type": "SETTLED",
"settled": 18420050,
"pending": 4150000,
"reserved": 2000000,
"currency": "INR",
"asOf": "2026-07-01T09:14:22.000Z"
}To convert paise to rupees: settled / 100 → ₹1,84,200.50.
GET /ledger/accounts/:accountId/entries
Returns a paginated list of journal entries. Each entry is linked to the originating payment, fee movement, or reconciliation event.
Query parameters
| Parameter | Type | Description |
|---|---|---|
from | ISO 8601 | Filter entries from this date |
to | ISO 8601 | Filter entries up to this date |
page | number | Page number (default: 1) |
limit | number | Entries per page (default: 25, max: 100) |
Response — 200 OK
{
"entries": [
{
"id": "entry_01j4abc",
"type": "CREDIT",
"amount": 4175000,
"currency": "INR",
"description": "Settlement — invoice-2026-0001",
"paymentId": "clx1a2b3c4d5e6f7g8h9",
"firaId": "fira_01j4abc",
"reconciledAt": "2026-07-01T09:14:28.000Z",
"createdAt": "2026-07-01T09:14:22.000Z"
}
],
"total": 28,
"page": 1,
"limit": 25
}GET /ledger/reconciliation/:paymentId
Returns the reconciliation status for a payment — whether it has been matched to a FIRA, an invoice reference, and a ledger entry.
Response — 200 OK — reconciled
{
"paymentId": "clx1a2b3c4d5e6f7g8h9",
"status": "RECONCILED",
"invoiceRef": "invoice-2026-0001",
"firaId": "fira_01j4abc",
"ledgerEntryId": "entry_01j4abc",
"reconciledAt": "2026-07-01T09:14:28.000Z"
}Response — 200 OK — pending reconciliation
{
"paymentId": "clx_unmatched_123",
"status": "PENDING_RECONCILIATION",
"invoiceRef": null,
"firaId": "fira_01j4xyz",
"ledgerEntryId": "entry_01j4xyz",
"reason": "No matching invoice reference found",
"createdAt": "2026-07-01T09:14:22.000Z"
}POST /ledger/reconciliation/:paymentId/resolve
Manually resolves an unmatched payment by supplying the missing invoice reference or marking it as a known exception.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
invoiceRef | string | No | Invoice reference to link |
note | string | No | Reason for manual resolution, max 512 characters |
markAsException | boolean | No | Flag as a known reconciliation exception |
Response — 200 OK
{
"paymentId": "clx_unmatched_123",
"status": "RECONCILED",
"resolvedAt": "2026-07-01T09:30:00.000Z",
"resolvedBy": "manual"
}