API referenceTelegram

Browse the Telegram voice catalog

Returns a page of voices for Telegram voice messages, ordered by popularity (most popular first), as a data array.

Endpoint
GET https://api.dairo.app/v1/telegram/voices

Returns a page of voices for Telegram voice messages, ordered by popularity (most popular first), as a data array. Each entry carries a stable slug — the value you pass as telegram.voice.voiceId on a voice send — plus name, description, bestLanguage, languages, gender, tags, featured, and popularity; the top-level default field names the voice used when a send omits voiceId (currently adrian). limit defaults to 50 and is clamped to 1–100, and offset (default 0) drives plain offset paging — there is no cursor, and count reports the size of the returned page, not the catalog total, so keep paging until you get a short page. language filters to voices whose best language matches the given code (en, de, es, …), and featured=true returns only celebrity and character voices. Passing q switches the call into relevance-ranked search: results come back with mode set to search, an echoed query, and a score on each row, and in that mode offset and featured no longer apply (page size still honors limit). This is a read-only call — no idempotency key, no side effects — that any valid API key may make regardless of its scopes; sustained reads share your account's per-key read rate limit and return 429 when it is exceeded. Pass kind=phone to get the phone voice catalog instead — the 22 Dairo Live voices accepted as voice on POST /v1/phone/calls — where each row is { voiceId, name, description, language, gender, accent } (language is multilingual, en, or pt) and language, gender, and q filter it; the same rows are served by GET /v1/phone/voices.

Scope: __any__. Send the API key as a bearer token; Scopes lists what each one reaches.

Request

cURL
curl "https://api.dairo.app/v1/telegram/voices" \
  -H "Authorization: Bearer $DAIRO_API_KEY"

Query parameters

NameTypeRequiredDescription
languagestringnoFilter by best language (e.g. en, de, es).
qstringnoFree-text search over name and description.
featuredbooleannoOnly celebrity/character voices.
limitintegernoMaximum number of items in the page. (minimum 1, maximum 100, default 50)
offsetintegerno(minimum 0, default 0)
kind"tts", "phone"notts (default) for the Telegram TTS catalog, or phone for the Dairo Live phone voices (rows shaped like PhoneVoice). (default "tts")
genderstringnoFilter by gender.

Response

200 Success. Body: application/json, object.

FieldTypeRequiredDescription
objectstringno
countintegerno
limitintegerno
offsetintegerno
defaultstringno
dataarray of TelegramVoiceno
200
{
  "object": "string",
  "count": 0,
  "limit": 0,
  "offset": 0,
  "default": "string",
  "data": [
    {
      "slug": "welcome",
      "name": "Ada Lovelace",
      "description": null,
      "bestLanguage": null,
      "languages": [
        "string"
      ],
      "gender": null,
      "tags": [
        "string"
      ],
      "featured": true,
      "popularity": 0
    }
  ]
}

Errors

Every error has the same body, {"error": {"type", "code", "message", "param"}}; branch on code. Errors lists every code.

StatusMeaning
400The request is malformed or a value is invalid (invalid_request, invalid_domain, idempotency_key_mismatch).
401The API key is missing or invalid.
403The key lacks the scope this endpoint needs (scope_missing) or may not do this (not_permitted).
404No such resource in this account (resource_not_found).
429Rate limit, plan limit, budget or spend cap reached (rate_limited, plan_limit_reached, budget_exceeded, spend_cap_reached).
500An unexpected error; retry with backoff, then contact support (internal_error).

On this page