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

# create meeting invite

> Invite a persona to join a Google Meet, Zoom, or Microsoft Teams meeting.

Provide exactly one of `personaId` for a saved persona, or `personaConfig`
for a runtime persona configuration. The runtime persona configuration is
used to start the meeting session but is not stored on the meeting invite.

The invite is created in `pending` status. `displayName` is normalized to
include an AI disclosure suffix before the persona joins the meeting.

By default the persona joins immediately. Provide `joinAt` to schedule
the join for a future time; scheduling at least 10 minutes ahead
reserves the persona a guaranteed place on the call, which is the most
reliable way to join meetings that are planned in advance.




## OpenAPI

````yaml https://api.anam.ai/swagger.json post /v1/meetings/invites
openapi: 3.1.0
info:
  title: Anam AI API
  version: '1.0'
servers:
  - url: https://api.anam.ai
    description: Anam API
security:
  - BearerAuth: []
tags:
  - name: Sessions
  - name: Meetings
  - name: Personas
  - name: Avatars
  - name: Voices
  - name: LLMs
  - name: Knowledge
  - name: Tools
  - name: Share Links
  - name: Engine
paths:
  /v1/meetings/invites:
    post:
      tags:
        - Meetings
      summary: Create meeting invite
      description: >
        Invite a persona to join a Google Meet, Zoom, or Microsoft Teams
        meeting.


        Provide exactly one of `personaId` for a saved persona, or
        `personaConfig`

        for a runtime persona configuration. The runtime persona configuration
        is

        used to start the meeting session but is not stored on the meeting
        invite.


        The invite is created in `pending` status. `displayName` is normalized
        to

        include an AI disclosure suffix before the persona joins the meeting.


        By default the persona joins immediately. Provide `joinAt` to schedule

        the join for a future time; scheduling at least 10 minutes ahead

        reserves the persona a guaranteed place on the call, which is the most

        reliable way to join meetings that are planned in advance.
      operationId: createMeetingInvite
      requestBody:
        description: Meeting URL and persona selection for the invite.
        required: true
        content:
          application/json:
            examples:
              savedPersona:
                $ref: '#/components/examples/MeetingInviteCreateWithPersonaId'
              runtimePersona:
                $ref: '#/components/examples/MeetingInviteCreateWithPersonaConfig'
              scheduledJoin:
                $ref: '#/components/examples/MeetingInviteCreateScheduled'
            schema:
              $ref: '#/components/schemas/CreateMeetingInviteRequest'
      responses:
        '201':
          description: Successfully created meeting invite
          headers:
            RateLimit-Limit:
              description: Maximum create requests allowed per requester per minute.
              schema:
                type: string
                example: '10'
            RateLimit-Remaining:
              description: >-
                Remaining create requests in the most constrained active window
                after this request.
              schema:
                type: string
                example: '9'
            RateLimit-Reset:
              description: Seconds until the per-minute requester window resets.
              schema:
                type: string
                example: '42'
            X-RateLimit-Org-Hour-Limit:
              description: Maximum create requests allowed per organization per hour.
              schema:
                type: string
                example: '30'
            X-RateLimit-Org-Hour-Remaining:
              description: >-
                Remaining create requests for the organization in the current
                hour after this request.
              schema:
                type: string
                example: '29'
            X-RateLimit-Org-Hour-Reset:
              description: Seconds until the per-hour organization window resets.
              schema:
                type: string
                example: '1800'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingInvite'
              examples:
                default:
                  $ref: '#/components/examples/MeetingInviteResponse'
        '400':
          description: >-
            Bad request - invalid JSON, request validation failed, or an
            unsupported meeting URL.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/MeetingInviteError'
                  - $ref: '#/components/schemas/MeetingInviteValidationError'
              examples:
                invalidBody:
                  value:
                    error: Invalid request body
                unsupportedMeetingUrl:
                  value:
                    error: >-
                      Only Google Meet, Zoom, and Microsoft Teams URLs are
                      supported
                invalidJoinAt:
                  value:
                    error: joinAt must be in the future
                validationError:
                  value:
                    error: Validation error
                    details:
                      - path: personaId
                        message: Provide exactly one of personaId or personaConfig
                        code: custom
                    summary: >-
                      personaId: Provide exactly one of personaId or
                      personaConfig
        '401':
          description: Unauthorized - missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingInviteError'
              examples:
                missingKey:
                  value:
                    error: Missing or invalid API key
                invalidKey:
                  value:
                    error: Invalid API key
        '403':
          description: >-
            Forbidden - API key lacks the required permission, or the saved
            persona is not available to the authenticated organization.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingInviteError'
              examples:
                forbidden:
                  value:
                    error: Forbidden
        '422':
          description: >-
            Unprocessable Entity - the meeting service rejected the invite
            (customer-correctable).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingInviteError'
              examples:
                providerRejected:
                  value:
                    error: Meeting request was rejected
        '429':
          description: Too Many Requests - create invite rate limit exceeded.
          headers:
            RateLimit-Limit:
              description: Maximum create requests allowed per requester per minute.
              schema:
                type: string
                example: '10'
            RateLimit-Remaining:
              description: Remaining create requests in the most constrained active window.
              schema:
                type: string
                example: '0'
            RateLimit-Reset:
              description: Seconds until the per-minute requester window resets.
              schema:
                type: string
                example: '42'
            X-RateLimit-Org-Hour-Limit:
              description: Maximum create requests allowed per organization per hour.
              schema:
                type: string
                example: '30'
            X-RateLimit-Org-Hour-Remaining:
              description: >-
                Remaining create requests for the organization in the current
                hour.
              schema:
                type: string
                example: '0'
            X-RateLimit-Org-Hour-Reset:
              description: Seconds until the per-hour organization window resets.
              schema:
                type: string
                example: '1800'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingInviteError'
              examples:
                rateLimited:
                  value:
                    error: Too many requests
        '500':
          description: Server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingInviteError'
              examples:
                serverError:
                  value:
                    error: Failed to process meeting invite
        '502':
          description: Bad Gateway - meeting service is unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingInviteError'
              examples:
                unavailable:
                  value:
                    error: Meeting service is unavailable
        '503':
          description: >-
            Service Unavailable - meeting invites are disabled, not configured,
            or temporarily at capacity. Capacity responses include a Retry-After
            header.
          headers:
            Retry-After:
              description: >-
                Seconds to wait before retrying. Only present on capacity
                responses.
              schema:
                type: string
                example: '30'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingInviteError'
              examples:
                disabled:
                  value:
                    error: Meeting invites are not enabled for this organization
                atCapacity:
                  value:
                    error: Meeting service is at capacity, please try again shortly
