Ledgers (Chart of Accounts)
Ledgers represent accounts in the chart of accounts. Every financial transaction flows through ledger accounts via journal entries.
Account Types
| Type | Description | Normal Balance |
|---|---|---|
asset |
Cash, bank accounts, receivables, equipment | Debit |
liability |
Payables, loans, credit cards | Credit |
equity |
Owner's equity, retained earnings | Credit |
revenue |
Sales, service income | Credit |
expense |
Rent, payroll, utilities, supplies | Debit |
List Ledgers
curl "https://api.ondayzero.com/api/v1/ledgers?type=expense&status=active" \
-H "Authorization: Bearer dz_your_token_here" \
-H "x-business-id: YOUR_BUSINESS_ID"Filter Parameters
| Parameter | Type | Description |
|---|---|---|
name |
string | Partial name match |
type |
string | asset, liability, equity, revenue, expense |
status |
string | active, inactive |
id |
string | Comma-separated ledger UUIDs |
Plus the standard pagination parameters.
Create a Ledger
There are two creation modes — templated (a standard financial account, auto-configured) and custom (you specify the accounting properties):
Templated
curl -X POST "https://api.ondayzero.com/api/v1/ledgers" \
-H "Authorization: Bearer dz_your_token_here" \
-H "x-business-id: YOUR_BUSINESS_ID" \
-H "Content-Type: application/json" \
-d '{
"name": "Operating Checking",
"financial_account_type": "bank_account"
}'financial_account_type is one of bank_account, credit_card, payments, payroll, loan, prepaid_card, accounts_receivable, accounts_payable.
Custom
curl -X POST "https://api.ondayzero.com/api/v1/ledgers" \
-H "Authorization: Bearer dz_your_token_here" \
-H "x-business-id: YOUR_BUSINESS_ID" \
-H "Content-Type: application/json" \
-d '{
"name": "Prepaid Insurance",
"type": "asset",
"sub_type": "current_assets",
"debit_credit": "debit",
"sort_code": 1400,
"report_cash_flow": true,
"account_number": "1400",
"description": "Insurance premiums paid in advance",
"parent_id": "PARENT_LEDGER_UUID"
}'Custom mode requires name, type, sub_type, debit_credit, sort_code and report_cash_flow. Optional extras: account_number (chart-of-accounts code), parent_id (nest under a parent account), cash_flow_section (operating, investing, financing, excluded), cfs_class, and depreciation_tag (depreciable / amortizable — lets fixed assets be capitalized from this account's transactions).
Update a Ledger
curl -X PUT "https://api.ondayzero.com/api/v1/ledgers/{ledger_id}" \
-H "Authorization: Bearer dz_your_token_here" \
-H "x-business-id: YOUR_BUSINESS_ID" \
-H "Content-Type: application/json" \
-d '{
"name": "Prepaid Insurance (Current)",
"description": "Short-term insurance prepayments"
}'Merge Ledgers
Consolidate multiple accounts into one. All journal entry lines, transactions, budgets, reconciliations, and bank rules are reassigned. Source accounts are archived.
curl -X POST "https://api.ondayzero.com/api/v1/ledgers/merge" \
-H "Authorization: Bearer dz_your_token_here" \
-H "x-business-id: YOUR_BUSINESS_ID" \
-H "Content-Type: application/json" \
-d '{
"source_ledger_ids": ["LEDGER_UUID_1", "LEDGER_UUID_2"],
"target_ledger_id": "TARGET_LEDGER_UUID",
"new_name": "Consolidated Office Expenses"
}'Merging system ledgers into another system ledger additionally requires "confirmation": "MERGE". Merges are irreversible.
Bulk Update and AI Helpers
POST /api/v1/ledgers/bulk-updateapplies many updates in one call ({"updates": [{"id": "...", "status": "inactive"}, …]}).POST /api/v1/ledgers/suggest-cleanupreturns AI suggestions for duplicate or unused accounts;POST /api/v1/ledgers/suggest-cash-flowproposescash_flow_sectionvalues;POST /api/v1/ledgers/apply-coacreates a whole AI-generated chart of accounts at once.
Delete a Ledger
curl -X DELETE "https://api.ondayzero.com/api/v1/ledgers/{ledger_id}" \
-H "Authorization: Bearer dz_your_token_here" \
-H "x-business-id: YOUR_BUSINESS_ID"Deletion returns
400for system accounts (AR, AP, Plaid-managed bank ledgers, …) and409 Conflictif the ledger still has journal entries — move or delete those first, merge the ledger into another, or mark itinactiveinstead.
To remove a ledger and everything posted to it, preview the blast radius with GET /api/v1/ledgers/{ledger_id}/cascade-preview, then DELETE /api/v1/ledgers/{ledger_id}/cascade. That starts a background workflow; poll GET /api/v1/ledgers/deletion-status/{workflow_id} for progress. This is destructive and cannot be undone.