---
title: "Update a meeting session"
method: PATCH
path: "/meeting_sessions/{id}"
tags: ["Meeting Sessions"]
---

# Update a meeting session

`PATCH /meeting_sessions/{id}`

Updates mutable properties of a meeting session. Only sessions in the scheduled state can be updated; any other state returns 409 with the invalid_state error code. All request fields are optional, and an empty object is a valid no-op update.

## Path parameters

- `id` string, required

## Request body

- UpdateMeetingSessionRequest — Request body for updating a meeting session. All fields are optional; an empty object is a valid no-op update.
  - `bot_name` string — Updated display name for the bot.
  - `join_at` string, date-time — ISO-8601 timestamp for the bot to join. May be updated to reschedule.

## Response `200`

Successful response with the updated meeting session.

- MeetingSessionResponse
  - `data` MeetingSession, required — Represents a meeting session. All serializer fields are present and required; nullable fields use null when absent. No actor, provider-bot, idempotency, routing, key, or internal fields are exposed.
    - `account_id` string, required — Identifier of the owning account.
    - `assistant` MeetingSessionAssistant, required
      - `audio_gate` 'none' | 'half_duplex', required — Audio gating strategy for the assistant call leg.
      - `id` string, required — Identifier of the assistant.
    - `assistant_state` 'starting' | 'connected' | 'failed' | 'ended' | 'null', nullable, required — Current state of the assistant, or null if no assistant is attached.
    - `assistant_state_changed_at` string, date-time, nullable, required — Timestamp of the last assistant state change, or null.
    - `avatar` MeetingSessionAvatar, required
      - `avatar_id` string, required — Identifier of the avatar.
      - `provider` 'anam', required — Avatar provider identifier.
    - `avatar_state` 'starting' | 'connected' | 'degraded' | 'disconnected' | 'null', nullable, required — Current state of the avatar connection, or null if no avatar is attached.
    - `avatar_state_changed_at` string, date-time, nullable, required — Timestamp of the last avatar state change, or null.
    - `bot_name` string, required — Display name of the bot in the meeting.
    - `config` MeetingSessionConfig, required
      - `barge_in` boolean, required — When enabled, a human participant `speech_on` event interrupts and stops the current bot audio; it does not bypass admission or initiate speech. Assistant sessions reject `barge_in: true`.
      - `speak_on_enter` string, nullable, required — Text spoken on meeting entry, or null if not set.
      - `summarize_on_end` boolean, required — Whether a summary artifact is generated on session end.
      - `voice` string, nullable, required — Configured voice identifier, or null if not set.
    - `created_at` string, date-time, required — Timestamp when the session was created.
    - `ended_at` string, date-time, nullable, required — Timestamp when the session ended, or null if ongoing.
    - `failure_reason` string, nullable, required — Human-readable failure reason if the session failed, or null.
    - `id` string, required — Unique identifier for the meeting session.
    - `join_at` string, date-time, nullable, required — Scheduled join time, or null for immediate join.
    - `joined_at` string, date-time, nullable, required — Timestamp when the session first became `active`, or null if it never became active. This remains positive admission evidence after terminal transitions.
    - `meeting_url` string, uri, required — The meeting URL the bot joins.
    - `metadata` object, required — Arbitrary key-value metadata attached to the session.
    - `platform` 'zoom' | 'google_meet' | 'teams' | 'webex' | 'unknown', required — Detected meeting platform.
    - `provider` string, required — Provider handling the meeting session.
    - `recording` boolean, required — Whether the session is being recorded.
    - `status` 'scheduled' | 'joining' | 'waiting_for_admission' | 'active' | 'leaving' | 'ended' | 'failed' | 'admission_denied', required — Lifecycle status. `waiting_for_admission` means the bot reached the meeting lobby and may require host approval. `active` means the bot entered the meeting/media path. `ended` alone does not prove attendance; use non-null `joined_at` as positive evidence that the session became active. `admission_denied` is reserved for an explicit provider denial, while cancellation or another termination can end a never-admitted session as `ended`.
    - `status_detail` string, nullable, required — Additional human-readable detail about the status, or null.
    - `updated_at` string, date-time, required — Timestamp of the last update to the session.
    - `webhook_url` string, uri, nullable, required — Webhook endpoint for session lifecycle callbacks, or null if not configured.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized. On api.telnyx.com, authentication is enforced by the API gateway before the request reaches the Meeting service, so a missing or invalid API key returns the standard Telnyx error envelope (`{"errors": [{"code": "10009", ...}]}`) rather than the single-`error` shape below.
- `403` — The authenticated credential is not permitted to perform this operation.
- `404` — Not Found
- `409` — Conflict
- `413` — Payload Too Large
- `429` — Authentication is temporarily overloaded. Retry after the number of seconds in `Retry-After`.
- `500` — Internal Server Error
- `502` — The meeting provider rejected the scheduled-session update.
- `503` — A required feature or dependency is not configured or authentication is unavailable.

---

[API](https://skmtc.net/team-telnyx/apis/telnyx-api-2.md) · [All operations](https://skmtc.net/team-telnyx/apis/telnyx-api-2/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/team-telnyx/telnyx-api-2/revisions/3fdc16374d70/schema)
