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

# List LLM Models With Voices

> List available LLM models and their supported voices.

### Endpoint Overview

`GET /api/v1/available-llm-models/with-voices`

Returns the platform's available LLM models along with the voices supported for each model. Use `voices[].id` as the `voice_id` when creating or updating agents.

***

### Response Structure

The response is a JSON object with the following top-level fields:

* `success` — boolean
* `message` — string
* `data` — array of model objects (see Model Object Schema)
* `meta` — pagination metadata

***

### Root Fields Explanation

* `success`: Whether the API request succeeded.
* `message`: Human-readable message for the result.
* `data`: Array of model objects. Each model contains a `voices` array.
* `meta`: Pagination details (`total`, `limit`, `offset`).

***

### Model Object Schema

A model object describes an LLM and metadata about available voices.

* `id` (string, UUID): Model identifier
* `llmModel` (string): Model name
* `description` (string): Short description of the model
* `price` (number): Pricing metric (units depend on plan)
* `isActive` (boolean): Whether the model is active
* `voices` (array): List of voices supported by this model

***

### Voice Object Schema

Each voice object inside `voices` has the following fields:

* `id` (string, UUID): Unique voice identifier
* `llmModelId` (string, UUID): Parent model ID
* `voiceName` (string): Voice display name
* `gender` (string): Voice gender label (optional)
* `language` (string): Language/locale code (e.g., `en-US`)
* `recordingUrl` (string, URL): Sample audio file URL
* `imgUrl` (string, URL): Avatar image URL

***

### Pagination Meta Schema

* `meta.total` (integer | string): Total number of records
* `meta.limit` (integer): Limit used for the request
* `meta.offset` (integer): Offset used for the request

***

### Example Response

Below is a complete example response containing the two models `Agni Lite` and `Agni Premium` with multiple voices each.

<ResponseExample>
  ```json 200 theme={null}
  {
    "success": true,
    "message": "LLM models with voices fetched successfully",
    "data": [
      {
        "id": "019e30ef-06c2-7959-b74e-7fc65fc64aa3",
        "llmModel": "Agni Lite",
        "description": "Agni Lite model for the Live API.",
        "price": 0.5,
        "isActive": true,
        "voices": [
          { "id": "v-iris-001", "llmModelId": "019e30ef-06c2-7959-b74e-7fc65fc64aa3", "voiceName": "Iris", "gender": "female", "language": "en-US", "recordingUrl": "https://example.com/iris.mp3", "imgUrl": "https://example.com/iris.png" },
          { "id": "v-liam-002", "llmModelId": "019e30ef-06c2-7959-b74e-7fc65fc64aa3", "voiceName": "Liam", "gender": "male", "language": "en-US", "recordingUrl": "https://example.com/liam.mp3", "imgUrl": "https://example.com/liam.png" },
          { "id": "v-isabela-003", "llmModelId": "019e30ef-06c2-7959-b74e-7fc65fc64aa3", "voiceName": "Isabela", "gender": "female", "language": "en-US", "recordingUrl": "https://example.com/isabela.mp3", "imgUrl": "https://example.com/isabela.png" },
          { "id": "v-marcus-004", "llmModelId": "019e30ef-06c2-7959-b74e-7fc65fc64aa3", "voiceName": "Marcus", "gender": "male", "language": "en-US", "recordingUrl": "https://example.com/marcus.mp3", "imgUrl": "https://example.com/marcus.png" },
          { "id": "v-olivia-005", "llmModelId": "019e30ef-06c2-7959-b74e-7fc65fc64aa3", "voiceName": "Olivia", "gender": "female", "language": "en-US", "recordingUrl": "https://example.com/olivia.mp3", "imgUrl": "https://example.com/olivia.png" }
        ]
      },
      {
        "id": "019e40bf-15a1-495e-a3c9-9b6d2f4b2b66",
        "llmModel": "Agni Premium",
        "description": "Agni Premium with additional voices and enhanced audio quality.",
        "price": 1.5,
        "isActive": true,
        "voices": [
          { "id": "p-dominic-101", "llmModelId": "019e40bf-15a1-495e-a3c9-9b6d2f4b2b66", "voiceName": "Dominic", "gender": "male", "language": "en-US", "recordingUrl": "https://example.com/dominic.mp3", "imgUrl": "https://example.com/dominic.png" },
          { "id": "p-luna-102", "llmModelId": "019e40bf-15a1-495e-a3c9-9b6d2f4b2b66", "voiceName": "Luna", "gender": "female", "language": "en-US", "recordingUrl": "https://example.com/luna.mp3", "imgUrl": "https://example.com/luna.png" },
          { "id": "p-stella-103", "llmModelId": "019e40bf-15a1-495e-a3c9-9b6d2f4b2b66", "voiceName": "Stella", "gender": "female", "language": "en-US", "recordingUrl": "https://example.com/stella.mp3", "imgUrl": "https://example.com/stella.png" }
        ]
      }
    ],
    "meta": { "total": 2, "limit": 10, "offset": 0 }
  }
  ```
