Models GA on launch

The Supra-Score ranking and full per-benchmark detail for every AI model on SupraBench. List rankings or drill into a single model by its slug.

Last updated: April 18, 2026 Reading time: 5 min

List models

GET https://api.suprabench.com/v1/models

Returns models sorted by supraScore descending. Each row is a flat summary; for the full per-bench breakdown, follow up with GET /v1/models/:slug.

Query parameters

ParameterTypeDescription
limit optional integer 1–500. Default 100. Out-of-range values are clamped.
tag optional string Restrict results to models carrying this tag (e.g. coding, reasoning). See GET /v1/tags for the full list.

Response — array of ModelSummary

FieldTypeDescription
slugstringStable URL-safe identifier. Use this in GET /v1/models/:slug.
namestringDisplay name (e.g. "Claude Opus 4.7").
providerstringVendor ("Anthropic", "OpenAI", ...).
familyTagstringFamily identifier ("claude", "gpt", ...) for cross-version comparisons.
tagsstring[]Capability tags upvoted by the community (e.g. ["reasoning", "coding"]).
supraScorenumberAggregate Supra-Score, 0–100, two decimals. See About for the formula.
benchCountintegerNumber of distinct benchmarks contributing to supraScore.
updatedAtintegerUnix milliseconds of the last ranking refresh.

Example

curl "https://api.suprabench.com/v1/models?tag=coding&limit=3" \
  -H "Authorization: Bearer $SUPRABENCH_KEY"
resp = requests.get(
    "https://api.suprabench.com/v1/models",
    params={"tag": "coding", "limit": 3},
    headers={"Authorization": f"Bearer {KEY}"},
).json()
const params = new URLSearchParams({ tag: "coding", limit: "3" });
const r = await fetch(`https://api.suprabench.com/v1/models?${params}`, {
  headers: { Authorization: `Bearer ${KEY}` },
});
const models = await r.json();
req, _ := http.NewRequest("GET",
    "https://api.suprabench.com/v1/models?tag=coding&limit=3", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SUPRABENCH_KEY"))
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()

var models []struct {
    Slug       string  `json:"slug"`
    Name       string  `json:"name"`
    SupraScore float64 `json:"supraScore"`
}
json.NewDecoder(resp.Body).Decode(&models)

Response:

[
  {
    "slug": "claude-opus-4-7",
    "name": "Claude Opus 4.7",
    "provider": "Anthropic",
    "familyTag": "claude",
    "tags": ["reasoning", "coding", "long-context"],
    "supraScore": 92.41,
    "benchCount": 28,
    "updatedAt": 1745000000000
  },
  {
    "slug": "gpt-5-2026-q1",
    "name": "GPT-5 (Q1 2026)",
    "provider": "OpenAI",
    "familyTag": "gpt",
    "tags": ["reasoning", "coding", "agentic"],
    "supraScore": 91.07,
    "benchCount": 31,
    "updatedAt": 1745000000000
  },
  {
    "slug": "gemini-3-pro",
    "name": "Gemini 3 Pro",
    "provider": "Google",
    "familyTag": "gemini",
    "tags": ["coding", "multimodal"],
    "supraScore": 89.92,
    "benchCount": 22,
    "updatedAt": 1745000000000
  }
]

Get a model

GET https://api.suprabench.com/v1/models/{slug}

Returns a single model with the full per-benchmark score breakdown. Hidden models (community-flagged or admin-removed) return 404 not_found.

Path parameters

slug required string URL-safe model identifier from ModelSummary.slug.

Response — ModelDetail

Same fields as ModelSummary plus a scores array. See below.

ModelDetail.scores[] — per-benchmark entries

FieldTypeDescription
benchstringBenchmark slug — usable in GET /v1/benches filters.
benchNamestringBenchmark display name.
rawScorenumberAs reported by the source, in the benchmark's native units.
normalizedScorenumber0–100 scale used by the Supra-Score aggregation.
sourceUrlstringPublic URL the score was sourced from.
accessedAtintegerUnix milliseconds when the source was accessed by the submitter.
upvotesintegerCommunity upvotes on this submission.
downvotesintegerCommunity downvotes. Only submissions where upvotes > downvotes count toward supraScore.

Example

curl https://api.suprabench.com/v1/models/claude-opus-4-7 \
  -H "Authorization: Bearer $SUPRABENCH_KEY"
detail = requests.get(
    "https://api.suprabench.com/v1/models/claude-opus-4-7",
    headers={"Authorization": f"Bearer {KEY}"},
).json()
const r = await fetch(
  "https://api.suprabench.com/v1/models/claude-opus-4-7",
  { headers: { Authorization: `Bearer ${KEY}` } },
);
const detail = await r.json();
req, _ := http.NewRequest("GET",
    "https://api.suprabench.com/v1/models/claude-opus-4-7", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SUPRABENCH_KEY"))
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()

var detail map[string]any
json.NewDecoder(resp.Body).Decode(&detail)
{
  "slug": "claude-opus-4-7",
  "name": "Claude Opus 4.7",
  "provider": "Anthropic",
  "familyTag": "claude",
  "tags": ["reasoning", "coding", "long-context"],
  "supraScore": 92.41,
  "benchCount": 28,
  "scores": [
    {
      "bench": "swe-bench-verified",
      "benchName": "SWE-bench Verified",
      "rawScore": 71.4,
      "normalizedScore": 71.4,
      "sourceUrl": "https://www.anthropic.com/news/claude-opus-4-7",
      "accessedAt": 1744750000000,
      "upvotes": 18,
      "downvotes": 1
    },
    {
      "bench": "mmlu-pro",
      "benchName": "MMLU-Pro",
      "rawScore": 0.823,
      "normalizedScore": 82.3,
      "sourceUrl": "https://arxiv.org/abs/...",
      "accessedAt": 1744750000000,
      "upvotes": 9,
      "downvotes": 0
    }
  ]
}

Errors

StatusCodeWhen
400bad_requestEmpty :slug in detail call.
404not_foundNo active model with that slug. Hidden models are also reported as 404.