Anam.ai Meetings API

The Meetings API from Anam.ai — 2 operation(s) for meetings.

OpenAPI Specification

anamai-meetings-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Anam AI Avatars Meetings API
  version: '1.0'
servers:
- url: https://api.anam.ai
  description: Anam API
security:
- BearerAuth: []
tags:
- name: Meetings
paths:
  /v1/meetings/invites:
    get:
      summary: List meeting invites
      description: 'List meeting invites for the authenticated organization, most recent

        first. Filter by `status` to find invites in a particular lifecycle

        state — for example `pending` invites that have not joined yet, or

        `active` invites currently in a call.

        '
      parameters:
      - in: query
        name: page
        schema:
          type: integer
          minimum: 1
          default: 1
        description: Page number for pagination
      - in: query
        name: perPage
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 10
        description: Number of items per page (max 100)
      - in: query
        name: status
        schema:
          type: string
          enum:
          - pending
          - active
          - cancelled
          - ended
          - failed
        description: Filter invites by status
      responses:
        '200':
          description: Successfully retrieved meeting invites
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/MeetingInvite'
                  meta:
                    $ref: '#/components/schemas/Pagination'
        '400':
          description: Bad request - invalid query parameters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingInviteValidationError'
        '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.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingInviteError'
              examples:
                forbidden:
                  value:
                    error: Forbidden
        '500':
          description: Server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingInviteError'
              examples:
                serverError:
                  value:
                    error: Failed to process meeting invite
      tags:
      - Meetings
      operationId: listMeetingInvites
      x-mint:
        metadata:
          title: list meeting invites
        mcp:
          enabled: true
          name: list-meeting-invites
          description: 'List meeting invites for the authenticated organization, most recent

            first. Filter by `status` to find invites in a particular lifecycle

            state — for example `pending` invites that have not joined yet, or

            `active` invites currently in a call.

            '
    post:
      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.

        '
      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
      tags:
      - Meetings
      operationId: createMeetingInvite
      x-mint:
        metadata:
          title: create meeting invite
        mcp:
          enabled: true
          name: 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.

            '
  /v1/meetings/invites/{id}:
    get:
      summary: Get meeting invite
      description: Get a meeting invite by ID for the authenticated organization.
      parameters:
      - in: path
        name: id
        required: true
        description: Meeting invite ID.
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Successfully retrieved meeting invite
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingInvite'
              examples:
                default:
                  $ref: '#/components/examples/MeetingInviteResponse'
        '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.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingInviteError'
              examples:
                forbidden:
                  value:
                    error: Forbidden
        '404':
          description: Not Found - meeting invite was not found in the organization.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingInviteError'
              examples:
                notFound:
                  value:
                    error: Not found
        '500':
          description: Server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingInviteError'
              examples:
                serverError:
                  value:
                    error: Failed to process meeting invite
      tags:
      - Meetings
      operationId: getMeetingInvite
      x-mint:
        metadata:
          title: get meeting invite
        mcp:
          enabled: true
          name: get-meeting-invite
          description: Get a meeting invite by ID for the authenticated organization.
    delete:
      summary: Cancel meeting invite
      operationId: cancelMeetingInvite
      description: 'Cancel a pending meeting invite by ID for the authenticated organization.


        Cancellation is idempotent for invites that are already `cancelled`,

        `ended`, or `failed`. A successful cancellation returns no response body.

        '
      parameters:
      - in: path
        name: id
        required: true
        description: Meeting invite ID.
        schema:
          type: string
          format: uuid
      responses:
        '204':
          description: Successfully cancelled meeting invite. No response body is returned.
        '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.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingInviteError'
              examples:
                forbidden:
                  value:
                    error: Forbidden
        '404':
          description: Not Found - meeting invite was not found in the organization.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingInviteError'
              examples:
                notFound:
                  value:
                    error: Not found
        '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
      tags:
      - Meetings
      x-mint:
        metadata:
          title: cancel meeting invite
        mcp:
          enabled: true
          name: cancel-meeting-invite
          description: 'Cancel a pending meeting invite by ID for the authenticated organization.


            Cancellation is idempotent for invites that are already `cancelled`,

            `ended`, or `failed`. A successful cancellation returns no response body.

            . Use with caution as this action cannot be undone.'
components:
  schemas:
    MeetingInviteSessionOptions:
      type: object
      description: Optional session-level configuration for the meeting session.
      properties:
        sessionReplay:
          type: object
          properties:
            enableSessionReplay:
              type: boolean
              example: true
    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
    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'
    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
    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
    Pagination:
      type: object
      description: Pagination metadata returned alongside the `data` array of every list endpoint.
      properties:
        total:
          type: integer
          description: Total number of items across all pages.
        lastPage:
          type: integer
          description: Number of the last page.
        currentPage:
          type: integer
          description: Number of the current page.
        perPage:
          type: integer
          description: Number of items per page.
        prev:
          type:
          - integer
          - 'null'
          description: Number of the previous page, or null if on the first page.
        next:
          type:
          - integer
          - 'null'
          description: Number of the next page, or null if on the last page.
    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
    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.
    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'
    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: Me

# --- truncated at 32 KB (36 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/anamai/refs/heads/main/openapi/anamai-meetings-api-openapi.yml