BUZZ AI Gateway
Docs · API Reference · GET /v1/models

List Models

Return the set of models the calling token can use. GET /v1/models is a single endpoint with three response shapes: OpenAI-compatible by default, Anthropic-native when called with Anthropic headers, Gemini-shape when called with a Gemini key. The companion GET /v1/models/{model_id} retrieves one model by ID.

GET https://buzzai.cc/v1/models
One endpoint, three protocols. The same path serves three SDK shapes, picked from request headers. Use whichever shape your SDK expects: OpenAI clients work unchanged, the Anthropic SDK client.models.list() works unchanged, and Gemini SDKs that probe a single model also work.

Authentication

The /v1/models route runs the same token middleware as /v1/messages. Three header forms are accepted; missing or invalid tokens return HTTP 401 with a buzz_error body.

HeaderNotes
Authorization: Bearer <KEY>Recommended. Selects the OpenAI-compatible response shape.
Authorization: Bearer sk-<KEY>The sk- prefix is automatically stripped before validation.
x-api-key: <KEY> + anthropic-version: 2023-06-01Both headers together select the Anthropic-native response shape.
x-goog-api-key: <KEY> or ?key=<KEY>Gemini-style auth. Only honored on /v1beta/models, /v1beta/openai/models, and /v1/models/{id} (with model id). Bare /v1/models requires Authorization or x-api-key.

Response shape selection

BUZZ inspects the headers and dispatches to one of three branches:

TriggerResponse shape
x-api-key and anthropic-version setAnthropic native (data / first_id / has_more / last_id)
x-goog-api-key set, or ?key= in the query string (only on /v1beta/models, /v1beta/openai/models, or /v1/models/{id})Gemini-shape branch
Default (e.g. Authorization: Bearer)OpenAI-compatible (success / object / data)

Example — OpenAI-compatible (default)

curl https://buzzai.cc/v1/models \
  -H "Authorization: Bearer $BUZZ_API_KEY"
from openai import OpenAI

client = OpenAI(
    base_url="https://buzzai.cc/v1",
    api_key="",
)

models = client.models.list()
for m in models.data:
    print(m.id)
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://buzzai.cc/v1",
  apiKey: process.env.BUZZ_API_KEY,
});

const models = await client.models.list();
for (const m of models.data) {
  console.log(m.id);
}

Response

{
  "success": true,
  "object": "list",
  "data": [
    {
      "id": "claude-haiku-4-5-20251001",
      "object": "model",
      "created": 1626777600,
      "owned_by": "anthropic",
      "supported_endpoint_types": ["anthropic", "openai"]
    },
    {
      "id": "claude-sonnet-4-6",
      "object": "model",
      "created": 1626777600,
      "owned_by": "anthropic",
      "supported_endpoint_types": ["anthropic", "openai"]
    }
  ]
}

BUZZ adds two fields beyond the OpenAI standard: success (top-level) and supported_endpoint_types (per model). Tolerant parsers will ignore them; strict ones can drop them safely.

Example — Anthropic native

Send x-api-key together with anthropic-version to get the Anthropic shape — what anthropic.Anthropic().models.list() already sends out of the box.

curl https://buzzai.cc/v1/models \
  -H "x-api-key: $BUZZ_API_KEY" \
  -H "anthropic-version: 2023-06-01"
from anthropic import Anthropic

client = Anthropic(
    base_url="https://buzzai.cc",
    api_key="",
)

page = client.models.list()
for m in page.data:
    print(m.id, m.display_name)
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  baseURL: "https://buzzai.cc",
  apiKey: process.env.BUZZ_API_KEY,
});

const page = await client.models.list();
for (const m of page.data) {
  console.log(m.id, m.display_name);
}

Response

{
  "data": [
    {
      "id": "claude-opus-4-7",
      "type": "model",
      "display_name": "claude-opus-4-7",
      "created_at": "2021-07-20T00:00:00Z"
    },
    {
      "id": "claude-sonnet-4-6",
      "type": "model",
      "display_name": "claude-sonnet-4-6",
      "created_at": "2021-07-20T00:00:00Z"
    }
  ],
  "first_id": "claude-opus-4-7",
  "has_more": false,
  "last_id": "claude-sonnet-4-6"
}