components:
  examples:
    MeetingInviteCreateWithPersonaId:
      summary: Invite a saved persona to a Google Meet
      value:
        meetingUrl: https://meet.google.com/abc-defg-hij
        displayName: Cara
        personaId: 00000000-0000-0000-0000-000000000000
        region: eu
    MeetingInviteCreateWithPersonaConfig:
      summary: Invite a runtime-configured persona to Zoom
      value:
        meetingUrl: https://company.zoom.us/j/123456789?pwd=example
        displayName: Cara
        personaConfig:
          name: Cara
          avatarId: 071b0286-4cce-4808-bee2-e642f1062de3
          voiceId: de23e340-1416-4dd8-977d-065a7ca11697
          llmId: a7cf662c-2ace-4de1-a21e-ef0fbf144bb7
          systemPrompt: You are a helpful assistant.
    MeetingInviteCreateScheduled:
      summary: Schedule a saved persona to join a Google Meet later
      value:
        meetingUrl: https://meet.google.com/abc-defg-hij
        displayName: Cara
        personaId: 00000000-0000-0000-0000-000000000000
        joinAt: '2026-04-20T15:00:00Z'
    MeetingInviteResponse:
      summary: A meeting invite resource
      value:
        id: 00000000-0000-0000-0000-000000000000
        provider: google_meet
        meetingUrl: https://meet.google.com/abc-defg-hij
        displayName: Cara (AI)
        status: pending
        createdAt: '2026-04-20T10:00:00.000Z'
        joinAt: null
        groupCall: true
        sessionId: null
        region: eu
        joinState: null
        statusReason: null
  schemas:
    CreateMeetingInviteRequest:
      type: object
      description: Request body for inviting a persona to a meeting.
      required:
        - meetingUrl
      oneOf:
        - required:
            - personaId
        - required:
            - personaConfig
      properties:
        meetingUrl:
          type: string
          description: >-
            Google Meet, Zoom, or Microsoft Teams URL to join. URLs without a
            scheme are normalized to `https://`.
          example: https://meet.google.com/abc-defg-hij
        displayName:
          type: string
          maxLength: 100
          description: >-
            Optional display name for the meeting participant. The API appends
            an AI disclosure suffix when one is not already present.
          example: Cara
        region:
          type: string
          enum:
            - eu
            - us-east
            - us-west
          description: >-
            Region the persona joins the call from. Pick the region closest to
            the meeting's participants. When omitted, a region is selected
            automatically from the requester's location.
          example: eu
        regionPolicy:
          type: string
          enum:
            - preferred
            - strict
          default: preferred
          description: >-
            How strictly to honor the selected region. `preferred` may serve the
            invite from another region when the selected region has no capacity
            or is not currently offered; `strict` never leaves the selected
            region and returns a capacity error instead. `strict` requires an
            explicit `region`.
          example: preferred
        joinAt:
          type: string
          format: date-time
          description: >-
            When the persona should join the meeting (ISO 8601 with timezone).
            Must be in the future and no more than 7 days ahead. Scheduling at
            least 10 minutes ahead reserves the persona a guaranteed place on
            the call; shorter lead times join on time but use on-demand capacity
            and can be rejected at busy moments. When omitted, the persona joins
            immediately.
          example: '2026-07-04T15:00:00Z'
        groupCall:
          type: boolean
          default: true
          description: >-
            Group-call turn-taking. When true (the default) the persona joins
            silently and only responds when addressed by its display name. Set
            to false for 1:1 conversations over the meeting infrastructure — the
            persona then greets on join and responds to everything it hears,
            like a regular session.
          example: true
        personaId:
          type: string
          format: uuid
          description: >-
            Saved persona ID to use for the meeting invite. Mutually exclusive
            with `personaConfig`.
          example: 00000000-0000-0000-0000-000000000000
        personaConfig:
          allOf:
            - $ref: '#/components/schemas/MeetingInvitePersonaConfig'
          description: >-
            Runtime persona configuration to use for this invite. Mutually
            exclusive with `personaId`; it must not include `personaId`.
        sessionOptions:
          $ref: '#/components/schemas/MeetingInviteSessionOptions'
        clientLabel:
          type: string
          maxLength: 128
          description: >-
            Optional label attached to the created session for analytics and
            debugging.
          example: calendar-integration
    MeetingInvite:
      type: object
      description: A meeting invite created for a persona.
      required:
        - id
        - provider
        - meetingUrl
        - displayName
        - status
        - createdAt
        - joinAt
        - groupCall
        - sessionId
        - region
        - joinState
        - statusReason
      properties:
        id:
          type: string
          format: uuid
          description: Unique identifier for the meeting invite.
        provider:
          type: string
          enum:
            - google_meet
            - zoom
            - microsoft_teams
          description: Meeting provider inferred from the meeting URL.
        meetingUrl:
          type: string
          format: uri
          description: Normalized meeting URL.
        displayName:
          type: string
          description: Display name used in the meeting.
        status:
          type: string
          enum:
            - pending
            - active
            - cancelled
            - ended
            - failed
          description: Current invite status.
        createdAt:
          type: string
          format: date-time
          description: Time the invite was created.
        joinAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Scheduled time the persona joins the meeting, or null when the
            persona was asked to join immediately.
        groupCall:
          type: boolean
          description: >-
            Whether group-call turn-taking is enabled for this invite (respond
            only when addressed by name; silent join).
        sessionId:
          type:
            - string
            - 'null'
          description: >-
            Engine session ID once the meeting session has started, otherwise
            null.
        region:
          type:
            - string
            - 'null'
          enum:
            - eu
            - us-east
            - us-west
            - null
          description: >-
            Region the persona joined the call from. May differ from the
            requested region when the invite was served by another region for
            availability. Additional region values may be introduced over time;
            treat unrecognized values as informational rather than an error.
        joinState:
          type:
            - string
            - 'null'
          enum:
            - joining
            - waiting_room
            - in_call
            - media_denied
            - media_granted
            - media_active
            - left
            - done
            - error
            - null
          description: >-
            Latest observed call-participation detail for the persona, updated
            asynchronously as the persona connects, waits for admission, joins,
            and leaves. Null until the first update arrives. Values may be added
            over time; treat unrecognized values as informational.
        statusReason:
          type:
            - string
            - 'null'
          description: >-
            Reason attached to a terminal participation state — for example
            `removed_by_host`, `meeting_ended`, `not_admitted`, `join_denied`,
            `meeting_link_invalid`, `meeting_not_started`, `idle_timeout`,
            `left_call`, or `provider_error`. Null while the invite is in
            progress. Values may be added over time; treat unrecognized values
            as informational.
    MeetingInviteError:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: Human-readable error message.
    MeetingInviteValidationError:
      type: object
      required:
        - error
        - details
        - summary
      properties:
        error:
          type: string
          example: Validation error
        details:
          type: array
          items:
            type: object
            required:
              - path
              - message
              - code
            properties:
              path:
                type: string
                example: personaId
              message:
                type: string
                example: Provide exactly one of personaId or personaConfig
              code:
                type: string
                example: custom
        summary:
          type: string
          example: 'personaId: Provide exactly one of personaId or personaConfig'
    MeetingInvitePersonaConfig:
      type: object
      description: >-
        Runtime persona configuration. Include `voiceId` plus `llmId` for a
        conversational persona. This object cannot include `personaId`.
      minProperties: 1
      not:
        required:
          - personaId
      additionalProperties: true
      properties:
        name:
          type: string
          example: Cara
        personaPreset:
          type: string
          description: Optional preset used by the session persona.
        avatarId:
          type: string
          format: uuid
          example: 071b0286-4cce-4808-bee2-e642f1062de3
        avatarModel:
          type: string
          enum:
            - cara-2
            - cara-3
            - cara-4-latest
          description: Public avatar model version.
          example: cara-3
        voiceId:
          type: string
          format: uuid
          example: de23e340-1416-4dd8-977d-065a7ca11697
        voiceSpeed:
          type: number
          description: Voice speed multiplier.
          example: 1
        llmId:
          type: string
          format: uuid
          example: a7cf662c-2ace-4de1-a21e-ef0fbf144bb7
        systemPrompt:
          type: string
          example: You are a helpful assistant.
        personality:
          type: string
          description: Optional personality instructions.
        maxSessionLengthSeconds:
          type: number
          minimum: 1
          description: Maximum session duration in seconds.
        languageCode:
          type: string
          description: ISO 639-1 language code override for transcription.
          example: en
        metadata:
          type: object
          additionalProperties: true
          description: Developer-defined metadata attached to the session persona.
        skipGreeting:
          type: boolean
          example: false
        uninterruptibleGreeting:
          type: boolean
          description: When true, the greeting message cannot be interrupted by the user.
          example: false
        initialMessage:
          type:
            - string
            - 'null'
          description: Custom first message the persona speaks to open the conversation.
        zeroDataRetention:
          type: boolean
          description: >-
            Requests zero data retention where supported by the configured voice
            and LLM resources.
        tools:
          type: array
          description: >-
            Runtime tool definitions available to the persona. For client and
            webhook tools, the `parameters` (and webhook `queryParameters`) JSON
            Schema object the LLM fills at call time must serialize to 10,000
            bytes or less (UTF-8), otherwise the request is rejected. Use
            `toolIds` to reference tools pre-created via `/v1/tools`, which are
            not subject to this inline size limit.
          items:
            type: object
            additionalProperties: true
        toolIds:
          type: array
          description: IDs of pre-created tools available to the persona.
          items:
            type: string
            format: uuid
        voiceDetectionOptions:
          $ref: '#/components/schemas/VoiceDetectionOptions'
        voiceGenerationOptions:
          description: Configuration options for voice generation.
          oneOf:
            - $ref: '#/components/schemas/ElevenLabsV1VoiceGenerationOptions'
            - $ref: '#/components/schemas/ElevenLabsV2VoiceGenerationOptions'
            - $ref: '#/components/schemas/CartesiaSonic3VoiceGenerationOptions'
    MeetingInviteSessionOptions:
      type: object
      description: Optional session-level configuration for the meeting session.
      properties:
        sessionReplay:
          type: object
          properties:
            enableSessionReplay:
              type: boolean
              example: true
    VoiceDetectionOptions:
      type: object
      description: Options for voice activity detection during user speech input.
      properties:
        endOfSpeechSensitivity:
          type: number
          description: >-
            Sensitivity for detecting end of speech, between 0 (least sensitive)
            and 1 (most sensitive).
          example: 0.5
          minimum: 0
          maximum: 1
        silenceBeforeSkipTurnSeconds:
          type: number
          description: >-
            Duration of silence (in seconds) before the current user turn is
            skipped.
          example: 5
          minimum: 0
          maximum: 900
        silenceBeforeSessionEndSeconds:
          type: number
          description: >-
            Duration of silence (in seconds) before the session is automatically
            ended.
          example: 60
          minimum: 0
          maximum: 7200
        silenceBeforeAutoEndTurnSeconds:
          type: number
          description: >-
            Duration of silence (in seconds) before the user turn is
            automatically ended.
          example: 5
          minimum: 0.5
          maximum: 10
        speechEnhancementLevel:
          type: number
          description: >-
            Level of speech enhancement to apply, 0 (no speech enhancement) 1
            (max speech enhancement)
          example: 0.8
          minimum: 0
          maximum: 1
    ElevenLabsV1VoiceGenerationOptions:
      title: ElevenLabs V1
      type: object
      description: Voice generation options for ElevenLabs V1 models.
      properties:
        stability:
          type: number
          description: >-
            Controls how stable the generated voice is between each generation,
            between 0 (more varied/higher emotional range) and 1 (more
            stable/less emotional range).
          example: 0.5
          minimum: 0
          maximum: 1
        similarityBoost:
          type: number
          description: >-
            Controls how close the generated voice is to the original speaker,
            between 0 (more varied) and 1 (more similar).
          example: 0
          minimum: 0
          maximum: 1
        speed:
          type: number
          description: >-
            Controls the speed of the spoken voice as a multiplier, between 0.7
            (slower) and 1.2 (faster).
          example: 1
          minimum: 0.7
          maximum: 1.2
    ElevenLabsV2VoiceGenerationOptions:
      title: ElevenLabs V2
      type: object
      description: Voice generation options for ElevenLabs V2 models.
      properties:
        stability:
          type: number
          description: >-
            Controls how stable the generated voice is between each generation,
            between 0 (more varied/higher emotional range) and 1 (more
            stable/less emotional range).
          example: 0.5
          minimum: 0
          maximum: 1
        similarityBoost:
          type: number
          description: >-
            Controls how close the generated voice is to the original speaker,
            between 0 (more varied) and 1 (more similar).
          example: 0.75
          minimum: 0
          maximum: 1
        style:
          type: number
          description: >-
            Amplifies the style of the original speaker, between 0 and 1, it is
            recommended to keep this value low (0) to reduce latency.
          example: 0
          minimum: 0
          maximum: 1
        useSpeakerBoost:
          type: boolean
          description: >-
            Whether to use speaker boost for the generated voice, enhancing the
            similarity to the original speaker.
          example: true
        speed:
          type: number
          description: >-
            Controls the speed of the spoken voice as a multiplier, between 0.7
            (slower) and 1.2 (faster).
          example: 1
          minimum: 0.7
          maximum: 1.2
        model:
          type: string
          description: The ElevenLabs model ID to use for voice generation.
    CartesiaSonic3VoiceGenerationOptions:
      title: Cartesia Sonic-3
      type: object
      description: Voice generation options for Cartesia Sonic-3 models.
      properties:
        volume:
          type: number
          description: >-
            Controls the volume level of the generated voice as a multiplier,
            between 0.5 (quieter) and 2.0 (louder).
          example: 1
          minimum: 0.5
          maximum: 2
        speed:
          type: number
          description: >-
            Controls the speed of the spoken voice as a multiplier, between 0.6
            (slower) and 1.5 (faster).
          example: 1
          minimum: 0.6
          maximum: 1.5
        emotion:
          type: string
          description: >-
            Sets the emotional tone of the generated voice. Supported emotions
            are: neutral, calm, angry, content, sad, scared.
          example: neutral
          oneOf:
            - type: string
              enum:
                - neutral
                - calm
                - angry
                - content
                - sad
                - scared
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer

````