Speko Docs

Supported languages

Every language tag the router routes today, and which accents have a validated voice.

Two lookups: which tags a key can route, and what a region subtag changes. What a tag means is in languages and accents.

Languages

A key is enabled for base languages, and a base language permits every region subtag under it. es covers es-PR and es-419 without either being listed.

BaseSTTLLMTTSBoard
en EnglishYesYesYesMeasured
es SpanishYesYesYesMeasured

A tag outside your key's list is refused before routing with 400 unsupported_language, and details.allowed_languages lists what the key does carry.

Region subtags

TagEffect
en-US, en-GB, any other en-*English board. The region is read and ignored — no English accent is measured yet.
es-PR, es-CU, es-CO, es-MX, es-DOSpanish board, and TTS narrows to that accent.
es-419, es-AR, any other es-*Spanish board. No accent entry for that region, so no narrowing.

Region subtags never change STT or LLM routing: transcription and completion read the base subtag only.

Accents

Five tags today, all Spanish. Each is an ordered list — a measured voice first, then a steering fallback on the model that can be directed to produce the accent.

TagAccentProduced byFailoverEvidence
es-PRPuerto RicanCartesia voice idGemini steering83% of raters named Puerto Rico
es-CUCubanCartesia voice idGemini steering78% named Cuba
es-COColombianElevenLabs voice idGemini steering5.00/5, 100% named Colombia, nine raters
es-MXMexicanCartesia voice idGemini steeringNot panel-validated — a labelled pick, treat it as a default
es-DODominicanGemini steeringNoneNo vendor tested carried the Dominican coda-s

A fixed voice id lands the first sample in roughly 200 ms; a steered accent floors near 0.7 seconds, because the model generates before it streams.

Two limits, both covered in languages and accents:

  • Accents are reachable on POST /v1/audio/speech/stream and on batch, not on the WebSocket TTS route.
  • A steered accent above 700 bytes of UTF-8 falls to a vendor holding no voice for that accent, and still returns 200.

Checking a tag

GET /v1/models is public and lists the catalog's languages:

curl -s https://api.speko.ai/v1/models | jq '.languages'

That list is the catalog's, not your key's. A tag can appear there and still be refused for your key, and a region subtag that routes fine is not always printed. For a per-tag answer that costs nothing, ask the router what it would pick:

curl -s "https://api.speko.ai/v1/routing/preview?stage=tts&language=es-PR" \
  -H "Authorization: Bearer $SPEKO_API_KEY"

x-route on any response names the provider and model that served it. x-route-reason carries the ranking evidence class — lang=es(measured) when the language has its own board, english-proxy when the order is inferred from English.

Not available yet

  • Accents outside Spanish. The accent table is Spanish-only. An en-GB request is ranked on the English board with no narrowing; pin a voice if you need a specific one.
  • Any base language not listed above. Ranking without a measured board falls back to English. A language is enabled once it has a board of its own, not when a vendor claims it.

On this page