The Payout API allows merchants to create payout requests, execute fund transfers, and query account balances.
Three-Step Payout Flow
| Step | Endpoint | Purpose |
|---|---|---|
| 1. Inquiry | POST /api/inquiry |
Validate the destination bank account and reserve funds. Returns inquiry_id. Expires after 30 minutes. |
| 2. Transfer | POST /api/transfer |
Execute the payout using the inquiry_id from step 1. A true response means submitted, not completed. |
| 3. Webhook / Check | Webhook or POST /api/check/inquiry |
Receive the final result via disbursement.v2.completed, disbursement.v2.fail, or disbursement.v2.expired. |
For a full flow diagram, see Integration Flows.
Error codes
Every error code the Payout API returns, across both endpoints:
| code | HTTP | Meaning | Recommended action |
|---|---|---|---|
| 409 | The inquiry was already executed — successfully, or it is still in progress | Do not re-send. data.status is the current state; confirm the final result via webhook or /check/inquiry |
| 409 | The transfer for this inquiry already failed | Start a new inquiry with a new merchant_transaction_id |
| 404 | Unknown or missing inquiry_id for this account | Verify the id, or look it up via Check Inquiry Status |
| 409 | The inquiry passed its 30-minute expiry before being transferred | Start a new inquiry; reserved funds are returned automatically |
| 409 | A request with the same merchant_transaction_id is already being processed | Retry shortly to receive the stored inquiry |
| 400 | bank_code is not a supported payout destination | Use a valid code from the Appendix and re-send |
| 400 | account_number is not numeric, or is longer than 30 digits | Fix the account number and re-send |
| 403 | Payout is not set up for your account on this destination's channel | Contact support; do not retry |
See Transfer fund and Inquiry for the full response shape and worked examples of each.