Skip to main content
POST

Authorizations

Authorization
string
header
required

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

Headers

Idempotency-Key
string

Optional on non-money POSTs; honoured when sent.

Required string length: 1 - 255
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

Body

application/json

settlement_account_id and own_account: true can't be sent together (400 parameter_invalid, param: own_account).

customer_name
string
required

Shown to the sender as <business short name> / <customer name>.

Required string length: 1 - 80
customer_id
string

A saved customer (cus_…). When sent, customer_name and customer_email default to theirs.

customer_email
string<email>
Maximum string length: 254
reference
string

Your own id for the customer (e.g. CUST-0042). Returned on every inbound credit and webhook.

Maximum string length: 64
settlement_account_id
string

Account the money lands in (acc_…). Defaults to the business's Naira · Main account. Any of the business's active accounts in the same currency: Main, Payroll or a sub-account. Agent accounts are not allowed (an agent's money comes only from top-ups the team makes, within its limits). Payments are credited to this account directly.

404 resource_not_found if it isn't one of the business's accounts; 403 account_closed if it is closed; 422 currency_mismatch if it is in another currency; 400 parameter_invalid with param: settlement_account_id for an agent account, or one still opening.

own_account
boolean
default:false

Give this customer's payments a balance of their own. PanoFlow opens a new sub-account named after the customer (type: sub, e.g. "Kano Freight Services", shown as "Naira · Kano Freight Services"; cut to 40 characters, with " 2", " 3" … added if the name is taken) and the number settles into it. It is returned as settlement_account.

It is an ordinary sub-account, the same as one opened with createAccount: its own balances, statements and transactions, an account.opened webhook, and it can be renamed, moved out of or closed like any other. Closing the virtual account leaves the sub-account and its money as they are. Opening it follows createAccount's rules (owner or admin; role_not_permitted otherwise).

metadata
object

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

Response

The new virtual account.

A static virtual account (sva_…), a permanent account number for one customer.

id
string
required

sva_…

object
string
required

Always virtual_account.

Allowed value: "virtual_account"
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"

type
string
required

Always static. Per-invoice accounts are on the invoice.

Allowed value: "static"
customer
object
required

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

account_name
string
required

Name the sender's bank shows.

account_number
string
required

10-digit Nigerian NUBAN account number.

Pattern: ^\d{10}$
Example:

"8012457739"

bank_name
string
required

Partner bank.

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
settlement_account
object
required

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

status
enum<string>
required

active accepts transfers; closed does not (the bank rejects them). Closed accounts can be reopened.

Available options:
active,
closed
payment_count
integer
required

Credits received.

amount_collected
object
required

Total received.

reference
string

Your own id for the customer.

bank_code
string

The bank's NIBSS NIP institution code (CBN bank code).

Example:

"058"

last_payment_at
string<date-time>

RFC 3339, UTC.

Example:

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

closed_at
string<date-time>

RFC 3339, UTC.

Example:

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

metadata
object

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