Request a guide
Post the problem in the "docs requests" category. If two more people want it, it goes on the writing queue that month.
Twenty-two written guides across six topics. Each one ends in working code against the sandbox, and each names the endpoints and scopes it touches so you know what a key needs before you start.
The rest of the library is reference-by-need. This track takes you from an empty workspace to a reconciled month.
Keys, scopes, and the one rule that governs everything: lines must sum to zero.
~20 min · sandboxNaming, nesting with colons, and why you should not encode reporting structure into account names.
~45 min · design workIdempotency keys derived from your own domain, and how to read a 409 without panicking.
Open a window against a statement, match lines, and read the residual before you sign off.
~60 min · codeFilter by level. Every guide states the endpoints it calls, so you can check a key's scopes before you open the page.
From nothing to a balanced posting. Read in order the first time.
Create a workspace, take a sandbox key, and write two lines that sum to zero. Ends with a 201 and an entry ID you can fetch back.
POST /v2/entries20 minWhy a read key cannot post, how sk_test_ and live keys are kept apart, and where to rotate a key that leaked into a log.
entries:read15 minFetch a posting with its lines, and understand which fields are derived rather than stored — including balanced.
GET /v2/entries/:id10 minWhat the sandbox resets, what it does not, and the three checks worth wiring into CI before your first live key exists.
sandbox25 minThe chart of accounts is the one thing that is genuinely hard to change later. These four are worth the time.
Colon-nested names like cash:operating and ar:acme-holdings, plus the reporting structure you should keep out of the name.
POST /v2/accounts45 minWhy there is no balance column, what that buys you in an audit, and how the at parameter turns any timestamp into a balance.
GET /v2/accounts/:id/balance30 minPATCH /v2/accounts/:id changes the label, never the history. What downstream reports see, and when to open a new account instead.
PATCH /v2/accounts/:id20 minEach currency must balance independently. How the FX line is expressed, and why rounding is settled at write time rather than at read.
POST /v2/entries50 minEverything about making a write safe to send twice. The core concept article lives on the overview page.
Replay behaviour, the Replayed: true header, the 24-hour window, and every outcome for a repeated key including 409 idempotency_conflict.
Idempotency-Key35 minInvoice IDs, payout batches, settlement references. A recipe for keys that are stable across process restarts and job requeues.
POST /v2/entries25 minReading X-RateLimit-Remaining and Retry-After, and why replays do not spend your write budget.
42930 minMatching the ledger against something outside it — a bank statement, a processor payout file, a partner report.
Open a window against a statement date range, match lines, read the residual, and close it. The full reference article.
POST /v2/reconciliations60 minExact, amount-and-date, and many-to-one matches. When to let a residual stand overnight rather than force a match.
recon:write55 minTiming, fees, and genuine breaks — told apart by where the residual sits. A decision tree you can hand to an operations team.
residual40 minNothing is edited. Post a reversal that references the original, then post the correction — and keep the audit chain intact.
POST /v2/entries30 minWebhooks, limits, regions and the things that only matter once real money is moving through the ledger.
Subscribing, verifying signatures, and the exponential retry schedule that spans six hours before a delivery is abandoned.
DELETE /v2/webhooks/:id40 minBatching, queue shapes, and the burst allowance. Includes a worked example of a month-end posting job that fits comfortably.
X-RateLimit-Remaining35 minDublin, Frankfurt, Virginia or Sydney — pinned at workspace creation. What to do if you picked wrong.
eu-dublin-115 minCursor-walking GET /v2/entries as newline-delimited JSON, and what the audit hash chain lets you prove afterwards.
ledger export --all30 minMoving onto Ledgerdoc, and moving between its major versions. Each names the release that changed the behaviour.
PATCH /v2/entries/:id (v2.2.0)The edit endpoint was removed when immutability moved into the storage layer. The reversal pattern that replaces it, with code.
v2.2.045 min/v2/hooks to /v2/webhooks (v2.3.0)The legacy alias is gone and subscriptions are now per event type. A mechanical rewrite, but the event list changed shape.
v2.3.025 minBackdating with posted_at, deriving idempotency keys from row identity, and proving the opening balances tie out.
POST /v2/entries90 minNothing in the library matches that filter yet. Choose another level, or browse all 22.
Most of this library started as a forum thread. If you had to work something out yourself, say so and we will write it up.
Post the problem in the "docs requests" category. If two more people want it, it goes on the writing queue that month.
Thursdays at 16:00 UTC. Bring a failing request and an engineer will read the trace with you — often faster than any guide.
Every page has an "edit this page" link into the docs repository. Copy corrections are merged without ceremony.
The reference is the same eight endpoints the guides call, with every field and error code spelled out. Keep it in a second tab.
Perfect for: platform teams replacing a spreadsheet ledger with something auditable