Create a payment link
The slug is derived from the name (lowercase, hyphenated, at most 28 characters) and is unique across
pay.panoflow.io; when it is taken, a short suffix is added. The link is active straight away.
Payments settle into settlement_account_id (default Naira · Main). Each checkout on the pay page gets a
one-time number tied to that account, so money is credited to it as it arrives.
Error codes: invalid_api_key, parameter_invalid, parameter_missing, resource_not_found, scope_missing, csrf_token_invalid, idempotency_key_reused, account_closed, currency_mismatch, 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.
128Body
Shown to customers on the payment page. Also the source of the slug.
1 - 80fixed: everyone pays amount. customer_entered: the payer types the amount (deposits, tips).
fixed, customer_entered What the customer is paying for.
300Required when amount_type is fixed; must be omitted otherwise.
For customer_entered links. Defaults to NGN.
NGN, USD, GBP, EUR, GHS, KES Ask the payer for their phone number.
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.
Up to 20 string keys (≤ 40 chars) with string values (≤ 500 chars). Returned on the resource and its events.
Response
The new link.
A reusable pay page (lnk_…, an alias view of the shared col_ collection table).
lnk_…
Always payment_link.
"payment_link"RFC 3339, UTC.
"2026-10-27T08:41:00Z"
RFC 3339, UTC.
"2026-10-27T08:41:00Z"
Shown on the pay page.
Globally unique slug.
Full pay page URL.
Fixed amount or customer enters it.
fixed, customer_entered ISO 4217. Only NGN is live at launch; others return 422 currency_not_enabled.
NGN, USD, GBP, EUR, GHS, KES Payer is asked for a phone number.
active takes payments; paused does not ("Paused" in the app).
active, paused Matched payments received through this link.
Total of those payments.
One of the business's own PanoFlow accounts (owned by the Accounts service).
What the customer is paying for.
Present for fixed links.
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.