Payouts
POST /payouts sends money to a recipient. It requires an Idempotency-Key.
{ "amount": 50000, "currency": "CLP", "country": "CL", "method_code": "CL.BANK_TRANSFER", "merchant_reference": "payout-1190", "destination": { "type": "bank_account", "bank_code": "001", "account_number": "000123456789", "account_type": "checking", "holder_name": "Maria Lopez", "holder_document": { "type": "RUT", "number": "12345678-5" } }}Destinations
Section titled “Destinations”destination.type is one of bank_account, wallet, pix (Brazil), clabe (Mexico) and crypto_wallet (a merchant’s own withdrawal in USDT on TRON). A crypto address must be whitelisted; a new address becomes active after 24 hours. Use GET /payment-methods?direction=payout to see which fields a method requires.
Reserve at creation
Section titled “Reserve at creation”The amount plus our fee is reserved from the available balance when the payout is created. If available does not cover it, the API returns 422 insufficient_balance and nothing is created. Payouts and refunds are blocked while the balance has debt.
Statuses
Section titled “Statuses”| Status | Meaning |
|---|---|
created |
Accepted and reserved. May wait before it is sent (for example for a risk review or approval): you receive payout.delayed. |
processing |
The provider accepted the payout. |
succeeded |
The provider confirmed. |
failed |
Rejected. The reserve is released. |
canceled |
Canceled by you before sending. The reserve is released. |
on_hold |
Paused by risk or the provider. |
returned |
After succeeded the bank returned the money. The amount and our fee go back to your balance. |
Cancel
Section titled “Cancel”POST /payouts/{payout_id}/cancel works only while the status is created. It releases the reserved funds.
Uncertain outcome
Section titled “Uncertain outcome”If it is not known whether a payout reached the provider, PachaPay does not send it again and does not treat it as failed. It checks the status with the provider and, if still unclear, a person decides. Do not create a new payout for the same recipient while the first has no final status; read it with GET /payouts/{id}.