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
name
string
required

Shown to customers on the payment page. Also the source of the slug.

Required string length: 1 - 80
amount_type
enum<string>
required

fixed: everyone pays amount. customer_entered: the payer types the amount (deposits, tips).

Available options:
fixed,
customer_entered
description
string

What the customer is paying for.

Maximum string length: 300
amount
object

Required when amount_type is fixed; must be omitted otherwise.

currency
enum<string>

For customer_entered links. Defaults to NGN.

Available options:
NGN,
USD,
GBP,
EUR,
GHS,
KES
collect_phone
boolean
default:true

Ask the payer for their phone number.

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.

metadata
object

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

id
string
required

lnk_…

object
string
required

Always payment_link.

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

name
string
required

Shown on the pay page.

slug
string
required

Globally unique slug.

url
string<uri>
required

Full pay page URL.

amount_type
enum<string>
required

Fixed amount or customer enters it.

Available options:
fixed,
customer_entered
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
collect_phone
boolean
required

Payer is asked for a phone number.

status
enum<string>
required

active takes payments; paused does not ("Paused" in the app).

Available options:
active,
paused
payment_count
integer
required

Matched payments received through this link.

amount_collected
object
required

Total of those payments.

settlement_account
object
required

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

description
string

What the customer is paying for.

amount
object

Present for fixed links.

last_payment_at
string<date-time>

RFC 3339, UTC.

Example:

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

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