# Video Translate

## Translate a remote video

`client.videoTranslate.generate(VideoTranslateGenerateParamsbody, RequestOptionsoptions?): VideoTranslateGenerateResponse`

**post** `/v1/video-translate/generate`

Validates a remote video and starts an asynchronous translation request.

Optional `config.source_srt` / `config.target_srts` supply subtitles and
`config.speaker_voices` assigns voices to speakers (see `VideoTranslateConfig`).
When `webhook_url` is supplied, the service sends one JSON `POST` after the
request reaches `completed` or `failed`. The event type is
`video_translate.completed` or `video_translate.failed`; the request body uses
`{id, type, created_at, data}` and `data` mirrors the public request response
without `webhook_url`. Successful events include freshly signed video, audio and
SRT URLs. Receivers should deduplicate on `X-Chamelaion-Delivery`. Transport
failures, HTTP 429 and HTTP 5xx are retried up to three times with the same
delivery ID; redirects and other non-2xx responses are not accepted.
Validation happens in two phases:

1. **Synchronous (HTTP 400, no request is created):** request shape, config types,
   SRT size, UTF-8 encoding and syntax (optional BOM stripped, CRLF/CR normalized
   to LF), cue limit, language consistency, `target_srts` keys must be listed in
   `target_languages`, speaker ID syntax, and voice availability (every
   `speaker_voices` value must be a `voice_id` returned by
   `GET /v1/video-translate/voices`).
1. **After the video is processed, before translation starts:** SRT timing against
   the video duration (+1.2 s tolerance), source/target cue count and speaker
   compatibility, the detected source language against `source_srt.language`, and
   `speaker_voices` keys against the speakers in the source subtitles (or, without
   any SRT, the speakers already stored for the media). Failures mark the request
   `failed` with a descriptive `error_message`; no translation is started.

Limits: JSON body 8 MiB; each SRT 1 MiB; all SRTs 5 MiB; 5000 cues per SRT;
32 `speaker_voices` entries; config keys other than `source_srt`, `target_srts`
and `speaker_voices` 64 KiB in total; normalized config 6 MiB (measured without
HTML escaping). Duplicate JSON keys anywhere in the body and NUL characters in
config are rejected.

### Parameters

