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.
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
| Parameter | Type | Description |
|---|---|---|
| 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
| Field | Type | Description |
|---|---|---|
| slug | string | Stable URL-safe identifier. Use this in GET /v1/models/:slug. |
| name | string | Display name (e.g. "Claude Opus 4.7"). |
| provider | string | Vendor ("Anthropic", "OpenAI", ...). |
| familyTag | string | Family identifier ("claude", "gpt", ...) for cross-version comparisons. |
| tags | string[] | Capability tags upvoted by the community (e.g. ["reasoning", "coding"]). |
| supraScore | number | Aggregate Supra-Score, 0–100, two decimals. See About for the formula. |
| benchCount | integer | Number of distinct benchmarks contributing to supraScore. |
| updatedAt | integer | Unix 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
| Field | Type | Description |
|---|---|---|
| bench | string | Benchmark slug — usable in GET /v1/benches filters. |
| benchName | string | Benchmark display name. |
| rawScore | number | As reported by the source, in the benchmark's native units. |
| normalizedScore | number | 0–100 scale used by the Supra-Score aggregation. |
| sourceUrl | string | Public URL the score was sourced from. |
| accessedAt | integer | Unix milliseconds when the source was accessed by the submitter. |
| upvotes | integer | Community upvotes on this submission. |
| downvotes | integer | Community 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
| Status | Code | When |
|---|---|---|
| 400 | bad_request | Empty :slug in detail call. |
| 404 | not_found | No active model with that slug. Hidden models are also reported as 404. |