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

  1. In the RealtimeKit dashboard ↗︎, go to Presets and review the default webinar_presenter and webinar_viewer presets. Both presets have Meeting Type set to Video (WebRTC) and Manage Stage (Webinar) turned on under Configuration > Stage & Media.
  2. Create a meeting using the Create Meeting API. Save the returned meeting id for the next step.
  3. Add each presenter and viewer to the meeting using the Add Participant API. Assign webinar_presenter to presenters and webinar_viewer to viewers.
  4. Deliver each participant's returned authToken only to the frontend session for that specific user.
  5. 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

  1. Join the meeting as a presenter and confirm that you can publish audio and video.
  2. Join the meeting as a viewer and confirm that you cannot publish audio or video by default.
  3. As the viewer, request to join the stage.
  4. 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

Was this helpful?

YesNo

On this page

Set up a webinar - 图1Docs

{"@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


Skip to content

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.