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.
Requirements
Section titled “Requirements”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.
Configure
Section titled “Configure”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.exampleSERVER_MODE=directWEBHOOK_CALLBACK_URL=https://your-domain.example/api/v1/webhook/callbackPUBLIC_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.
Subscriptions
Section titled “Subscriptions”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.
Quotas
Section titled “Quotas”System → EventSub shows subscription usage and quota information. If Twitch refuses new subscriptions, check this page and the system logs for the reason.
Verifying it works
Section titled “Verifying it works”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.
Polling without a callback
Section titled “Polling without a callback”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.