Welcome to the new Daily Docs. Please let us know what you think.

POST
/rooms

A POST request to /rooms creates a new room.

Heads up!

For full descriptions of this request's body params, reference room configuration options.

If the room is created, a room object is returned. So you can, for example, create a room, then immediately grab the room url from the API response and use it in your user interface. If you don't set privacy configuration parameters when you create the room, you can always set/change them later.

The config part of the room object includes only configuration parameters that differ from room configuration defaults.

If the room is not created, you'll get back an HTTP error, with information about the error in the HTTP response body.

Example requests

Here's how you might create a room with an auto-generated name, set to expire in an hour. This is a pretty common use case. For example, maybe you're creating rooms on demand to use for customer support or account verification. You don't need to set the room's privacy, because you won't be sharing the room URL other than within your own UI, and you won't be re-using the room. It is worth setting the room exp, just so that the room is auto-deleted and you don't end up with a huge number of live rooms.

If you're writing API calls in JavaScript, note that exp and nbf are unix timestamps expressed in seconds, not in milliseconds. You will need to divide JavaScript timestamps by 1,000 to turn them into unix timestamps. For example, you probably want to use some variant of Math.floor(Date.now()/1000) as a base value when creating near-future expiration timestamps. Don't just use Date.now().

Here's how you might create a room with a human-readable name, and privacy set to private, and with the default behavior of everyone's camera and mic turned off initially. You can create meeting tokens to allow access to this room (Learn more in our guide to room access control).

When a room object is returned by an API call, only configuration options that differ from the defaults are included in the config struct.*


Body params

name
string

Defaults to a randomly generated string A room name can include only the uppercase and lowercase ascii letters, numbers, dash and underscore. In other words, this regexp detects an invalid room name: /[^A-Za-z0-9_-]/.

Together, the domain name and the room name cannot exceed 41 characters. You'll get an error if you try to create a room with a name that's too long.

privacy
string
Determines who can access the room.
Options: "public","private"
Default: "public"

properties

nbf
integer

"Not before". This is a unix timestamp (seconds since the epoch.) Users cannot join a meeting in this room before this time.

Default: <not set>
exp
integer

"Expires". This is a unix timestamp (seconds since the epoch.) Users cannot join a meeting in this room after this time.

More resources:

Default: <not set>
max_participants
integer

How many people are allowed in a room at the same time.

⚠️ Contact us if you need to set the limit above 200.

Default: 200
autojoin
boolean

Skip the initial meeting join page and go straight into the call.

❗️ autojoin will soon be deprecated, and is only supported when using the old prebuilt interface. To future proof your calls, use Daily Prebuilt and set enable_prejoin_ui to false for the same effect.

Default: true
enable_new_call_ui
boolean

Sets whether the room uses Daily Prebuilt or the previous video chat interface.

default: false for existing customers; true for new signups

⚠️ This property will eventually be deprecated, once Daily Prebuilt is the only available interface experience.

Default: false
enable_prejoin_ui
boolean

Determines whether participants enter a waiting room with a camera, mic, and browser check before joining a call.

⚠️ You must be using Daily Prebuilt to use enable_prejoin_ui. You must also have signaling_impl set to "ws".

Default: NULL
enable_network_ui
boolean

Determines whether the network button, and the network panel it reveals on click, appears in this room.

⚠️ You must be using Daily Prebuilt to use enable_network_ui.

Default: false
enable_knocking
boolean

Turns on a lobby experience for private rooms. A participant without a corresponding meeting token can request to be admitted to the meeting with a "knock", and wait for the meeting owner to admit them.

Requires the signaling_impl room or domain property set to "ws".

Default: false
enable_screenshare
boolean
Default: true
enable_chat
boolean
Default: false
start_video_off
boolean

When a participant first joins a meeting in a room, keep their camera off.

Default: false
start_audio_off
boolean

When a participant first joins a meeting in a room, keep their microphone muted.

Default: false
owner_only_broadcast
boolean

Only the meeting owners are allowed to turn on camera, unmute mic, and share screen

See setting up calls.

Default: false
enable_recording
string

Jump to recording docs.

For more on rtp-tracks, see our blog post about server-side recording.

Note: If you’re planning to use output-byte-stream, you must monitor recording-data events.

Options: "cloud","local","rtp-tracks","output-byte-stream","<not set>"
Default: <not set>
eject_at_room_exp
boolean

If there's a meeting going on at room exp time, end the meeting by kicking everyone out. This behavior can be overridden by setting eject properties of a meeting token.

Default: false
eject_after_elapsed
integer

Eject a meeting participant this many seconds after the participant joins the meeting. You can use this is a default length limit to prevent long meetings. This can be overridden by setting eject properties of a meeting token.

lang
string

The default language of the Daily prebuilt video call UI, for this room.

Setting the language at the room level will override any domain-level language settings you have.

Read more about changing prebuilt UI language settings.

* Norwegian is only available in the new Daily Prebuilt

Options: "en","de","fi","fr","nl","pt","pl","sv","es","tr","it","ka","jp","no*","user"
Default: "en"
meeting_join_hook
string

Sets a URL that will receive a webhook when a user joins a room. Default is NULL. Character limit for webhook URL is 255.

More resources:

Default: NULL
signaling_imp
string

Sets the signaling type.

Options: "ws"
Default: "ws"