Speko Docs

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:..."
}
kindstring

stt, tts, or llm.

capabilitiesobject

Four 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_digeststring

sha256: + 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/models are 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.

On this page