Skip to main content

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-entries

Paginated list, newest first.

Query parameters

FieldTypeRequiredNotes
businessIdstringyes
limitintegernoDefault 50, max 100.
statusstringnodraft, posted, reversed.
startDate, endDateISO 8601noFilter by transaction date.
sourceTypestringnoFilter 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-entries

Creates a draft JE. It doesn't hit the ledger until posted.

Body

FieldTypeRequiredNotes
transactionDateISO 8601yes
descriptionstringyesPlain-language reason.
linesarrayyes2+ lines. Debits must equal credits.
lines[].accountIdstringyesCOA account ID.
lines[].debitKobointegeryes (or creditKobo)Use one or the other per line.
lines[].creditKobointegeryes (or debitKobo)
lines[].descriptionstringnoPer-line narrative.

Validation

The API rejects any JE where:

  • lines.length < 2
  • Both debitKobo and creditKobo are non-zero on the same line
  • totalDebitKobo !== totalCreditKobo — returns 400 UNBALANCED_JOURNAL

Post a draft JE

POST/v1/journal-entries/{id}/post

Moves 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}/reverse

Creates a mirror JE (debits and credits swapped) and marks both as reversed.

Body

FieldTypeRequiredNotes
reversalDateISO 8601noDefaults to today.
reasonstringyesShown in both entries' audit log.

Related endpoints

  • Chart of Accounts — the accountId each line references
  • Reports — read aggregated numbers instead of raw JEs when you can

Reference index

Back to all modules