- `body: VideoTranslateGenerateParams`

  - `inputs: Array<Input>`

    - `type: "video"`

      - `"video"`

    - `url: string`

  - `target_languages: Array<string>`

  - `config?: Config`

    Request config. `tts_model`, `source_srt`, `target_srts` and `speaker_voices` are
    validated and consumed by the translation; every other key is stored as sent (at most 64 KiB in
    total, no NUL characters) and returned in responses. Duplicate keys at any depth are
    rejected. Numbers are stored exactly, but responses decode them as IEEE-754
    doubles, so integers beyond 2^53 may lose precision when read back.
    Without SRTs and voices, translation behaves exactly as before (transcription and
    speaker detection are automatic).

    - `source_srt?: SourceSrt`

      One SRT document. Each cue is an index (1, 2, ...), a timing line
      `HH:MM:SS,mmm --> HH:MM:SS,mmm`, and text formatted `Speaker N: text`.
      UTF-8 only (an optional BOM is stripped; CRLF/CR line endings are normalized to LF).
      At most 1 MiB and 5000 cues per document and 5 MiB across all documents.

      - `content: string`

      - `file_name?: string`

        Display name without path separators or control characters. Defaults to `source-<language>.srt` (`source-source.srt` when the source language is not yet known) or `target-<language>.srt`.

      - `language?: string`

        For `source_srt`, must equal `source_language` when that is given, and the detected language otherwise; taken from it when omitted. For `target_srts`, must equal the key when given.

    - `speaker_voices?: Record<string, string>`

      Voice per speaker. Keys are base-10, non-negative integer speaker IDs as used in
      the SRT cues (`"1"` for `Speaker 1: ...`); names such as `"speaker-1"`, signs,
      whitespace or hexadecimal are rejected, and keys that collide after normalization
      (`"01"` and `"1"`) are rejected. Keys are returned in canonical form. Values are
      external voice IDs (`voice_id` from `GET /v1/video-translate/voices`); unknown or
      deleted voices are rejected. Every key must be a speaker of the source subtitles;
      without any SRT, keys are checked against the speakers already detected for the
      video, and the request fails if none are known yet.

    - `target_srts?: Record<string, TargetSrts>`

      Target-language subtitles keyed by language code (trimmed, case-insensitive; keys
      must be unique after normalization and listed in `target_languages`). Target
      languages without an entry are translated automatically. Each target must have the
      same cue count and speakers as the effective source subtitles (the supplied
      `source_srt`, or the segments stored for the processed video).

      - `content: string`

      - `file_name?: string`

        Display name without path separators or control characters. Defaults to `source-<language>.srt` (`source-source.srt` when the source language is not yet known) or `target-<language>.srt`.

      - `language?: string`

        For `source_srt`, must equal `source_language` when that is given, and the detected language otherwise; taken from it when omitted. For `target_srts`, must equal the key when given.

    - `tts_model?: "eleven_v4" | "eleven_multilingual_v2"`

      Deprecated compatibility field. Prefer top-level `model`. `eleven_v4` equals
      `expressive`; `eleven_multilingual_v2` equals `classic`. If both fields are sent
      they must agree.

      - `"eleven_v4"`

      - `"eleven_multilingual_v2"`

  - `disable_background_audio?: boolean`

    Defaults to false when omitted; set to true to disable background audio.

  - `disable_lip_sync?: boolean`

    Defaults to false when omitted; set to true to disable lip sync.

  - `formality?: boolean`

  - `model?: "expressive" | "classic"`

    Product speech model. `expressive` maps to Eleven v4 and is the default; `classic` maps to Eleven Multilingual v2.

    - `"expressive"`

    - `"classic"`

  - `reference_id?: string`

  - `source_language?: string`

    Optional supported source language code; detected when omitted.

  - `webhook_url?: string`

    Optional HTTPS callback URL for terminal status. It must have a public host,
    contain no credentials or fragment, and redirects are not followed. The POST
    has `Content-Type: application/json`, `X-Chamelaion-Event` and
    `X-Chamelaion-Delivery` headers.

### Returns

- `VideoTranslateGenerateResponse`

  - `request_id: string`

  - `status: "success"`

    - `"success"`

### Example

```typescript
import Chamelaion from 'chamelaion';

const client = new Chamelaion({
  bearerToken: process.env['CHAMELAION_BEARER_TOKEN'], // This is the default and can be omitted
});

const response = await client.videoTranslate.generate({
  inputs: [
    { type: 'video', url: 'https://storage.googleapis.com/chamelaion-test-media/video.mp4' },
  ],
  target_languages: ['de', 'fr'],
  config: {
    source_srt: {
      file_name: 'interview.srt',
      content:
        '1\n00:00:00,000 --> 00:00:02,500\nSpeaker 0: Welcome back.\n\n2\n00:00:02,600 --> 00:00:05,000\nSpeaker 1: Thanks for having me.\n',
    },
    target_srts: {
      de: {
        content:
          '1\n00:00:00,000 --> 00:00:02,500\nSpeaker 0: Willkommen zurück.\n\n2\n00:00:02,600 --> 00:00:05,000\nSpeaker 1: Danke für die Einladung.\n',
      },
    },
    speaker_voices: { '0': '21m00Tcm4TlvDq8ikWAM', '1': 'AZnzlk1XvdvUeBnXmlld' },
  },
  model: 'expressive',
  reference_id: 'customer-job-42',
  source_language: 'en',
  webhook_url: 'https://hooks.example.com/chamelaion/video-translate',
});

console.log(response.request_id);
```

#### Response

```json
{
  "status": "success",
  "request_id": "4c98dd00-a982-47d9-a8d6-e1f0b35a8944"
}
```

## Translate an uploaded video

`client.videoTranslate.generateWithMedia(VideoTranslateGenerateWithMediaParamsbody, RequestOptionsoptions?): VideoTranslateGenerateWithMediaResponse`

