Tavus Conversations API

The Conversations API from Tavus — 3 operation(s) for conversations.

OpenAPI Specification

tavus-conversations-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Tavus Developer API Collection Conversations API
  version: 1.0.0
  contact: {}
servers:
- url: https://tavusapi.com
security:
- apiKey: []
tags:
- name: Conversations
paths:
  /v2/conversations:
    post:
      tags:
      - Conversations
      description: 'This endpoint starts a real-time video conversation with your AI replica, powered by a persona that allows it to see, hear, and respond like a human.

        '
      operationId: createConversation
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                replica_id:
                  type: string
                  description: The unique identifier for the replica that will join the conversation. **Each request must have a valid `replica_id` value that's either directly passed in or as part of a persona**.
                  example: r90bbd427f71
                persona_id:
                  type: string
                  description: 'The unique identifier for the persona that the replica will use in the conversation.


                    - **If your Persona does not have a valid `replica_id`, you must define the `replica_id` field.**

                    - **If your Persona already has a valid `replica_id` and you provide one in the request, the `replica_id` provided in the request will be used instead of the one defined in your persona**.

                    '
                  example: pcb7a34da5fe
                audio_only:
                  type: boolean
                  description: Specifies whether the interaction should be voice-only. **This field is required if you want to create an audio-only conversation**.
                  example: 'false'
                callback_url:
                  type: string
                  description: A url that will receive webhooks with updates regarding the conversation state.
                  example: https://yourwebsite.com/webhook
                conversation_name:
                  type: string
                  description: A name for the conversation.
                  example: Improve Sales Technique
                conversational_context:
                  type: string
                  description: Optional context that will be appended to any context provided in the persona, if one is provided.
                  example: I want to improve my sales techniques. Help me practice handling common objections from clients and closing deals more effectively.
                custom_greeting:
                  type: string
                  description: An optional custom greeting that the replica will give once a participant joines the conversation.
                  example: Hey there!
                memory_stores:
                  type: array
                  items:
                    type: string
                  description: The memory stores to use for the conversation. The persona will have access to the existing memories in the store and will add newly made memories to the store as well. In most use cases, you will only need to pass in a single memory store.
                  example:
                  - anna
                document_ids:
                  type: array
                  items:
                    type: string
                  description: The ids of the documents that the persona will be able to access during the conversation. The `document_ids` are returned during the document creation process in the response of the [Get Document](/api-reference/documents/get-document) and the [Create Document](/api-reference/documents/create-document) endpoints.
                  example:
                  - doc_1234567890
                document_retrieval_strategy:
                  type: string
                  description: 'The strategy to use for document retrieval. Possible values: `speed`, `quality`, `balanced`. Default is `balanced`.'
                  example: balanced
                document_tags:
                  type: array
                  items:
                    type: string
                  description: The tags of the documents that the replica will be able to access during the conversation. The tags are passed in the `document_tags` parameter of the [Create Document](/api-reference/documents/create-document) endpoint. The document tags do not have to be created explicitly, it is enough to pass in the tags during the document creation process.
                  example:
                  - sales
                  - marketing
                test_mode:
                  type: boolean
                  description: If true, the conversation will be created but the replica will not join the call. This can be used for testing the conversation creation process without incurring any costs. Additionally, the conversation will be created with a status `ended` so it does not affect concurrency limits.
                  example: false
                require_auth:
                  type: boolean
                  description: If true, creates a private room requiring authentication. A `meeting_token` will be returned in the response that must be used to join the conversation. Without a valid token, users will see 'You are not allowed to join this meeting.'
                  example: false
                max_participants:
                  type: integer
                  minimum: 2
                  description: Maximum number of participants allowed in the conversation room. Must be at least 2 (the replica counts as one participant).
                  example: 2
                properties:
                  type: object
                  description: Optional properties that can be used to customize the conversation.
                  properties:
                    max_call_duration:
                      type: integer
                      description: The maximum duration of the call in seconds. The default max_call_duration is 3600 seconds (1 hour). Once the time limit specified by this parameter has been reached, the conversation will automatically shut down.
                      example: 3600
                    participant_left_timeout:
                      type: integer
                      description: The duration in seconds after which the call will be automatically shut down once the last participant leaves.
                      example: 60
                    participant_absent_timeout:
                      type: integer
                      description: Starting from conversation creation, the duration in seconds after which the call will be automatically shut down if no participant joins the call. Default is 300 seconds (5 minutes).
                      example: 300
                    enable_recording:
                      type: boolean
                      description: If true, the user will be able to record the conversation. You can find more instructions on recording [here](/sections/conversational-video-interface/quickstart/conversation-recordings#conversation-recordings).
                      example: true
                    enable_closed_captions:
                      type: boolean
                      description: If true, the user will be able to display closed captions (subtitles) during the conversation. You can find more instructions on displaying closed captions if you are using your custom DailyJS components [here](https://docs.daily.co/reference/daily-js/events/transcription-events#transcription-message). You need to have an [event listener](https://docs.daily.co/reference/daily-js/events) on Daily that listens for app-messages.
                      example: true
                    apply_greenscreen:
                      type: boolean
                      description: 'If true, the background will be replaced with a greenscreen (RGB values: [0, 255, 155]). You can use WebGL on the frontend to make the greenscreen transparent or change its color.'
                      example: true
                    require_auth:
                      type: boolean
                      description: If true, participants must authenticate before joining the conversation. More info on private rooms [here](/sections/conversational-video-interface/conversation/customizations/private-rooms).
                      example: false
                    language:
                      type: string
                      description: The language of the conversation. Please provide the FULL language name, not the two letter code, or specify `multilingual` for automatic language detection. When set to `multilingual`, CVI will use STT language detection to identify the user's spoken language and respond accordingly. If you are using your own TTS voice, please ensure it supports the language you provide. If you are using a stock replica or default persona, please note that only Elevenlabs and Cartesia supported languages are available. You can find a full list of supported languages for Cartesia [here](https://docs.cartesia.ai/2024-11-13/build-with-cartesia/models#language-support), and for ElevenLabs [here](https://elevenlabs.io/languages).
                      example: multilingual
                    recording_s3_bucket_name:
                      type: string
                      deprecated: true
                      description: '**Deprecated.** Use `recording_storage` (also on `properties`) instead. The name of the S3 bucket where the recording will be stored. Existing integrations using this flat field continue to work unchanged.

                        '
                      example: conversation-recordings
                    recording_s3_bucket_region:
                      type: string
                      deprecated: true
                      description: '**Deprecated.** Use `recording_storage` (also on `properties`) instead. The region of the S3 bucket where the recording will be stored. Existing integrations using this flat field continue to work unchanged.

                        '
                      example: us-east-1
                    aws_assume_role_arn:
                      type: string
                      deprecated: true
                      description: '**Deprecated.** Use `recording_storage` (also on `properties`) instead. The ARN of the role that will be assumed to access the S3 bucket. Existing integrations using this flat field continue to work unchanged.

                        '
                      example: ''
                    recording_storage:
                      $ref: '#/components/schemas/recording_storage_config'
            examples:
              Required Parameters Only:
                value:
                  replica_id: r90bbd427f71
                  persona_id: pcb7a34da5fe
              Full Customizations:
                value:
                  replica_id: r90bbd427f71
                  persona_id: pcb7a34da5fe
                  callback_url: https://yourwebsite.com/webhook
                  conversation_name: Improve Sales Technique
                  conversational_context: I want to improve my sales techniques. Help me practice handling common objections from clients and closing deals more effectively.
                  properties:
                    max_call_duration: 1800
                    participant_left_timeout: 60
                    participant_absent_timeout: 120
                    language: multilingual
                    enable_closed_captions: true
                    apply_greenscreen: true
              Audio Only:
                value:
                  replica_id: r90bbd427f71
                  persona_id: pcb7a34da5fe
                  audio_only: true
              Private Room:
                value:
                  replica_id: r90bbd427f71
                  persona_id: pcb7a34da5fe
                  require_auth: true
              Recording Storage - Amazon S3:
                value:
                  replica_id: rf4e9d9790f0
                  persona_id: pcb7a34da5fe
                  properties:
                    enable_recording: true
                    recording_storage:
                      provider: s3
                      bucket_name: conversation-recordings
                      bucket_region: us-east-1
                      assume_role_arn: arn:aws:iam::123456789012:role/TavusRecordingWriter
                      external_id: tavus-acct-abc123
              Recording Storage - Google Cloud Storage:
                value:
                  replica_id: rf4e9d9790f0
                  persona_id: pcb7a34da5fe
                  properties:
                    enable_recording: true
                    recording_storage:
                      provider: gcs
                      bucket_name: conversation-recordings
                      project_id: my-gcp-project
                      workload_identity_provider: projects/123456/locations/global/workloadIdentityPools/tavus-recording-pool/providers/tavus-worker
                      service_account_email: tavus-recording-writer@my-gcp-project.iam.gserviceaccount.com
              Recording Storage - Azure Blob Storage:
                value:
                  replica_id: rf4e9d9790f0
                  persona_id: pcb7a34da5fe
                  properties:
                    enable_recording: true
                    recording_storage:
                      provider: azure_blob
                      storage_account: myrecordingsaccount
                      container: conversation-recordings
                      tenant_id: 11111111-2222-3333-4444-555555555555
                      client_id: 66666666-7777-8888-9999-000000000000
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  conversation_id:
                    type: string
                    description: A unique identifier for the conversation.
                    example: c123456
                  conversation_name:
                    type: string
                    description: The name of the conversation.
                    example: A Meeting with Hassaan
                  conversation_url:
                    type: string
                    description: A direct link to join the conversation. This link can be used to join the conversation directly or can be embedded in a website.
                    example: https://tavus.daily.co/c123456
                  status:
                    type: string
                    description: 'The status of the conversation. Possible values: `active`, `ended`.'
                    example: active
                  callback_url:
                    type: string
                    description: The url that will receive webhooks with updates of the conversation state.
                    example: sample.com/callback
                  created_at:
                    type: string
                    description: The date and time the conversation was created.
                    example: <string>
                  meeting_token:
                    type: string
                    description: A short-lived JWT token required to join the conversation. Only returned when `require_auth` is true. Append as `?t=TOKEN` to the conversation URL or pass to Daily SDK's join() method.
                    example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: The error message.
                    example: There was an error creating the conversation, please reach out to support at support@tavus.io!
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: The error message.
                    example: Invalid access token
    get:
      tags:
      - Conversations
      summary: List Conversations
      description: 'This endpoint returns a list of all Conversations created by the account associated with the API Key in use.

        '
      operationId: listConversations
      parameters:
      - in: query
        name: limit
        schema:
          type: integer
        description: The number of conversations to return per page. Default is 10.
      - in: query
        name: page
        schema:
          type: integer
        description: The page number to return. Default is 1.
      - in: query
        name: status
        schema:
          type: string
        description: 'Filter the conversations by status. Possible values: active, ended.'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    description: Conversations for the current page; use `total_count` for the full count under the applied filters.
                    items:
                      type: object
                      properties:
                        conversation_id:
                          type: string
                          description: A unique identifier for the conversation.
                          example: c123456
                        conversation_name:
                          type: string
                          description: A name for the conversation.
                          example: A Meeting with Hassaan
                        status:
                          type: string
                          description: The status of the video.
                          example: active
                        conversation_url:
                          type: string
                          description: A direct link to join the conversation.
                          example: https://tavus.daily.co/c123456
                        callback_url:
                          type: string
                          description: The url that will receive webhooks with updates of the conversation state.
                          example: https://yourwebsite.com/webhook
                        replica_id:
                          type: string
                          description: A unique identifier for the replica used to create this conversation
                          example: r90bbd427f71
                        persona_id:
                          type: string
                          description: A unique identifier for the persona used to create this conversation
                          example: pcb7a34da5fe
                        created_at:
                          type: string
                          description: The date and time the conversation was created.
                          example: ''
                        updated_at:
                          type: string
                          description: The date and time of when the conversation was last updated.
                  total_count:
                    type: integer
                    description: The total number of conversations given the filters provided.
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: The error message.
                    example: Invalid access token
      security:
      - apiKey: []
  /v2/conversations/{conversation_id}:
    parameters:
    - name: conversation_id
      in: path
      required: true
      description: The unique identifier of the conversation.
      schema:
        type: string
        example: c123456
    get:
      tags:
      - Conversations
      summary: Get Conversation
      description: 'This endpoint returns a single conversation by its unique identifier.

        '
      operationId: getConversation
      parameters:
      - name: verbose
        in: query
        required: false
        schema:
          type: boolean
          default: false
        description: 'Append `verbose=true` to the URL to receive additional event data in the response, including:

          - `shutdown_reason`: The reason why the conversation ended (e.g., "participant_left_timeout")

          - `system.replica_joined`: When the replica joined the conversation

          - `system.shutdown`: When and why the conversation ended

          - `application.transcription_ready`: The end-of-call transcript. Each entry in `properties.transcript` has `role` (`user` / `assistant` / `system` / `tool`), `content`, `timestamp` (Unix epoch float, seconds), `seconds_from_start`, `duration` (seconds, float) and `inference_id` where available.

          - `application.perception_analysis`: The final visual analysis of the user that includes their appearance, behavior, emotional states, and screen activities


          This is particularly useful as an alternative to using the `callback_url` parameter on the [create conversation](/api-reference/conversations/create-conversation) endpoint for retrieving detailed conversation data.

          '
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  conversation_id:
                    type: string
                    example: c123456
                    description: A unique identifier for the conversation.
                  conversation_name:
                    type: string
                    example: A Meeting with Hassaan
                    description: The name of the conversation.
                  conversation_url:
                    type: string
                    example: https://tavus.daily.co/c123456
                    description: A direct link to join the conversation.
                  callback_url:
                    type: string
                    description: The url that will receive webhooks with updates of the conversation state.
                    example: https://yourwebsite.com/webhook
                  status:
                    type: string
                    description: The status of the conversation.
                    example: active
                  replica_id:
                    type: string
                    description: A unique identifier for the replica used to create this conversation
                    example: r90bbd427f71
                  persona_id:
                    type: string
                    description: A unique identifier for the persona used to create this conversation
                    example: pcb7a34da5fe
                  created_at:
                    type: string
                    example: ''
                    description: The date and time the conversation was created.
                  updated_at:
                    type: string
                    example: ''
                    description: The date and time of when the conversation was last updated.
                  events:
                    type: array
                    nullable: true
                    description: When `verbose=true`, additional conversation events (e.g. shutdown, perception analysis payloads, end-of-call transcript).
                    items:
                      type: object
                      properties:
                        event_type:
                          type: string
                          description: Event name (e.g. system.replica_joined, application.transcription_ready, application.perception_analysis).
                        timestamp:
                          type: string
                          description: ISO 8601 time of the event.
                        properties:
                          type: object
                          additionalProperties: true
                          description: Event-specific payload when present. For `application.transcription_ready`, includes a `transcript` array of per-turn entries.
              examples:
                default:
                  summary: Default response (verbose omitted or false)
                  value:
                    conversation_id: c123456
                    conversation_name: A Meeting with Hassaan
                    conversation_url: https://tavus.daily.co/c123456
                    callback_url: https://yourwebsite.com/webhook
                    status: active
                    replica_id: r90bbd427f71
                    persona_id: pcb7a34da5fe
                    created_at: '2026-04-29T12:00:00Z'
                    updated_at: '2026-04-29T12:05:00Z'
                verbose:
                  summary: Example when verbose=true
                  value:
                    conversation_id: conv_123
                    status: ended
                    replica_id: replica_abc
                    persona_id: persona_xyz
                    created_at: '2026-04-29T03:45:49Z'
                    updated_at: '2026-04-29T03:47:01Z'
                    events:
                    - event_type: system.replica_joined
                      timestamp: '2026-04-29T03:45:53Z'
                    - event_type: application.transcription_ready
                      timestamp: '2026-04-29T03:47:00Z'
                      properties:
                        transcript:
                        - role: assistant
                          content: Hi, welcome. What brought you here today?
                          timestamp: 1779475657.84
                          seconds_from_start: 0.0
                          duration: 2.15
                          inference_id: inf_abc123
                        - role: user
                          content: Just testing.
                          timestamp: 1779475684.88
                          seconds_from_start: 27.04
                          duration: 1.84
                    - event_type: system.shutdown
                      timestamp: '2026-04-29T03:47:01Z'
                      properties:
                        reason: participant_left_timeout
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: The error message.
                    example: Invalid conversation_id
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: The error message.
                    example: Invalid access token
      security:
      - apiKey: []
    delete:
      tags:
      - Conversations
      summary: Delete Conversation
      description: 'This endpoint deletes a single conversation by its unique identifier.

        '
      operationId: deleteConversation
      parameters:
      - name: hard
        in: query
        schema:
          type: boolean
          example: true
        description: 'If set to true, the conversation and associated assets will be hard deleted. CAUTION: This action is irrevocable.'
      responses:
        '204':
          description: NO CONTENT
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: The error message.
                    example: Invalid conversation_id
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: The error message.
                    example: Invalid access token
      security:
      - apiKey: []
  /v2/conversations/{conversation_id}/end:
    parameters:
    - name: conversation_id
      in: path
      required: true
      description: The unique identifier of the conversation.
      schema:
        type: string
        example: c123456
    post:
      tags:
      - Conversations
      summary: End Conversation
      description: 'This endpoint ends a single conversation by its unique identifier.

        '
      operationId: endConversation
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: The error message.
                    example: Invalid conversation_id
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: The error message.
                    example: Invalid access token
      security:
      - apiKey: []
components:
  schemas:
    recording_storage_config:
      type: object
      description: 'Provider-agnostic recording storage configuration. Supports Amazon S3 (any region),

        Google Cloud Storage via Workload Identity Federation, and Azure Blob Storage via

        Entra ID Federated Credentials. All fields are non-secret identifiers — every

        provider uses federated identity, so you configure a trust relationship on your

        side and pass identifiers to us, never credentials.


        Use this in place of the legacy `recording_s3_bucket_name` / `recording_s3_bucket_region` /

        `aws_assume_role_arn` fields. Existing customers using the flat fields continue to

        work unchanged.

        '
      required:
      - provider
      properties:
        provider:
          type: string
          enum:
          - s3
          - gcs
          - azure_blob
          description: Storage provider discriminator.
          example: s3
        bucket_name:
          type: string
          description: Bucket name. Used when `provider` is `s3` or `gcs`.
          example: conversation-recordings
        bucket_region:
          type: string
          description: 'AWS region (e.g. `us-east-1`, `eu-north-1`). Used when `provider` is `s3`. Any AWS region is

            supported — Daily-supported regions get a direct write; others are routed through a Tavus-managed

            Cloudflare Worker that copies the recording into your bucket via `sts:AssumeRole`.

            '
          example: us-east-1
        assume_role_arn:
          type: string
          description: IAM role ARN that Tavus assumes to write to your bucket. Used when `provider` is `s3`.
          example: arn:aws:iam::123456789012:role/TavusRecordingWriter
        external_id:
          type: string
          description: Optional `ExternalId` value to include in the AssumeRole call. Used when `provider` is `s3`.
          example: tavus-acct-abc123
        project_id:
          type: string
          description: GCP project ID containing the bucket. Used when `provider` is `gcs`.
          example: my-gcp-project
        workload_identity_provider:
          type: string
          description: 'Resource name of your Workload Identity Pool Provider — without the `//iam.googleapis.com/`

            prefix (Tavus prepends it). Used when `provider` is `gcs`.

            '
          example: projects/123456/locations/global/workloadIdentityPools/tavus-pool/providers/tavus-cf-worker
        service_account_email:
          type: string
          description: Email of the service account that has `storage.objects.create` on the bucket. Used when `provider` is `gcs`.
          example: tavus-recording-writer@my-gcp-project.iam.gserviceaccount.com
        storage_account:
          type: string
          description: Azure storage account name. Used when `provider` is `azure_blob`.
          example: m

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