Anthropic-shape differences vs upstream

The four top-level keys (data, first_id, has_more, last_id) match Anthropic's official response. The per-model object is intentionally minimal:

FieldBUZZUpstream Anthropic
idyesyes
typeyes (always "model")yes
display_nameyes — set equal to idyes — human-readable
created_atyes — defaults to 1626777600 (2021-07-20)yes — true release timestamp
capabilitiesnot returnedreturned (batch / citations / thinking / effort)
max_input_tokensnot returnedreturned
max_tokensnot returnedreturned
No pagination. has_more is hard-coded to false. BUZZ does not honour after_id, before_id, or limit query parameters — you always get the full list available to your token in one response. If you need richer model metadata (max tokens, capability flags), call Anthropic directly or hard-code it client-side.

Example — Gemini shape

If your tooling presents a Gemini key (x-goog-api-key or ?key=), the response uses a Gemini-style envelope. For Gemini-flavored model listing, use GET /v1beta/models; for a single-model lookup, use GET /v1/models/{id}. Note: bare /v1/models does not accept ?key= or x-goog-api-key — it returns 401.

curl "https://buzzai.cc/v1beta/models?key=$BUZZ_API_KEY"
{
  "models": [
    {"name": "...", "displayName": "...", "...": "..."}
  ],
  "nextPageToken": null
}

Common model IDs

The actual list returned to your token is dynamic — it depends on your group, token-level model limits, and which channels are enabled in the BUZZ admin console. There is no static global list. The IDs below are the Claude model identifiers BUZZ commonly serves; submit any of them to /v1/messages or /v1/chat/completions if your token has access.

Model IDFamily
claude-opus-4-7Opus 4.7 (alias)
claude-opus-4-6Opus 4.6 (alias)
claude-opus-4-5-20251101Opus 4.5 (dated)
claude-sonnet-4-6Sonnet 4.6 (alias)
claude-sonnet-4-5-20250929Sonnet 4.5 (dated)
claude-haiku-4-5-20251001Haiku 4.5 (dated)

Always pull the live list from GET /v1/models at startup rather than hard-coding — your account's group and your token's allow-list determine what is actually selectable.

Retrieve a single model

The companion route returns metadata for one model ID. Authentication and shape selection are identical to the list endpoint.

GET https://buzzai.cc/v1/models/{model_id}

Path parameters

NameTypeDescription
model_idstringThe model identifier, e.g. claude-haiku-4-5-20251001.

Examples

curl https://buzzai.cc/v1/models/claude-haiku-4-5-20251001 \
  -H "Authorization: Bearer $BUZZ_API_KEY"
from anthropic import Anthropic

client = Anthropic(
    base_url="https://buzzai.cc",
    api_key="",
)

model = client.models.retrieve("claude-haiku-4-5-20251001")
print(model.id, model.display_name)
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  baseURL: "https://buzzai.cc",
  apiKey: process.env.BUZZ_API_KEY,
});

const model = await client.models.retrieve("claude-haiku-4-5-20251001");
console.log(model.id, model.display_name);

Alternative listing paths

Two dedicated paths bypass header sniffing if you want a fixed shape:

PathAlways returns
GET /v1beta/openai/modelsOpenAI shape
GET /v1beta/modelsGemini shape

All these routes use the same TokenAuth middleware. Authorization: Bearer and x-api-key are accepted on every path. x-goog-api-key and ?key= are accepted only on /v1beta/models, /v1beta/openai/models, and /v1/models/{id}.

Errors

HTTPerror.typeTypical cause
401buzz_errorMissing or invalid token. Body: {"error":{"type":"buzz_error","message":"Invalid token (request id: ...)"}}
403permission_errorToken lacks permission, IP not allow-listed
429rate_limit_errorRate limit hit; respect retry-after
500api_errorInternal error; retry with backoff

The DELETE /v1/models/{model_id} route from upstream Anthropic is intentionally not implemented and returns a not-implemented response — model lifecycle is managed in the BUZZ admin console rather than per-token.

See also