**post** `/v1/video-translate/generate-with-media`

Stages one bounded video upload and starts an asynchronous translation request.
Accepts the same settings as `POST /v1/video-translate/generate` as form fields.
Subtitles may be sent inline in the `config` field or as native file parts
`source_srt` and `target_srt.<language>` (for example `target_srt.de`); sending the
same subtitle both ways is rejected. Parts may arrive in any order; validation that
needs every field runs after the whole body is read but before a request is created,
and the staged video is discarded on every failure. Both transports produce the same
normalized, persisted config.

Limits: video 2 GiB; whole body 2 GiB + 9 MiB; part names 64 bytes; `config` field
6 MiB; other text fields 64 KiB; at most 11 SRT parts (one source plus one per
allowed target language); each SRT part 1 MiB (rejected, never truncated); all SRTs
5 MiB. `target_srt.<language>` must name a supported language; invalid names are
rejected before the part is read.

### Parameters

- `body: VideoTranslateGenerateWithMediaParams`

  - `target_languages: string | Array<string>`

    JSON array (for example `["de","fr"]`) or comma-separated value (`de,fr`).

    - `string`

    - `Array<string>`

  - `video: Uploadable`

  - `config?: string`

    JSON-encoded `VideoTranslateConfig` object (at most 6 MiB). SRTs may be inline here or sent as the file parts below, but not both. Resource references such as `csv_resources` contain metadata only; do not send CSV bytes or base64.

  - `disable_background_audio?: boolean`

    Defaults to false when omitted; set to true to disable background audio.

  - `disable_lip_sync?: boolean`

    Defaults to false when omitted; set to true to disable lip sync.

  - `formality?: boolean`

  - `model?: "expressive" | "classic"`

    Product speech model. `expressive` maps to Eleven v4 and is the default; `classic` maps to Eleven Multilingual v2.

    - `"expressive"`

    - `"classic"`

  - `reference_id?: string`

  - `source_language?: string`

  - `source_srt?: Uploadable`

    Source-language SRT file part (filename must end in `.srt`; Content-Type empty, application/x-subrip, application/srt, text/srt, text/plain or application/octet-stream). Max 1 MiB.

  - `webhook_url?: string`

    Same terminal callback contract as `VideoTranslateGenerateRequest.webhook_url`.

### Returns

- `VideoTranslateGenerateWithMediaResponse`

  - `request_id: string`

  - `status: "success"`

    - `"success"`

### Example

```typescript
import fs from 'fs';
import Chamelaion from 'chamelaion';

const client = new Chamelaion({
  bearerToken: process.env['CHAMELAION_BEARER_TOKEN'], // This is the default and can be omitted
});

const response = await client.videoTranslate.generateWithMedia({
  target_languages: 'string',
  video: fs.createReadStream('path/to/file'),
});

console.log(response.request_id);
```

#### Response

```json
{
  "status": "success",
  "request_id": "4c98dd00-a982-47d9-a8d6-e1f0b35a8944"
}
```

## Domain Types

### Video Translate Generate Response

- `VideoTranslateGenerateResponse`

  - `request_id: string`

  - `status: "success"`

    - `"success"`

### Video Translate Generate With Media Response

- `VideoTranslateGenerateWithMediaResponse`

  - `request_id: string`

  - `status: "success"`

    - `"success"`

# Requests

## Get a video translation request

`client.videoTranslate.requests.retrieve(stringid, RequestOptionsoptions?): RequestRetrieveResponse`

**get** `/v1/video-translate/requests/{id}`

Returns an account-owned request by UUID or exact reference ID (requests of other accounts return 404). Completed artifact URLs are freshly signed on every read; SRT content is never returned.

### Parameters

- `id: string`

### Returns

