Skip to main content
PATCH
Update a draft invoice

Authorizations

Authorization
string
header
required

Server API key, scoped. pk_test_ keys hit the sandbox tenant.

Headers

X-Request-Id
string

Optional 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.

Maximum string length: 128

Path Parameters

invoice_id
string
required

Invoice id (ivc_…). The human number (INV-0152) is not accepted here; search with q.

Pattern: ^ivc_[0-9A-HJKMNP-TV-Z]{26}$

Body

application/json

Partial update of a draft. Same fields as create, all optional, without send.

customer_id
string

A saved customer (cus_…). Replaces the current customer.

customer
object

A new customer. Replaces the current customer.

line_items
object[]

Replaces every line.

Required array length: 1 - 100 elements
vat_enabled
boolean

Add VAT at 7.5% of the subtotal.

due_in_days
enum<integer>

Payment terms in days after issue.

Available options:
0,
7,
14,
30
virtual_account_requested
boolean

Give the invoice its own account number when it is sent.

reminders_enabled
boolean

Automatic reminders on or off.

note
string

Note to the customer.

Maximum string length: 500
settlement_account_id
string

Account the money lands in (acc_…). Same rules as on create.

metadata
object

Up to 20 string keys (≤ 40 chars) with string values (≤ 500 chars). Returned on the resource and its events.

Response

The updated draft.

An invoice (ivc_…, an alias view of the shared col_ collection table).

id
string
required

ivc_…

object
string
required

Always invoice.

Allowed value: "invoice"
created_at
string<date-time>
required

RFC 3339, UTC.

Example:

"2026-10-27T08:41:00Z"

updated_at
string<date-time>
required

RFC 3339, UTC.

Example:

"2026-10-27T08:41:00Z"

number
string
required

Human invoice number, sequential per business.

Pattern: ^INV-\d{4,}$
status
enum<string>
required

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".

Available options:
draft,
sent,
partially_paid,
overdue,
paid,
void
customer
object
required

The customer (payer) on an invoice or static virtual account.

currency
enum<string>
required

ISO 4217. Only NGN is live at launch; others return 422 currency_not_enabled.

Available options:
NGN,
USD,
GBP,
EUR,
GHS,
KES
line_items
object[]
required

Lines in order.

vat_enabled
boolean
required

Whether VAT is added.

vat_rate_bps
integer
required

Percentage in basis points (50 = 0.5%).

Required range: 0 <= x <= 10000
subtotal
object
required

Sum of line amounts, before VAT.

vat
object
required

subtotal × vat_rate_bps / 10000, rounded half up to the minor unit. Zero when VAT is off.

total
object
required

subtotal + vat.

amount_paid
object
required

Sum of payments.

amount_due
object
required

"Left to pay": total − amount_paid, never below zero. Zero when paid or void.

due_in_days
enum<integer>
required

Payment terms.

Available options:
0,
7,
14,
30
virtual_account_requested
boolean
required

Whether the invoice gets (or got) its own account number.

pay_page
object
required

The invoice's pay page. Every invoice has one; it shows 404 to payers while a draft.

settlement_account
object
required

One of the business's own PanoFlow accounts (owned by the Accounts service).

reminders_enabled
boolean
required

Automatic reminders on.

overpaid
object

Present when payments exceed the total. The excess stays in the settlement account.

issued_on
string<date>

Calendar date, interpreted in Africa/Lagos.

Example:

"2026-11-07"

due_on
string<date>

Calendar date, interpreted in Africa/Lagos.

Example:

"2026-11-07"

days_overdue
integer

Whole days past due_on, when overdue ("6 days late").

virtual_account
object

The invoice's own (per-invoice, dynamic) account number. Anything paid into it is recorded against this invoice.

next_reminder_on
string<date>

Calendar date, interpreted in Africa/Lagos.

Example:

"2026-11-07"

note
string

Note to the customer.

payments
object[]

Money recorded against the invoice, oldest first.

activity
object[]

Timeline for the drawer. Returned by getInvoice and invoice actions; omitted from lists.

sent_at
string<date-time>

RFC 3339, UTC.

Example:

"2026-10-27T08:41:00Z"

paid_at
string<date-time>

RFC 3339, UTC.

Example:

"2026-10-27T08:41:00Z"

voided_at
string<date-time>

RFC 3339, UTC.

Example:

"2026-10-27T08:41:00Z"

created_by
object

Who did something. Shown in activity, approvals and the audit log.

metadata
object

Up to 20 string keys (≤ 40 chars) with string values (≤ 500 chars). Returned on the resource and its events.