> ## 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.

# Update a meeting calendar connection

> Update policy or defaults for future sessions. Supply at least one field. Existing sessions retain their configuration. Null clears nullable overrides. Assistant, recording, and webhook defaults apply to Google Meet and Teams. Assistant defaults require default_barge_in to be false or null and default_voice to be null. Recording=true requires a destination; false rejects one. A non-null default_webhook_url update returns webhook_secret once; save it to verify future session deliveries.



## OpenAPI

````yaml /openapi/source/external/meeting-sessions/meeting-sessions.json patch /calendar_connections/{id}
openapi: 3.1.0
info:
  title: Telnyx Meeting Sessions API
  version: 2.0.0
  description: >-
    Programmatically create, control, and inspect Telnyx Meeting Sessions,
    including real-time actions, events, transcripts, and artifacts.
  x-latency-category: interactive
  x-endpoint-cost: light
servers:
  - url: https://api.telnyx.com/v2
security:
  - bearerAuth: []
tags:
  - name: Meeting Sessions
    description: Create, list, retrieve, update, and stop meeting sessions.
  - name: Meeting Session Actions
    description: Send real-time speech and chat actions to an active meeting session.
  - name: Meeting Session Data
    description: >-
      Read lifecycle events and transcript segments for a meeting session, and
      delete its recording media.
  - name: Meeting Session Artifacts
    description: Create and retrieve asynchronous summaries and action-item artifacts.
  - name: Meeting Session Webhooks
    description: Outbound webhook deliveries for meeting session events.
  - name: Meeting Calendar Connections
    description: Connect calendars and manage automatic meeting joins.
paths:
  /calendar_connections/{id}:
    patch:
      tags:
        - Meeting Calendar Connections
      summary: Update a meeting calendar connection
      description: >-
        Update policy or defaults for future sessions. Supply at least one
        field. Existing sessions retain their configuration. Null clears
        nullable overrides. Assistant, recording, and webhook defaults apply to
        Google Meet and Teams. Assistant defaults require default_barge_in to be
        false or null and default_voice to be null. Recording=true requires a
        destination; false rejects one. A non-null default_webhook_url update
        returns webhook_secret once; save it to verify future session
        deliveries.
      operationId: updateMeetingCalendarConnection
      parameters:
        - name: id
          in: path
          required: true
          description: Calendar connection ID.
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCalendarConnectionRequest'
            example:
              default_recording: true
              default_recording_export:
                bucket: meeting-recordings
              default_webhook_url: https://example.com/meeting-events
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CalendarConnectionUpdatedResponse'
              example:
                data:
                  id: calconn_example
                  platform: google_calendar
                  platform_email: organizer@example.com
                  status: connected
                  status_detail: null
                  auto_join_policy: all_meetings
                  bot_name: Notetaker
                  default_barge_in: null
                  default_summarize_on_end: null
                  default_voice: null
                  default_assistant: null
                  default_recording: true
                  default_recording_export:
                    bucket: meeting-recordings
                  default_webhook_url: https://example.com/meeting-events
                  created_at: '2026-11-05T09:00:00Z'
                  updated_at: '2026-11-05T09:00:00Z'
                  webhook_secret: whsec_example
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '502':
          $ref: '#/components/responses/MeetingReadUnavailable'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      security:
        - bearerAuth: []
