Models
2 min read
The models endpoint tells you what you can call. Treat it as the source of truth: a model that is not in it will be rejected by chat completions. There are no plan tiers on the catalog - every account with a valid key sees the same list.
/models{ "object": "list", "data": [ { "id": ... }, ... ] }.curl https://devthrottle.com/api/v1/models -H "Authorization: Bearer $DEVTHROTTLE_API_KEY"What the default response contains
With no query string you get everything callable in one request: the chat models, the speech models, and the current speech-to-text model. Every entry carries a type field, so you can sort them yourself, and owned_by is devthrottle on all of them - the endpoint never names a hosting provider.
Filters
?type=chat- the models chat completions accepts.?type=speech- the models speech accepts. Each entry also carries its voice ids invoices, the same ids with their language invoiceDetails, and thedefaultVoiceused when you send none.?type=transcription- the single speech-to-text entry.
The transcription entry advertises the id transcription is serving right now. Read it rather than assume it: that endpoint accepts whatever model name an OpenAI-shaped client sends, so the catalog is the only place the current id is stated.
Practical advice
- Fetch the list at startup rather than hard-coding ids - what is available changes over time, and unknown models are hard errors by design (no silent substitution, ever).
- Model ids are public names; use them as-is in the
modelfield.
Status codes
- 401 -
invalid_api_key: this endpoint needs a validdt_key like every other one. - 405 -
method_not_allowed: onlyGETis supported here. - 500 -
internal_error.