Models
The Router catalog, capability flags, and how canary probes gate what is routable.
GET /v1/models
Returns the models currently routable for your organization from the region serving you:
curl -s https://router.speko.dev/v1/models \
-H "Authorization: Bearer $SPEKO_API_KEY"{
"models": [
{
"id": "claude-sonnet-5",
"provider": "anthropic",
"kind": "llm",
"capabilities": {
"tools": true, "structured_output": true, "cached_input": true, "reasoning": true,
"diarization": false, "keywords": false, "noise_reduction": false,
"word_timestamps": false, "word_timings": false, "character_timings": false
},
"regions": ["us-east-1"]
},
{
"id": "sonic-3.5",
"provider": "cartesia",
"kind": "tts",
"capabilities": {
"tools": false, "structured_output": false, "cached_input": false, "reasoning": false,
"diarization": false, "keywords": false, "noise_reduction": false,
"word_timestamps": false, "word_timings": true, "character_timings": false
},
"regions": ["us-east-1"]
}
],
"catalog_digest": "sha256:..."
}kindstringstt, tts, or llm.
capabilitiesobjectAdvisory capability flags. Every entry carries every flag, so the ones that
do not apply to a model's kind are present and false. LLM entries set
tools, structured_output, cached_input, reasoning. STT entries set
diarization, keywords, noise_reduction, and word_timestamps — what
the route can be asked for in the
options object; a
request asking for a capability the route lacks is refused
capability_unsupported rather than served without it. TTS entries set
word_timings and character_timings — see
word timings. These two report what a
route emits on its own rather than something you can ask for: word_timings
means the route sends utterance.timings, and character_timings means its
engine measures per character, which the Router groups into words before
they reach you. A route with neither sends no timing frames, and no error.
regionsstring[]AWS region IDs naming Speko Router locations that can serve the model — not provider data-residency claims. The listing always reflects the region that served your request.
batch_audio_limitsobjectPresent on every STT entry from GET /v1/models?path=batch: the bounds of
the model's pre-recorded API on one upload, as max_pcm_bytes (decoded PCM)
and/or max_duration_seconds. The batch listing contains only models that
have a pre-recorded route; realtime-only models (Deepgram Flux, Cartesia
ink-2, OpenAI gpt-live-transcribe, Palabra) are omitted from it and are
not candidates for transcription jobs.
catalog_digeststringsha256: + 64 hex characters identifying the exact catalog release in effect.
Use path=batch when choosing a model for
POST /v1/stt/transcriptions or a
transcription job. On the synchronous endpoint automatic
routing applies the same batch_audio_limits and skips models that cannot
accept the parsed recording; jobs use them to plan chunks. These limits are
not returned for the default path=stream query.
The live catalog
The catalog is dynamic. The authenticated GET /v1/models response and the dashboard's Models page are the authoritative sources for currently available providers, model IDs, regions, and capabilities.
Representative entries include Deepgram speech recognition, Cartesia speech synthesis, and OpenAI or Anthropic language models. Do not copy those examples into allowlists: read the live catalog when validating a route or presenting model choices.
Canary gating
Speko runs a scheduled canary in every region that exercises each route as an ordinary customer — a real transcription, a real synthesis, a real completion. A (region, provider, model) route is routable only while its latest probe is a pass that is recent enough; a newer failure always beats an older pass.
Consequences you can rely on:
- Models missing from
/v1/modelsare not receiving auto-routed traffic in that region right now. - The list is advisory and can be up to about 30 seconds stale; admission re-checks authoritatively, so a just-failed route may briefly still be listed and yet refuse work with
no_eligible_route-class errors. - Pinning an unlisted model with explicit routing does not bypass the health gate.