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

# Get Voice Capabilities

> 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.



## OpenAPI

````yaml /openapi/moda-public-api.yaml get /voices/capabilities
openapi: 3.1.0
info:
  title: Moda Public API
  description: >
    Programmatic access to Moda's canvas design platform. Create designs, export
    assets, manage brand kits, and run AI design tasks.


    ## Versioning


    Pin response shapes with a calendar-dated `Moda-Version` header (e.g.
    `2026-05-01`). **The pin is global** — it applies to every endpoint in the
    request, not just the one you adopted it for, so raising it to use a new
    endpoint also moves your other responses to that version's shapes.


    ### Migrating `2026-04-12` → `2026-05-01`


    - **Tasks** move from the flat `JobResponse` (`job_id`, `canvas_url`,
    `can_export`) to the canonical `Task` envelope. The export artifact is now
    under `result.export` as `{url, format, page_count}`; update any code that
    read the export URL from the old top-level fields.

    - **Multi-page PNG/JPEG exports are delivered as a single `.zip`** of
    per-page files (`page-1.png`, …), so `result.export.format` is `zip`. For
    one bundled document instead, request `format=pdf` or `pptx`; for a single
    image, pass `page_number`.
  version: 1.0.0
  x-moda-api-version: '2026-05-01'
servers:
  - url: https://api.moda.app/v1
    description: Production
security: []
tags:
  - name: canvases
    description: List, search, read, export, and share canvases
  - name: tasks
    description: Start and monitor AI design tasks
  - name: organizations
    description: List organizations and teams
  - name: credits
    description: Check credit balance and usage
  - name: brand-kits
    description: Manage brand kits
  - name: remix
    description: Duplicate and edit canvases
  - name: share-links
    description: Resolve share URLs to canvas identifiers
  - name: uploads
    description: Upload files for use as attachments
  - name: voices
    description: >-
      Managed voices: capabilities, the voice catalog, favorites and
      pronunciation dictionaries
  - name: usage
    description: Aggregate API usage stats for the caller's team
  - name: feedback
    description: Submit product feedback from Voyager
  - name: embed
    description: Signed iframe embed sessions
  - name: web
    description: 'Metered web research: search and page reading'
  - name: websites
    description: >-
      Create, update, publish, screenshot, and manage hosted multi-page static
      sites
  - name: drive
    description: >-
      Organize the workspace: folders, the folder tree, and item
      move/rename/visibility/delete for folders, canvases, and files
paths:
  /voices/capabilities:
    get:
      tags:
        - voices
      summary: Get Voice Capabilities
      description: >-
        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.
      operationId: voicesGetCapabilities
      parameters:
        - $ref: '#/components/parameters/ModaVersion'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VoiceCapabilities'
        '401':
          description: Authentication required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '402':
          description: Insufficient credits for a metered operation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '403':
          description: Permission denied for this scope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '409':
          description: Conflict (idempotency / resource state).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '422':
          description: Request validation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '500':
          description: Internal error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
      security:
        - API Key: []
