---
title: "Get Voice Capabilities"
method: GET
path: "/voices/capabilities"
tags: ["voices"]
---

# Get Voice Capabilities

`GET /voices/capabilities`

## Request

- Base URL: `https://api.moda.app/v1`
- URL: `https://api.moda.app/v1/voices/capabilities`
- Auth: HTTP bearer

The versioned model manifest and whether managed voice is available.

Always ``200`` for an authenticated key; ``provider_status`` is ``unavailable`` (every model
``status: unavailable``) when the provider is not configured. Never calls the provider.

## Headers

- `X-Voice-Engines` string, nullable: The voice engines this client understands, comma-separated: elevenlabs,fishaudio,inworld. ElevenLabs is always on; Fish Audio models and voices appear only for a client that lists fishaudio (or, on GET /v1/voices, asks for provider=fishaudio or a featured/community category), and Inworld's only for a client that lists inworld (or asks for provider=inworld).
- `Moda-Version` '2026-04-12' | '2026-05-01'

## Response `200`

Successful Response

- VoiceCapabilities: ``GET /v1/voices/capabilities`` (section 2.2). The top-level ``provider``/``provider_status`` describe the default engine (ElevenLabs), as they always have; ``providers`` lists every engine's readiness.
  - `object` 'voice_capabilities'
  - `contract_version` integer, required
  - `manifest_version` integer, required
  - `provider` 'elevenlabs'
  - `provider_status` 'ok' | 'unavailable', required
  - `unavailable_reason` string, nullable, required
  - `providers` ProviderReadiness[], required
    - `provider` 'elevenlabs' | 'fishaudio' | 'inworld', required
    - `provider_status` 'ok' | 'unavailable', required
    - `unavailable_reason` string, nullable, required
  - `generated_at` string, required
  - `catalog` CatalogInfo, required
    - `categories` string[], required
    - `filters` string[], required
    - `default_limit` integer, required
    - `max_limit` integer, required
  - `limits` ManifestLimits, required
    - `max_active_executions_per_team` integer, required
    - `max_rules_per_dictionary` integer, required
    - `max_workspace_dictionaries` integer, required
    - `max_audition_candidates` integer, required
    - `source_audio_max_bytes` integer, required
    - `source_audio_max_seconds` number, required
  - `models` ModelCapabilities[], required
    - `id` string, required
    - `label` string, required
    - `description` string, required
    - `provider` 'elevenlabs' | 'fishaudio' | 'inworld'
    - `provider_model_id` string, required
    - `operation` 'text_to_speech' | 'speech_to_speech', required
    - `status` string, required
    - `input` union, required
      - TextInputLimits
        - `kind` 'text'
        - `min_characters` integer, required
        - `max_characters` integer, required
        - `counted_text` 'prompt'
      - AudioInputLimits
        - `kind` 'audio'
        - `min_seconds` number, required
        - `max_seconds` number, required
        - `max_bytes` integer, required
        - `accepted_mime_types` string[], required
    - `languages` string[], required
    - `controls` Control[], required
      - `name` string, required
      - `label` string, required
      - `type` string, required
      - `minimum` union, required
        - integer
        - number
      - `maximum` union, required
        - integer
        - number
      - `step` union, required
        - integer
        - number
      - `values` string[], nullable, required
      - `provider_values` object, nullable, required
      - `default` union, required
        - boolean
        - integer
        - number
        - string
      - `advanced` boolean, required
      - `description` string, required
    - `semantic_modes` SemanticModes, required
      - `natural` object, required
      - `expressive` object, required
      - `steady` object, required
    - `tags` TagSupport, required
      - `supported` boolean, required
      - `syntax` string, nullable, required
      - `pattern` string, nullable, required
      - `vocabulary` string[], required
      - `deterministic` boolean, required
      - `counts_toward_characters` boolean, required
      - `paired` string[]
      - `language_switch` string[]
    - `pronunciation` PronunciationSupport, required
      - `mode` string, required
      - `representations` string[], required
      - `max_dictionaries` integer, required
      - `phoneme` PhonemeSyntax: Inline phoneme markup a model reads: ``start`` phonemes ``end``, per-language alphabets.
        - `start` string, required
        - `end` string, required
        - `alphabets` object, required
    - `context_stitching` ContextStitching, required
      - `supported` boolean, required
      - `max_text_characters` integer, nullable, required
      - `max_task_ids` integer, nullable, required
    - `repair` RepairSupport, required
      - `passage` string, required
      - `boundary` string, nullable, required
    - `alignment` AlignmentSupport, required
      - `supported` boolean, required
      - `source` string, nullable, required
      - `granularity` string, nullable, required
    - `output` OutputFormat, required
      - `mime_type` string, required
      - `format` string, required
      - `sample_rate_hz` integer, required
      - `bitrate_kbps` integer, required
      - `channels` integer, required
    - `speech_to_speech` SpeechToSpeechSupport, required
      - `compatible` boolean, required
    - `multi_speaker` MultiSpeakerSupport, required: One render of several voices: ``voices`` on the request plus turn tags in the prompt.
      - `supported` boolean, required
      - `max_speakers` integer, nullable, required
      - `turn_syntax` string, nullable, required
    - `billing` BillingBasis, required
      - `basis` 'character' | 'input_second' | 'utf8_byte', required
      - `quantity` 'prompt_code_points' | 'probed_source_seconds' | 'prompt_utf8_bytes', required
    - `recommended_for` string[], required
    - `notes` string[], required
    - `price_per_1k_usd` number: Present only during a promotion: the current (promo) USD price per 1,000 code points.
    - `list_price_per_1k_usd` number: Present only during a promotion: the standard USD price per 1,000 code points it returns to.
    - `promo_until` string, date-time: Present only during a promotion: the instant (UTC) it ends. A take admitted before it is charged the promo price.
    - `promo_percent_off` integer: Present only during a promotion: the discount as the provider announces it.

## Other responses

- `401`: Authentication required.
- `402`: Insufficient credits for a metered operation.
- `403`: Permission denied for this scope.
- `404`: Resource not found.
- `409`: Conflict (idempotency / resource state).
- `422`: Request validation failed.
- `429`: Rate limit exceeded.
- `500`: Internal error.

## Changes

- **2026-11-03** `9ac6a3abc0f8`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/moda/apis/moda-public-api/changes/voices/capabilities/get.md)

---

[API](https://skmtc.dev/moda/apis/moda-public-api.md) - [All operations](https://skmtc.dev/moda/apis/moda-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/moda/apis/moda-public-api/revisions/9ac6a3abc0f8?raw)