- `RequestRetrieveResponse`

  - `id: string`

  - `config: Config`

    The request config as returned by the API. SRT content is replaced by metadata, `speaker_voices` keys are canonical speaker IDs, and other keys are returned unchanged.

    - `source_srt?: SourceSrt`

      Public description of a supplied SRT. The subtitle content is never returned.

      - `supplied: true`

        - `true`

      - `file_name?: string`

      - `language?: string`

    - `speaker_voices?: Record<string, string>`

    - `target_srts?: Record<string, TargetSrts>`

      - `supplied: true`

        - `true`

      - `file_name?: string`

      - `language?: string`

    - `tts_model?: "eleven_v4" | "eleven_multilingual_v2"`

      The explicitly selected text-to-speech model. Omitted when the request used the default.

      - `"eleven_v4"`

      - `"eleven_multilingual_v2"`

  - `created_at: string`

  - `disable_background_audio: boolean`

    Whether background audio was disabled for this request.

  - `disable_lip_sync: boolean`

    Whether lip sync was disabled for this request.

  - `formality: boolean`

  - `model: "expressive" | "classic"`

    Product speech model selected for the request.

    - `"expressive"`

    - `"classic"`

  - `status: "queued" | "uploading" | "processing" | 2 more`

    - `"queued"`

    - `"uploading"`

    - `"processing"`

    - `"completed"`

    - `"failed"`

  - `target_languages: Array<string>`

  - `error_message?: string`

    Present only when failed. A safe, bounded description, for example SRT or speaker validation errors found after the video was processed.

  - `finished_at?: string`

  - `outputs?: Record<string, Outputs>`

    Present only when completed, keyed by requested target language. URLs are signed on every read.

    - `audio: string`

    - `srt: string`

    - `video: string`

  - `reference_id?: string`

  - `source_language?: string`

    Explicit source language, or the detected one once processing starts.

  - `started_at?: string`

  - `webhook_url?: string`

    The configured terminal callback URL, when supplied.

### Example

```typescript
import Chamelaion from 'chamelaion';

const client = new Chamelaion({
  bearerToken: process.env['CHAMELAION_BEARER_TOKEN'], // This is the default and can be omitted
});

const request = await client.videoTranslate.requests.retrieve('x');

console.log(request.id);
```

#### Response

```json
{
  "id": "4c98dd00-a982-47d9-a8d6-e1f0b35a8944",
  "reference_id": "customer-job-42",
  "source_language": "en",
  "target_languages": [
    "de",
    "fr"
  ],
  "disable_background_audio": false,
  "disable_lip_sync": false,
  "formality": false,
  "config": {
    "source_srt": {
      "file_name": "interview.srt",
      "language": "en",
      "supplied": true
    },
    "target_srts": {
      "de": {
        "file_name": "target-de.srt",
        "language": "de",
        "supplied": true
      }
    },
    "speaker_voices": {
      "0": "21m00Tcm4TlvDq8ikWAM",
      "1": "AZnzlk1XvdvUeBnXmlld"
    }
  },
  "status": "completed",
  "created_at": "2026-10-07T12:00:00Z",
  "started_at": "2026-10-07T12:00:01Z",
  "finished_at": "2026-10-07T12:04:00Z",
  "outputs": {
    "de": {
      "video": "https://storage.example/signed/de.mp4",
      "audio": "https://storage.example/signed/de.wav",
      "srt": "https://storage.example/signed/de.srt"
    },
    "fr": {
      "video": "https://storage.example/signed/fr.mp4",
      "audio": "https://storage.example/signed/fr.wav",
      "srt": "https://storage.example/signed/fr.srt"
    }
  }
}
```

## List video translation requests

`client.videoTranslate.requests.list(RequestListParamsquery?, RequestOptionsoptions?): RequestListResponse`

**get** `/v1/video-translate/requests`

Returns the authenticated account's requests, newest first (`created_at` descending, then `id` descending), always paginated. `pagination.total` counts every request matching the filters. Responses use the same shape as `GET /v1/video-translate/requests/{id}`.

### Parameters

