# How to selectively allow access

VDO.Ninja has several access-control tools. They are not interchangeable, so start by choosing the layer you want to control:

| Goal                                                      | Best option                                                                                                                                                                                                                                                                                                          | Where it applies                          |
| --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- |
| Limit how many people can be admitted to a room           | [`&roomcap`](/advanced-settings/director-parameters/and-roomcap.md)                                                                                                                                                                                                                                                  | Claimed director rooms                    |
| Make the director approve or deny room joins              | [`&requireapproval`](/advanced-settings/director-parameters/and-requireapproval.md)                                                                                                                                                                                                                                  | Claimed director rooms                    |
| Show a modal popup for each pending room join             | [`&approvepopup`](/advanced-settings/director-parameters/and-approvepopup.md)                                                                                                                                                                                                                                        | Director UI, used with `&requireapproval` |
| Let trusted users bypass approval or a lower room cap     | [`&roomkey`](/advanced-settings/director-parameters/and-roomkey.md)                                                                                                                                                                                                                                                  | Director and selected guest links         |
| Ask a publisher before a viewer can see a single source   | [`&prompt`](/advanced-settings/settings-parameters/and-prompt.md)                                                                                                                                                                                                                                                    | Push/source links                         |
| Hold guests until the director activates them             | [`&queue`](/advanced-settings/guest-queuing-parameters/queue.md), [`&screen`](/advanced-settings/guest-queuing-parameters/and-screen-alpha.md), [`&hold`](/advanced-settings/guest-queuing-parameters/and-hold-alpha.md), [`&holdwithvideo`](/advanced-settings/guest-queuing-parameters/and-holdwithvideo-alpha.md) | Guest invite workflow                     |
| Move approved guests from a lobby to a private room       | [Transfer rooms](/guides/transfer-rooms.md), [`&rooms`](/advanced-settings/director-parameters/rooms.md), [`&queuetransfer`](/advanced-settings/guest-queuing-parameters/and-queuetransfer.md)                                                                                                                       | Director workflow                         |
| Check identity before users reach the VDO.Ninja room flow | [SSO and signed-in access](/guides/sso-and-signed-in-access.md)                                                                                                                                                                                                                                                      | External/auth gateway path                |
| Run a larger lobby with owner-controlled access           | [app.invite.cam](/steves-helper-apps/app-invite-cam.md)                                                                                                                                                                                                                                                              | Lobby/invite app                          |
| Limit connections to a single source                      | [`&maxconnections`](/advanced-settings/settings-parameters/and-maxconnections.md)                                                                                                                                                                                                                                    | Push/source links                         |

## Limit room size

Use [`&roomcap`](/advanced-settings/director-parameters/and-roomcap.md) on the director link:

```
https://vdo.ninja/?director=MyRoom&roomcap=10
```

On the official `vdo.ninja` service, the default cap is `80` and the hard maximum is `80`. A lower cap can be set per claimed room. Higher values are clamped.

Room caps are handshake-server admission controls attached to the live director claim. If the director is not present, that director's live cap is not present either.

## Approve guests before they enter

Use [`&requireapproval`](/advanced-settings/director-parameters/and-requireapproval.md) on the director link:

```
https://vdo.ninja/?director=MyRoom&requireapproval
```

Guests attempting to join are put into a pending state until the director approves or denies them.

To also show a modal confirmation popup to the director, add [`&approvepopup`](/advanced-settings/director-parameters/and-approvepopup.md):

```
https://vdo.ninja/?director=MyRoom&requireapproval&approvepopup
```

The guest invite can stay normal:

```
https://vdo.ninja/?room=MyRoom
```

`&approvepopup` does not enable audio alerts or system notifications. Add [`&notify`](/advanced-settings/settings-parameters/and-notify.md) or `&beep` for sound.

## Allow trusted bypasses

Use [`&roomkey`](/advanced-settings/director-parameters/and-roomkey.md) when selected guests should bypass approval or a custom room cap:

```
https://vdo.ninja/?director=MyRoom&requireapproval&roomcap=10&roomkey=TRUSTEDKEY
```

Trusted guest:

```
https://vdo.ninja/?room=MyRoom&roomkey=TRUSTEDKEY
```

The room key cannot bypass the server hard cap. Treat it like a password and rotate it if it leaks.

## Confirm viewers for a single source

