You can expect the below object when you register a webhook for the following events:
- payout.failed
- payout.processed
Raw sample
{
"reason": "Invoice payment",
"id": "PYT-3C4D5E6F7A",
"name": "Acme Chocolates",
"amount": 100.12,
"amount_currency": "AED",
"method": "Bank account",
"recipient": "AE070000000000000000038",
"recipient_id": "REP-2B3C4D5E6F",
"created_at": "2023-12-28-17-22-53",
"status": "processed",
"event_type": "payout.processed"
}Field descriptions
| Field | Type | Description |
|---|---|---|
| reason | String | Payout reason |
| id | String | Payout ID |
| name | String | Recipient name |
| amount | Number | Payout amount |
| amount_currency | String | Payout currency |
| recipient | String | Recipient IBAN |
| recipient_id | String | Recipient ID |
| method | String | Payout method as a display label: Bank account (or Mamo Pay wallet for wallet transfers). The request field transfer_method takes BANK_ACCOUNT. |
| created_at | String (Format: YYYY-MM-DD-HH-MM-SS) | Payout creation time |
| status | String | Payout status, lowercase: processed or failed |
| event_type | String | Webhook event type |
Status lifecycle
Only two changes send a webhook: payout.processed (status: processed) when the payout settles, and payout.failed (status: failed) when it fails. List payouts and Fetch payout info show the same states as Processing, Processed, Failed and Held by bank.
processed is not final. A processed payout can still fail, and you then receive payout.failed for it, so be ready for payout.failed to follow payout.processed. A payout can also move to Held by bank while the beneficiary bank reviews it, or be rejected by that bank; neither sends a webhook. A failed payout returns the amount to your balance and refunds the payout fee and its VAT.