LedgerWriter
Bookkeeping as an API
LedgerWriter is a double-entry accounting SaaS, purpose built for accounting pain-points.
LedgerWriter employs enforced double-entry journal entry with approval gates that record every event in a detailed audit log behind enforcable RBAC controls.
What you get on day one
Built on the KISS design system.
Made in Austin, TX.
Built around real accounting primitives
Not a spreadsheet wrapper.
LedgerWriter models accounts, journals, and entries the way your accountant actually thinks about them.
General ledger
A chart of accounts across asset, liability, equity, revenue, and expense categories.
Double-entry enforced
Every journal entry must balance β debits equal credits, checked before it's ever posted.
Trial balance & reports
Pull a trial balance or account balances on demand, straight from the ledger.
Immutable journal
Entries are append-only. Corrections happen through a reversing entry, so the history stays whole.
Approval gates
Sensitive entries require a second approval before they post β not just a checkbox in the UI.
RBAC enforced
Owners, bookkeepers, clerks, and viewers are scoped to what their role allows, checked at the command layer.
How it works
Post an entry with a JSON payload.
LedgerWriter validates the entry, writes it to the immutable journal, and updates account balances.
Request
POST /commands
Content-Type: application/json
{
"type": "PostJournalEntry",
"payload": {
"date": "2026-06-09",
"memo": "Customer invoice #1042",
"lines": [
{ "accountId": "accounts-receivable", "debit": "1250.00" },
{ "accountId": "sales-revenue", "credit": "1250.00" }
]
}
}Response
HTTP/1.1 201 Created
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": "posted",
"lines": [
{ "accountId": "accounts-receivable",
"debit": "1250.00", "credit": "0.00" },
{ "accountId": "sales-revenue",
"debit": "0.00", "credit": "1250.00" }
]
}Trial balance, on demand:
| Account | Debit | Credit |
|---|---|---|
| Cash and Bank | 42,180.00 | β |
| Accounts Receivable | 8,750.00 | β |
| Accounts Payable | β | 3,420.00 |
| Owner's Equity | β | 25,000.00 |
| Sales Revenue | β | 28,510.00 |
| Operating Expenses | 6,000.00 | β |
| Totals | 56,930.00 | 56,930.00 |
Built API-first
Build on the record. Enforce who owns it.
LedgerWriter unifies activity, responsibility, and reporting in one ledger β and exposes that same ledger over the API.
An API-first core
The app runs on the same command API you get. Nothing is held back for internal use.
A clear record
Corrections link back to the entries they correct, so the history stays legible.
Enforced roles
Owners, bookkeepers, clerks, and viewers are scoped to exactly what their role requires.
One shared ledger
Balances, entries, and reporting live in one place, for everyone who needs them.
For the people accountable for the books
One ledger. A defined role for everyone who relies on it.
Start with the API if you're building on the ledger. Add scoped roles for the people who keep and review the books as your team grows.
Developers
Skip building the ledger.
An event-sourced accounting core enforced at the command layer, reachable over one API β ship product, not ledger infrastructure.
Accounting teams and advisors
Review entries with the record behind them.
Every correction stays linked to what it corrects, so review is about judgment, not reconstruction.
Business owners
See what needs your attention.
One place to check the state of your books, backed by an audit trail your accountant can open directly.
A ledger that earns its place
Built for the questions that come after an entry is made.
For todayβs books
Every entry is an event. Every correction links back to the entry it corrects.
For the people who rely on them
Bookkeepers, accountants, counsel, board members, and teammates share one record, scoped by role.
For what comes next
Add roles, take on more complex workflows, and build directly on the same command API that powers the app.
For accountants, by developers
Built so a CPA can trust it, and an engineer can ship it.
LedgerWriter is designed so the data model holds up to an audit, and a backend engineer can integrate it in an afternoon.
REST + JSON
One predictable endpoint and plain JSON β the same command vocabulary the app itself runs on.
Approval-gated writes
Every write is a typed command, checked against role and approval requirements before anything posts.
Full audit trail
Every entry, correction, and approval decision is recorded, in order, and never overwritten.
Just as important
Who LedgerWriter isn't for.
LedgerWriter isn't built for every use case. Here's where it isn't the right fit.
You just need to jot down a few expenses
A spreadsheet gets you there faster than standing up a double-entry ledger.
You want a bookkeeping service, not a ledger
LedgerWriter is the record a bookkeeper works in β it doesn't replace having one.
You need personal or household budgeting
Built for organizations and the systems around them, not individual budgets.
You need point-of-sale or payment processing
LedgerWriter is the ledger behind those systems, not a replacement for one.
Questions, answered
What to know before you start.
Who is LedgerWriter for?
Developers building on the ledger, and the people who keep the books day to day: small businesses, accounting teams, law firms, nonprofits, and enterprise teams.
Can we work with our accountant or outside advisor?
Yes. Every entry and correction lives in one auditable record they can review directly.
Who uses LedgerWriter day to day?
The people who keep the books. Developers connect their own product to the same command API the app is built on.
Can we start small?
Yes. LedgerWriter is free to start. Paid and Enterprise tiers are coming for teams with more involved data or workflow needs.
LedgerWriter is ready when you are
Start with the ledger. Build what you need on top.
Generate an API key and start building today, or start with your organization's books and grow into the API from there.