components:
  schemas:
    UpdateCalendarConnectionRequest:
      type: object
      additionalProperties: false
      properties:
        auto_join_policy:
          type: string
          description: >-
            all_meetings joins eligible events; external_organizer_excluded
            requires the connected user to be the organizer; per_meeting
            requires an explicit opt-in.
          enum:
            - all_meetings
            - external_organizer_excluded
            - per_meeting
        bot_name:
          anyOf:
            - type: string
              description: Bot display name; null clears the override.
              minLength: 1
              maxLength: 100
            - type: 'null'
        default_barge_in:
          anyOf:
            - type: boolean
              description: >-
                Default manual speech interruption. Cannot be true with
                default_assistant.
            - type: 'null'
        default_summarize_on_end:
          anyOf:
            - type: boolean
              description: >-
                Generate a summary when each future session transcript
                finalizes.
            - type: 'null'
        default_voice:
          anyOf:
            - type: string
              description: Manual-speech voice; must be null when default_assistant is set.
              minLength: 1
              maxLength: 100
            - type: 'null'
        default_assistant:
          anyOf:
            - $ref: '#/components/schemas/CalendarAssistantDefaults'
            - type: 'null'
        default_recording:
          anyOf:
            - type: boolean
              description: >-
                Google Meet and Teams recording intent. When null, recording is
                enabled only if a destination is set. True requires
                default_recording_export; false cannot be combined with a
                destination.
            - type: 'null'
        default_recording_export:
          anyOf:
            - $ref: '#/components/schemas/MeetingSessionRecordingDestination'
            - type: 'null'
        default_webhook_url:
          anyOf:
            - type: string
              description: >-
                HTTPS destination for future session webhooks. Null clears the
                default. A non-null update returns webhook_secret once; save it
                to verify signatures for sessions created with this default.
                Existing sessions retain their original signing secret.
              format: uri
              maxLength: 2048
            - type: 'null'
      minProperties: 1
    CalendarConnectionUpdatedResponse:
      type: object
      additionalProperties: false
      properties:
        data:
          $ref: '#/components/schemas/CalendarConnectionUpdated'
      required:
        - data
    CalendarAssistantDefaults:
      title: CalendarAssistantDefaults
      type: object
      additionalProperties: false
      description: >-
        Default assistant for future calendar-scheduled Google Meet and Teams
        sessions. The saved configuration must fit within 8 KiB. Use id,
        audio_gate, dynamic_variables, and leave_on_end; avatar is not accepted.
        audio_gate defaults to full_duplex.
      required:
        - id
      properties:
        id:
          type: string
          minLength: 1
          maxLength: 255
          description: Identifier of the assistant to attach.
        audio_gate:
          type: string
          enum:
            - half_duplex
            - full_duplex
          description: >-
            Use full_duplex (default) to allow participants to interrupt, or
            half_duplex to pause listening while the assistant speaks.
            Full-duplex pricing depends on participant audio usage; see the
            Meeting pricing guide.
          default: full_duplex
        dynamic_variables:
          type: object
          description: >-
            Per-conversation values for the [dynamic
            variables](/docs/inference/ai-assistants/dynamic-variables) used in
            the Assistant's instructions, greeting, or tools. Delivered before
            the Assistant's first utterance, so they resolve for the opening
            line as well as the rest of the conversation. At most 63 entries;
            keys 1-128 characters; values must be strings. The map is budgeted
            in aggregate at 1,047,552 bytes (1023 KiB) rather than capped per
            value. `streaming_audio`, `ai_assistant_streaming_audio` and
            `meeting_session_id` are reserved and rejected with `400
            invalid_request`.
          maxProperties: 63
          propertyNames:
            minLength: 1
            maxLength: 128
            not:
              enum:
                - streaming_audio
                - ai_assistant_streaming_audio
                - meeting_session_id
          additionalProperties:
            type: string
        leave_on_end:
          type: boolean
          default: false
          description: >-
            Leave when the assistant conversation ends or fails. Defaults to
            false. Other leave-policy rules and explicit leave requests still
            apply.
    MeetingSessionRecordingDestination:
      type: object
      additionalProperties: false
      required:
        - bucket
      description: >-
        Customer-owned Telnyx Storage destination for recording exports. Uses
        the authenticated organization and user; do not supply credentials,
        region, organization ID or object key.
      properties:
        bucket:
          type: string
          minLength: 3
          maxLength: 63
          pattern: ^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$
          description: >-
            Existing accessible bucket. Consecutive dots and IPv4-address names
            are rejected.
        prefix:
          type: string
          minLength: 1
          maxLength: 256
          pattern: ^[A-Za-z0-9/_.-]+$
          description: >-
            Optional object-key prefix. One trailing slash is normalized. Empty
            path segments, . and .. segments are rejected.
    CalendarConnectionUpdated:
      type: object
      additionalProperties: false
      properties:
        id:
          type: string
          description: Calendar connection ID.
        platform:
          type: string
          description: 'Calendar provider: Google Calendar or Microsoft Outlook.'
          enum:
            - google_calendar
            - microsoft_outlook
        platform_email:
          anyOf:
            - type: string
              description: Connected calendar email address.
            - type: 'null'
        status:
          type: string
          description: Connection status.
          enum:
            - connected
            - disconnected
            - error
        status_detail:
          anyOf:
            - type: string
              description: Additional connection status detail.
            - type: 'null'
        auto_join_policy:
          type: string
          description: >-
            all_meetings joins eligible events; external_organizer_excluded
            requires the connected user to be the organizer; per_meeting
            requires an explicit opt-in.
          enum:
            - all_meetings
            - external_organizer_excluded
            - per_meeting
        bot_name:
          anyOf:
            - type: string
              description: Bot display name; null clears the override.
              minLength: 1
              maxLength: 100
            - type: 'null'
        default_barge_in:
          anyOf:
            - type: boolean
              description: >-
                Default manual speech interruption. Cannot be true with
                default_assistant.
            - type: 'null'
        default_summarize_on_end:
          anyOf:
            - type: boolean
              description: >-
                Generate a summary when each future session transcript
                finalizes.
            - type: 'null'
        default_voice:
          anyOf:
            - type: string
              description: Manual-speech voice; must be null when default_assistant is set.
              minLength: 1
              maxLength: 100
            - type: 'null'
        default_assistant:
          anyOf:
            - $ref: '#/components/schemas/MeetingSessionAssistant'
            - type: 'null'
        default_recording:
          anyOf:
            - type: boolean
              description: >-
                Google Meet and Teams recording intent. When null, recording is
                enabled only if a destination is set. True requires
                default_recording_export; false cannot be combined with a
                destination.
            - type: 'null'
        default_recording_export:
          anyOf:
            - $ref: '#/components/schemas/MeetingSessionRecordingDestination'
            - type: 'null'
        default_webhook_url:
          anyOf:
            - type: string
              description: >-
                HTTPS destination for future session webhooks. Null clears the
                default. A non-null update returns webhook_secret once; save it
                to verify signatures for sessions created with this default.
                Existing sessions retain their original signing secret.
              format: uri
              maxLength: 2048
            - type: 'null'
        created_at:
          type: string
          description: Creation time.
          format: date-time
        updated_at:
          type: string
          description: Last update time.
          format: date-time
        webhook_secret:
          type: string
          description: >-
            Returned only when PATCH supplies a non-null default_webhook_url.
            Not returned by list or retrieve. Save this secret to verify
            webhooks for future sessions.
      required:
        - id
        - platform
        - platform_email
        - status
        - status_detail
        - auto_join_policy
        - bot_name
        - default_barge_in
        - default_summarize_on_end
        - default_voice
        - default_assistant
        - default_recording
        - default_recording_export
        - default_webhook_url
        - created_at
        - updated_at
    ErrorResponse:
      type: object
      additionalProperties: false
      required:
        - error
      properties:
        error:
          type: object
          additionalProperties: false
          required:
            - code
            - message
          properties:
            code:
              type: string
            message:
              type: string
      examples:
        - error:
            code: invalid_request
            message: webhook_url is disabled
        - error:
            code: not_found
            message: meeting session not found
        - error:
            code: unsupported_capability
            message: avatar video is not supported on platform 'unknown'
        - error:
            code: internal_error
            message: internal server error
    MeetingSessionAssistant:
      title: MeetingSessionAssistant
      type: object
      additionalProperties: false
      required:
        - id
        - audio_gate
        - leave_on_end
      properties:
        id:
          type: string
          description: Identifier of the assistant.
        audio_gate:
          type: string
          enum:
            - half_duplex
            - full_duplex
          description: Audio gating strategy in force for the assistant call leg.
        dynamic_variables:
          anyOf:
            - type: object
              additionalProperties:
                type: string
            - type: 'null'
          description: >-
            Dynamic variables in individual-session responses; null when none
            were supplied. Omitted from session list items.
        leave_on_end:
          type: boolean
          description: >-
            Whether the bot leaves when the Assistant's conversation ends or
            fails.
  responses:
    BadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: invalid_request
              message: request is invalid
    Unauthorized:
      description: >-
        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.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: unauthorized
              message: invalid or missing credentials
    Forbidden:
      description: The authenticated credential is not permitted to perform this operation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: forbidden
              message: credential is not permitted
    NotFound:
      description: Not Found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: not_found
              message: meeting session not found
    Conflict:
      description: Conflict
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: invalid_state
              message: only scheduled sessions can be updated
    PayloadTooLarge:
      description: Payload Too Large
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: invalid_request
              message: request body too large
    UnprocessableEntity:
      description: Unprocessable Entity, including an unsupported capability
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: unsupported_capability
              message: avatar video is not supported on platform 'unknown'
    TooManyRequests:
      description: >-
        Authentication is temporarily overloaded. Retry after the number of
        seconds in `Retry-After`.
      headers:
        Retry-After:
          required: true
          description: Seconds to wait before retrying.
          schema:
            type: integer
            minimum: 1
            maximum: 5
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: auth_overloaded
              message: authentication temporarily overloaded
    InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: internal_error
              message: internal server error
    MeetingReadUnavailable:
      description: >-
        Current meeting data could not be retrieved. Retry the read with
        backoff.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            provider_error:
              value:
                error:
                  code: provider_error
                  message: Meeting data is temporarily unavailable.
    ServiceUnavailable:
      description: >-
        A required feature or dependency is not configured, authentication is
        unavailable, or (`assistant_lookup_unavailable`) the assistant could not
        be read to check its avatar.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: not_configured
              message: required feature is not configured
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````