‘Registered participants only’ join gate
A webinar’s register and approval queue control who may attend, but by default they only how the register is filled — a stranger opening the room link still walked in as a plain guest. The Registered participants only switch closes that walk-in path: once it is on, every join is checked against the register and an unknown guest is refused instead of admitted. The check sits at token mint, not in your own code. Both ways a participant token is issued — the authenticated join call and the guest invite redemption — run the same gate, so there is no seam a guest can step around. Approval decisions and the configured capacity stay the source of truth; the gate only enforces them at the door.What the gate does
- Check the register at the door. When armed, every join request is
matched against the room’s register by the joiner’s email or join code
(the
join_tokenvalue each registrant record carries). - Refuse the unknown. A guest matching no register entry is denied
with HTTP
403and the error codeVIDEO_REGISTRATION_REQUIRED— the dashboard join screen and the guest-join flow surface this as a “register first” prompt. - Refuse the not-approved. A matched registrant who is still
pending (or on the waitlist, where approval is required) is
denied with
VIDEO_REGISTRATION_PENDING; a declined registrant withVIDEO_REGISTRATION_DECLINED; a blocked one withVIDEO_REGISTRATION_BLOCKED. - Admit the approved. An approved registrant claiming the last
free seat (the organiser approved two names for one slot) is refused
with
VIDEO_REGISTRATION_CAPACITY. On a successful claim, the join also marks the registrant as attended — the same check-in flip that feeds the report’s attendance figure.
- The host always joins. The room’s host steps over the gate so a closed room never locks out its own organiser.
- Off means legacy behaviour. Leave the switch off and unknown guests keep the permissive default — they connect as guests with no capacity slot claimed. This is the default for every register, so existing rooms change nothing until you flip the switch.
- One gate, both doors. Token mint and invite redemption enforce the same rule, so you never need to guess which path a joiner used.
Enable the gate
- Open Voice → Video → Webinars and pick the room.
- On the Registration tab, toggle Registered participants only.
- Save. The setting applies to the next join request — no redeploy, no token re-mint for already-connected participants.
require_registration on the object alongside the other toggles:
enabled, require_approval, capacity,
and custom_fields, so you can confirm the armed state from the same
endpoint.
What each joiner sees
Compose it with the other toggles
The four register settings answer four different questions; the gate adds a fifth, and none of them replace the others:- Registration open (
enabled) — can people sign up at all. The gate only denies strangers when registration is enabled; a room without an open register behaves as before. Arm the gate when the register is open and you want the door to check it. - Require approval — whether a sign-up waits as pending. With the gate on, those pending names get the “awaiting approval” refusal instead of entry; without approval, sign-ups land approved (or waitlisted past capacity) and the gate admits them.
- Custom questions — what the form asks. They shape the register the gate checks, nothing more.
- Approved-attendee cap — how many approved seats exist. A stranger’s “roster closed” moment is exactly the gate; capacity decides the tie-break when two approved names race for the last seat.
Worked sample — mint a join token, catch the refusal
Minting a token for an unmatched identity denies exactly the envelope you would render as “register first”. A minted token for a signed-in user matches the gate against their account email; a guest redeeming an invite link matches by the same field they always supply — the join code each registrant record carries injoin_token, or their registered email.
403 with:
POST /rooms-scheduled/:id/join carries their account email as its hint.
Where next
- Registration-gated video webinars — open the form, tune approval/capacity/questions, and run the register this gate enforces.
- Using a video room access token —
where a minted token actually goes (
Room.connect()), and when an invite link beats a raw token.