Get Voice Facets

Filter-bar options (chips) for the voice browser, one list per dimension. Returns `providers`, `models`, `languages` (data-driven) plus `genders`, `ages`, `categories`, `accents` (fixed enums) as `VoiceFacetItem[]` so the FE builds the whole filter bar — with per-chip count badges — in a single request instead of hardcoding option lists (mirrors `GET /dictionary/languages`). Each item is `{value, label, count}`: `value` is passed straight back to `GET /voices`; `label` is the display name for providers/models and `null` elsewhere (the FE owns language + enum labels); `count` is the number of matching voices. For `languages`/`models`, `count` counts only voices that explicitly declare the value — "general-use" platform voices (no declared locales/models) that `GET /voices` matches against every language/model filter are not counted, so a chip's count can be lower than the `GET /voices` result. Accepts the SAME filters as `GET /voices` (tab scope `source`/`favorites_only`, plus `provider`/`model`/`language`/`gender`/`age`/`category`/`accent`/`search`). `count` is context-aware (faceted search): each dimension's counts apply every OTHER active filter but exclude that dimension's own selection — e.g. with `provider=elevenlabs` the language counts are scoped to ElevenLabs, while the provider chips still show every provider so the caller can switch. Count-0 policy: data-driven dimensions omit count-0 values (only present ones, each a valid `GET /voices` filter — providers/models restricted to the enabled catalog, languages to the supported-locale allowlist, so a chip never 422s). Enum dimensions always return the full enum in natural order, count-0 included, for the FE to grey out.

Authentication

AuthorizationBearer
Clerk JWT token

Headers

X-Workspace-Idstring or nullOptional

Query parameters

favorites_onlybooleanOptionalDefaults to false
Favorites tab scope
sourcelist of enums or nullOptional

Tab scope — repeat for OR, same values as GET /voices (e.g. platform, workspace)

Allowed values:
genderlist of enums or nullOptional
Repeat for OR
Allowed values:
agelist of enums or nullOptional
Repeat for OR
Allowed values:
categorylist of enums or nullOptional
Repeat for OR
accentlist of enums or nullOptional
Repeat for OR
searchstring or nullOptional<=200 characters
providerlist of strings or nullOptional

Repeat for OR, e.g. ?provider=elevenlabs&provider=rime

modellist of strings or nullOptional

Repeat for OR. Filters platform voices by TTS model, e.g. ?model=arcana&model=sonic-2

languagelist of strings or nullOptional

Repeat for OR, e.g. ?language=en-us&language=ko-kr

Response

Successful Response
dataobject

Filter options for the voice browser, one VoiceFacetItem[] per chip.

Two families of dimension:

  • Data-drivenproviders, models, languages: only values actually present in the scoped voices are returned (count is always ≥ 1; count-0 values are omitted). Every value is guaranteed to be a valid GET /voices filter (provider/model restricted to the enabled catalog, language to the supported-locale allowlist), so selecting one never yields a 422 or empty page. Sorted count DESC, then value ASC.
  • Enumgenders, ages, categories, accents: the FULL fixed enum is always returned in natural enum order, including count-0 values (the FE greys those out). label is None (the FE owns enum labels).

count is context-aware (faceted search): each dimension’s counts apply every OTHER active filter but exclude that dimension’s own selection, so a chip’s number reflects “results if I also pick this” without the dimension suppressing its own alternatives.

metaobject

Errors

422
Unprocessable Entity Error