Skip to main content

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/expenses

Returns the most recent expenses for a business.

Query parameters

FieldTypeRequiredNotes
businessIdstringyes
limitintegernoDefault 50, max 100.
statusstringnoFilter by draft, pending, paid, or cancelled.
supplierIdstringno
startDate, endDateISO 8601noFilter 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/expenses

Creates and immediately posts an expense (unless you pass status: draft).

Body

FieldTypeRequiredNotes
amountnumberyesIn naira. Excludes VAT. Max 100,000,000.
supplierIdstringyes (or name)Either supplierId or supplierName required.
supplierNamestringyes (or id)For ad-hoc suppliers not in your directory.
accountIdstringyesCOA expense account ID.
dateISO 8601noDefaults to today.
vatRatenumbernoDefaults to 7.5. Pass 0 for VAT-exempt.
whtRatenumbernoWHT percentage. Defaults to 0.
paymentMethodstringnocash, bank_transfer, card, mobile_money, cheque.
descriptionstringnoShown on the expense list.
referencestringnoYour external reference (receipt number, etc.).
statusstringnopaid (default, posts to GL) or draft (no GL).
billablebooleannoFlag 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}/void

Posts a reversing journal entry and marks the expense voided.

Body

FieldTypeRequiredNotes
reasonstringyesShown in the audit trail.

Voiding is final — voided expenses cannot be unvoided.

Related endpoints

Reference index

Back to all modules