Skip to main content

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 allocations array mapping the payment to one or more existing invoices, and those invoices update their amountPaid, amountDue, and status in 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/receipts

Most recent receipts for a business, newest first.

Query parameters

FieldTypeRequiredNotes
businessIdstringyes
limitintegernoDefault 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/receipts

Records a payment. Pass allocations for an invoice payment, or omit for a cash sale.

Body

FieldTypeRequiredNotes
amountnumberyesIn naira. 0 < amount <= 100,000,000.
paidBystringyesName of the person/company who paid.
paidByEmailstringnoEmail of the payer.
customerIdstringnoLink the receipt to an existing customer.
datestring (ISO 8601)noDefaults to now.
paymentMethodstringnocard, cash, bank_transfer, cheque, other. Defaults to card.
referencestringnoExternal reference (e.g. Paystack ID). Defaults to API-<timestamp>.
allocationsarraynoMaps payment to specific invoices. Max 50.
allocations[].invoiceIdstringyes (per item)Invoice to credit.
allocations[].amountAllocatednumberyes (per item)Naira amount to apply.
notesstringnoFree-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

Reference index

Back to all modules