Reference
Journal Entries
Inspect the double-entry audit trail. Manual JEs can be posted and reversed via API.
Journal entries are the audit trail of every financial movement. Most JEs are auto-created by Finora Business (invoice posting, receipt collection, expense recording). The API lets you list, fetch, and — when you really need to — create manual adjustment JEs.
List journal entries
GET
/v1/journal-entriesPaginated list, newest first.
Query parameters
| Field | Type | Required | Notes |
|---|---|---|---|
businessId | string | yes | |
limit | integer | no | Default 50, max 100. |
status | string | no | draft, posted, reversed. |
startDate, endDate | ISO 8601 | no | Filter by transaction date. |
sourceType | string | no | Filter by what created the JE (invoice, receipt, expense, bill, manual, etc.). |
Response — 200
{
"success": true,
"data": {
"journalEntries": [
{
"id": "je_abc",
"number": "JE-2026-1042",
"transactionDate": "2026-04-15T00:00:00.000Z",
"description": "Invoice INV-2026-001 — Acme Ltd",
"sourceType": "invoice",
"sourceId": "inv_abc",
"lines": [
{ "accountId": "1021", "accountCode": "1021", "debitKobo": 53750000, "creditKobo": 0, "description": "Trade Debtors — Acme" },
{ "accountId": "4000", "accountCode": "4000", "debitKobo": 0, "creditKobo": 50000000, "description": "Revenue" },
{ "accountId": "2021", "accountCode": "2021", "debitKobo": 0, "creditKobo": 3750000, "description": "VAT Provision" }
],
"totalDebitKobo": 53750000,
"totalCreditKobo": 53750000,
"status": "posted",
"createdAt": "2026-04-15T10:16:00.000Z"
}
],
"count": 1
}
}Every posted JE balances: totalDebitKobo === totalCreditKobo.
Get a single JE
GET
/v1/journal-entries/{id}Create a manual JE
POST
/v1/journal-entriesCreates a draft JE. It doesn't hit the ledger until posted.
Body
| Field | Type | Required | Notes |
|---|---|---|---|
transactionDate | ISO 8601 | yes | |
description | string | yes | Plain-language reason. |
lines | array | yes | 2+ lines. Debits must equal credits. |
lines[].accountId | string | yes | COA account ID. |
lines[].debitKobo | integer | yes (or creditKobo) | Use one or the other per line. |
lines[].creditKobo | integer | yes (or debitKobo) | |
lines[].description | string | no | Per-line narrative. |
Validation
The API rejects any JE where:
lines.length < 2- Both
debitKoboandcreditKoboare non-zero on the same line totalDebitKobo !== totalCreditKobo— returns400 UNBALANCED_JOURNAL
Post a draft JE
POST
/v1/journal-entries/{id}/postMoves a draft JE to posted. Updates COA balances atomically.
Once posted, a JE is immutable — you can only reverse it.
Reverse a posted JE
POST
/v1/journal-entries/{id}/reverseCreates a mirror JE (debits and credits swapped) and marks both as reversed.
Body
| Field | Type | Required | Notes |
|---|---|---|---|
reversalDate | ISO 8601 | no | Defaults to today. |
reason | string | yes | Shown in both entries' audit log. |
Related endpoints
- Chart of Accounts — the
accountIdeach line references - Reports — read aggregated numbers instead of raw JEs when you can
Reference index
Back to all modules