Overview
This page documents the json routes. The Graph on / is a scatter of Blended price vs Quality Score / Value Score. It is not the ranking. Ranked pick is GET /api/recommend. No API key.
models[]is the requested ranking (default: Quality Score)price[]is Value Score (quality per dollar). It is not cheapest Blended price.cheap[]is lowest Blended price above 0- lookup:
?q=NAME(name / slug / provider)
Rankings
| Field | Type | Description |
|---|---|---|
| Quality Score | number 0-100 | precision = Correct / (Correct + Incorrect); excessWrong = max(0, Incorrect − Correct); answerQuality = clamp((0.6 × Correct + 0.4 × precision) × (1 − excessWrong × 0.75)); Quality Score = (Σ available weight × component / Σ available weight) × 100, with weights 0.50 / 0.20 / 0.075 / 0.075 on answerQuality, clamp(Intelligence/65), clamp(Coding/80), clamp(Agentic/60); missing index drops from both sums Formula v1; answerQuality has a 0.50 pre-normalization weight and all available weights normalize. Published AA indices are combined without source-overlap correction; higher is better. |
| Value Score | number 0-100 | capability = clamp(Intelligence / 65); reliability = clamp(Correct × (1 − Incorrect × 0.35)) with missing Incorrect = 0; affordability = 1 / (1 + log10(1 + max(0, blendedPrice) × 8) × 0.45); Value Score = (0.6 × capability + 0.4 × reliability) × affordability × 100 Formula v1; always uses blendedPrice, not selected graph cost. higher is better. |
| Reliability | number 0-100 | Reliability = clamp((correct − incorrect + 1) / 2, 0, 1) × 100; requires finite correct and incorrect; abstain is not an input Formula v1; Graph Y-axis only. higher is better. |
| Blended price | USD / 1M tokens | 7:2:1 cache-hit · input · output. lower is better. |
| Intelligence Index | number | live data Intelligence Index on the Graph and Shortlist. |
| Coding Index | number | live data Coding Index. |
| Agentic Index | number | live data Agentic Index. |
| Correct answers | rate 0-1 | share of Omniscience questions answered correctly. |
| Incorrect answers | rate 0-1 | share of Omniscience questions answered incorrectly. |
cheap[] skips blendedPrice of 0 (local / unpublished rows).
Authentication
None. GET, HEAD, OPTIONS. CORS *.
GET/api/recommend
ranked pick for a constraint set. Default goal=quality, limit=10. Default body also includes price[] and cheap[]. read is the first field after source.
Query
| Key | Type | Default | Description |
|---|---|---|---|
goal | quality | price | cheap | coding | intelligence | evidence | quality | quality: Quality Score. price: Value Score (not cheapest USD). cheap: lowest Blended price above 0. coding / intelligence: those indexes. evidence: published evidence score. |
maxBlendedPrice | finite number | none | USD / 1M Blended price ceiling. |
minIntelligence | finite number | none | minimum Intelligence Index. |
minQualityValue | finite number | none | minimum Quality Score. |
reasoning | true | false | none | keep only reasoning or non-reasoning rows. |
openWeights | true | false | none | open or closed weights. |
minContextWindow | integer tokens | none | minimum context window. |
inputModality | comma list text,image,video,speech | none | AND: model must include every listed input. |
outputModality | comma list text,image,video,speech | none | AND: model must include every listed output. |
provider | string, max 64 | none | case-insensitive provider substring. |
q | string, max 64 | none | lookup by name / slug / provider. example: ?q=grok |
limit | integer 1-10 | 10 | row cap. 11 is 400. |
Unknown keys return 400.
Response fields
| Field | Type | Description |
|---|---|---|
source | string | always recommend |
read | string | first field after source. models[] is the requested ranking. price[] is Value Score, not cheapest USD. cheap[] is lowest Blended price. lookup: ?q=NAME. |
goal | string | applied goal. |
updatedAt | ISO datetime | from the models feed, else now. |
note | string | live ranking. HTML is a graph view, not the ranking. do not scrape /. |
filters | object | echo of applied query keys. |
count | integer | length of models[]. |
models | array | requested ranking. |
price | array | Value Score ranking. omitted when goal=price. |
cheap | array | lowest Blended price above 0. omitted when goal=cheap. |
models[] row
| Field | Type | Description |
|---|---|---|
slug | string | canonical slug. |
name | string | display name. |
provider | string | creator name. |
reasoning | boolean or null | reasoning row, if listed. |
openWeights | boolean or null | open weights, if listed. |
contextWindowTokens | integer or null | context window. |
inputModalities | string[] | text / image / video / speech. |
outputModalities | string[] | text / image / video / speech. |
blendedPrice | number or null | Blended price, USD / 1M. |
intelligence | number or null | Intelligence Index. |
coding | number or null | Coding Index. |
agentic | number or null | Agentic Index. |
correct | number or null | Correct answers rate. |
incorrect | number or null | Incorrect answers rate. |
qualityValue | number or null | Quality Score 0-100. |
priceValue | number or null | Value Score 0-100. |
why | string | one short sentence from actual numbers. |
Example Request
curl -sS "https://models.deggo.fyi/api/recommend"
curl -sS "https://models.deggo.fyi/api/recommend?q=grok"
curl -sS "https://models.deggo.fyi/api/recommend?goal=cheap"from urllib.request import Request, urlopen
req = Request(
"https://models.deggo.fyi/api/recommend",
headers={"Accept": "application/json"},
)
with urlopen(req) as response:
print(response.read().decode())Example Response
{
"source": "recommend",
"read": "models[] is the requested ranking. default goal=quality. price[] is quality per dollar, not cheapest USD. cheap[] is lowest blendedPrice above 0. lookup one model: GET /api/recommend?q=NAME. HTML is a graph view, not the ranking.",
"goal": "quality",
"updatedAt": "<from models feed, else ISO now>",
"note": "live ranking. HTML is a graph view, not the ranking. do not scrape /.",
"filters": { "goal": "quality", "limit": 10 },
"count": 10,
"models": [
{
"slug": "",
"name": "",
"provider": "",
"reasoning": true,
"openWeights": false,
"contextWindowTokens": 0,
"inputModalities": [],
"outputModalities": [],
"blendedPrice": 0,
"intelligence": 0,
"coding": 0,
"agentic": 0,
"correct": 0,
"incorrect": 0,
"qualityValue": 0,
"priceValue": 0,
"why": "short sentence from actual numbers"
}
],
"price": [],
"cheap": []
}Errors
| Status | Body | Description |
|---|---|---|
| 400 | { "error": "unknown query key: ..." }{ "error": "invalid limit" }{ "error": "query too long" } | unknown key, out of range, or query string over 512. |
| 429 | { "error": "rate limit" } | Retry-After: 60. 30 / 60s per IP. 120 / 60s global. |
| 503 | { "error": "models unavailable" } | catalog loader failed. |
| 405 | { "error": "method not allowed" } | not GET, HEAD, or OPTIONS. |
GET/api
Machine index. Fetch this first if query keys are unknown. Field use explains models[] vs price[] vs cheap[].
Example Request
curl -sS "https://models.deggo.fyi/api"Other routes
/api/modelsfull catalog the Graph uses. not a ranking. do not hammer. prefer recommend./api/benchmarksexternal boards/api/subscriptionsprovider plans/llms.txtcrawler pointer
Limits
- 30 / 60s per IP on
/apiand/api/recommend - 120 / 60s global
- query string <= 512 characters
limit1-10- no API key
- GET / HEAD / OPTIONS only