Skip to main content

Managing Sources

The Sources page lets you create and manage webhook endpoints that receive incoming events.

Creating a Source

  1. Click Create Source
  2. Enter a name for the endpoint
  3. Optionally set an event type path (dot-notation path to extract event type from the body)
  4. Choose an auth method: signing secret (default) or API key
  5. 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:

  1. Click on a source to expand it
  2. Click Link Destination
  3. Select a destination from the dropdown
  4. 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.

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:

FieldDescription
ConditionsOne or more field conditions to match (see below)
LogicAND — all conditions must match; OR — any condition can match
ActionDeliver — 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 formatExample
body.<path>body.action, body.pull_request.merged
header.<name>header.x-github-event, header.x-event-type
OperatorMatches when…
eqfield equals value
neqfield does not equal value
containsfield contains value (substring)
not_containsfield does not contain value
existsfield is present (no value needed)
not_existsfield 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.

  1. Click Filters on the source
  2. Click Add Filter Group
  3. Choose an action:
    • Allow — only events matching this group pass through
    • Block — events matching this group are dropped immediately
  4. Set the logic (AND or OR) and add conditions
  5. 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.

IntegrationDescription
GitHubConnect a GitHub repository. Dispatch registers a webhook on the repo and auto-formats push, pull_request, issues, and other GitHub events.
GitLabConnect a GitLab project via OAuth. Dispatch registers a webhook and auto-formats push, merge request, and issue events.
BitbucketConnect a Bitbucket repository via OAuth. Dispatch registers a webhook and auto-formats push and pull request events.
SlackConnect a Slack workspace. Dispatch creates an app endpoint to receive Slack event callbacks.
JiraConnect a Jira project via OAuth. Dispatch registers a webhook and auto-formats issue created, updated, and deleted events.
LinearConnect a Linear workspace via OAuth. Dispatch registers a webhook and auto-formats issue and project events.
StripeConnect a Stripe account. Dispatch registers a webhook endpoint and auto-formats charge, payment_intent, subscription, and invoice events.
PayPalConnect 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.
ConfluenceConnect 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!"}.