Skip to main content
Webhooks let Livepeer Studio send HTTP POST requests to your endpoint when events occur. You can react to stream/asset state changes, recordings, multistream status, and access-control checks.

Event types

EventDescription
Streamstream.started, stream.idle
Recordingrecording.started, recording.ready, recording.waiting
Multistreammultistream.connected, multistream.error, multistream.disconnected
Assetasset.created, asset.updated, asset.ready, asset.failed, asset.deleted
Tasktask.spawned, task.updated, task.completed, task.failed
Access controlplayback.accessControl (for gated playback; your endpoint allows or denies)

Set up a webhook

  1. Create an HTTP endpoint in your app that accepts POST and returns 2XX quickly (process async if needed).
  2. Register in StudioDevelopers → Webhooks, click Create, enter your URL and select the events you want.
  3. Verify signatures — Each request includes a Livepeer-Signature header (timestamp and HMAC). Verify it using your webhook secret to avoid accepting forged events. See Livepeer Studio docs for the signature scheme.
Payload fields typically include webhookId, timestamp, event, and event_object (the stream, asset, or task). Use timestamp in signature verification to guard against replay.

Local development

Use a tunnel (e.g. ngrok) to expose your local server and use that URL as the webhook endpoint. For production, deploy your server to a public URL. See Listen to events for asset/stream event usage and Access control with webhooks for gated playback.
Last modified on February 18, 2026