Every webhook delivery uses a standard 4-field envelope regardless of event type.
Envelope Structure #
{
"event": "license.created",
"webhook_id": "whk_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
"timestamp": "2026-03-09T10:00:00Z",
"data": { ... }
}
Envelope Fields #
| Field | Type | Description |
|---|---|---|
event | string | The event name that triggered delivery (e.g., license.created) |
webhook_id | string | Unique delivery identifier with whk_ prefix. Used in signature verification. |
timestamp | string | ISO 8601 datetime of when the delivery was enqueued (e.g., "2026-03-09T10:00:00Z") |
data | object | Event-specific payload data (see event type docs for field details) |
Protected Fields #
The event, webhook_id, and timestamp fields are protected. If a dmsi_webhook_payload_{event_name} filter removes them, they are automatically restored to their original values before delivery. You cannot remove or rename envelope fields through payload filters.
Content Type #
All webhook deliveries are sent with:
Content-Type: application/jsonThe body is a UTF-8 encoded JSON string.
Example: Complete Payload #
{
"event": "payment.received",
"webhook_id": "whk_1a2b3c4d5e6f1a2b3c4d5e6f1a2b3c4d",
"timestamp": "2026-03-09T10:00:00Z",
"data": {
"order_id": 1001,
"customer": {"id": 7, "email": "customer@example.com"},
"license_key": "XXXX-XXXX-XXXX-XXXX",
"amount": "99.00",
"currency": "USD",
"payment_method": "stripe",
"received_at": "2026-03-23T12:00:00Z"
}
}
Related Topics #
- Request Headers
- Signature Verification
- Payload Customization
