Payout Webhooks
Payout webhooks notify merchants about payout verification, review, and execution states.
There are three groups:
- Verification request:
payout.verify.request - Review status:
payout.review.* - Execution status:
payout.execution.*
Events
| Event | Meaning | Final? |
|---|---|---|
payout.verify.request | Ask the merchant to verify payout information. | No |
payout.review.approved | Verification or review approved. | No |
payout.review.returned | Payout was returned. | Usually requires manual handling |
payout.review.rejected | Payout was rejected. | Yes, payout was not executed |
payout.execution.processing | Payout execution is in progress. | No |
payout.execution.completed | Payout execution succeeded. | Yes |
payout.execution.failed | Payout execution failed. | Yes |
payout.verify.request
This event is sent before execution. It asks the merchant whether the payout is allowed to continue.
The merchant should validate:
payout_idreferenceamountcurrencybeneficiary_idbeneficiary_account_id- Whether recipient account information matches the merchant order
Approve:
{
"verified": true
}
Reject:
{
"verified": false
}
payout.verify.request is not a success notification. It is only a pre-execution verification request.
Execution Payload Example
{
"event_id": "payout_payout_xxx_abcd",
"event_type": "payout.execution.completed",
"business_type": "payout",
"business_id": "payout_xxx",
"occurred_at": 1781789497,
"version": "v1",
"data": {
"payout_id": "payout_xxx",
"reference": "po_202606190001",
"currency": "USD",
"amount": "0.5",
"status": "completed",
"review_status": "approved",
"execution_status": "completed",
"execution_fail_reason": ""
}
}
Important Fields
| Field | Description |
|---|---|
event_id | Webhook event ID for idempotency. |
event_type | Event type. |
business_id | Same as payout_id. |
data.payout_id | Beyounger payout ID. |
data.reference | Merchant payout reference. |
data.amount / data.currency | Payout amount and currency. |
data.status | Top-level payout status. |
data.review_status | Verification or review status. |
data.execution_status | Execution status. |
data.execution_fail_reason | Execution failure reason. |
State Guide
| Scenario | How to identify | Merchant action |
|---|---|---|
| Review approved | review_status=approved or payout.review.approved | Wait for execution result. Do not mark as paid. |
| Review rejected | review_status=rejected or payout.review.rejected | Mark payout rejected. Funds were not executed. |
| Processing | execution_status=processing | Mark as processing. |
| Execution succeeded | execution_status=completed or payout.execution.completed | Mark payout successful. |
| Execution failed | execution_status=failed or payout.execution.failed | Mark payout failed and inspect failure reason. |
Final success must be based on execution_status=completed, not review approval.
Merchant Handling
- Verify the signature before business processing.
- Use
event_idfor idempotency. - Find the merchant payout by
data.payout_idordata.reference. payout.review.approvedmeans execution may start; it does not mean success.payout.execution.completedis final success.- Query
GET /payment/payouts/{payout_id}for fallback confirmation.