# Payouts (/docs/guides/payouts)

Payouts need the `payouts:create` permission and are paid from your wallet balance, plus the payout fee.

<Steps>
<Step>

### Check the recipient [#check-the-recipient]

```bash
curl https://api.creddot.com/api/v1/payouts/recipients/validate \
  -H "x-api-key: $CREDDOT_API_KEY" -H "x-api-secret: $CREDDOT_API_SECRET" \
  -H "x-idempotency-key: validate-0123456789" -H "content-type: application/json" \
  -d '{ "bankCode": "044", "accountNumber": "0123456789", "amountMinor": "100000", "currency": "NGN" }'
```

Show the returned account name to whoever is sending the money before you continue.

</Step>
<Step>

### Send the payout [#send-the-payout]

```bash
curl https://api.creddot.com/api/v1/payouts \
  -H "x-api-key: $CREDDOT_API_KEY" -H "x-api-secret: $CREDDOT_API_SECRET" \
  -H "x-idempotency-key: payout-PYT-100001" -H "content-type: application/json" \
  -d '{
    "amountMinor": "100000",
    "currency": "NGN",
    "bankCode": "044",
    "accountNumber": "0123456789",
    "accountName": "Ada Merchant",
    "reference": "PYT-100001",
    "narration": "Vendor settlement"
  }'
```

The response has `queued: true`: the money is reserved from your wallet (`totalDebitMinor` includes the fee) and the transfer is on its way. You also get a `payout.queued` webhook.

</Step>
<Step>

### Wait for the result [#wait-for-the-result]

Payouts finish asynchronously. Act on `transaction.success` or `transaction.failed`, or check `GET /transactions/{transactionId}`. A failed payout returns the reserved money to your wallet.

</Step>
</Steps>

<Callout type="warn">
  Retry a payout only with the **same** `x-idempotency-key`. A new key is a new payout, so a retry after a timeout could pay twice.
</Callout>
