Overview
PulseGrid wraps every webhook event in a consistent envelope.
Important fields:
- delivery_id: identifies the delivery to this endpoint and stays stable across retries.
- id: identifies the original PulseGrid event.
- event: event name such as message or delivery.updated.
- project: project that produced the event.
- channel: realtime channel where it happened.
- sender: publishing identity.
- data: application event content.
- meta: supporting context.
- source: how PulseGrid received the event.
- sent_at: UTC timestamp.
One original event can be delivered to several endpoints. The event ID stays the same while each endpoint delivery has its own delivery_id.
Setup
Endpoint selection requires:
1. endpoint project matches event project,
2. endpoint is active,
3. event filter is * or includes the exact event name,
4. project webhook allowance remains available.
Examples:
- Alpha endpoint + Alpha message + * = delivered.
- Alpha endpoint + Beta message = not delivered.
- Alpha endpoint + Alpha order.paid + message-only filter = not delivered.
Recommended event names:
chat.message.created
customer.created
order.created
order.paid
payment.failed
delivery.updated
driver.location.updated
Code example
{
"delivery_id": "afa3e157-1268-4ec0-977f-4556484722a0",
"id": "05afc0c0-66a2-4ce3-9bbf-dcbc2abc2b47",
"event": "delivery.updated",
"project": {
"id": "PROJECT_UUID",
"name": "Demo",
"slug": "demo"
},
"channel": {
"id": "CHANNEL_UUID",
"name": "Live Operations",
"slug": "live-operations"
},
"sender": {
"identifier_id": "node_dispatch",
"identifier_label": "Node Dispatch"
},
"data": {
"order_id": "ORD-1042",
"status": "in_transit"
},
"meta": {"source": "dispatch_app"},
"source": "api",
"sent_at": "2026-08-29T20:58:51.861643+00:00"
}
Notes
The payload timestamp is UTC. Do not infer local timezone from it without explicit conversion.
A skipped non-matching event is not a failed delivery because PulseGrid never attempted to send it.