components:
  parameters:
    ModaVersion:
      name: Moda-Version
      in: header
      required: false
      description: >-
        Calendar-dated API version pin. New integrations should pin `2026-05-01`
        to opt into the newest response shapes. For back-compat the server also
        accepts requests with no header and resolves them to the current default
        (today: `2026-04-12`); that default advances on each [sunset
        date](/api-reference/versioning). Any unsupported value returns 400
        `unsupported_version`.
      example: '2026-05-01'
      schema:
        type: string
        enum:
          - '2026-04-12'
          - '2026-05-01'
        default: '2026-05-01'
        example: '2026-05-01'
  schemas:
    VoiceCapabilities:
      properties:
        object:
          type: string
          const: voice_capabilities
          title: Object
          default: voice_capabilities
        contract_version:
          type: integer
          title: Contract Version
        manifest_version:
          type: integer
          title: Manifest Version
        provider:
          type: string
          const: elevenlabs
          title: Provider
          default: elevenlabs
        provider_status:
          type: string
          enum:
            - ok
            - unavailable
          title: Provider Status
        unavailable_reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Unavailable Reason
        generated_at:
          type: string
          title: Generated At
        catalog:
          $ref: '#/components/schemas/CatalogInfo'
        limits:
          $ref: '#/components/schemas/ManifestLimits'
        models:
          items:
            $ref: '#/components/schemas/ModelCapabilities'
          type: array
          title: Models
      additionalProperties: false
      type: object
      required:
        - contract_version
        - manifest_version
        - provider_status
        - unavailable_reason
        - generated_at
        - catalog
        - limits
        - models
      title: VoiceCapabilities
      description: '``GET /v1/voices/capabilities`` (section 2.2).'
    ErrorEnvelope:
      properties:
        type:
          $ref: '#/components/schemas/ErrorType'
        code:
          type: string
          title: Code
          description: >-
            Stable machine string keyed to doc_url. Never changes once
            published.
        message:
          type: string
          title: Message
          description: >-
            Human-readable message, for developers. Not localized, not
            user-facing.
        doc_url:
          type: string
          title: Doc Url
          description: Permalink to the docs page for this code.
        request_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Request Id
          description: Correlator for logs/Sentry/audit.
        causes:
          anyOf:
            - items:
                $ref: '#/components/schemas/ErrorEnvelope'
              type: array
            - type: 'null'
          title: Causes
          description: Aggregated upstream failures (e.g. per-page export errors).
        details:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Details
          description: >-
            Code-specific detail payload (e.g. validation field list). Callers
            should pass ``None`` rather than ``{}`` to omit the key from the
            response.
        retry_after_ms:
          anyOf:
            - type: integer
            - type: 'null'
          title: Retry After Ms
          description: Hint for rate-limited or transient errors.
        retryable:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Retryable
          description: >-
            Explicit retryability for this code, from the error-code registry:
            ``false`` means retrying the same request cannot succeed (fix the
            input / resource first); ``true`` means the condition is transient
            and a retry (with backoff / after the blocker clears) can succeed.
            Omitted for codes whose retryability is context-dependent — do not
            derive it from ``type`` or the HTTP status when this field is
            present.
      type: object
      required:
        - type
        - code
        - message
        - doc_url
      title: ErrorEnvelope
      description: >-
        Canonical error payload, nested under the top-level ``{"error": ...}``
        key.
    CatalogInfo:
      properties:
        categories:
          items:
            type: string
          type: array
          title: Categories
        filters:
          items:
            type: string
          type: array
          title: Filters
        default_limit:
          type: integer
          title: Default Limit
        max_limit:
          type: integer
          title: Max Limit
      additionalProperties: false
      type: object
      required:
        - categories
        - filters
        - default_limit
        - max_limit
      title: CatalogInfo
    ManifestLimits:
      properties:
        max_active_executions_per_team:
          type: integer
          title: Max Active Executions Per Team
        max_rules_per_dictionary:
          type: integer
          title: Max Rules Per Dictionary
        max_workspace_dictionaries:
          type: integer
          title: Max Workspace Dictionaries
        max_audition_candidates:
          type: integer
          title: Max Audition Candidates
        source_audio_max_bytes:
          type: integer
          title: Source Audio Max Bytes
        source_audio_max_seconds:
          type: number
          title: Source Audio Max Seconds
      additionalProperties: false
      type: object
      required:
        - max_active_executions_per_team
        - max_rules_per_dictionary
        - max_workspace_dictionaries
        - max_audition_candidates
        - source_audio_max_bytes
        - source_audio_max_seconds
      title: ManifestLimits
    ModelCapabilities:
      properties:
        id:
          type: string
          title: Id
        label:
          type: string
          title: Label
        description:
          type: string
          title: Description
        provider:
          type: string
          const: elevenlabs
          title: Provider
          default: elevenlabs
        provider_model_id:
          type: string
          title: Provider Model Id
        operation:
          type: string
          enum:
            - text_to_speech
            - speech_to_speech
          title: Operation
        status:
          type: string
          title: Status
        input:
          oneOf:
            - $ref: '#/components/schemas/TextInputLimits'
            - $ref: '#/components/schemas/AudioInputLimits'
          title: Input
          discriminator:
            propertyName: kind
            mapping:
              audio:
                $ref: '#/components/schemas/AudioInputLimits'
              text:
                $ref: '#/components/schemas/TextInputLimits'
        languages:
          items:
            type: string
          type: array
          title: Languages
        controls:
          items:
            $ref: '#/components/schemas/Control'
          type: array
          title: Controls
        semantic_modes:
          $ref: '#/components/schemas/SemanticModes'
        tags:
          $ref: '#/components/schemas/TagSupport'
        pronunciation:
          $ref: '#/components/schemas/PronunciationSupport'
        context_stitching:
          $ref: '#/components/schemas/ContextStitching'
        repair:
          $ref: '#/components/schemas/RepairSupport'
        alignment:
          $ref: '#/components/schemas/AlignmentSupport'
        output:
          $ref: '#/components/schemas/OutputFormat'
        speech_to_speech:
          $ref: '#/components/schemas/SpeechToSpeechSupport'
        billing:
          $ref: '#/components/schemas/BillingBasis'
        recommended_for:
          items:
            type: string
          type: array
          title: Recommended For
        notes:
          items:
            type: string
          type: array
          title: Notes
      additionalProperties: false
      type: object
      required:
        - id
        - label
        - description
        - provider_model_id
        - operation
        - status
        - input
        - languages
        - controls
        - semantic_modes
        - tags
        - pronunciation
        - context_stitching
        - repair
        - alignment
        - output
        - speech_to_speech
        - billing
        - recommended_for
        - notes
      title: ModelCapabilities
      description: One native model of the manifest (section 2.3).
    ErrorType:
      type: string
      enum:
        - invalid_request
        - authentication
        - permission
        - not_found
        - conflict
        - rate_limited
        - idempotency_conflict
        - unprocessable
        - upstream_error
        - internal_error
      title: ErrorType
      description: Closed set of high-level categories SDKs branch on.
    TextInputLimits:
      properties:
        kind:
          type: string
          const: text
          title: Kind
          default: text
        min_characters:
          type: integer
          title: Min Characters
        max_characters:
          type: integer
          title: Max Characters
        counted_text:
          type: string
          const: prompt
          title: Counted Text
          default: prompt
      additionalProperties: false
      type: object
      required:
        - min_characters
        - max_characters
      title: TextInputLimits
    AudioInputLimits:
      properties:
        kind:
          type: string
          const: audio
          title: Kind
          default: audio
        min_seconds:
          type: number
          title: Min Seconds
        max_seconds:
          type: number
          title: Max Seconds
        max_bytes:
          type: integer
          title: Max Bytes
        accepted_mime_types:
          items:
            type: string
          type: array
          title: Accepted Mime Types
      additionalProperties: false
      type: object
      required:
        - min_seconds
        - max_seconds
        - max_bytes
        - accepted_mime_types
      title: AudioInputLimits
    Control:
      properties:
        name:
          type: string
          title: Name
        label:
          type: string
          title: Label
        type:
          type: string
          title: Type
        minimum:
          anyOf:
            - type: integer
            - type: number
            - type: 'null'
          title: Minimum
        maximum:
          anyOf:
            - type: integer
            - type: number
            - type: 'null'
          title: Maximum
        step:
          anyOf:
            - type: integer
            - type: number
            - type: 'null'
          title: Step
        values:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Values
        provider_values:
          anyOf:
            - additionalProperties:
                anyOf:
                  - type: integer
                  - type: number
              type: object
            - type: 'null'
          title: Provider Values
        default:
          anyOf:
            - type: boolean
            - type: integer
            - type: number
            - type: string
            - type: 'null'
          title: Default
        advanced:
          type: boolean
          title: Advanced
        description:
          type: string
          title: Description
      additionalProperties: false
      type: object
      required:
        - name
        - label
        - type
        - minimum
        - maximum
        - step
        - values
        - provider_values
        - default
        - advanced
        - description
      title: Control
      description: >-
        One ``model_params`` key a model accepts (section 2.4). Every key is
        always present.
    SemanticModes:
      properties:
        natural:
          additionalProperties:
            anyOf:
              - type: boolean
              - type: integer
              - type: number
              - type: string
          type: object
          title: Natural
        expressive:
          additionalProperties:
            anyOf:
              - type: boolean
              - type: integer
              - type: number
              - type: string
          type: object
          title: Expressive
        steady:
          additionalProperties:
            anyOf:
              - type: boolean
              - type: integer
              - type: number
              - type: string
          type: object
          title: Steady
      additionalProperties: false
      type: object
      required:
        - natural
        - expressive
        - steady
      title: SemanticModes
    TagSupport:
      properties:
        supported:
          type: boolean
          title: Supported
        syntax:
          anyOf:
            - type: string
            - type: 'null'
          title: Syntax
        pattern:
          anyOf:
            - type: string
            - type: 'null'
          title: Pattern
        vocabulary:
          items:
            type: string
          type: array
          title: Vocabulary
        deterministic:
          type: boolean
          title: Deterministic
        counts_toward_characters:
          type: boolean
          title: Counts Toward Characters
      additionalProperties: false
      type: object
      required:
        - supported
        - syntax
        - pattern
        - vocabulary
        - deterministic
        - counts_toward_characters
      title: TagSupport
    PronunciationSupport:
      properties:
        mode:
          type: string
          title: Mode
        representations:
          items:
            type: string
          type: array
          title: Representations
        max_dictionaries:
          type: integer
          title: Max Dictionaries
      additionalProperties: false
      type: object
      required:
        - mode
        - representations
        - max_dictionaries
      title: PronunciationSupport
    ContextStitching:
      properties:
        supported:
          type: boolean
          title: Supported
        max_text_characters:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Text Characters
        max_task_ids:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Task Ids
      additionalProperties: false
      type: object
      required:
        - supported
        - max_text_characters
        - max_task_ids
      title: ContextStitching
    RepairSupport:
      properties:
        passage:
          type: string
          title: Passage
        boundary:
          anyOf:
            - type: string
            - type: 'null'
          title: Boundary
      additionalProperties: false
      type: object
      required:
        - passage
        - boundary
      title: RepairSupport
    AlignmentSupport:
      properties:
        supported:
          type: boolean
          title: Supported
        source:
          anyOf:
            - type: string
            - type: 'null'
          title: Source
        granularity:
          anyOf:
            - type: string
            - type: 'null'
          title: Granularity
      additionalProperties: false
      type: object
      required:
        - supported
        - source
        - granularity
      title: AlignmentSupport
    OutputFormat:
      properties:
        mime_type:
          type: string
          title: Mime Type
        format:
          type: string
          title: Format
        sample_rate_hz:
          type: integer
          title: Sample Rate Hz
        bitrate_kbps:
          type: integer
          title: Bitrate Kbps
        channels:
          type: integer
          title: Channels
      additionalProperties: false
      type: object
      required:
        - mime_type
        - format
        - sample_rate_hz
        - bitrate_kbps
        - channels
      title: OutputFormat
    SpeechToSpeechSupport:
      properties:
        compatible:
          type: boolean
          title: Compatible
      additionalProperties: false
      type: object
      required:
        - compatible
      title: SpeechToSpeechSupport
    BillingBasis:
      properties:
        basis:
          type: string
          enum:
            - character
            - input_second
          title: Basis
        quantity:
          type: string
          enum:
            - prompt_code_points
            - probed_source_seconds
          title: Quantity
      additionalProperties: false
      type: object
      required:
        - basis
        - quantity
      title: BillingBasis
  securitySchemes:
    API Key:
      type: http
      description: API key from Settings > Developer > REST API
      scheme: bearer

````