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

# Create a room

`POST /rooms`

## Request body

- RoomCreateRequest
  - `id` string, required — Custom room ID (auto-generated UUID if omitted)
  - `webhook_url` string, uri — Route all events for this room exclusively to this URL instead of global webhooks.
  - `webhook_secret` string — HMAC-SHA256 signing secret for the per-room webhook.
  - `app_id` string — Application identifier. Carried through to all events for this room. Use to filter the WebSocket event stream by app.
  - `sample_rate` integer — Mixer sample rate in Hz. Allowed values: 8000, 16000, 48000. Default: 16000.

## Response `201`

Room created

- Room
  - `instance_id` string — Instance identifier
  - `id` string, required — Room identifier
  - `app_id` string — Application identifier for event stream filtering.
  - `sample_rate` integer, required — Mixer sample rate in Hz (8000, 16000, or 48000).
  - `participants` Leg[], required — Legs currently in this room
    - `instance_id` string — Instance identifier
    - `id` string, required — Unique leg identifier (UUID)
    - `type` 'sip_inbound' | 'sip_outbound' | 'webrtc' | 'whatsapp_in' | 'whatsapp_out' | 'websocket_in' | 'websocket_out' | 'moq_in' | 'livekit_publish' | 'livekit_participant', required — Leg type
    - `state` 'ringing' | 'early_media' | 'connected' | 'held' | 'hung_up', required — Leg state
    - `room_id` string — Room ID if the leg is in a room, empty otherwise
    - `muted` boolean, required — Whether the leg is muted (cannot be heard by others)
    - `deaf` boolean, required — Whether the leg is deaf (cannot hear others)
    - `accept_dtmf` boolean, required — Whether the leg receives DTMF digits broadcast from other legs in the same room. Defaults to true.
    - `held` boolean, required — Whether the call is on hold (SIP legs only)
    - `role` string — Routing role used by the room's audio routing matrix (e.g. "customer", "agent", "supervisor"). Empty string means unroled (full mesh).
    - `app_id` string — Application identifier for event stream filtering.
    - `sip_headers` object — Deprecated: X-* headers from the inbound INVITE. Only present on sip_inbound legs. Use `headers` for new code; it carries the same map plus surfaces handshake headers for websocket legs.
    - `headers` object — Custom protocol headers exposed by the leg's transport — X-/P- headers from a SIP INVITE, the WebSocket upgrade request, or supplied at outbound dial time.

## Other responses

- `409` — Room ID already exists

---

[API](https://skmtc.net/voiceblender/apis/voiceblender-api.md) · [All operations](https://skmtc.net/voiceblender/apis/voiceblender-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/voiceblender/voiceblender-api/revisions/4efc843fe56f/schema)