[`&prompt`](/advanced-settings/settings-parameters/and-prompt.md), also available as `&approve` or `&validate`, is sender-side confirmation. It asks the publisher before sending audio/video to a newly connected viewer:

```
https://vdo.ninja/?push=Camera1&prompt
```

Use this for one-source push/view workflows. It is not a room admission system, and it does not stop a denied viewer from trying again.

## Queue, hold, and screening workflows

Use [`&queue`](/advanced-settings/guest-queuing-parameters/queue.md) and the queue variants when you want a room workflow where guests wait until the director activates them.

Common modes:

* `&queue` on both director and guest links creates a screening-room workflow.
* `&queue` only on the guest invite creates a simple "Activate Guest" workflow.
* [`&screen`](/advanced-settings/guest-queuing-parameters/and-screen-alpha.md) / `&queue2` lets the guest see and hear the director before activation.
* [`&hold`](/advanced-settings/guest-queuing-parameters/and-hold-alpha.md) / `&queue3` keeps the guest on a waiting message until activation.
* [`&holdwithvideo`](/advanced-settings/guest-queuing-parameters/and-holdwithvideo-alpha.md) / `&queue4` lets the director preview the guest while the guest waits.

Queue mode is a guest workflow. `&requireapproval` and `&roomcap` are handshake-server room admission controls. They can be combined, but they solve different problems.

## Transfer rooms

Use [transfer rooms](/guides/transfer-rooms.md) when you want a public lobby room and one or more private destination rooms.

A common setup:

1. Guests join a public lobby room.
2. The director screens them there.
3. The director transfers approved guests into a private room.

Use [`&rooms`](/advanced-settings/director-parameters/rooms.md) to add preset transfer buttons to the director UI. Use [`&queuetransfer`](/advanced-settings/guest-queuing-parameters/and-queuetransfer.md) / `&qt` when transferred guests should remain queued in the destination room.

If the destination room has `&requireapproval`, transferred guests enter that destination room pending approval. If the destination room has `&roomcap` and is full, the transfer is rejected.

## SSO and larger lobbies

[SSO and signed-in access](/guides/sso-and-signed-in-access.md) is its own access path. Use it when identity needs to be checked before a person reaches the VDO.Ninja room flow.

[app.invite.cam](/steves-helper-apps/app-invite-cam.md) is a larger lobby/invite path with authenticated room ownership, waiting lists, and owner-controlled grant/revoke access.

Do not treat SSO or app.invite.cam as the same thing as `&requireapproval`, `&roomcap`, `&approvepopup`, or `&prompt`. They sit in front of or alongside the VDO.Ninja room workflow.

## Other access tools

[`&password`](/advanced-settings/setup-parameters/and-password.md) can protect a room or source link. Change the password when rotating between groups.

[`&maxconnections`](/advanced-settings/settings-parameters/and-maxconnections.md) limits the total push/view peer connections for a source. It can be useful for one-source workflows, but it is not a room-cap replacement.

Cloudflare Zero Trust or another identity gateway can protect a self-hosted VDO.Ninja deployment before users reach the VDO.Ninja page.

## Related

{% content-ref url="/pages/CdV7XfS7kF1iejAVFibl" %}
[\&requireapproval](/advanced-settings/director-parameters/and-requireapproval.md)
{% endcontent-ref %}

{% content-ref url="/pages/FcWXWvhwDS2DwO5K6O3q" %}
[\&roomcap](/advanced-settings/director-parameters/and-roomcap.md)
{% endcontent-ref %}

{% content-ref url="/pages/Ooi4zYfZocafbY1ydL3R" %}
[\&roomkey](/advanced-settings/director-parameters/and-roomkey.md)
{% endcontent-ref %}

{% content-ref url="/pages/0pvG7wPli92vGYlyP3hH" %}
[\&approvepopup](/advanced-settings/director-parameters/and-approvepopup.md)
{% endcontent-ref %}

{% content-ref url="/pages/qv4dEscZAckfaCZMsW5i" %}
[\&prompt](/advanced-settings/settings-parameters/and-prompt.md)
{% endcontent-ref %}

{% content-ref url="/pages/-MZX-3ygkLfjNFzYFAbU" %}
[\&queue](/advanced-settings/guest-queuing-parameters/queue.md)
{% endcontent-ref %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.vdo.ninja/guides/how-to-selectively-allow-access.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
