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.
| Base | STT | LLM | TTS | Board |
|---|---|---|---|---|
en English | Yes | Yes | Yes | Measured |
es Spanish | Yes | Yes | Yes | Measured |
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
| Tag | Effect |
|---|---|
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-DO | Spanish 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.
| Tag | Accent | Produced by | Failover | Evidence |
|---|---|---|---|---|
es-PR | Puerto Rican | Cartesia voice id | Gemini steering | 83% of raters named Puerto Rico |
es-CU | Cuban | Cartesia voice id | Gemini steering | 78% named Cuba |
es-CO | Colombian | ElevenLabs voice id | Gemini steering | 5.00/5, 100% named Colombia, nine raters |
es-MX | Mexican | Cartesia voice id | Gemini steering | Not panel-validated — a labelled pick, treat it as a default |
es-DO | Dominican | Gemini steering | None | No 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/streamand 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-GBrequest 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.