---
title: "List Voice Favorites"
method: GET
path: "/voice-favorites"
tags: ["voices"]
---

# List Voice Favorites

`GET /voice-favorites`

## Request

- Base URL: `https://api.moda.app/v1`
- URL: `https://api.moda.app/v1/voice-favorites`
- Auth: HTTP bearer

The caller's personal favorites and the team's workspace favorites, newest first.

## Query parameters

- `scope` 'user' | 'workspace' | 'all'
- `cursor` string, nullable
- `limit` integer

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

- VoiceFavoritePage
  - `object` 'list'
  - `data` VoiceFavorite[], required
    - `object` 'voice_favorite'
    - `voice` union, required
      - ClonedVoice: A voice cloned from a member of the caller's team (ENG-7327). Visible to the owner team only and never in the catalog search, so the catalog voice shape (and its shared fixtures) is unchanged: a catalog voice has neither ``kind`` nor ``clone``.
        - `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
        - `kind` 'cloned', required
        - `clone` VoiceClone, required: What only a cloned voice has. The source recording is private and never serialized.
          - `status` string, required
          - `owner_user_id` string, required
      - Voice: The list form of a voice (section 3.3).
        - `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
    - `scope` 'user' | 'workspace', required
    - `is_default` boolean, required
    - `created_at` string, required
  - `next_cursor` string, nullable, required
  - `returned` integer, required
  - `has_more` boolean, required
  - `limit` integer, required
  - `total` 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/voice-favorites/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)
