Skip to main content
POST
Preview a transfer's fee, total and arrival

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

Body

application/json

Body of POST /transfers and POST /transfers/quote. A payout takes exactly one of recipient_id or bank_account; an own_account transfer takes destination_account_id. Breaking either rule returns 400 parameter_missing (or parameter_unknown for a field that doesn't apply) with param set.

type
enum<string>
required

Customers create payout or own_account; only PanoFlow creates reversal.

Available options:
payout,
own_account
source_account_id
string
required

acc_… to pay from. For agents, the agent's own account.

amount
object
required

What the recipient receives. The fee is charged on top. Currency must match the source account.

recipient_id
string

rcp_…, a saved recipient (payout). Required for agents.

bank_account
object

A new account to pay (payout). Name-enquired before the transfer is created.

allow_name_mismatch
boolean
default:false

Pay even though bank_account.account_name differs from the bank's name.

destination_account_id
string

acc_…, another account of this business in the same currency (own_account).

narration
string

Shows on the recipient's bank statement.

Maximum string length: 60
reason
string

Why this payment is being made. Shown to the approver if it needs approval; agents should always send it.

Maximum string length: 500
save_recipient
boolean
default:false

With bank_account, also save it as a recipient ("Save as a recipient for next time").

recipient_nickname
string

Nickname for the recipient saved with save_recipient.

Maximum string length: 60
document_ids
string[]

doc_… files already uploaded (Documents API) to keep with the payment, e.g. the invoice.

Maximum array length: 5
metadata
object

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

Response

The preview.

What the Review screen shows before confirming.

object
string
required

Always transfer_quote.

Allowed value: "transfer_quote"
type
enum<string>
required
  • payout: to a bank account outside PanoFlow, over NIP.
  • own_account: between two of this business's accounts in the same currency.
  • reversal: created by PanoFlow to reverse a completed transfer; read-only for customers and linked by reversal_of.
Available options:
payout,
own_account,
reversal
source_account
object
required

Enough of a PanoFlow account to show it ("Naira · Main · ••••6789"). Full account in the Accounts API.

amount
object
required

An amount in minor units (kobo, cents) with its currency. Never a decimal.

fee
object
required

An amount in minor units (kobo, cents) with its currency. Never a decimal.

total
object
required

Amount + fee, taken from the source account.

available_after
object
required

Source available balance after this transfer.

requires_approval
boolean
required

True when creating it will return pending_approval.

requires_step_up
boolean
required

True when POST /transfers will need X-Step-Up-Token for this caller.

destination_account
object

Enough of a PanoFlow account to show it ("Naira · Main · ••••6789"). Full account in the Accounts API.

counterparty_name
string

Who is being paid, as the UI shows it.

bank_account
object

For payouts, the account with the name-enquiry account_name ("Name on the account").

estimated_arrival_at
string<date-time>

When it is expected to arrive if sent now ("Expected to arrive").

Example:

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

approval_triggers
object[]

Why approval is needed, when it is.