Ledger

The double-entry ledger — flat journal legs, read-only. Ledger entries ride the reports:read ability.

Operations

Method & path Ability
GET /api/v1/ledger-entries reports:read
GET /api/v1/ledger-entries/{ledgerEntry} reports:read

Reassembling a journal

Each posting writes two or more balanced rows that share the same journalable_type + journalable_id + type + date. Group on that tuple to reconstruct one journal. Exactly one of debit / credit is set per row; the other is null.

curl "https://billey.nl/api/v1/ledger-entries?updated_after=2026-07-01T00:00:00Z" \
  -H "Authorization: Bearer $TOKEN"
{
  "data": [
    {
      "id": 70001,
      "account": "1300",
      "account_label": "Accounts receivable",
      "type": "invoice_sent",
      "date": "2026-07-21",
      "debit": "1250.15",
      "credit": null,
      "journalable_type": "invoice",
      "journalable_id": 42
    },
    {
      "id": 70002,
      "account": "8000",
      "account_label": "Revenue",
      "type": "invoice_sent",
      "date": "2026-07-21",
      "debit": null,
      "credit": "1033.10",
      "journalable_type": "invoice",
      "journalable_id": 42
    }
  ],
  "links": { "first": null, "last": null, "prev": null, "next": null },
  "meta": { "path": "https://billey.nl/api/v1/ledger-entries", "per_page": 25, "next_cursor": null, "prev_cursor": null }
}

account_label is present only when the account resolves to a known standard code. The OpenAPI spec lists every type value and field.

Something inaccurate or missing? support@billey.nl