Webinars
Hosts present to an audience of up to 500, who watch, chat, react, raise a hand and ask questions.
A webinar is a room with a stage and an audience. Hosts and co-hosts present with their camera, microphone and screen. Everyone else joins as an attendee: they see and hear the stage, chat, react, raise a hand and ask questions, but cannot publish anything until a host invites them to speak. The media server enforces this — an attendee's pass carries no right to publish — so it holds even for a modified client.
Create a webinar
const room = await deewan.rooms.create({
name: "Product launch",
settings: { type: "webinar", access: "link" },
});
// Presenters join as hosts; everyone else as participants (the audience).
const host = await deewan.rooms.createJoinLink(room.id, { name: "Sara Ahmed", role: "host" });
const seat = await deewan.rooms.createJoinLink(room.id, { name: "Omar Saleh" });curl https://deewan.io/api/v1/rooms \
-H "Authorization: Bearer $DEEWAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Product launch","settings":{"type":"webinar","access":"link"}}'Invite someone to speak
Hosts usually do this from the participants list, where a raised hand shows an Invite to speak button. Your server can do it too, with the participant's connection identity from GET /rooms/{room_id}/participants.
await deewan.rooms.inviteToSpeak(room.id, identity); // they may turn on mic and camera
await deewan.rooms.moveToAudience(room.id, identity); // back to watchingQuestions and answers
Attendees ask questions in the Q&A panel and upvote the ones they want answered; hosts mark them answered or hide them. Questions travel end to end encrypted inside the meeting, like chat, and are not stored: someone who joins later is handed the current list by a host's browser.
- Up to 500 people in one webinar; regular meetings hold up to 300.
- Strict end-to-end encryption, recordings, captions and polls work as in any room.
- Breakout rooms opened from a webinar are ordinary meetings, so everyone in them can talk.
- Billing is the same as any API meeting: per participant-minute.
Events
Subscribe to participant.stage_changed to know the moment someone starts or stops speaking — for example, to drive an overlay on a separate broadcast feed.