Skip to main content

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

  1. Go to your project's Sources page.
  2. Click Add source, then Twitch.
  3. Authorize the Dispatch Twitch app for your channel.
  4. 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

EventDescription
stream.onlineYour stream went live
stream.offlineYour stream ended
channel.updateTitle, category, or language changed

Audience

EventDescription
channel.followNew follower
channel.raidIncoming raid from another channel

Subscriptions

EventDescription
channel.subscribeNew subscription (paid or Prime)
channel.subscription.endSubscription expired or cancelled
channel.subscription.giftSub bomb (gifted subs)
channel.subscription.messageResub with a message

Bits & Channel Points

EventDescription
channel.cheerBits cheered
channel.channel_points_custom_reward.addCustom reward created
channel.channel_points_custom_reward.updateCustom reward updated
channel.channel_points_custom_reward.removeCustom reward removed
channel.channel_points_custom_reward_redemption.addViewer redeemed a reward
channel.channel_points_custom_reward_redemption.updateRedemption fulfilled or refunded

Hype Train

EventDescription
channel.hype_train.beginHype train started
channel.hype_train.progressHype train levelled up
channel.hype_train.endHype train ended (with top contributors)

Polls

EventDescription
channel.poll.beginPoll started
channel.poll.progressVote totals updated
channel.poll.endPoll ended (with results)

Predictions

EventDescription
channel.prediction.beginPrediction opened
channel.prediction.progressOutcome totals updated
channel.prediction.lockPrediction locked (no more entries)
channel.prediction.endPrediction resolved (winning outcome marked)

Goals

EventDescription
channel.goal.beginGoal started
channel.goal.progressGoal progressed
channel.goal.endGoal ended (achieved or not)

Charity

EventDescription
channel.charity_campaign.startCharity campaign started
channel.charity_campaign.progressCharity campaign progress update
channel.charity_campaign.stopCharity campaign ended
channel.charity_campaign.donateSingle donation received

Moderation & Roles

EventDescription
channel.banViewer banned or timed out
channel.unbanViewer unbanned
channel.moderator.addModerator added
channel.moderator.removeModerator removed
channel.vip.addVIP added
channel.vip.removeVIP removed

Shoutouts

EventDescription
channel.shoutout.createShoutout sent to another broadcaster
channel.shoutout.receiveShoutout 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.

ScopeEvents it unlocks
user:read:emailAccount identification
channel:read:subscriptionschannel.subscribe, channel.subscription.end, channel.subscription.gift, channel.subscription.message
moderator:read:followerschannel.follow
bits:readchannel.cheer
channel:moderatechannel.ban, channel.unban
moderation:readchannel.moderator.add, channel.moderator.remove
channel:read:vipschannel.vip.add, channel.vip.remove
channel:read:redemptionschannel.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_trainchannel.hype_train.begin, channel.hype_train.progress, channel.hype_train.end
channel:read:pollschannel.poll.begin, channel.poll.progress, channel.poll.end
channel:read:predictionschannel.prediction.begin, channel.prediction.progress, channel.prediction.lock, channel.prediction.end
channel:read:goalschannel.goal.begin, channel.goal.progress, channel.goal.end
channel:read:charitychannel.charity_campaign.start, channel.charity_campaign.progress, channel.charity_campaign.stop, channel.charity_campaign.donate
moderator:read:shoutoutschannel.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:

  1. Open the Twitch source dialog from the Sources page.
  2. 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.