All documentation
Reference

Webhooks: Payload Reference

Understand every field in the JSON webhook envelope, including event IDs, delivery IDs, sender and source.

JavaScript

Overview

PulseGrid wraps every event in a consistent JSON envelope. Field meanings: - delivery_id: identifies this delivery to this endpoint. It stays the same during retries. - id: identifies the original PulseGrid event. - event: describes what happened, such as message or order.created. - project: identifies the project that produced the event. - channel: identifies the realtime channel where it happened. - sender: identifies the publishing user, device or backend. - data: application-specific event content. - meta: optional supporting context. - source: how PulseGrid received the event, such as websocket, api or system. - sent_at: UTC ISO-8601 time when PulseGrid accepted the event. One event can be delivered to several endpoints. Those deliveries share the same event id but each receives a different delivery_id.

Setup

Use event for routing business logic. Use project.id for dependable tenant/application identification. Use channel.id or channel.slug to identify the realtime room. Use delivery_id for duplicate protection. Use sent_at for auditing and ordering. Treat data and meta as untrusted input even after signature verification.

Code example

Webhooks: Payload Reference
{
  "channel": {
    "id": "e9d225b0-58df-45dc-9393-25acb4a5e667",
    "name": "demo-channel",
    "slug": "demo-channel"
  },
  "data": {
    "text": "Hello from Alpha"
  },
  "delivery_id": "afa3e157-1268-4ec0-977f-4556484722a0",
  "event": "message",
  "id": "05afc0c0-66a2-4ce3-9bbf-dcbc2abc2b47",
  "meta": {
    "source": "dashboard_console"
  },
  "project": {
    "id": "210d1f81-1d6e-412b-a0a0-b3cd843e82fb",
    "name": "Alpha",
    "slug": "alpha"
  },
  "sender": {
    "identifier_id": "dashboard_user_1",
    "identifier_label": "Tshepo Mofokeng"
  },
  "sent_at": "2026-08-25T19:40:20.247053+00:00",
  "source": "websocket"
}

Notes

The payload timestamp is UTC. South African Standard Time is UTC+2. The system test uses channel slug system, source system and event pulsegrid.test. A real Channel Console message normally uses event message and source websocket.