---
title: "Create a room"
method: POST
path: "/rooms/"
tags: ["Rooms"]
---

# Create a room

`POST /rooms/`

Creates a new room with secure defaults for external API usage.

**Defaults:**
- Delegated user is set as owner
- Room slug auto-generated for uniqueness
- Telephony PIN auto-generated when enabled
- Creation tracked with application client_id for auditing

## Request body

- RoomCreate — Optional fields for room creation. All fields have secure defaults if omitted.
  - `access_level` 'public' | 'trusted' | 'restricted' — Controls who can join the room without going through the lobby. - `public`: Anyone with the room link can join directly, no authentication required. - `trusted`: Authenticated users join directly. Unauthenticated users wait in the lobby for approval. - `restricted`: Only participants explicitly trusted by the owner bypass the lobby. Everyone else waits for approval regardless of authentication.
  - `configuration` RoomConfiguration — Optional room behaviour settings. Unknown fields are rejected. All fields are optional and default to `null` (server-side defaults apply).
    - `can_publish_sources` string[], nullable — Restricts which media tracks participants are allowed to publish. If `null`, all sources are permitted.
    - `everyone_can_mute` boolean, nullable — Whether any participant can mute others, or only the room owner/moderator. If `null`, the server default applies.

## Response `201`

Room created successfully

- Room
  - `id` string, uuid — Unique room identifier
  - `slug` string — URL-friendly room identifier (auto-generated)
  - `access_level` 'public' | 'trusted' | 'restricted' — Controls who can join the room without going through the lobby. - `public`: Anyone with the room link can join directly, no authentication required. - `trusted`: Authenticated users join directly. Unauthenticated users wait in the lobby for approval. - `restricted`: Only participants explicitly trusted by the owner bypass the lobby. Everyone else waits for approval regardless of authentication.
  - `url` string, uri — Full URL to access the room
  - `telephony` object — Telephony dial-in information (if enabled)
    - `enabled` boolean — Whether telephony is available
    - `pin_code` string — PIN code for dial-in access
    - `phone_number` string — Phone number to dial
    - `default_country` string — Default country code
  - `configuration` RoomConfiguration — Optional room behaviour settings. Unknown fields are rejected. All fields are optional and default to `null` (server-side defaults apply).
    - `can_publish_sources` string[], nullable — Restricts which media tracks participants are allowed to publish. If `null`, all sources are permitted.
    - `everyone_can_mute` boolean, nullable — Whether any participant can mute others, or only the room owner/moderator. If `null`, the server default applies.

## Other responses

- `401` — Authentication required or token invalid/expired
- `403` — Insufficient permissions for this operation

## Changes

- **2026-05-30** `617971cb202f` — 3 warning, 4 info
  - added the new `public` enum value to the `access_level` response property for the response status `201`
  - added the new `restricted` enum value to the `access_level` response property for the response status `201`
  - added the new `trusted` enum value to the `access_level` response property for the response status `201`
  - added the new optional request property `access_level`
  - …3 more
- **2026-03-24** `a85a00b46a4e` — 1 breaking, 1 info
  - api removed without deprecation
  - endpoint added
- **2025-10-03** `1f775f325b8d` — 1 breaking, 1 info
  - api path removed without deprecation
  - endpoint added

[Change history](https://skmtc.dev/betagouv/apis/meet-external-api/changes/rooms/post.md)

---

[API](https://skmtc.dev/betagouv/apis/meet-external-api.md) · [All operations](https://skmtc.dev/betagouv/apis/meet-external-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/betagouv/meet-external-api/revisions/33f115c58838/schema)
