Anam.ai Meetings API
The Meetings API from Anam.ai — 2 operation(s) for meetings.
The Meetings API from Anam.ai — 2 operation(s) for meetings.
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