Preview a transfer's fee, total and arrival
Everything the Review screen shows before the customer confirms: what they receive, the fee, the total taken
from the source account, the balance left, when it should arrive, and whether it will need approval or a 2FA
confirm. Takes the same body as POST /transfers; nothing is held, created or sent. For a payout to a new
account it also returns the name-enquiry result (“Name on the account”).
Business-rule failures that would stop the transfer (insufficient_balance, limit_exceeded,
daily_limit_exceeded, name_enquiry_failed, currency_not_enabled, recipient_not_allowed) are returned
as the same 422 errors POST /transfers would give.
Error codes: invalid_api_key, parameter_invalid, parameter_missing, resource_not_found, scope_missing, csrf_token_invalid, insufficient_balance, limit_exceeded, daily_limit_exceeded, name_enquiry_failed, currency_not_enabled, recipient_not_allowed, partner_timeout, bank_unavailable, rate_limited.
Authorizations
Server API key, scoped. pk_test_ keys hit the sandbox tenant.
Headers
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.
128Body
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.
Customers create payout or own_account; only PanoFlow creates reversal.
payout, own_account acc_… to pay from. For agents, the agent's own account.
What the recipient receives. The fee is charged on top. Currency must match the source account.
rcp_…, a saved recipient (payout). Required for agents.
A new account to pay (payout). Name-enquired before the transfer is created.
Pay even though bank_account.account_name differs from the bank's name.
acc_…, another account of this business in the same currency (own_account).
Shows on the recipient's bank statement.
60Why this payment is being made. Shown to the approver if it needs approval; agents should always send it.
500With bank_account, also save it as a recipient ("Save as a recipient for next time").
Nickname for the recipient saved with save_recipient.
60doc_… files already uploaded (Documents API) to keep with the payment, e.g. the invoice.
5Up 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.
Always transfer_quote.
"transfer_quote"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 byreversal_of.
payout, own_account, reversal Enough of a PanoFlow account to show it ("Naira · Main · ••••6789"). Full account in the Accounts API.
An amount in minor units (kobo, cents) with its currency. Never a decimal.
An amount in minor units (kobo, cents) with its currency. Never a decimal.
Amount + fee, taken from the source account.
Source available balance after this transfer.
True when creating it will return pending_approval.
True when POST /transfers will need X-Step-Up-Token for this caller.
Enough of a PanoFlow account to show it ("Naira · Main · ••••6789"). Full account in the Accounts API.
Who is being paid, as the UI shows it.
For payouts, the account with the name-enquiry account_name ("Name on the account").
When it is expected to arrive if sent now ("Expected to arrive").
"2026-10-27T08:41:00Z"
Why approval is needed, when it is.