Reference
Expenses
Capture business spend with VAT, WHT, supplier, and category. Void creates a reversing GL entry.
Expenses record money out — cash purchases, bank transfers, card swipes. Each expense posts a journal entry on creation and can be voided (which posts a reversing entry).
List expenses
GET
/v1/expensesReturns the most recent expenses for a business.
Query parameters
| Field | Type | Required | Notes |
|---|---|---|---|
businessId | string | yes | |
limit | integer | no | Default 50, max 100. |
status | string | no | Filter by draft, pending, paid, or cancelled. |
supplierId | string | no | |
startDate, endDate | ISO 8601 | no | Filter by transaction date. |
Response — 200
{
"success": true,
"data": {
"expenses": [
{
"id": "exp_abc",
"number": "EXP-2026-014",
"date": "2026-04-15T00:00:00.000Z",
"amount": 50000,
"amountKobo": 5000000,
"vatRate": 7.5,
"vatAmountKobo": 375000,
"whtRate": 0,
"totalAmountKobo": 5375000,
"supplierId": "sup_789",
"supplierName": "IKEDC",
"category": "utilities",
"accountId": "5021",
"paymentMethod": "bank_transfer",
"description": "Electricity bill — April",
"status": "paid",
"isPostedToGL": true,
"isVoided": false,
"createdAt": "2026-04-15T10:15:00.000Z"
}
],
"count": 1
}
}Get a single expense
GET
/v1/expenses/{id}Create an expense
POST
/v1/expensesCreates and immediately posts an expense (unless you pass status: draft).
Body
| Field | Type | Required | Notes |
|---|---|---|---|
amount | number | yes | In naira. Excludes VAT. Max 100,000,000. |
supplierId | string | yes (or name) | Either supplierId or supplierName required. |
supplierName | string | yes (or id) | For ad-hoc suppliers not in your directory. |
accountId | string | yes | COA expense account ID. |
date | ISO 8601 | no | Defaults to today. |
vatRate | number | no | Defaults to 7.5. Pass 0 for VAT-exempt. |
whtRate | number | no | WHT percentage. Defaults to 0. |
paymentMethod | string | no | cash, bank_transfer, card, mobile_money, cheque. |
description | string | no | Shown on the expense list. |
reference | string | no | Your external reference (receipt number, etc.). |
status | string | no | paid (default, posts to GL) or draft (no GL). |
billable | boolean | no | Flag as billable to a project/client. |
Example
curl -X POST "https://api.finorabusiness.com/v1/expenses?businessId=$BID" \
-H "Authorization: Bearer $FINORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 50000,
"supplierId": "sup_789",
"accountId": "5021",
"paymentMethod": "bank_transfer",
"description": "Electricity bill — April",
"date": "2026-04-15"
}'Update an expense
PUT
/v1/expenses/{id}Edits description, date, category, or tags. Amounts cannot be edited — void and recreate instead.
Void an expense
POST
/v1/expenses/{id}/voidPosts a reversing journal entry and marks the expense voided.
Body
| Field | Type | Required | Notes |
|---|---|---|---|
reason | string | yes | Shown in the audit trail. |
Voiding is final — voided expenses cannot be unvoided.
Related endpoints
- Suppliers
- Bills & Payments — for supplier invoices paid on terms
- Journal Entries
Reference index
Back to all modules