Set up a webinar
Last updated Oct 19, 2026 In a RealtimeKit webinar, presenters publish audio and video from the stage. Viewers watch and can request to join the stage.
This guide sets up a webinar using the default webinar presets and renders it with RealtimeKit UI Kit. To build a custom interface instead, use RealtimeKit Core SDK with stage management.
Webinar roles
Every RealtimeKit app includes two default presets for webinars. Assign one of these presets to each participant, modify them, or create your own preset to fit your application.
| Role | Default preset | Stage behavior | Can accept stage requests |
|---|---|---|---|
| Presenter | webinar_presenter |
Can join the stage and publish audio and video | Yes |
| Viewer | webinar_viewer |
Can request to join the stage | No |
Before you begin
Before you set up a webinar, make sure that you have:
- A Cloudflare account ↗︎ with a RealtimeKit app.
- An API token with Realtime Admin permissions. Keep it server-side. Do not expose it in frontend code.
- A backend that can call the RealtimeKit REST API to create meetings and add participants.
- A frontend application ready to integrate RealtimeKit UI Kit.
If you have not completed these requirements, refer to Quickstart.
Set up a webinar
- In the RealtimeKit dashboard ↗︎, go to Presets and review the default
webinar_presenterandwebinar_viewerpresets. Both presets have Meeting Type set to Video (WebRTC) and Manage Stage (Webinar) turned on under Configuration > Stage & Media. - Create a meeting using the Create Meeting API. Save the returned meeting
idfor the next step. - Add each presenter and viewer to the meeting using the Add Participant API. Assign
webinar_presenterto presenters andwebinar_viewerto viewers. - Deliver each participant's returned
authTokenonly to the frontend session for that specific user. - Initialize RealtimeKit UI Kit with the participant's
authToken. UI Kit renders the webinar interface, including stage controls, based on the participant's preset.
<details>
<summary>
Configure presets with the API
</summary>
If you manage presets programmatically instead of through the dashboard, use the <a href="https://developers.cloudflare.com/api/resources/realtime_kit/subresources/presets/methods/create/">Create Preset API</a> with the following fields:
- <code>config.view_type</code> set to <code>WEBINAR</code>.
- <code>permissions.stage_enabled</code> set to <code>true</code> for both presets.
- <code>permissions.can_accept_production_requests</code> set to <code>true</code> for participants who moderate stage requests.
Set <code>permissions.stage_access</code>, <code>permissions.media.audio.can_produce</code>, <code>permissions.media.video.can_produce</code>, and <code>permissions.media.screenshare.can_produce</code> to the same value, based on the stage behavior you want:
| Stage behavior | Applies to | Value |
|---|---|---|
| Allowed to join | Presenters | <code>ALLOWED</code> |
| Can request to join | Viewers who can request to join the stage | <code>CAN_REQUEST</code> |
| Can only view | View-only viewers | <code>NOT_ALLOWED</code> |
For the complete request schema, refer to <a href="https://developers.cloudflare.com/api/resources/realtime_kit/subresources/presets/">Presets</a>.
</details>
Manage stage requests
A viewer whose preset has Behaviour set to Can request to join can request access to the stage from the UI Kit interface. A presenter whose preset has Accept Requests turned on receives the request and can accept or reject it.
Once accepted, the viewer joins the stage and can publish audio and video like a presenter. RealtimeKit UI Kit handles this by default. To build a custom interface, implement the same behavior with the stage management APIs in Stage Management.
Verify the webinar
- Join the meeting as a presenter and confirm that you can publish audio and video.
- Join the meeting as a viewer and confirm that you cannot publish audio or video by default.
- As the viewer, request to join the stage.
- As the presenter, accept the request and confirm that the viewer can now publish audio and video.
Pricing
Both presenters and viewers are billed as Audio/Video Participants. For detailed pricing information, refer to Pricing.
Next steps
- Customize the webinar interface with a custom control bar or UI Kit addons.
- Review video and simulcast recommendations for presenter and viewer media quality.
- Record the webinar and store the recording in your own storage.
- Use webhooks to track webinar lifecycle events in your backend.
Was this helpful?
YesNo
On this page
{"@context":"https://schema.org","@type":"TechArticle","@id":"https://developers.cloudflare.com/realtime/realtimekit/webinar/#page","headline":"Set up a webinar","description":"Set up a RealtimeKit webinar with presenters and viewers, then manage requests to join the stage.","url":"https://developers.cloudflare.com/realtime/realtimekit/webinar/","inLanguage":"en","image":"https://developers.cloudflare.com/realtime/realtimekit/webinar/og.png?v=c39debd7a18c6de6","dateModified":"2026-10-19","publisher":{"@type":"Organization","name":"Cloudflare","description":"One platform for your apps, agents, and workforce. Build, secure, and scale without managing infrastructure","url":"https://www.cloudflare.com/","sameAs":["https://github.com/cloudflare","https://www.linkedin.com/company/cloudflare","https://x.com/cloudflare"],"logo":{"@type":"ImageObject","url":"https://developers.cloudflare.com/logo.svg"},"address":{"@type":"PostalAddress","streetAddress":"101 Townsend St","addressLocality":"San Francisco","addressRegion":"CA","postalCode":"94107","addressCountry":"US"},"contactPoint":[{"@type":"ContactPoint","contactType":"Customer Support","url":"https://support.cloudflare.com/","availableLanguage":["English"]},{"@type":"ContactPoint","contactType":"Sales","url":"https://www.cloudflare.com/contact/","availableLanguage":["English"]}]},"isPartOf":{"@type":"WebSite","@id":"https://developers.cloudflare.com/#website","name":"Cloudflare Docs","url":"https://developers.cloudflare.com/"}}
description: Build custom audio, video, and data applications for embedded devices, cloud gaming, AI, and browser communication. title: Realtime SFU image: https://developers.cloudflare.com/realtime/sfu/og.png?v=51fa06061870e6fd
Documentation Index
Fetch the complete documentation index at: https://developers.cloudflare.com/realtime/llms.txt
Use this file to discover all available pages before exploring further.
Docs