Events & Deliveries
Events
An event represents a single incoming webhook request. When an external service POSTs to your endpoint, Dispatch creates an event record with the full request payload and metadata.
Event Fields
| Field | Description |
|---|---|
id | Unique event ID (UUID) |
endpoint_id | The endpoint that received the webhook |
organization_id | The owning organization |
event_type | Extracted event type (e.g., push, pull_request) |
payload | The full JSON request body |
headers | All request headers as a JSON object |
source_ip | IP address of the sender |
idempotency_key | Optional key for deduplication |
status | received or filtered |
created_at | Timestamp of receipt |
Event Status
| Status | Description |
|---|---|
received | Event passed filters and was queued for delivery |
filtered | Event was blocked by endpoint filters (not delivered) |
Idempotency
If an event includes an idempotency key (via a header or payload field), Dispatch rejects duplicate events with 409 Conflict. This prevents double-processing when a sender retries a webhook.
Deliveries
A delivery attempt records the result of sending an event to a destination. Each event can have multiple delivery attempts across multiple destinations, and each destination may have multiple retry attempts.
Delivery Attempt Fields
| Field | Description |
|---|---|
id | Unique attempt ID (UUID) |
event_id | The event being delivered |
destination_id | The target destination |
attempt_number | 1-based attempt counter |
status | Current status (see below) |
status_code | HTTP response status code |
response_body | First 2KB of the response body |
response_headers | Response headers as JSON |
error | Error message (if failed) |
latency_ms | Request round-trip time in milliseconds |
next_retry_at | When the next retry is scheduled (if retrying) |
payload_sent | The actual JSON payload that was delivered |
created_at | Timestamp of the attempt |
Delivery Status
| Status | Description |
|---|---|
queued | In the delivery queue, waiting for a worker |
success | Delivered successfully (2xx response) |
failed | Exhausted all retry attempts |
retrying | Waiting for the next retry window |
canceled | Manually canceled or superseded |
Delivery Flow
Event Created
→ Fan-out to linked destinations
→ For each destination:
→ Apply transform (if enabled)
→ Render template (or auto-format)
→ POST to destination URL
→ Success (2xx)? → Mark "success"
→ Failure? → Schedule retry per backoff policy
→ All retries exhausted? → Mark "failed", move to DLQ
Replaying Events
You can replay an event from the dashboard or API. Replaying re-queues the event for delivery to all linked destinations using the current endpoint-destination configuration (templates, transforms, routing rules).
This is useful for:
- Testing template changes against real event data
- Re-delivering events after fixing a misconfigured destination
- Recovering from destination outages
Viewing Events in the Dashboard
The Events page provides:
- Time range filtering — 24h, 72h, 7d, 30d, or custom date range
- Status filtering — all, received, or filtered
- Endpoint filtering — filter by source endpoint
- Destination filtering — filter by target destination
- Custom columns — add columns for any JSON path in the payload or headers
- Suggested columns — auto-recommendations based on common fields across events
- Event detail view — full payload, headers, and all delivery attempts