> ## Documentation Index
> Fetch the complete documentation index at: https://developers.telnyx.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Meeting Release Changes

> Request, response, and feature changes for Meeting integrations.

Use this reference when updating an existing Meeting integration. The REST base URL remains `https://api.telnyx.com/v2`; authentication and existing session URLs are unchanged.

## Requests and Features

| Area | Contract |
| - | - |
| Recording | Google Meet and Teams require `recording_export.bucket` to record. Without a destination, recording is disabled. `recording: true` requires the destination; `false` rejects one. Zoom rejects these recording options. See [Recording](https://developers.telnyx.com/docs/meeting/recording.md). |
| Recording layout | Choose `speaker_view` (default), `gallery_view`, or `speaker_view_no_sidebar` at creation. Layout does not enable recording. |
| Automatic departure | `leave_policy` configures silence, time alone, host/lobby waits, maximum duration, and bot-name filtering on Google Meet and Teams. Zoom ignores a valid policy. See [When the Bot Leaves](https://developers.telnyx.com/docs/meeting/join-meeting/leave-policy.md). |
| Scheduling | Use future `join_at` timestamps; Google Meet and Teams accept up to three years ahead. Update only `join_at` and `bot_name` while scheduled. REST/MCP assistant joins remain immediate-only. |
| Safe create retries | `idempotency_key` remains optional. Reuse the same key and request after uncertainty. Replays return `200`; new sessions return `201`. Conflicting configuration can return `409 invalid_state`. |
| Chat and introductions | Google Meet, Zoom, and Teams support `send_chat` and `chat_on_enter`. Google Meet and Teams apply an additional 4,096-byte text limit and a 1,000-request session limit. See [Chat](https://developers.telnyx.com/docs/meeting/control/chat.md). |
| Speech | `speak`, `stop_speaking`, `speak_on_enter`, per-request voices, interruption, and manual-speech `barge_in` are available subject to session state and assistant restrictions. Actions are not idempotent. |
| Appearance | Supply a JPEG camera image by base64 or public HTTPS URL, or set REST `assistant.avatar: true` to use the assistant's configured avatar. Avatars take precedence over images and render only assistant speech. |
| Calendar auto-join | Eligible Google Meet and Teams events can be scheduled alongside Zoom events. Connect Google Calendar or Microsoft Outlook. New REST defaults cover scheduled assistants, Storage recordings, and session webhooks. See [Calendar Auto-join](https://developers.telnyx.com/docs/meeting/join-meeting/calendar-auto-join.md) for request and response fields. |
| Results | Transcripts, summaries, action items, decisions, topics, open questions, and custom-prompt artifacts remain available. Artifacts use recorded speaker labels and timestamps. Requests over 10,000 segments or 1,000,000 UTF-8 bytes of transcript input return `409 invalid_state` instead of silently truncating. Artifact generation is separate from recording export. |

## Response Changes

| Surface | Fields and behavior |
| - | - |
| Session create/retrieve | `config.recording` is recording intent; top-level `recording` reports current activity. `config.recording_view` appears for non-default layouts. `config.leave_policy` contains supplied overrides. `recording_export` contains export status or `null`. |
| Session lists | `recording_export` and `assistant.dynamic_variables` are omitted. Optional `remote_state_observed_at` reports when listed state was last observed. Retrieve the individual session for current details. |
| Session status | `status_detail` and `failure_reason` are machine-readable reasons or `null`. Values include `silence_timeout`, `everyone_left`, `max_duration_reached`, and `admission_timeout`; accept future values. `ended` alone does not prove admission: check `joined_at`. |
| Recordings | `GET /meeting_sessions/{id}/recordings` returns `data: []` plus `recording_export` for Storage exports. Export status is `pending`, `exported`, or `failed`. Zoom and existing Google Meet or Teams recordings held by the Meeting service continue returning temporary links in `data` through the same endpoint; no Storage migration is required for those recordings. |
| Leaving | `DELETE /meeting_sessions/{id}` returns a session snapshot and can remain `leaving` until departure completes. It does not delete transcripts, artifacts, or Storage objects. |
| Actions | Successful speech, stop, and chat requests return `202` with `data.accepted: true`. This is not a speech-completion notification. |
| Calendar settings | Connection responses include `default_assistant`, `default_recording`, `default_recording_export`, and `default_webhook_url`. A non-null webhook URL update returns `webhook_secret` once. |
| Transcript paging | An empty page preserves a positive `after` cursor in `meta.next_after`; without one, the cursor is `null`. Long-poll timeouts return `200` and empty `data`. |

## Events and Errors

Storage exports emit `recording.exported` or `recording.export_failed` through event history, WebSocket, and configured webhooks. Their payloads contain the Storage destination; success includes bytes and SHA-256, and failure includes a reason. Session termination and transcript finalization can occur before the export completes. A status webhook can also include `previous_status`.

Handle the additional action outcomes explicitly:

| HTTP | Code | Handling |
| - | - | - |
| `429` | `capacity_exceeded` | Back off; retry create with the original key and request. |
| `409` | `calendar_managed` | Change the calendar event instead of PATCHing the session. |
| `409` | `edit_in_progress` | Resolve the previous schedule edit before submitting a different one. |
| `502` | `chat_not_sent` | Retry the chat if still needed. |
| `502` | `chat_delivery_unknown` | Check chat before retrying; repeating the action may duplicate it. |
| `422` | `unsupported_capability` | Check platform support, including recording options and recording-media deletion. |
| `503` | `not_configured` | A feature or session operation may be unavailable. Reconcile the result before retrying a write. |

The [API Errors reference](https://developers.telnyx.com/docs/meeting/errors.md) covers all service error codes and the distinct authentication error envelope. Clients must also tolerate an empty or plain-text gateway error response.

## Integration Checklist

* Set an explicit Storage destination wherever Google Meet or Teams recording is required.
* Save creation-time webhook secrets and use separate completion signals for transcripts, artifacts, and recordings.
* Use an idempotency key for each intended join; avoid automatic retries of chat, speech, or billed artifact creation.
* Handle both recording responses: download links in `data`, or Storage coordinates in `recording_export`. Do not choose the download method from the platform alone.
* Accept optional response fields and unknown event types. Retrieve a session rather than relying on a list item for current state.
* Delete exported objects through Storage. `DELETE /meeting_sessions/{id}/recording_media` does not delete customer Storage objects.
