Models
The relay 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://relay.speko.dev/v1/models \
-H "Authorization: Bearer $SPEKO_API_KEY"{
"models": [
{
"id": "anthropic:claude-sonnet-5",
"provider": "anthropic",
"kind": "llm",
"capabilities": { "tools": true, "structured_output": true, "cached_input": true, "reasoning": true },
"regions": ["us-east-1"]
}
],
"catalog_digest": "sha256:..."
}kindstringstt, tts, or llm.
capabilitiesobjectFour booleans: tools, structured_output, cached_input, reasoning. Advisory capability flags for LLM entries; always false for speech entries.
regionsstring[]AWS region IDs naming Speko relay locations that can serve the model — not provider data-residency claims. The listing always reflects the region that served your request.
catalog_digeststringsha256: + 64 hex characters identifying the exact catalog release in effect.
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.