Skip to main content
GET
/
v1
/
voices
/
search
Search voices.
curl --request GET \
  --url https://supertoneapi.com/v1/voices/search \
  --header 'x-sup-api-key: <api-key>'
{
  "items": [
    {
      "voice_id": "<voice-id>",
      "name": "Agatha",
      "age": "young-adult",
      "gender": "female",
      "use_case": "narration",
      "use_cases": [
        "narration",
        "storytelling"
      ],
      "language": [
        "ar",
        "bg",
        "cs",
        "da",
        "de",
        "el",
        "en",
        "es",
        "et",
        "fi",
        "fr",
        "hi",
        "hu",
        "id",
        "it",
        "ja",
        "ko",
        "nl",
        "pl",
        "pt",
        "ro",
        "ru",
        "vi"
      ],
      "styles": [
        "kind-default",
        "normal",
        "serene"
      ],
      "models": [
        "sona_speech_1",
        "sona_speech_2",
        "sona_speech_2_flash",
        "supertonic_api_1",
        "supertonic_api_3"
      ],
      "description": "",
      "samples": [
        {
          "language": "ko",
          "style": "kind-default",
          "model": "supertonic_api_3",
          "url": "https://example.com/samples/sample-audio.wav"
        }
      ],
      "thumbnail_image_url": "https://example.com/thumbnails/voice-thumbnail.png"
    }
  ],
  "total": 150,
  "next_page_token": "some_opaque_token_string_representing_last_id"
}
Returns preset voices matching the given filters. Multiple values per parameter are comma-separated and treated as OR conditions.

Endpoint

GET https://supertoneapi.com/v1/voices/search

Query parameters

NameDescriptionExample
nameVoice name, partial match.Coco
descriptionDescription, partial match.kind and gentle
languageLanguage code, comma-separated.ko,en,ja
genderVoice gender, comma-separated.male,female
ageVoice age group.child, young-adult, middle-aged, elder
use_casePrimary use case.audiobook, narration, advertisement
use_casesRecommended use cases (OR).audiobook,narration
styleEmotional style. The first value is the default.neutral, happy, sad, angry
modelSupported model.sona_speech_1
page_sizeItems per page. Default 20, max 100.50
next_page_tokenToken from a previous response.eyJpZCI6IjEyMzQ1In0=
sort is not supported. Results return in their natural order; sort client-side if needed.

Examples

Filter by style and language:
GET /v1/voices/search?style=happy&language=ko,en
Returns voices that include happy in their style list and support either Korean or English. Paginate:
GET /v1/voices/search?page_size=50&next_page_token=eyJpZCI6IjEyMzQ1In0=

Response

Returns items (array of voice objects) and next_page_token (string, optional). If no voices match, items is an empty array — the request still returns 200 OK.

Notes

  • Comma-separated values are OR-ed: language=ko,en&style=happy,sad returns voices that support Korean OR English and have happy OR sad in their styles.
  • Empty results are not an error — check items.length rather than relying on a 4xx response.
  • For the full voice object shape (samples, supported models, etc.), see Voices.

See also

Docs: Voices

Concept walkthrough with SDK code.

Voice search example

Build a searchable in-app voice picker.

Authorizations

x-sup-api-key
string
header
required

Query Parameters

page_size
number

Number of items per page (default: 20, min: 10, max: 100)

next_page_token
string

Token for pagination (obtained from the previous page's response)

name
string

Search across name. Space separated.

description
string

Search across description. Space separated.

language
string

Filter by language (comma-separated)

gender
string

Filter by gender (comma-separated)

age
string

Filter by age (comma-separated)

use_case
string

Filter by use case (comma-separated)

use_cases
string

Filter by use cases array (comma-separated for OR logic)

style
string

Filter by style (comma-separated for OR, semicolon-separated for AND). Mixing comma and semicolon is invalid and will result in 400. Note: AND semantics apply across styles on a single character; cloned voices have a single style and will only match AND when exactly one style is requested and equals the cloned voice style.

model
string

Filter by model (comma-separated)

Response

Paginated available voices response with next page token

items
object[]
required

List of character items

total
number
required

Total number of available characters (might be approximate or removed in future)

Example:

150

next_page_token
string

Token for fetching the next page of results. Undefined if no more pages.

Example:

"some_opaque_token_string_representing_last_id"