Skip to content
Draft: the API is under development and may change before the first release

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" }
}
}

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.

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.

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.

POST /payouts/{payout_id}/cancel works only while the status is created. It releases the reserved funds.

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}.