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

# List Voices

> List available voices from a TTS provider with optional filtering

## Overview

Retrieve available voices from a specific TTS provider. Use this endpoint to find the right `voice_id` for your agent's TTS configuration.

Supports filtering by language, gender, model, and search terms.

## Authentication

<ParamField header="X-API-Key" type="string" required>
  Your eigi.ai API key. Must be prefixed with `vk_`.
</ParamField>

## Query Parameters

<ParamField query="provider" type="string" required>
  Voice provider to query. One of: `CARTESIA`, `ELEVENLABS`, `SARVAM`, `GOOGLE`, `HUME`.
</ParamField>

<ParamField query="page" type="integer" default="1">
  Page number (minimum: 1).
</ParamField>

<ParamField query="page_size" type="integer" default="20">
  Items per page (minimum: 1, maximum: 100).
</ParamField>

<ParamField query="language" type="string">
  Filter by language code (e.g., `en`, `hi`, `es`).
</ParamField>

<ParamField query="gender" type="string">
  Filter by gender: `MALE`, `FEMALE`, or `NEUTRAL`.
</ParamField>

<ParamField query="search" type="string">
  Search by voice name.
</ParamField>

<ParamField query="show_cloned_only" type="boolean" default="false">
  Show only cloned (custom) voices.
</ParamField>

<ParamField query="model" type="string">
  Filter by model (e.g., `bulbul:v2`, `bulbul:v3`).
</ParamField>

## Response

<ResponseField name="voices" type="array">
  Array of voice objects, each containing:

  * `id` (string): Voice ID to use in TTS config
  * `name` (string): Human-readable voice name
  * `provider` (string): Provider name
  * `gender` (string): Voice gender
  * `language` (string): Language code
  * `preview_url` (string): URL to preview the voice
</ResponseField>

<ResponseField name="total_count" type="integer">
  Total number of voices matching the filters.
</ResponseField>

<ResponseField name="page" type="integer">
  Current page number.
</ResponseField>

<ResponseField name="page_size" type="integer">
  Number of items per page.
</ResponseField>

<ResponseField name="has_more" type="boolean">
  Whether more pages are available.
</ResponseField>


## OpenAPI

````yaml GET /v1/public/voices
openapi: 3.0.0
info:
  title: eigi.ai API
  description: REST API for managing AI voice agents and conversations
  version: 1.0.0
  contact:
    email: buddy@eigi.ai
    url: https://eigi.ai
servers:
  - url: https://api.eigi.ai
    description: Production server
security:
  - ApiKeyAuth: []
paths:
  /v1/public/voices:
    get:
      tags:
        - Utilities
      summary: List Voices
      description: >-
        Retrieve available voices from a specific TTS provider with optional
        filtering by language, gender, model, and search terms.
      operationId: listVoices
      parameters:
        - name: provider
          in: query
          required: true
          description: Voice provider (CARTESIA, ELEVENLABS, SARVAM, GOOGLE, HUME)
          schema:
            type: string
        - name: page
          in: query
          description: Page number
          schema:
            type: integer
            default: 1
            minimum: 1
        - name: page_size
          in: query
          description: 'Items per page (max: 100)'
          schema:
            type: integer
            default: 20
            minimum: 1
            maximum: 100
        - name: language
          in: query
          description: Filter by language code (e.g., en, hi, es)
          schema:
            type: string
        - name: gender
          in: query
          description: Filter by gender
          schema:
            type: string
            enum:
              - MALE
              - FEMALE
              - NEUTRAL
        - name: search
          in: query
          description: Search by voice name
          schema:
            type: string
        - name: show_cloned_only
          in: query
          description: Show only cloned voices
          schema:
            type: boolean
            default: false
        - name: model
          in: query
          description: Filter by model (e.g., bulbul:v2)
          schema:
            type: string
      responses:
        '200':
          description: Successfully retrieved voices
          content:
            application/json:
              schema:
                type: object
                properties:
                  voices:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          description: Voice ID
                        name:
                          type: string
                          description: Voice name
                        provider:
                          type: string
                        gender:
                          type: string
                        language:
                          type: string
                        preview_url:
                          type: string
                          description: URL to preview the voice
                  total_count:
                    type: integer
                  page:
                    type: integer
                  page_size:
                    type: integer
                  has_more:
                    type: boolean
        '400':
          description: Bad request - Missing or invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized - Invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    Error:
      type: object
      properties:
        detail:
          type: string
          description: Error message
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        API key for authentication. Get your API key from the eigi.ai Dashboard
        under Settings â†’ API Keys.

````