Reference
Receipts
Record payments against invoices, or log cash sales. GL and invoice status update automatically.
Receipts record money in. A receipt is either:
- An invoice payment — you pass an
allocationsarray mapping the payment to one or more existing invoices, and those invoices update theiramountPaid,amountDue, andstatusin the same request. - A cash sale — no allocations, just a one-shot cash sale with a payer.
Receipt type is inferred from the presence of allocations, not set explicitly.
List receipts
GET
/v1/receiptsMost recent receipts for a business, newest first.
Query parameters
| Field | Type | Required | Notes |
|---|---|---|---|
businessId | string | yes | |
limit | integer | no | Default 50, max 100. |
Example
curl "https://api.finorabusiness.com/v1/receipts?businessId=$BID&limit=20" \
-H "Authorization: Bearer $FINORA_API_KEY"Response — 200
{
"success": true,
"data": {
"receipts": [
{
"id": "rcp123",
"businessId": "biz_001",
"receiptNumber": "RCP-2026-042",
"receiptType": "invoice_payment",
"date": "2026-04-15T00:00:00.000Z",
"amountKobo": 53750000,
"amount": 537500,
"unallocatedAmountKobo": 0,
"unallocatedAmount": 0,
"paymentMethod": "card",
"paidBy": "Acme Ltd",
"paidByEmail": "finance@acme.com",
"customerId": "cust_xyz",
"reference": "API-1713350000000",
"allocations": [
{ "invoiceId": "inv_abc", "amountAllocated": 537500 }
],
"isPostedToGL": false,
"createdAt": "2026-04-15T10:15:00.000Z"
}
],
"count": 1
}
}Get a single receipt
GET
/v1/receipts/{id}Fetches one receipt by ID.
Example
curl "https://api.finorabusiness.com/v1/receipts/rcp123?businessId=$BID" \
-H "Authorization: Bearer $FINORA_API_KEY"Create a receipt
POST
/v1/receiptsRecords a payment. Pass allocations for an invoice payment, or omit for a cash sale.
Body
| Field | Type | Required | Notes |
|---|---|---|---|
amount | number | yes | In naira. 0 < amount <= 100,000,000. |
paidBy | string | yes | Name of the person/company who paid. |
paidByEmail | string | no | Email of the payer. |
customerId | string | no | Link the receipt to an existing customer. |
date | string (ISO 8601) | no | Defaults to now. |
paymentMethod | string | no | card, cash, bank_transfer, cheque, other. Defaults to card. |
reference | string | no | External reference (e.g. Paystack ID). Defaults to API-<timestamp>. |
allocations | array | no | Maps payment to specific invoices. Max 50. |
allocations[].invoiceId | string | yes (per item) | Invoice to credit. |
allocations[].amountAllocated | number | yes (per item) | Naira amount to apply. |
notes | string | no | Free-form note. |
Example — invoice payment
curl -X POST "https://api.finorabusiness.com/v1/receipts?businessId=$BID" \
-H "Authorization: Bearer $FINORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 537500,
"paymentMethod": "bank_transfer",
"paidBy": "Acme Ltd",
"paidByEmail": "finance@acme.com",
"customerId": "cust_xyz",
"reference": "ALAT-TXN-123456",
"allocations": [
{ "invoiceId": "inv_abc", "amountAllocated": 537500 }
]
}'Example — cash sale (no allocations)
curl -X POST "https://api.finorabusiness.com/v1/receipts?businessId=$BID" \
-H "Authorization: Bearer $FINORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 12500,
"paymentMethod": "cash",
"paidBy": "Walk-in customer"
}'Response — 201
{
"success": true,
"data": {
"id": "rcp123",
"number": "RCP-2026-042",
"amount": 537500,
"unallocatedAmount": 0,
"createdAt": "2026-04-17T10:30:00.000Z"
}
}Life cycle
Receipts are immutable. There's no PUT /v1/receipts/{id} — if you make a
mistake, void the receipt through the dashboard (which creates a reversal JE
and rolls back any invoice allocations) and issue a correct one.
Related endpoints
- Invoices — the
invoiceIdyou allocate to - Customers — the
customerIdfield - Bank Transactions — for matching bank debits to receipts
Reference index
Back to all modules