Void an invoice
The customer can no longer pay it: the pay page shows it as void and its own account number (if any) is
closed at the bank, so new transfers to it are rejected. Allowed from draft, sent, partially_paid
and overdue. Money already received stays received (shown in payments); returning it is a new payout,
never an edit. Permanent.
Error codes: invalid_api_key, parameter_invalid, parameter_missing, resource_not_found, scope_missing, csrf_token_invalid, idempotency_key_reused, bank_unavailable, rate_limited.
Authorizations
Server API key, scoped. pk_test_ keys hit the sandbox tenant.
Headers
Optional on non-money POSTs; honoured when sent.
1 - 255Optional client correlation id, up to 128 characters. It is not echoed: the response's X-Request-Id is always
our own req_… id. We log your value with the request as client_request_id, so support can find a request by
either id. A longer value is refused with 400 parameter_invalid.
128Path Parameters
Invoice id (ivc_…). The human number (INV-0152) is not accepted here; search with q.
^ivc_[0-9A-HJKMNP-TV-Z]{26}$Body
Why it was voided. Kept in the activity log; not shown to the customer.
500Response
The voided invoice.
An invoice (ivc_…, an alias view of the shared col_ collection table).
ivc_…
Always invoice.
"invoice"RFC 3339, UTC.
"2026-10-27T08:41:00Z"
RFC 3339, UTC.
"2026-10-27T08:41:00Z"
Human invoice number, sequential per business.
^INV-\d{4,}$Invoice state (not a money movement; see CONVENTIONS §8 note in docs/discrepancies).
draft → sent → partially_paid → paid; sent / partially_paid → overdue after due_on
while money is still owed (an overdue invoice can have part payments; see amount_paid);
draft / sent / partially_paid / overdue → void. UI labels: sent → "Awaiting payment",
partially_paid → "Part paid".
draft, sent, partially_paid, overdue, paid, void The customer (payer) on an invoice or static virtual account.
ISO 4217. Only NGN is live at launch; others return 422 currency_not_enabled.
NGN, USD, GBP, EUR, GHS, KES Lines in order.
Whether VAT is added.
Percentage in basis points (50 = 0.5%).
0 <= x <= 10000Sum of line amounts, before VAT.
subtotal × vat_rate_bps / 10000, rounded half up to the minor unit. Zero when VAT is off.
subtotal + vat.
Sum of payments.
"Left to pay": total − amount_paid, never below zero. Zero when paid or void.
Payment terms.
0, 7, 14, 30 Whether the invoice gets (or got) its own account number.
The invoice's pay page. Every invoice has one; it shows 404 to payers while a draft.
One of the business's own PanoFlow accounts (owned by the Accounts service).
Automatic reminders on.
Present when payments exceed the total. The excess stays in the settlement account.
Calendar date, interpreted in Africa/Lagos.
"2026-11-07"
Calendar date, interpreted in Africa/Lagos.
"2026-11-07"
Whole days past due_on, when overdue ("6 days late").
The invoice's own (per-invoice, dynamic) account number. Anything paid into it is recorded against this invoice.
Calendar date, interpreted in Africa/Lagos.
"2026-11-07"
Note to the customer.
Money recorded against the invoice, oldest first.
Timeline for the drawer. Returned by getInvoice and invoice actions; omitted from lists.
RFC 3339, UTC.
"2026-10-27T08:41:00Z"
RFC 3339, UTC.
"2026-10-27T08:41:00Z"
RFC 3339, UTC.
"2026-10-27T08:41:00Z"
Who did something. Shown in activity, approvals and the audit log.
Up to 20 string keys (≤ 40 chars) with string values (≤ 500 chars). Returned on the resource and its events.