</ResponseExample>

***

### Field Descriptions Table

| Field     | Type    | Description                   |
| --------- | ------- | ----------------------------- |
| `success` | boolean | API request status            |
| `message` | string  | Human-readable result message |
| `data`    | array   | List of LLM model objects     |
| `meta`    | object  | Pagination details            |

**Model fields**

| Field         | Type          | Description               |
| ------------- | ------------- | ------------------------- |
| `id`          | string (UUID) | Model identifier          |
| `llmModel`    | string        | Model name                |
| `description` | string        | Short description         |
| `price`       | number        | Pricing value             |
| `isActive`    | boolean       | Whether model can be used |
| `voices`      | array         | List of voice objects     |

**Voice fields**

| Field          | Type          | Description                   |
| -------------- | ------------- | ----------------------------- |
| `id`           | string (UUID) | Voice identifier              |
| `llmModelId`   | string (UUID) | Parent model ID               |
| `voiceName`    | string        | Human readable voice name     |
| `gender`       | string        | Voice gender label (optional) |
| `language`     | string        | Locale code                   |
| `recordingUrl` | string (URL)  | Sample audio URL              |
| `imgUrl`       | string (URL)  | Avatar image URL              |

***

### Voice Relationship with Models

* Each voice belongs to a single model via `llmModelId`.
* You can filter or lookup voices by model ID.
* Use `voices[].id` as `voice_id` when creating agents to bind a voice to the agent.

***

### Notes and Validation Rules

* `id`, `llmModelId` must be valid UUIDs.
* `recordingUrl` and `imgUrl` must be valid HTTPS URLs.
* `price` is expressed in the platform's billing units; check plan docs for currency/scaling.
* `isActive: false` models/voices should not be offered for new agents.
* `language` should use BCP-47 locale codes (e.g., `en-US`).

***

If you want the example to include the full lists of every voice name for `Agni Lite` and `Agni Premium` (all names you provided), I can expand the `voices` arrays in the example to include every voice entry with sample recording and image URLs.


## OpenAPI

````yaml GET /api/v1/available-llm-models/with-voices
openapi: 3.0.1
info:
  title: Agni API
  version: 1.0.0
  description: >-
    Agni API for managing agents, tools, widget settings, telephony, and
    integrations.
servers:
  - url: https://api.ravan.ai
security:
  - X-Api-Key: []
tags:
  - name: AgentService
  - name: AgentToolService
  - name: WidgetSettingsService
  - name: PhoneService
  - name: AppointmentService
  - name: GHLService
  - name: CalComService
  - name: CampaignService
  - name: ContactService
  - name: CallingService
  - name: RAGService
  - name: ModelService
  - name: HealthService
paths:
  /api/v1/available-llm-models/with-voices:
    get:
      tags:
        - ModelService
      summary: List LLM Models With Voices
      description: List available LLM models with their voice IDs.
      operationId: ListLLMModelsWithVoices
      parameters:
        - name: limit
          in: query
          schema:
            type: integer
            format: int32
          description: The maximum number of model records to return.
        - name: offset
          in: query
          schema:
            type: integer
            format: int32
          description: The number of model records to skip before returning results.
      responses:
        '200':
          description: LLM models with voices fetched successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListLLMModelsWithVoicesResponse'
components:
  schemas:
    ListLLMModelsWithVoicesResponse:
      type: object
      properties:
        success:
          type: boolean
        message:
          type: string
        data:
          type: array
          items:
            $ref: '#/components/schemas/LLMModelWithVoices'
        meta:
          type: object
          properties:
            total:
              type: integer
            limit:
              type: integer
            offset:
              type: integer
    LLMModelWithVoices:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Unique model ID
        llm_model:
          type: string
          description: Model identifier
        description:
          type: string
          description: Human-readable model description
        price:
          type: number
          description: Model price
        is_active:
          type: boolean
          description: Whether the model is currently active
        voices:
          type: array
          items:
            $ref: '#/components/schemas/LLMVoice'
          description: Voices available for this model
    LLMVoice:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Unique voice ID
        llm_model_id:
          type: string
          format: uuid
          description: ID of the model this voice belongs to
        voice_name:
          type: string
          description: Display name of the voice
        gender:
          type: string
          description: Voice gender label
        language:
          type: string
          description: Voice language code
        recording_url:
          type: string
          format: uri
          description: URL for a sample recording
        img_url:
          type: string
          format: uri
          description: URL for the voice image
  securitySchemes:
    X-Api-Key:
      type: apiKey
      in: header
      name: X-Api-Key

````