Managing Sources
The Sources page lets you create and manage webhook endpoints that receive incoming events.
Creating a Source
- Click Create Source
- Enter a name for the endpoint
- Optionally set an event type path (dot-notation path to extract event type from the body)
- Choose an auth method: signing secret (default) or API key
- Click Create
Dispatch generates a unique slug and signing secret. Your webhook URL is:
https://your-api.com/hooks/<slug>
Source Configuration
Signing Secret
The signing secret is shown once at creation. Use it to sign outgoing requests from your external service. You can regenerate the secret at any time, but the old secret immediately becomes invalid.
Event Type Path
Set a dot-notation path (e.g., action or event.type) to automatically extract the event type from the request body. This is useful when the sending service doesn't include an event type header.
Active/Inactive Toggle
Deactivate a source to stop accepting incoming webhooks. The endpoint URL returns 404 when inactive. Reactivate at any time to resume.
Linking Destinations
From the Sources page, link destinations to an endpoint:
- Click on a source to expand it
- Click Link Destination
- Select a destination from the dropdown
- Click Link
Once linked, the destination appears under the endpoint. Click the routing rules icon (branch icon) on any linked destination to open the full link configuration.
Link Configuration
Each endpoint-destination link has three layers of configuration, all managed from the routing rules dialog:
Default Template
Select a message template to apply to all events delivered to this destination. If no routing rule matches, the default template is used. Leave blank to use the platform's built-in embed format.
Default Transform
Select a named JSONata transform to reshape the payload before it reaches the formatter. Applied when no routing rule matches. Webhook destinations only — for chat destinations (Discord, Slack, Telegram) transforms run before formatting.
Default Custom Headers
For webhook destinations only. Key-value pairs added to every outgoing HTTP request. These are overridden per routing rule when a rule specifies its own headers.
Routing Rules
Routing rules let you define conditional logic per link: deliver with a specific template and transform, or skip delivery entirely based on event payload or header values.
Rules are evaluated top-to-bottom. The first matching rule wins. If no rule matches, the link's defaults apply.
Adding a Rule
In the routing rules dialog, click Add Rule, then configure:
| Field | Description |
|---|---|
| Conditions | One or more field conditions to match (see below) |
| Logic | AND — all conditions must match; OR — any condition can match |
| Action | Deliver — send the event (with optional overrides); Skip — drop the event for this destination only |
Conditions
Each condition specifies a field path, an operator, and (for most operators) a value:
| Field path format | Example |
|---|---|
body.<path> | body.action, body.pull_request.merged |
header.<name> | header.x-github-event, header.x-event-type |
| Operator | Matches when… |
|---|---|
eq | field equals value |
neq | field does not equal value |
contains | field contains value (substring) |
not_contains | field does not contain value |
exists | field is present (no value needed) |
not_exists | field is absent (no value needed) |
Deliver Action — Overrides
When the action is Deliver, you can optionally override the link defaults for this rule only:
- Template — use a different template for matching events
- Transform — use a different transform for matching events
- Custom Headers — use different HTTP headers (webhook destinations only)
Leave any override blank to fall back to the link's default.
Skip Action
When the action is Skip, the event is dropped for this destination — no delivery attempt is made. Skipped events are still delivered to other linked destinations that don't skip them. Template, transform, and header fields are ignored when skipping.
Example
Link: GitHub → #deployments (Discord)
Default template: "GitHub Default"
Rules:
1. body.action = "closed" AND body.pull_request.merged = "true"
→ Deliver with template "Merged PR"
2. body.ref contains "refs/heads/main"
→ Deliver with template "Main Branch Push"
3. header.x-github-event = "ping"
→ Skip
A ping event is dropped. A merged PR delivers with "Merged PR". A push to main uses "Main Branch Push". Everything else uses "GitHub Default".
Filters
Filters run at the endpoint level before any delivery. They control which events are accepted at all — a blocked event is never delivered to any destination.
- Click Filters on the source
- Click Add Filter Group
- Choose an action:
- Allow — only events matching this group pass through
- Block — events matching this group are dropped immediately
- Set the logic (AND or OR) and add conditions
- Enable/disable groups without deleting them
Evaluation Order
Block groups are checked first. If any enabled block group matches, the event is dropped and recorded as filtered. Allow groups are checked next: if any enabled allow groups exist, the event must match at least one of them to proceed. If no allow groups are configured, all non-blocked events pass.
Use Filters when you want to suppress events entirely. Use Routing Rules when you want per-destination control or want to swap templates and transforms conditionally.
See Filters for a full reference of operators and field paths.
Integrations
Use the integration buttons to connect external services directly. Each integration handles OAuth authorization, endpoint creation, and webhook registration automatically. You can also choose which event types to receive when connecting.
| Integration | Description |
|---|---|
| GitHub | Connect a GitHub repository. Dispatch registers a webhook on the repo and auto-formats push, pull_request, issues, and other GitHub events. |
| GitLab | Connect a GitLab project via OAuth. Dispatch registers a webhook and auto-formats push, merge request, and issue events. |
| Bitbucket | Connect a Bitbucket repository via OAuth. Dispatch registers a webhook and auto-formats push and pull request events. |
| Slack | Connect a Slack workspace. Dispatch creates an app endpoint to receive Slack event callbacks. |
| Jira | Connect a Jira project via OAuth. Dispatch registers a webhook and auto-formats issue created, updated, and deleted events. |
| Linear | Connect a Linear workspace via OAuth. Dispatch registers a webhook and auto-formats issue and project events. |
| Stripe | Connect a Stripe account. Dispatch registers a webhook endpoint and auto-formats charge, payment_intent, subscription, and invoice events. |
| PayPal | Connect a PayPal account. Enter your PayPal Webhook ID and register the generated URL in the PayPal Developer Dashboard to receive payment, subscription, and dispute events. |
| Confluence | Connect a Confluence space via OAuth. Dispatch registers a webhook and receives page, blog, and space events. |
For detailed setup steps for each integration, see the Integrations section.
Testing
Click Send Test on any source to send a synthetic event through the endpoint. You can provide a custom payload or use the default test payload {"test": true, "message": "Hello from Dispatch!"}.