POST
Your webhook URLThe payout.completed event is triggered when a payout is marked as paid, either through the dashboard or the API. At this point, all commissions linked to the payout are moved to paid status.
Payload
json
{
"id": "evt_cm1pay5678",
"event": "payout.completed",
"created_at": "2026-04-10T15:30:00.000Z",
"data": {
"affiliate": {
"email": "[email protected]",
"name": "Jane Smith",
"referral_code": "jane-smith"
},
"product": {
"id": "cuid_abc123",
"name": "My SaaS"
},
"amount_cents": 24500
}
}
Payload fields
| Parameter | Type | Description |
|---|---|---|
idrequired | string | Unique event ID (prefixed with evt_). |
eventrequired | string | Always "payout.completed" for this event. |
created_atrequired | string | ISO 8601 timestamp of when the payout was completed. |
data.affiliate.emailrequired | string | Email of the affiliate who received the payout. |
data.affiliate.name | string | Name of the affiliate (may be null). |
data.affiliate.referral_code | string | The affiliate's referral code (may be null). |
data.product.idrequired | string | Your Anderro product ID. |
data.product.namerequired | string | Your product name in Anderro. |
data.amount_centsrequired | integer | Total payout amount in cents. |
Example handler
javascript
app.post("/webhooks/anderro", (req, res) => {
const { event, data } = req.body;
if (event === "payout.completed") {
const amount = (data.amount_cents / 100).toFixed(2);
console.log(
`Payout completed: $${amount} sent to ${data.affiliate.email}`
);
// Update your accounting records
// Mark the payment as reconciled
}
res.status(200).send("OK");
});
Amounts are in cents
The amount_cents value is an integer in cents. Divide by 100 to get the dollar amount.