Add a session to the room

View as Markdown
**Rate limit: Per room** · **Burst:** 100 · **Refill:** 30 req/s Add a session as a [room participant](/api/room-participants). Omit `muted` to join unmuted. A `202` response with `status: joining` confirms that the join request was accepted. Participation is not yet complete. Exactly one of these outcomes applies: - If the session is not in another room, the new join starts. - If the session is already in this room, the response is `200` with `status: already_joined`; another join is not started. - If the session has completed joining another room, it is removed from that room before the new join starts. - If the session is still joining another room, the response is `409`. **Triggered webhooks:** - `room.participant.joined` is emitted after participation in the target room is confirmed. - Moving a session also emits `room.participant.left` for the previous room. See [Room lifecycle, participant, and playback events](/api/rooms#lifecycle-participant-and-playback-events) for complete payload schemas and examples.

Authentication

AuthorizationBearer
Application auth. Send `Authorization: Bearer <app_uuid>:<api_key>` using any active key in the app's collection. See [Authentication](https://voice-platform.docs.buildwithfern.com/api/authentication) for details.

Path parameters

room_idstringRequired

Case-sensitive room identifier.

Headers

Idempotency-KeystringOptionalformat: "^[a-zA-Z0-9._-]+$"<=128 characters
Optional key for safely retrying mutating requests. See [Idempotency](https://voice-platform.docs.buildwithfern.com/idempotency) for details.

Request

This endpoint expects an object.
session_uuidstringRequired

Identifies the session to add. This is the same session UUID that GET /api/v1/rooms/{room_id}/participants returns.

mutedbooleanOptional

Controls whether the participant joins muted. Omit this field or set it to false to join the participant unmuted.

Response

Session already joined to this room (idempotent)

room_idstring
statusenum

Errors

400
Bad Request Error
401
Unauthorized Error
404
Not Found Error
409
Conflict Error
413
Content Too Large Error
415
Unsupported Media Type Error
422
Unprocessable Entity Error
429
Too Many Requests Error
500
Internal Server Error
503
Service Unavailable Error