More Features
Accounting ledger
A double-entry ledger per business, posted automatically from your invoices, payments and expenses, with locked periods and standard accounting reports.
Coming June to July 2027
This feature ships in June to July 2027. This page describes how it will work; details can change before release.
The accounting ledger keeps proper double-entry books for each business, right next to your invoices. It is for small businesses that do not use QuickBooks or Xero: your invoices, payments, credit notes, refunds, late fees and expenses post journal entries automatically, you or your accountant add manual entries when needed, and you get a trial balance, profit and loss, balance sheet and general ledger whenever you want them. Posted entries can never be edited or deleted, so the books stay auditable.
How it works
Chart of accounts
When you turn the ledger on for a business, it gets a chart of accounts from a country template, which you can then edit. The generic small-business template comes first; templates for Pakistan, the UK, India and the EU follow, each checked by an accountant before release.
Some accounts have a role in automatic posting, for example accounts receivable, revenue, tax payable, bank, payment-provider clearing, payment-provider fees, client credit and late-fee income. Every template includes them, so automatic entries always have somewhere to go.
Automatic journal entries
Your everyday work posts to the ledger for you:
| What happens | What is posted |
|---|---|
| An invoice is issued | Accounts receivable, revenue and tax payable |
| A payment arrives | Bank or payment-provider clearing, and accounts receivable |
| A credit note is issued | A balanced entry for the credited amount |
| A refund is made | A balanced entry for the refund |
| A late fee is applied | A balanced entry for the fee |
| An expense is recorded | A balanced entry for the expense |
| A payment provider takes a fee (Stripe) | The fee as an expense |
Each source event posts once: if the same event is processed twice, no duplicate entry is created.
Manual journal entries
A member with the ledger.journal permission can post manual entries, for example opening balances or an adjustment from your accountant. Every entry must balance: total debits must equal total credits, or the entry is rejected.
Append-only books
Posted entries are never edited or deleted, by anyone. To correct a mistake, post a reversing entry, which cancels the original, and then post the correct entry. The original and its reversal both stay in the books, so anyone can see what changed and when.
An entry can be reversed only once.
Locked periods
When a month is closed, lock the period. Nothing can post into a locked period: not a manual entry, not an automatic entry, not a reversal. Periods never overlap. Unlocking a period is treated as a destructive action and needs confirmation.
Currencies
Ledger lines are kept in the business's base currency. For a document in another currency, the line also keeps the original amount and currency with the exchange rate frozen on that document, so the books match your invoices exactly.
Set up and use the ledger in the web app
Open Ledger
Ledger is in the app sidebar. Turn it on for the business you have selected.
Apply a chart of accounts
Choose the template for your country, or the generic one. Then rename, add or archive accounts to fit your business.
Let entries post
From now on, your invoices, payments, credit notes, refunds, late fees and expenses post entries automatically.
Add manual entries when needed
Enter the date, a description and the lines. The entry is saved only if debits equal credits.
Lock closed periods
After a month is reviewed, lock it so nothing can change its figures.
Run reports
Open trial balance, profit and loss, balance sheet or general ledger, on cash or accrual basis, and export to CSV or PDF.
Bank reconciliation
Import a bank statement as CSV or OFX and match each line to a payment, an expense or a journal entry. Lines show as unmatched, matched or ignored, so you can see at a glance what still needs attention. The same statement line is never imported twice for a bank account. Live bank feeds are not offered.
Reports
| Report | Report name |
|---|---|
| Trial balance | trial-balance |
| Profit and loss | profit-and-loss |
| Balance sheet | balance-sheet |
| General ledger | general-ledger |
Each report runs on cash or accrual basis for a date range, and exports to CSV or PDF. The trial balance always balances.
The ledger produces reports your accountant can use. It does not prepare or file tax returns for any country.
Through the API and MCP
curl -X POST "https://api.freeinvoiceautomation.com/v1/journal-entries" \
-H "Authorization: Bearer $FIA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: je-opening-balance-2027" \
-d '{
"business_id": "0193f2a1-7c4e-7b9a-9f10-3c2d1e0a4b51",
"entry_date": "2027-06-01",
"description": "Opening bank balance",
"lines": [
{ "ledger_account_id": "0193f3a0-1b2c-7d3e-8f4a-5b6c7d8e9f01", "debit_minor": "500000", "credit_minor": "0", "currency": "USD" },
{ "ledger_account_id": "0193f3a0-1b2c-7d3e-8f4a-5b6c7d8e9f02", "debit_minor": "0", "credit_minor": "500000", "currency": "USD" }
]
}'Every line has exactly one side: a debit or a credit, never both. Ledger report queries take basis=cash|accrual, from, to and format=json|csv|pdf.
| Action | Endpoint |
|---|---|
| Chart of accounts | List ledger accounts, Upsert a ledger account, Apply a chart template |
| Journal entries | List journal entries, Post a journal entry, Reverse a journal entry |
| Periods | List accounting periods, Lock a period, Unlock a period |
| Reports | Get a ledger report |
| Bank reconciliation | Import a bank statement, List bank transactions, Match a bank transaction |
Reversing an entry and unlocking a period need "confirm": true. Over MCP, get_ledger_report gives your assistant read-only access to the four reports ("What was my profit in the first half of 2027?"). Webhooks send journal_entry.posted and accounting_period.locked.
Ledger, QuickBooks and Xero
If your accountant already keeps your books in QuickBooks Online or Xero, use the sync instead; you do not need this ledger. The two can also run side by side.
Errors
| Code | When |
|---|---|
journal_unbalanced | Debits do not equal credits. |
period_locked | The entry date falls in a locked period. |
entry_already_reversed | The entry was reversed before. |
confirmation_required | A reversal or unlock without "confirm": true. The response includes the preview. |
validation_failed | A line with both or neither side, an unknown account, or a bad date. |
permission_denied | Your role lacks the key for the action. |
Permissions
| Action | Permission key | Default roles |
|---|---|---|
| View accounts, entries, periods, reports and bank lines | ledger.view | Owner, Admin, Accountant |
| Post and reverse manual journal entries | ledger.journal | Owner, Admin |
| Edit the chart of accounts, lock and unlock periods, import and match bank statements | ledger.manage | Owner, Admin |
The Accountant role is view-only in the ledger: it can read everything and run reports, but not post. See Roles and permissions.