Pay with transfer
Issues a one-time virtual account for this payment. There is no request body, but the customer email must have been sent on initialise, otherwise the call fails with payment.customer_email_required.
Show the bank name, account number, account name and a countdown driven by expiresInSeconds. The customer must send the exact total shown on the pay screen from their own bank account before the account expires. Repeating the call while the account is still valid returns the same account, so it is safe to call again after a page refresh.
The customer pays at their bank, so you learn of the outcome asynchronously. Subscribe to payment.completed and payment.failed on your webhook, optionally follow the checkout events stream, and always confirm with verify before you fulfil.
If no account can be generated you receive bank_transfer.failed or bank_transfer.virtual_account_unavailable (HTTP 503). Offer a retry in a moment, or offer card. In the sandbox, use the simulate endpoint to choose how the transfer ends.