---
title: "List measured models"
method: GET
path: "/v1/models"
---

# List measured models

`GET /v1/models`

## Response `200`

Measured model catalog. Only rows with routable: true are eligible for selection or pinning; routable: false rows remain visible as measured evidence.

- object
  - `object` 'list', required
  - `data` Model[], required
    - `id` string, required
    - `aliases` string[], required — Legacy input ids accepted for this canonical model. Responses continue to report id.
    - `object` 'model', required
    - `created` 0 — OpenAI-compatibility placeholder. Always 0; Speko does not publish model creation times.
    - `owned_by` string — OpenAI-compatibility mirror of provider.
    - `provider` string, required
    - `model` string, required
    - `api` 'stt' | 'llm' | 'tts', required
    - `routable` boolean, required — True when the row is eligible for selection and pinning; false when it remains published as measured evidence only.
    - `quality` number, nullable — Published benchmark quality for the board's default language (en), in the unit named by qualityUnit. Null when the model has no published quality measurement.
    - `qualityUnit` '% WER' | 'score' | 'Elo' — Unit of quality, fixed per api stage: % WER for stt (lower is better), score for llm, Elo for tts (arena rating from blind human A/B votes on the English board, field mean 1500). Per-language TTS studies publish an internal MOS and are not what this field reports.
    - `latencyMs` number, nullable — Published benchmark latency in milliseconds for the stage's latency metric: transcript finalization for stt, time to first token for llm, time to first audio for tts. Null when unmeasured.
    - `costPerMinUsd` number, nullable — Published benchmark price in USD. The unit follows the stage despite the field name: stt per minute of audio, llm per 1M tokens, tts per 1M characters. Null when unpublished.
    - `languages` string[] — Language tags with a measured benchmark quality for this model. Intersect with the top-level languages list to tell measured languages from selectable-but-unmeasured ones.
    - `voices` object[] — Curated voice roster. Present only on api: tts entries. Roster order is meaningful: the first entry is the provider default. An empty array means the roster is not yet curated, not that the model has no voices.
      - `id` string, required
      - `name` string, required
      - `gender` 'female' | 'male' | 'neutral', required
      - `styles` string[], required
    - `voicesVerified` string, nullable — YYYY-MM-DD date the voice roster was last curated. Present only on api: tts entries; null until a roster ships.
  - `languages` string[] — Language tags accepted by at least one public route.

---

[API](https://skmtc.net/speko/apis/speko-voice-router-api.md) · [All operations](https://skmtc.net/speko/apis/speko-voice-router-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/speko/speko-voice-router-api/versions/278edfaef74c/schema)
