Twitch Integration
Dispatch integrates with Twitch via EventSub so streamers can route channel events into Discord, Slack, Telegram, Google Chat, or Webex without managing webhook URLs or signing secrets.
Connecting Twitch
- Go to your project's Sources page.
- Click Add source, then Twitch.
- Authorize the Dispatch Twitch app for your channel.
- Pick the events you want to receive and click Subscribe to events.
Dispatch handles the rest: it generates a signing secret, registers EventSub subscriptions for each selected event type with your channel as the broadcaster, and sets up an endpoint with provider = "twitch".
Supported Events
Every Twitch EventSub type that fits the alert use case is supported. The event type is taken from the Twitch-Eventsub-Subscription-Type header on every notification.
Stream
| Event | Description |
|---|---|
stream.online | Your stream went live |
stream.offline | Your stream ended |
channel.update | Title, category, or language changed |
Audience
| Event | Description |
|---|---|
channel.follow | New follower |
channel.raid | Incoming raid from another channel |
Subscriptions
| Event | Description |
|---|---|
channel.subscribe | New subscription (paid or Prime) |
channel.subscription.end | Subscription expired or cancelled |
channel.subscription.gift | Sub bomb (gifted subs) |
channel.subscription.message | Resub with a message |
Bits & Channel Points
| Event | Description |
|---|---|
channel.cheer | Bits cheered |
channel.channel_points_custom_reward.add | Custom reward created |
channel.channel_points_custom_reward.update | Custom reward updated |
channel.channel_points_custom_reward.remove | Custom reward removed |
channel.channel_points_custom_reward_redemption.add | Viewer redeemed a reward |
channel.channel_points_custom_reward_redemption.update | Redemption fulfilled or refunded |
Hype Train
| Event | Description |
|---|---|
channel.hype_train.begin | Hype train started |
channel.hype_train.progress | Hype train levelled up |
channel.hype_train.end | Hype train ended (with top contributors) |
Polls
| Event | Description |
|---|---|
channel.poll.begin | Poll started |
channel.poll.progress | Vote totals updated |
channel.poll.end | Poll ended (with results) |
Predictions
| Event | Description |
|---|---|
channel.prediction.begin | Prediction opened |
channel.prediction.progress | Outcome totals updated |
channel.prediction.lock | Prediction locked (no more entries) |
channel.prediction.end | Prediction resolved (winning outcome marked) |
Goals
| Event | Description |
|---|---|
channel.goal.begin | Goal started |
channel.goal.progress | Goal progressed |
channel.goal.end | Goal ended (achieved or not) |
Charity
| Event | Description |
|---|---|
channel.charity_campaign.start | Charity campaign started |
channel.charity_campaign.progress | Charity campaign progress update |
channel.charity_campaign.stop | Charity campaign ended |
channel.charity_campaign.donate | Single donation received |
Moderation & Roles
| Event | Description |
|---|---|
channel.ban | Viewer banned or timed out |
channel.unban | Viewer unbanned |
channel.moderator.add | Moderator added |
channel.moderator.remove | Moderator removed |
channel.vip.add | VIP added |
channel.vip.remove | VIP removed |
Shoutouts
| Event | Description |
|---|---|
channel.shoutout.create | Shoutout sent to another broadcaster |
channel.shoutout.receive | Shoutout received from another broadcaster |
Required Scopes
Dispatch requests every scope at OAuth time so every event type is unlockable without re-authorizing later. Twitch lets you grant fewer scopes than asked for; subscriptions for un-granted scopes will fail at create time and surface the error in the UI.
| Scope | Events it unlocks |
|---|---|
user:read:email | Account identification |
channel:read:subscriptions | channel.subscribe, channel.subscription.end, channel.subscription.gift, channel.subscription.message |
moderator:read:followers | channel.follow |
bits:read | channel.cheer |
channel:moderate | channel.ban, channel.unban |
moderation:read | channel.moderator.add, channel.moderator.remove |
channel:read:vips | channel.vip.add, channel.vip.remove |
channel:read:redemptions | channel.channel_points_custom_reward.add, channel.channel_points_custom_reward.update, channel.channel_points_custom_reward.remove, channel.channel_points_custom_reward_redemption.add, channel.channel_points_custom_reward_redemption.update |
channel:read:hype_train | channel.hype_train.begin, channel.hype_train.progress, channel.hype_train.end |
channel:read:polls | channel.poll.begin, channel.poll.progress, channel.poll.end |
channel:read:predictions | channel.prediction.begin, channel.prediction.progress, channel.prediction.lock, channel.prediction.end |
channel:read:goals | channel.goal.begin, channel.goal.progress, channel.goal.end |
channel:read:charity | channel.charity_campaign.start, channel.charity_campaign.progress, channel.charity_campaign.stop, channel.charity_campaign.donate |
moderator:read:shoutouts | channel.shoutout.create, channel.shoutout.receive |
You can pick which events to subscribe to after authorizing — unselected events stay off your account. The default selection covers the core streamer-alert use case (stream lifecycle, follows, all sub events, bits, raids, channel-point redemptions, hype train, charity donations); polls, predictions, goals, mod / VIP changes, custom-reward CRUD, and shoutouts are opt-in to avoid notification noise.
Signature Verification
Twitch signs each EventSub notification with HMAC-SHA256 over the concatenation of the message id, timestamp, and raw body, hex-encoded and prefixed with sha256=. Dispatch verifies this on every request:
Twitch-Eventsub-Message-Id: <uuid>
Twitch-Eventsub-Message-Timestamp: <RFC3339>
Twitch-Eventsub-Message-Signature: sha256=<hex>
Replays of the same message id are deduplicated automatically. Notifications older than 10 minutes are rejected to block replay of leaked request payloads.
Webhook Verification & Revocation
Twitch confirms ownership of your endpoint by sending a one-time challenge after a subscription is created. Dispatch responds with the challenge string in plain text so the subscription is enabled.
If Twitch revokes a subscription (for example because OAuth was revoked or the secret was rotated), Dispatch acknowledges the revocation message without dispatching it to your destinations.
Auto-Formatted Embeds
When no custom template is assigned, Dispatch detects Twitch payloads and renders embeds tailored to each event:
- Streams — title, started-at timestamp, link to the channel
- Follows / subs / raids — viewer count, tier, gifter, sub streak
- Bits — amount cheered with the message
- Moderation — moderator, reason, ends-at timestamp for timeouts
The branded "Twitch" icon and channel name appear in the footer.
Disconnecting
To disconnect:
- Open the Twitch source dialog from the Sources page.
- Click Disconnect.
Dispatch deletes every EventSub subscription it created on your behalf, then removes the OAuth connection and the endpoint. You can reconnect at any time.