- `query: RequestListParams`

  - `created_from?: string`

    Inclusive lower bound on `created_at` (RFC 3339). Must not be after `created_to`.

  - `created_to?: string`

    Inclusive upper bound on `created_at` (RFC 3339).

  - `limit?: number`

    Page size. Non-integers and values below 1 are rejected with 400; values above 100 are clamped to 100.

  - `offset?: number`

    Number of items to skip. Non-integers and negative values are rejected with 400.

  - `reference_id?: string`

    Filter requests by exact `reference_id`.

  - `source_language?: string`

    Filter by the explicit or detected source language (supported language code).

  - `status?: "queued" | "uploading" | "processing" | 2 more`

    Filter by request status.

    - `"queued"`

    - `"uploading"`

    - `"processing"`

    - `"completed"`

    - `"failed"`

  - `target_language?: string`

    Return requests whose `target_languages` contain this supported language code.

### Returns

- `RequestListResponse`

  - `data: Array<Data>`

    - `id: string`

    - `config: Config`

      The request config as returned by the API. SRT content is replaced by metadata, `speaker_voices` keys are canonical speaker IDs, and other keys are returned unchanged.

      - `source_srt?: SourceSrt`

        Public description of a supplied SRT. The subtitle content is never returned.

        - `supplied: true`

          - `true`

        - `file_name?: string`

        - `language?: string`

      - `speaker_voices?: Record<string, string>`

      - `target_srts?: Record<string, TargetSrts>`

        - `supplied: true`

          - `true`

        - `file_name?: string`

        - `language?: string`

      - `tts_model?: "eleven_v4" | "eleven_multilingual_v2"`

        The explicitly selected text-to-speech model. Omitted when the request used the default.

        - `"eleven_v4"`

        - `"eleven_multilingual_v2"`

    - `created_at: string`

    - `disable_background_audio: boolean`

      Whether background audio was disabled for this request.

    - `disable_lip_sync: boolean`

      Whether lip sync was disabled for this request.

    - `formality: boolean`

    - `model: "expressive" | "classic"`

      Product speech model selected for the request.

      - `"expressive"`

      - `"classic"`

    - `status: "queued" | "uploading" | "processing" | 2 more`

      - `"queued"`

      - `"uploading"`

      - `"processing"`

      - `"completed"`

      - `"failed"`

    - `target_languages: Array<string>`

    - `error_message?: string`

      Present only when failed. A safe, bounded description, for example SRT or speaker validation errors found after the video was processed.

    - `finished_at?: string`

    - `outputs?: Record<string, Outputs>`

      Present only when completed, keyed by requested target language. URLs are signed on every read.

      - `audio: string`

      - `srt: string`

      - `video: string`

    - `reference_id?: string`

    - `source_language?: string`

      Explicit source language, or the detected one once processing starts.

    - `started_at?: string`

    - `webhook_url?: string`

      The configured terminal callback URL, when supplied.

  - `pagination: Pagination`

    - `limit: number`

      Applied page size.

    - `offset: number`

      Applied result offset.

    - `total: number`

      Total number of matching records.

### Example

```typescript
import Chamelaion from 'chamelaion';

const client = new Chamelaion({
  bearerToken: process.env['CHAMELAION_BEARER_TOKEN'], // This is the default and can be omitted
});

const requests = await client.videoTranslate.requests.list();

console.log(requests.data);
```

#### Response

```json
{
  "data": [
    {
      "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
      "config": {
        "source_srt": {
          "supplied": true,
          "file_name": "file_name",
          "language": "language"
        },
        "speaker_voices": {
          "foo": "string"
        },
        "target_srts": {
          "foo": {
            "supplied": true,
            "file_name": "file_name",
            "language": "language"
          }
        },
        "tts_model": "eleven_v4"
      },
      "created_at": "2019-12-27T18:11:19.117Z",
      "disable_background_audio": true,
      "disable_lip_sync": true,
      "formality": true,
      "model": "expressive",
      "status": "queued",
      "target_languages": [
        "string"
      ],
      "error_message": "error_message",
      "finished_at": "2019-12-27T18:11:19.117Z",
      "outputs": {
        "foo": {
          "audio": "https://example.com",
          "srt": "https://example.com",
          "video": "https://example.com"
        }
      },
      "reference_id": "reference_id",
      "source_language": "source_language",
      "started_at": "2019-12-27T18:11:19.117Z",
      "webhook_url": "https://example.com"
    }
  ],
  "pagination": {
    "limit": 1,
    "offset": 0,
    "total": 0
  }
}
```

