List models
GET/v1/models
The model ids this key can ask for, with context and output limits where they are known, in both OpenAI and Anthropic fields.
The model ids this key can ask for. Always memtro and auto; then auto/<provider> for each provider you hold a key for; then <provider>/<model> (or compat:<label>/<model>) for each key's models: the list saved with the key, otherwise the provider's own listing, otherwise a built-in list when the provider does not answer. Each row carries the fields OpenAI clients read and the ones Anthropic clients read, so model discovery works from either SDK. Under the organisation's model lock, only the routing ids and memtro are listed.
Example
Against https://platform.memtro.com, with your key in MEMTRO_API_KEY.
curl https://platform.memtro.com/v1/models \
-H "Authorization: Bearer $MEMTRO_API_KEY"
from openai import OpenAI
client = OpenAI(base_url="https://platform.memtro.com/v1", api_key="sk-memtro-…")
for model in client.models.list():
print(model.id)
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://platform.memtro.com/v1", apiKey: process.env.MEMTRO_API_KEY });
for await (const model of client.models.list()) console.log(model.id);
Shortened; `created` values illustrative.
{
"object": "list",
"data": [
{ "id": "memtro", "object": "model", "created": 1794470400, "owned_by": "memtro (alias for auto)", "limit": { "context": 200000, "output": 32000 }, "type": "model", "display_name": "memtro", "created_at": "2026-11-12T00:00:00.000Z" },
{ "id": "auto", "object": "model", "created": 1794470400, "owned_by": "memtro (complexity-routed across the configured ladder)", "type": "model", "display_name": "auto", "created_at": "2026-11-12T00:00:00.000Z" },
{ "id": "auto/anthropic", "object": "model", "created": 1794470400, "owned_by": "memtro (complexity-routed within anthropic)", "type": "model", "display_name": "auto/anthropic", "created_at": "2026-11-12T00:00:00.000Z" },
{ "id": "anthropic/claude-opus-5", "object": "model", "created": 1794470400, "owned_by": "anthropic", "type": "model", "display_name": "anthropic/claude-opus-5", "created_at": "2026-11-12T00:00:00.000Z" }
],
"has_more": false,
"first_id": "memtro",
"last_id": "anthropic/claude-opus-5"
}
Authentication
An API key, as Authorization: Bearer or x-api-key.
- Every reply, errors included, carries
x-request-idandrequest-idheaders with the same id, startingreq-. Quote it to support. - It sends no CORS headers, so a page on another origin cannot call it; call it from a server.
Response
200application/json
Every model, in one page.
object"list"OptionalAlways
list.dataarray of objectsOptionalThe models.
8 fields of
dataidstringOptionalThe id to send as
model.object"model"OptionalAlways
model.createdintegerOptionalUnix time, in seconds.
owned_bystringOptionalThe provider, or a description for the routing ids.
limitobjectOptionalcontextandoutputtoken limits, where known. Forautoandmemtrothese are the narrowest on the ladder, the only figures true whichever rung answers.type"model"OptionalAnthropic's field: always
model.display_namestringOptionalAnthropic's field: the id.
created_atstringOptionalAnthropic's field:
createdas an ISO date.
has_morefalseOptionalAlways
false: there is one page.first_idstringOptionalThe first id, for Anthropic clients.
last_idstringOptionalThe last id, for Anthropic clients.
Errors
In the OpenAI envelope, {"error": {"message", "type", "param", "code"}}. What each code means and what to do about it is in the error catalogue.
| Status | Code | When |
|---|---|---|
| 401 | invalid_api_key | The key is missing, malformed, revoked or expired. |
| 402 | subscription_inactive | The organisation has no active subscription. |
| 500 | none | An internal error. |
Notes
No CORS headers: call it from a server, not from a page on another origin.