CleonPay

Payouts

Send money to an individual: winnings, seller balances, contractor pay.

A payout is not a refund. It goes to someone who may never have paid you, and it is a separate product with its own rails and rules.

Rails

MethodGoes toCurrenciesSpeedCan bounce
Card payout
card_payout
card Any Instant No
SEPA Credit Transfer
sepa_credit_transfer
bank account EUR Next business day Yes
SEPA Instant
sepa_instant
bank account EUR Seconds Yes
Faster Payments
faster_payments
bank account GBP Seconds to two hours Yes

1. Create a recipient

POST /v1/payout-recipients
{
  "type": "card",
  "first_name": "Ana",
  "last_name": "Silva",
  "date_of_birth": "1990-01-01",
  "country": "PT",
  "reference": "winner-001",
  "parent_payment_reference": "57-9-5091179"
}
We never accept a card number. A card recipient is created either from a token issued by the provider, or from a previous payment they made. The bank still holds the card, we hold a reference. Accepting a raw PAN would put both of us in a far heavier PCI DSS regime, so the API has no field for one.

For bank rails, send iban and optionally bic instead. Details are encrypted at rest; only the last four digits are kept readable.

2. Send the payout

POST /v1/payouts
{
  "recipient_id": "6d4ff39f-72fb-44c4-9e13-9c724683d40a",
  "method": "card_payout",
  "amount": 2500,
  "currency": "EUR",
  "reference": "PAYOUT-2026-0001"
}

States

created  →  submitted  →  sent  →  completed
                            │
                            ├──→  failed     (never left)
                            └──→  returned   (left, then came back)
returned is not failed. Failed means the money never left. Returned means it reached the recipient's bank and bounced, days later on SEPA, and your balance moved in between. Handle them differently.
GET /v1/payouts
GET /v1/payouts/{id}
GET /v1/payout-methods