Event Browser
The Events page provides a powerful interface for browsing, filtering, and inspecting webhook events.
Browsing Events
The event table shows one row per event with a destination breakdown summary:
| Column | Description |
|---|---|
| Event Type | Extracted event type (e.g., push, pull_request); events with no detectable type show a short #id tag so similar rows stay distinguishable — and the event-type filter matches that #id tag too |
| Source | The endpoint that received the event |
| Status | received or filtered |
| Delivery | Per-destination outcome breakdown (delivered, failed, retrying, pending, filtered) |
| Created | Timestamp |
Delivery Status Tabs
Use the tabs above the table to filter by delivery outcome:
- All — every event regardless of delivery state
- Delivered — all destinations succeeded (including events rescued by a manual replay)
- Partial — some destinations succeeded, others failed or are still retrying
- Failed — all destinations failed after exhausting retries
- Filtered — event was blocked by a filter rule before delivery
Filtering
Search
Use the search box at the top of the toolbar to find events containing a substring anywhere in the request payload or headers — for example an email, an order ID, an event name, or a header value. The search runs case-insensitively, updates as you type (with a short delay), and combines with the other filters and time range.
Time Range
Select a preset time range or a custom date range:
- Last 24 hours
- Last 72 hours
- Last 7 days
- Last 30 days
- Custom date range
Status Filter
Filter by event status:
- All — show all events
- Received — events that passed filters
- Filtered — events blocked by filters
Source Filter
Filter events by the endpoint that received them.
Destination Filter
Filter events by which destination they were delivered to.
Custom Filters
Add conditions on payload fields or headers to narrow results further. Custom filters are applied client-side for real-time results.
AI Search
Click AI search in the toolbar to describe what you're looking for in plain English. Dispatch translates your query into filters, a time range, status, source, and destination automatically. Queries can be up to 500 characters.
A preview dialog shows exactly what will be applied before anything changes. Once applied, the generated filters appear as editable chips — you can remove or adjust individual filters just like ones you add manually.
Inside the AI search dialog, Ctrl+Enter (⌘Enter on macOS) generates without reaching for the mouse, and Esc closes the dialog.
Examples:
- "Show me failed GitHub push events from the last 3 days"
- "Events from my production endpoint that went to Ari's server last week"
- "Pull request events from the last 14 days"
AI features (search, the transform, filter, and template generators, routing- and typing-rule generation, and create-from-event generation) are rate limited per user to keep usage fair. If you see a "Too many AI requests" message, wait a moment and try again.
Custom Columns
Add columns for any JSON path in the payload or headers:
- Click Add Column
- Enter a JSON path (e.g.,
body.actionorheader.X-GitHub-Event) - The column appears in the table with values extracted from each event
Suggested Columns
Dispatch auto-suggests common fields that appear in more than 30% of your events, making it easy to add relevant columns without guessing paths.
Event Detail View
Click any event to see its full details:
Payload Tab
- Full JSON payload with syntax highlighting
- Expandable/collapsible nested objects
Headers Tab
- All request headers in a table
- Sensitive values are masked by default (click to reveal)
Delivery Attempts
Delivery attempts are grouped by destination. Each attempt shows:
- Attempt number
- Status (success/failed/retrying)
- Whether the attempt was a manual replay ("Retried manually" badge)
- HTTP status code
- Error message (if failed)
- Response body and headers
- Payload that was actually sent
- Latency in milliseconds
- Next retry time (if retrying)
Local tunnel destinations (from dispatch listen) are shown in a separate section so they don't mix with your production delivery history.
Actions
Replay Event
Single event: Click any event row to open its detail view, then click Replay. The dropdown offers:
- Replay undelivered (default) — re-queues delivery only to destinations that have not yet received a successful delivery. This is safe to run at any time without risking double-sends.
- Replay failed only — re-queues delivery only to destinations whose last attempt failed.
- Replay all — re-queues delivery to all linked destinations regardless of current status. Use this for force-resending to a specific destination for testing.
- Replay to a specific destination — select an individual destination from the list to replay to that destination only.
Destinations with a delivery already in flight are disabled in the menu to prevent duplicate sends.
A successful replay rescues the event: it moves out of the Failed or Partial tab into Delivered, and the delivery timeline shows a "Retried manually" badge on the replay attempt.
Bulk replay: From the events table, check the checkbox on one or more rows. A bar appears above the table showing how many events are selected. Click Replay to re-queue all selected events at once. The default mode skips destinations that already received the event. When complete, a notification reports the number of events replayed and how many destinations were skipped and why. To deselect without replaying, click Clear selection. The same bar's Create menu builds a template, transform, or filter from the selection — see Create from several events at once.
Copy Payload
Copy the event payload as:
- Raw JSON
- TypeScript type definition
- OpenAPI schema
Derive a Type
Events whose type couldn't be determined show an unknown badge in the detail view, with a Derive a type link beside it. The link opens the source's typing rules editor with a draft rule started, and the editor's path suggestions are drawn from the source's recent events (the last 30 days) — including the event you came from, even when it's older than that — so you can build the rule against fields your sender actually delivers. The same event also grounds AI rule generation there. Future events that match the rule store the derived type; the event you started from keeps its unknown label.
Create Template, Transform, or Filter from Event
From any event's detail view, click the Create from event dropdown to bootstrap a new resource pre-loaded with the event's payload as the example:
- New Template — opens the template editor with this event's payload set as the example. Use it to preview your embed formatting against real data immediately.
- New Transform — opens the transform editor with this event's payload set as the example. Write and test your JSONata expression against the actual payload shape without copy-pasting.
- New Filter — creates a named filter pre-seeded with this event's payload and headers, so you can build conditions against values you can see.
The dialog also has an optional Describe what it should do field (Ctrl+Enter — ⌘Enter on macOS — submits). Leave it blank to create the resource with the usual defaults. Fill it in and the resource is created already carrying AI-generated content — template fields, a JSONata expression, or filter conditions — grounded on the event you're looking at. If generation fails, nothing is created and the error is shown in the dialog; clear the field to create without AI. The attach step shows a one-line summary of what was generated — worth a glance before Attach & open, since attaching puts the resource into service — and the editor you land in is where you review it in full.
The event also becomes the new resource's first stored sample, so AI generation has real data to work from the moment the editor opens. An unusually large event is skipped for that purpose — the resource is still created.
Create from several events at once
The same three creates work on a selection. Check the checkbox on one or more rows in the events table (or press Space on a highlighted row) and open the Create menu in the bar that appears above the table. Each selected event becomes a stored sample, up to the 10-sample cap — duplicates and payloads too large on their own or together are set aside, and the dialog tells you exactly how many landed whenever it's fewer than you picked. If you add a description, the AI generation reads the sampled events, so the template fields, expression, or conditions it produces hold across the different payload shapes rather than fitting just one. The first selected row leads: it provides the example payload you'll see in the editor and the "Created from event" back-link.
Put it to work straight away
After you name the resource, the dialog offers an optional second step: attach it to one of your existing source → destination routes. Pick a route from the list — use the arrow keys or click — and choose Attach & open. Paused routes are shown too, and if the route already uses a template you'll see which one the attach replaces before you confirm. For templates, routes to webhook destinations are listed but can't be chosen — webhook deliveries always receive the raw payload, so templates don't apply to them. For templates and transforms there's a third path, Scope with a rule: instead of setting the route's default, it opens the route's routing editor with a draft rule already carrying the new resource, so it applies only to events the rule matches — the route's defaults stay as they are, and nothing takes effect until you save the rule.
Prefer to decide later? Skip & open changes nothing and takes you straight to the editor.
Finding your way back
The editor you land in shows a Created from event banner with a link back to the event you started from, so you can flip between the sample data and the real thing while you work. Dismiss the banner once you're done with it.
Keyboard Shortcuts
On macOS Ctrl is shown as ⌘, Alt as ⌥, and Shift as ⇧, joined without separators — Ctrl+Alt+P appears as ⌘⌥P.
| Shortcut | What it does |
|---|---|
Ctrl+K | Open the command palette |
Ctrl+/ | Open the keyboard shortcuts reference |
/ | Focus the search box |
Ctrl+Shift+F | Open the filter dialog |
Ctrl+Alt+P | Open AI search |
↑ / ↓ | Move between event rows (Home/End jump to the ends) |
Enter | Open the highlighted event |
Space | Select or deselect the highlighted event for bulk actions |
The palette, search, filter, and AI-search shortcuts are also shown on screen — in the tooltip of the button each triggers, or beside the control itself. / types normally while you are already in a text box, and row navigation follows your platform's conventions, so it carries no on-screen hint.
Ctrl+K used to focus this search; that is now /.
The command palette lists everything you can do on the page you are on, so you never have to remember a shortcut. See the palette.
These are the default bindings — any shortcut can be rebound or unbound.