## Domain Types

### Request Retrieve Response

- `RequestRetrieveResponse`

  - `id: string`

  - `config: Config`

    The request config as returned by the API. SRT content is replaced by metadata, `speaker_voices` keys are canonical speaker IDs, and other keys are returned unchanged.

    - `source_srt?: SourceSrt`

      Public description of a supplied SRT. The subtitle content is never returned.

      - `supplied: true`

        - `true`

      - `file_name?: string`

      - `language?: string`

    - `speaker_voices?: Record<string, string>`

    - `target_srts?: Record<string, TargetSrts>`

      - `supplied: true`

        - `true`

      - `file_name?: string`

      - `language?: string`

    - `tts_model?: "eleven_v4" | "eleven_multilingual_v2"`

      The explicitly selected text-to-speech model. Omitted when the request used the default.

      - `"eleven_v4"`

      - `"eleven_multilingual_v2"`

  - `created_at: string`

  - `disable_background_audio: boolean`

    Whether background audio was disabled for this request.

  - `disable_lip_sync: boolean`

    Whether lip sync was disabled for this request.

  - `formality: boolean`

  - `model: "expressive" | "classic"`

    Product speech model selected for the request.

    - `"expressive"`

    - `"classic"`

  - `status: "queued" | "uploading" | "processing" | 2 more`

    - `"queued"`

    - `"uploading"`

    - `"processing"`

    - `"completed"`

    - `"failed"`

  - `target_languages: Array<string>`

  - `error_message?: string`

    Present only when failed. A safe, bounded description, for example SRT or speaker validation errors found after the video was processed.

  - `finished_at?: string`

  - `outputs?: Record<string, Outputs>`

    Present only when completed, keyed by requested target language. URLs are signed on every read.

    - `audio: string`

    - `srt: string`

    - `video: string`

  - `reference_id?: string`

  - `source_language?: string`

    Explicit source language, or the detected one once processing starts.

  - `started_at?: string`

  - `webhook_url?: string`

    The configured terminal callback URL, when supplied.

### Request List Response

- `RequestListResponse`

  - `data: Array<Data>`

    - `id: string`

    - `config: Config`

      The request config as returned by the API. SRT content is replaced by metadata, `speaker_voices` keys are canonical speaker IDs, and other keys are returned unchanged.

      - `source_srt?: SourceSrt`

        Public description of a supplied SRT. The subtitle content is never returned.

        - `supplied: true`

          - `true`

        - `file_name?: string`

        - `language?: string`

      - `speaker_voices?: Record<string, string>`

      - `target_srts?: Record<string, TargetSrts>`

        - `supplied: true`

          - `true`

        - `file_name?: string`

        - `language?: string`

      - `tts_model?: "eleven_v4" | "eleven_multilingual_v2"`

        The explicitly selected text-to-speech model. Omitted when the request used the default.

        - `"eleven_v4"`

        - `"eleven_multilingual_v2"`

    - `created_at: string`

    - `disable_background_audio: boolean`

      Whether background audio was disabled for this request.

    - `disable_lip_sync: boolean`

      Whether lip sync was disabled for this request.

    - `formality: boolean`

    - `model: "expressive" | "classic"`

      Product speech model selected for the request.

      - `"expressive"`

      - `"classic"`

    - `status: "queued" | "uploading" | "processing" | 2 more`

      - `"queued"`

      - `"uploading"`

      - `"processing"`

      - `"completed"`

      - `"failed"`

    - `target_languages: Array<string>`

    - `error_message?: string`

      Present only when failed. A safe, bounded description, for example SRT or speaker validation errors found after the video was processed.

    - `finished_at?: string`

    - `outputs?: Record<string, Outputs>`

      Present only when completed, keyed by requested target language. URLs are signed on every read.

      - `audio: string`

      - `srt: string`

      - `video: string`

    - `reference_id?: string`

    - `source_language?: string`

      Explicit source language, or the detected one once processing starts.

    - `started_at?: string`

    - `webhook_url?: string`

      The configured terminal callback URL, when supplied.

  - `pagination: Pagination`

    - `limit: number`

      Applied page size.

    - `offset: number`

      Applied result offset.

    - `total: number`

      Total number of matching records.

