Webhooks
Webhooks are POST requests sent by AdaptGroup to your server when payment status changes. Configure your webhook URL and secret in the dashboard.
Request format
Each webhook request has the following structure:
{
"event": "payment_success",
"timestamp": "2026-05-10T12:00:00.000Z",
"data": { ... }
}
| Field | Type | Description |
|---|---|---|
event | string | Event type |
timestamp | string | UTC timestamp in ISO 8601 format |
data | object | Event payload, varies by event type |
Authentication
Each webhook request includes an X-Webhook-Signature header — HMAC-SHA256 of the request body using your secret.
const crypto = require('crypto');
function verifySignature(body, secret, signature) {
const expected = crypto
.createHmac('sha256', secret)
.update(body)
.digest('hex');
return expected === signature;
}
IP address
All webhooks are sent from IP address 139.60.162.7. Add it to your server's allowlist to ensure webhook delivery.
Retry policy
If your server does not respond with 200 or 201, AdaptGroup will retry the webhook:
| Attempt | Delay |
|---|---|
| 1 | Immediately |
| 2 | 1 minute |
| 3 | 2 minutes |
| 4 | 5 minutes |
| 5 | 10 minutes |
| 6 | 15 minutes |
| 7 | 30 minutes |
| 8 | 1 hour |
| 9 | 2 hours |
| 10 | 2 hours |
If the webhook is not delivered after all attempts (~6 hours total), it is discarded.
Events
payment_success
Sent when a payment is successfully completed.
| Field | Type | Description |
|---|---|---|
payment_id | string | Payment UUID |
status | string | Always success |
amount_usd | string | Total payment amount in USD |
commission_usd | string | Commission charged in USD |
amount_credited | string | Amount credited to your balance after commission |
{
"event": "payment_success",
"timestamp": "2026-05-10T12:00:00.000Z",
"data": {
"payment_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "success",
"amount_usd": "5.4321",
"commission_usd": "0.4889",
"amount_credited": "4.9432"
}
}
payment_expired
Sent when a payment's lifetime has expired.
| Field | Type | Description |
|---|---|---|
payment_id | string | Payment UUID |
status | string | Always expired |
amount_usd | string | Payment amount in USD |
{
"event": "payment_expired",
"timestamp": "2026-05-10T12:00:00.000Z",
"data": {
"payment_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "expired",
"amount_usd": "5.4321"
}
}
payment_cancelled
Sent when a payment has been cancelled.
| Field | Type | Description |
|---|---|---|
payment_id | string | Payment UUID |
status | string | Always cancelled |
amount_usd | string | Payment amount in USD |
{
"event": "payment_cancelled",
"timestamp": "2026-05-10T12:00:00.000Z",
"data": {
"payment_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "cancelled",
"amount_usd": "5.4321"
}
}
payment_refunded
Sent when a payment has been refunded. The refunded amount is deducted from your integration balance.
| Field | Type | Description |
|---|---|---|
payment_id | string | Payment UUID |
status | string | Always refunded |
amount_usd | string | Refunded amount in USD |
{
"event": "payment_refunded",
"timestamp": "2026-05-10T12:00:00.000Z",
"data": {
"payment_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "refunded",
"amount_usd": "5.4321"
}
}