Skip to content

EventSub

Twitch EventSub sends notifications when a channel goes live, goes offline, or changes its title or category. ReplayVOD uses these notifications to start recordings and track stream changes.

Direct EventSub requires a public HTTPS callback. If your server doesn’t have one, use Connect relay or polling.

Your public URL must route requests to /api/v1/webhook/callback on the recorder and use a valid TLS certificate. Self-signed certificates aren’t accepted.

ReplayVOD generates the EventSub signing secret on first start and stores it in the database.

As the owner, open System → EventSub, choose direct mode, and enter your public callback URL. Save the settings and restart if the dashboard reports that a restart is required.

To manage the mode through server/.env, set:

PUBLIC_BASE_URL=https://your-domain.example
SERVER_MODE=direct
WEBHOOK_CALLBACK_URL=https://your-domain.example/api/v1/webhook/callback

PUBLIC_BASE_URL configures sign-in and dashboard URLs. Direct EventSub also needs WEBHOOK_CALLBACK_URL set explicitly.

A complete environment configuration takes precedence over dashboard settings. Leave SERVER_MODE and the EventSub URL variables empty if you want to manage this in the dashboard.

ReplayVOD creates the subscriptions it needs and removes obsolete ones. It checks them on startup and periodically while running. You don’t need to enter subscription IDs.

Event Purpose
stream.online Update live status and start matching recordings.
stream.offline Notify the recorder that a stream has ended.
channel.update Capture title and category changes during recordings.

When you follow a new channel, sign out and back in to ReplayVOD so it can update its channel list.

System → EventSub shows subscription usage and quota information. If Twitch refuses new subscriptions, check this page and the system logs for the reason.

After restarting, open System → EventSub and check that direct mode is active and subscriptions are enabled. Followed channels use stream.online and stream.offline subscriptions; active recordings can also have channel.update subscriptions.

If subscriptions remain pending or fail verification, see EventSub not delivering.

Select polling in the dashboard, or set SERVER_MODE=poll with the EventSub URL variables unset. ReplayVOD checks Twitch for live streams and title changes every [server].poll_interval_minutes.