# Voices

## List voices for speaker assignment

`client.videoTranslate.voices.list(VoiceListParamsquery?, RequestOptionsoptions?): VoiceListResponse`

**get** `/v1/video-translate/voices`

Lists the voices that can be used as values in `config.speaker_voices`.
`voice_id` is the external voice ID to submit. `name` and `is_favorite` reflect the
authenticated account's personalization; `default_name` is the catalog name.
Ordered by favorites first, then `name` (case-insensitive), then `voice_id`.

### Parameters

- `query: VoiceListParams`

  - `application?: string`

    Case-insensitive exact match on the voice's application (use case), for example `narration` (max 100 characters).

  - `favorite?: boolean`

    Only favorites (`true`) or only non-favorites (`false`).

  - `gender?: "Male" | "Female" | "Other"`

    Case-insensitive gender filter.

    - `"Male"`

    - `"Female"`

    - `"Other"`

  - `language?: string`

    Case-insensitive exact match on the voice's primary language or any of its verified languages (max 100 characters).

  - `limit?: number`

    Page size. Non-integers and values below 1 are rejected with 400; values above 100 are clamped to 100.

  - `offset?: number`

    Number of items to skip. Non-integers and negative values are rejected with 400.

  - `search?: string`

    Case-insensitive substring of the voice's effective (account-personalized) name.

### Returns

- `VoiceListResponse`

  - `pagination: Pagination`

    - `limit: number`

      Applied page size.

    - `offset: number`

      Applied result offset.

    - `total: number`

      Total number of matching records.

  - `voices: Array<Voice>`

    - `application: string`

      Intended use case, for example `narration`.

    - `default_name: string`

    - `description: string`

    - `gender: "Male" | "Female" | "Other"`

      - `"Male"`

      - `"Female"`

      - `"Other"`

    - `is_favorite: boolean`

      Whether the authenticated account marked this voice as a favorite.

    - `language: string`

      Primary language label.

    - `name: string`

      Effective name (the account's custom name when set, otherwise `default_name`).

    - `voice_id: string`

      External voice ID. Use this value in `config.speaker_voices`.

### Example

```typescript
import Chamelaion from 'chamelaion';

const client = new Chamelaion({
  bearerToken: process.env['CHAMELAION_BEARER_TOKEN'], // This is the default and can be omitted
});

const voices = await client.videoTranslate.voices.list();

console.log(voices.pagination);
```

#### Response

```json
{
  "voices": [
    {
      "voice_id": "21m00Tcm4TlvDq8ikWAM",
      "name": "Rachel (narration)",
      "default_name": "Rachel",
      "description": "Calm, young adult female voice.",
      "language": "en",
      "application": "narration",
      "gender": "Female",
      "is_favorite": true
    }
  ],
  "pagination": {
    "limit": 50,
    "offset": 0,
    "total": 1
  }
}
```

## Domain Types

### Voice List Response

- `VoiceListResponse`

  - `pagination: Pagination`

    - `limit: number`

      Applied page size.

    - `offset: number`

      Applied result offset.

    - `total: number`

      Total number of matching records.

  - `voices: Array<Voice>`

    - `application: string`

      Intended use case, for example `narration`.

    - `default_name: string`

    - `description: string`

    - `gender: "Male" | "Female" | "Other"`

      - `"Male"`

      - `"Female"`

      - `"Other"`

    - `is_favorite: boolean`

      Whether the authenticated account marked this voice as a favorite.

    - `language: string`

      Primary language label.

    - `name: string`

      Effective name (the account's custom name when set, otherwise `default_name`).

    - `voice_id: string`

      External voice ID. Use this value in `config.speaker_voices`.
