Tavus Personas API

The Personas API from Tavus — 2 operation(s) for personas.

OpenAPI Specification

tavus-personas-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Tavus Developer API Collection Conversations Personas API
  version: 1.0.0
  contact: {}
servers:
- url: https://tavusapi.com
security:
- apiKey: []
tags:
- name: Personas
paths:
  /v2/personas:
    post:
      tags:
      - Personas
      summary: Create Persona
      description: Creates a persona that configures how a replica behaves and sounds in CVI for every conversation that uses that persona.
      operationId: createPersona
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                persona_name:
                  type: string
                  description: A name for the persona.
                  example: Life Coach
                system_prompt:
                  type: string
                  description: This is the system prompt that will be used by the llm. **Each request must have a `system_prompt` value unless you're using echo mode**.
                  example: As a Life Coach, you are a dedicated professional who specializes in...
                pipeline_mode:
                  type: string
                  description: 'The pipeline mode to use for the persona. Possible values: `full`, `echo`. `full` will provide the default end-to-end experience. `echo` will turn off most steps, and allow the replica to sync video with audio passed in through Echo events, which it will speak out.'
                  enum:
                  - full
                  - echo
                default_replica_id:
                  type: string
                  description: The default replica_id associated with this persona if one exists. When creating a conversation, a persona_id with a default_replica_id associated can we used to create a conversation without specifying a replica_id.
                  example: r90bbd427f71
                document_ids:
                  type: array
                  description: Array of document IDs that the persona will have access to. These documents will be available to the persona in all their conversations. The `document_ids` are returned in the response of the [Get Document](/api-reference/documents/get-document) and the [Create Document](/api-reference/documents/create-document) endpoints.
                  items:
                    type: string
                  example:
                  - d1234567890
                  - d2468101214
                document_tags:
                  type: array
                  description: Array of document tags that the persona will have access to. Documents matching these tags will be available to the persona in all their conversations. The tags are passed in the `document_tags` parameter of the [Create Document](/api-reference/documents/create-document) endpoint. As soon as one document has the tag, you will be able to pass the tags in this parameter..
                  items:
                    type: string
                  example:
                  - product_info
                  - company_policies
                objectives_id:
                  type: string
                  description: The unique identifier of the objectives to attach to this persona. Objectives provide goal-oriented instructions that help guide conversations toward specific outcomes. Create objectives using the [Create Objectives](/api-reference/objectives/create-objectives) endpoint.
                  example: o12345
                guardrails_id:
                  type: string
                  description: The unique identifier of the guardrails to attach to this persona. Guardrails provide strict behavioral boundaries and guidelines that will be rigorously followed throughout conversations. Create guardrails using the [Create Guardrails](/api-reference/guardrails/create-guardrails) endpoint.
                  example: g12345
                layers:
                  type: object
                  description: 'Optional nested settings for each CVI pipeline layer (perception, STT, conversational flow, LLM, TTS). For an overview of what each layer controls, see [Persona overview — CVI layers](/sections/conversational-video-interface/persona/overview#cvi-layer).

                    '
                  properties:
                    perception:
                      type: object
                      properties:
                        perception_model:
                          type: string
                          description: The perception model to use. `raven-1` (default and recommended) provides real-time emotional understanding from user audio, more natural and human-like interactions, plus all visual capabilities from raven-0. `raven-0` (legacy settings [here](/sections/troubleshooting#migration-from-legacy-perception-to-raven-1)) offers advanced visual perception only. `off` disables all perception.
                          enum:
                          - raven-1
                          - raven-0
                          - 'off'
                          default: raven-1
                          example: raven-1
                        visual_awareness_queries:
                          type: array
                          description: Custom queries that Raven continuously monitors in the visual stream. These provide ambient visual context without requiring explicit prompting.
                          items:
                            type: string
                          example:
                          - Is the user showing an ID card?
                          - Does the user appear distressed or uncomfortable?
                        visual_tool_prompt:
                          type: string
                          description: A prompt that details how and when to use visual tools based on what Raven sees. This helps the replica understand the context of the visual tools.
                          example: You have a tool to notify the system when an ID card is detected, named `notify_if_id_shown`. You MUST use this tool when a form of ID is detected.
                        visual_tools:
                          type: array
                          description: Tools that can be triggered based on visual context, enabling automated actions in response to visual cues.
                          items:
                            type: object
                            properties:
                              name:
                                type: string
                                description: The name of the tool to be called.
                              description:
                                type: string
                                description: A description of what the tool does and when it should be called.
                          example:
                          - type: function
                            function:
                              name: notify_if_id_shown
                              description: Use this function when a drivers license or passport is detected in the image with high confidence. After collecting the ID, internally use final_ask()
                              parameters:
                                type: object
                                properties:
                                  id_type:
                                    type: string
                                    description: best guess on what type of ID it is
                                required:
                                - id_type
                        audio_awareness_queries:
                          type: array
                          description: Custom queries that Raven-1 continuously monitors in the audio stream. These provide ambient audio context such as user tone and emotional state. Only available with `raven-1`.
                          items:
                            type: string
                          example:
                          - Does the user sound frustrated or confused?
                          - Is the user speaking quickly as if in a hurry?
                        audio_tool_prompt:
                          type: string
                          description: A prompt that details how and when to use audio tools based on what Raven-1 hears. Only available with `raven-1`.
                          example: You have a tool to escalate to a human agent when the user sounds very frustrated, named `escalate_to_human`. Use this tool when detecting sustained frustration.
                        audio_tools:
                          type: array
                          description: Tools that can be triggered based on audio analysis, enabling automated actions in response to user tone and emotion. Only available with `raven-1`.
                          items:
                            type: object
                            properties:
                              name:
                                type: string
                                description: The name of the tool to be called.
                              description:
                                type: string
                                description: A description of what the tool does and when it should be called.
                          example:
                          - type: function
                            function:
                              name: escalate_to_human
                              description: Escalate the conversation to a human agent when user frustration is detected
                              parameters:
                                type: object
                                properties:
                                  reason:
                                    type: string
                                    description: The reason for escalation
                                required:
                                - reason
                    stt:
                      type: object
                      description: '**Note**: Turn-taking is now configured on the [Conversational Flow layer](/sections/conversational-video-interface/persona/conversational-flow).

                        '
                      properties:
                        stt_engine:
                          type: string
                          description: The STT engine used for transcription. `tavus-auto` (default, recommended) automatically selects the best model for the conversation's language. `tavus-parakeet` offers highest throughput and lowest latency for English and European languages. `tavus-soniox` is purpose-built for Indian languages with broad multilingual coverage. `tavus-whisper` provides broad multilingual coverage across all supported languages. `tavus-deepgram-medical` is domain-specific English STT optimized for clinical and healthcare vocabulary. `tavus-advanced` is deprecated and not recommended for new integrations. See the [STT layer documentation](/sections/conversational-video-interface/persona/stt) for details.
                          enum:
                          - tavus-auto
                          - tavus-parakeet
                          - tavus-soniox
                          - tavus-whisper
                          - tavus-deepgram-medical
                          - tavus-advanced
                          default: tavus-auto
                          example: tavus-auto
                        hotwords:
                          type: string
                          description: 'The hotwords parameter lets you provide example phrases that guide the STT model to prioritize certain words or phrases—especially names, technical terms, or uncommon language. For instance, including "Roey is the name of the person you''re speaking with" helps the model transcribe "Roey" correctly instead of "Rowie."

                            '
                          example: Roey is the name of the person you're speaking with.
                    conversational_flow:
                      type: object
                      description: Controls conversational flow dynamics for the replica. When not explicitly provided, all fields default to None (turned off). If any parameter is provided, sensible defaults are applied to all other parameters. See more details [here](/sections/conversational-video-interface/persona/conversational-flow).
                      properties:
                        turn_detection_model:
                          type: string
                          description: The model used for turn detection. Options include `sparrow-1` (recommended) for advanced turn detection that is faster, more accurate, and more natural, and `sparrow-0` (legacy) for standard turn detection. Default is `sparrow-1` when any conversational flow parameter is provided.
                          enum:
                          - sparrow-1
                          - sparrow-0
                          example: sparrow-1
                        turn_taking_patience:
                          type: string
                          description: Controls how eagerly and quickly the replica claims conversational turns. Affects both response latency and likelihood of interrupting during natural pauses. `low` = eager and quick to respond, may interrupt pauses; `medium` (default) = balanced; `high` = patient, waits for clear turn completion.
                          enum:
                          - low
                          - medium
                          - high
                          example: medium
                        replica_interruptibility:
                          type: string
                          description: Controls how sensitive the replica is to user speech while the replica is talking. Determines whether the replica stops to listen or keeps speaking. `low` = keeps talking, less interruptible; `medium` (default) = balanced; `high` = stops easily, more interruptible.
                          enum:
                          - low
                          - medium
                          - high
                          example: medium
                        voice_isolation:
                          type: string
                          description: Controls the voice isolation model used on participant audio. Voice isolation separates speech from background noise in the participant's microphone audio. `near` (default) = separates speech from background noise for scenarios where the user is less than 1 meter away from the microphone; `off` = no voice isolation, raw audio is sent down the conversational pipeline. Default is `near`.
                          enum:
                          - 'off'
                          - near
                          default: near
                          example: near
                        wake_phrase:
                          type: string
                          description: A specific phrase the persona listens for before responding. When set, the persona remains silent until it hears the wake phrase, similar to a voice assistant. The persona still records all user utterances in the transcript so it has full conversation context when it does respond. Choose a phrase that is unique enough to avoid over-triggering (avoid generic greetings like `Hey`). Default is `None` (disabled).
                          example: Hey Siri
                        idle_engagement:
                          type: string
                          description: Controls whether the replica proactively re-engages the user after a stretch of silence, and how eagerly. `off` (default) = the replica never breaks silence; `patient` = re-engages after longer silences, suited to tutors or contemplative use cases; `eager` = re-engages after shorter silences, suited to SDR or sales-style use cases.
                          enum:
                          - 'off'
                          - patient
                          - eager
                          default: 'off'
                          example: 'off'
                    llm:
                      type: object
                      properties:
                        model:
                          type: string
                          description: 'The model name that will be used by the LLM. **tavus-gpt-oss** is recommended as a good starting point. Other Tavus-hosted options include tavus-gemini-2.5-flash, tavus-claude-haiku-4.5, tavus-gpt-5.2, and tavus-gemini-3-flash. See the [LLM layer documentation](/sections/conversational-video-interface/persona/llm) for a full comparison.


                            For your own OpenAI-compatible LLM, provide a `model`, `base_url`, and `api_key`.


                            **Context window:** Performance and intelligence are best when prompts are limited to 5,000 tokens. Degradations in speed and instruction following may occur in the 15,000–20,000 token range. Tavus-hosted models support up to 32,000 tokens. Tip: 1 token ≈ 4 characters.

                            '
                        base_url:
                          type: string
                          description: The base url for your OpenAI compatible endpoint.
                          example: your-base-url
                        api_key:
                          type: string
                          description: The API key for the OpenAI compatible endpoint.
                          example: your-api-key
                        speculative_inference:
                          type: boolean
                          description: When set to `true`, the LLM begins processing speech transcriptions before user input ends, improving responsiveness. Default is `true`.
                          example: true
                          default: true
                        tools:
                          type: array
                          description: Optional tools to provide to your custom LLM - click [here](/sections/conversational-video-interface/persona/llm-tool) for more details.
                          example:
                          - type: function
                            function:
                              name: get_current_weather
                              description: Get the current weather in a given location
                              parameters:
                                type: object
                                properties:
                                  location:
                                    type: string
                                    description: The city and state, e.g. San Francisco, CA
                                  unit:
                                    type: string
                                    enum:
                                    - celsius
                                    - fahrenheit
                                required:
                                - location
                        headers:
                          type: object
                          description: Optional headers to provide to your custom LLM
                          example:
                            Authorization: Bearer your-api-key
                        extra_body:
                          type: object
                          description: "Optional parameters to customize the LLM request. \n\nFor Tavus-hosted models, you can pass `temperature` and `top_p`:\n- `temperature`: Controls randomness in the model's output. Range typically 0.0 to 2.0. Lower values make output more deterministic and focused, higher values make it more creative and varied.\n- `top_p`: Controls diversity via nucleus sampling. Range 0.0 to 1.0. Lower values make output more focused on high-probability tokens, higher values allow more diverse token selection.\n\nFor custom LLMs, you can pass any parameters that your LLM provider supports (e.g., `temperature`, `top_p`, `frequency_penalty`, etc.).\n"
                          example:
                            temperature: 0.7
                            top_p: 0.9
                    tts:
                      type: object
                      properties:
                        api_key:
                          type: string
                          description: 'The API key for the chosen TTS provider. Only required when using private voices.


                            **ElevenLabs:** When using pronunciation dictionaries with your own ElevenLabs key, the key must have the `pronunciation_dictionaries_write` scope (or full account access). See [ElevenLabs API key scopes](https://elevenlabs.io/docs/api-reference/service-accounts/api-keys/create).


                            **Cartesia:** No additional scope required — any valid Cartesia API key works.

                            '
                          example: your-api-key
                        tts_engine:
                          type: string
                          description: The TTS engine that will be used.
                          enum:
                          - cartesia
                          - elevenlabs
                        external_voice_id:
                          type: string
                          description: The voice ID used for the TTS engine when you want to customize your replica's voice. Choose from Cartesia's stock voices by referring to their [Voice Catalog](https://docs.cartesia.ai/api-reference/voices/list), or if you want more options you can consider [ElevenLabs](https://elevenlabs.io/docs/api-reference/voices/get-all).
                          example: external-voice-id
                        voice_settings:
                          type: object
                          description: 'Optional voice settings to customize TTS behavior. For Cartesia we support inline Cartesia SSML settings (https://docs.cartesia.ai/build-with-cartesia/sonic-3/ssml-tags). For ElevenLabs we support: `speed` (0.7–1.2), `stability` (0.0–1.0), `similarity_boost` (0.0–1.0), `style` (0.0–1.0), `use_speaker_boost` (boolean). See [ElevenLabs Voice Settings](https://elevenlabs.io/docs/api-reference/voices/settings/get).

                            '
                          example:
                            speed: 0.5
                            emotion:
                            - positivity:high
                            - curiosity
                        tts_emotion_control:
                          type: boolean
                          description: When true, Tavus automatically handles LLM prompting for emotion tags, enabling expressive vocal delivery and natural emotional facial movements (only available with Phoenix-4 replicas). Defaults to true.
                          example: true
                          default: true
                        tts_model_name:
                          type: string
                          description: The model name that will be used by the TTS engine. Please double check this with the TTS provider you are using to ensure valid model names.
                          example: sonic-3
                        pronunciation_dictionary_id:
                          type: string
                          description: 'The unique identifier of a Tavus pronunciation dictionary to attach to this persona. Tavus will apply the dictionary''s rules at conversation time.


                            Provider-specific dictionary IDs are managed internally by Tavus and are not exposed in GET responses — only this field is visible.

                            '
                          example: pd_abc123def456
            examples:
              Required Parameters Only:
                value:
                  pipeline_mode: full
                  system_prompt: As a Life Coach, you are a dedicated professional who specializes in...
              Full Customizations:
                value:
                  persona_name: Life Coach
                  system_prompt: As a Life Coach, you are a dedicated professional who specializes in...
                  pipeline_mode: full
                  default_replica_id: r90bbd427f71
                  layers:
                    llm:
                      model: tavus-gpt-oss
                      speculative_inference: true
                      tools:
                      - type: function
                        function:
                          name: life_coach_insight
                          description: Offer personalized life coaching advice or guidance based on a user's challenge or goal.
                          parameters:
                            type: object
                            properties:
                              topic:
                                type: string
                                description: The area of life or goal the user wants to improve (e.g. career, relationships, confidence)
                              urgency_level:
                                type: string
                                enum:
                                - low
                                - medium
                                - high
                            required:
                            - topic
                    tts:
                      tts_engine: cartesia
                      voice_settings:
                        speed: normal
                        emotion:
                        - positivity:high
                        - curiosity
                      tts_emotion_control: true
                      tts_model_name: sonic-3
                    perception:
                      perception_model: raven-1
                      visual_awareness_queries:
                      - Is the user showing an ID card?
                      - Does the user appear distressed or uncomfortable?
                      visual_tool_prompt: You have a tool to notify the system when an ID card is detected, named `notify_if_id_shown`. You MUST use this tool when a form of ID is detected.
                      visual_tools:
                      - type: function
                        function:
                          name: notify_if_id_shown
                          description: Use this function when a drivers license or passport is detected in the image with high confidence. After collecting the ID, internally use final_ask()
                          parameters:
                            type: object
                            properties:
                              id_type:
                                type: string
                                description: best guess on what type of ID it is
                            required:
                            - id_type
                      audio_awareness_queries:
                      - Does the user sound frustrated or confused?
                    stt:
                      stt_engine: tavus-auto
                    conversational_flow:
                      turn_detection_model: sparrow-1
                      turn_taking_patience: medium
                      turn_commitment: medium
                      replica_interruptibility: high
                      voice_isolation: near
                      idle_engagement: 'off'
                    document_ids:
                    - d1234567890
                    - d2468101214
                    document_tags:
                    - product_info
                    - company_policies
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  persona_id:
                    type: string
                    description: A unique identifier for the persona.
                    example: pcb7a34da5fe
                  persona_name:
                    type: string
                    description: The name of the persona.
                    example: Life Coach
                  created_at:
                    type: string
                    description: The date and time the persona was created.
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: The error message.
                    example: Invalid replica_uuid
        '401':
          description: UNAUTHORIZED
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: The error message.
                    example: Invalid access token
      security:
      - apiKey: []
    get:
      tags:
      - Personas
      summary: List Personas
      description: 'This endpoint returns a list of all Personas created by the account associated with the API Key in use.

        '
      operationId: listPersonas
      parameters:
      - in: query
        name: limit
        schema:
          type: integer
        description: The number of personas 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: persona_type
        schema:
          type: string
          description: 'Filter the personas by type. Possible values: user, system. System personas are personas that have been created by Tavus.'
          enum:
          - user
          - system
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    description: Personas for the current page; use `total_count` for the full count under the applied filters.
                    items:
                      type: object
                      properties:
                        persona_id:
                          type: string
                          description: A unique identifier for the persona.
                          example: pcb7a34da5fe
                        persona_name:
                          type: string
                          description: A name for the persona.
                          example: Life Coach
                        system_prompt:
                          type: string
                          description: The system prompt that will be used by the llm.
                          example: As a Life Coach, you are a dedicated professional who specializes in...
                        default_replica_id:
                          type: string
                          example: r90bbd427f71
                          description: The default replica_id associated with this persona if one exists.
                        document_ids:
                          type: array
                          description: Array of document IDs that the persona has access to. These documents will be available to the persona in all their conversations. The document_ids are returned in the response of the [Get Document](/api-reference/documents/get-document) and the [Create Document](/api-reference/documents/create-document) endpoints.
                          items:
                            type: string
                          example:
                          - d1234567890
                          - d2468101214
                        document_tags:
                          type: array
                          description: Array of document tags that the persona has access to. Documents matching these tags will be available to the persona in all their conversations.
                          items:
                            type: string
                          example:
                          - product_info
                          - company_policies
                        layers:
                          type: object
                          properties:
                            llm:
                              type: object
                              properties:
                                model:
                                  type: string
                                  description: The model name that will be used by the llm.
                                base_url:
                                  type: string
                                  description: The base URL for the OpenAI compatible endpoint if you are using your own llm.


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