---
title: "Find Similar Voices"
method: POST
path: "/voices/similar"
tags: ["voices"]
---

# Find Similar Voices

`POST /voices/similar`

## Request

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

Find ElevenLabs Voice Library voices that sound like an uploaded recording, closest first.

``source_audio`` is a ``file_`` id from ``POST /v1/uploads`` (mp3, wav or aac, 1-300 seconds); it
is streamed to the provider and no copy is kept. Each result is the same voice object as ``GET
/v1/voices/{voice_id}``: speak it by its ``vox_`` id like any catalog voice. These voices never
appear in ``GET /v1/voices``. Free (``model_not_in_plan``, ``required_plan: starter``) is refused;
the search itself is not charged.

## 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'

## Request body

- SimilarVoicesRequest: ``POST /v1/voices/similar`` body (section 3.11).
  - `source_audio` string, required: The file_ id of an uploaded recording (POST /v1/uploads): mp3, wav or aac, 1-300 s.
  - `limit` integer: How many voices to return, closest first.

## Response `200`

Successful Response

- SimilarVoicePage: ``POST /v1/voices/similar``: the matched voices, closest first, in their detail form.
  - `object` 'list'
  - `data` VoiceDetail[], required
    - `object` 'voice'
    - `id` string, required
    - `name` string, required
    - `description` string, nullable, required
    - `provider` 'elevenlabs' | 'fishaudio' | 'inworld', required
    - `category` string, required
    - `source` string, required
    - `creator_name` string, nullable, required
    - `labels` VoiceLabels, required
      - `accent` string, nullable, required
      - `age` string, nullable, required
      - `gender` string, nullable, required
      - `use_case` string, nullable, required
      - `descriptive` string, nullable, required
    - `languages` VoiceLanguage[], required
      - `language` string, required
      - `accent` string, nullable, required
      - `locale` string, nullable, required
    - `compatible_models` string[], required
    - `recommended_models` string[], required
    - `preview` VoicePreview, required
      - `url` string, required
      - `mime_type` string
      - `expires_at` string, nullable
    - `availability` VoiceAvailability, required
      - `status` string, required
      - `reason` string, nullable, required
      - `revoked_at` string, nullable, required
    - `catalog_refreshed_at` string, required
    - `settings_defaults` VoiceSettingsDefaults, required
      - `stability` number, nullable, required
      - `similarity_boost` number, nullable, required
      - `style` number, nullable, required
      - `use_speaker_boost` boolean, nullable, required
      - `speed` number, nullable, required
    - `favorite` VoiceFavoriteFlags, required
      - `user` boolean, required
      - `workspace` boolean, required
      - `workspace_default` boolean, required
  - `returned` integer, required

## 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/similar/post.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)
