Model Catalog API
The catalog API is how you read what SpiderGate knows about each model: its specs, its live per-provider pricing, the benchmarks behind it, and its score in each of nine capability categories. It is the surface behind the dashboard's Models page, and your agents read exactly the same data.
Five endpoints. One is public; the other four take a bearer token.
Base URL
https://spideriq.ai/api/gate/v1All paths below are relative to that base.
Authentication
Authorization: Bearer <client_id>:<api_key>:<api_secret>
Authorization: Bearer spideriq_pat_…Note: only
/catalog/leaderboardis public. The other four endpoints return 401 without a token. See Authentication for the token formats.
Endpoint summary
GET /catalog/leaderboard— public · Rank models globally, by task type, or by capability categoryGET /catalog/categories— token required · List the nine capability categoriesGET /catalog/models— token required · List the enriched catalog with filters and a field projectionGET /catalog/models/{model_id}— token required · One model's full enriched recordGET /catalog/models/{model_id}/evals— token required · A model's eval aggregate
Reads are not metered and not billable. Meters fire only on a completion, never on a catalog read.
GET /catalog/leaderboard
Rank models. Public, no token needed.
Pass category to rank by a capability percentile from the taxonomy scorer. Pass task_type to rank by auto-eval success rate instead. category takes precedence over task_type; omit both for the global ranking.
task_type— type string · Rank for this task type. Max length 64.category— type string · Capability key, e.g.coding. Max length 64. Wins overtask_type.sort— type string · defaultscore· Onlyscoreis supported (within-category percentile, best first). Max length 32.limit— type integer · default100· 1 to 500.
curl -s "https://spideriq.ai/api/gate/v1/catalog/leaderboard?category=coding&sort=score&limit=2"Response — the envelope carries the category metadata, then the ranked list:
{
"category": "coding",
"label": "Coding",
"emoji": "💻",
"is_scored": true,
"found": true,
"count": 2,
"total": 129,
"leaderboard": [
{
"rank": 1,
"id": "openai/gpt-5",
"provider": "openrouter",
"model_id": "openai/gpt-5",
"display_name": "OpenAI: GPT-5",
"owned_by": "openai",
"context_window": 400000,
"pricing_input": 1.25,
"pricing_output": 10.0,
"is_free": false,
"score": 99.0,
"n_signals": 4,
"confidence": "med",
"components": [ { "name": "SWE-Bench Verified", "self_reported": false } ]
}
]
}score is the within-category percentile, rank is the position, and total is the denominator that rank counts against. components lists the benchmarks that produced the score, each flagged self_reported when the number came from the vendor.
Note: an unknown
categoryreturns 200 withfound: falseand an empty leaderboard, not a 404. Checkfoundbefore trusting an empty list.
GET /catalog/categories
List the capability categories. Requires a token.
include_inactive— type boolean · defaultfalse· Include categories that are not published.
curl -s -H "Authorization: Bearer $SPIDERGATE_TOKEN" \
"https://spideriq.ai/api/gate/v1/catalog/categories"{
"count": 9,
"categories": [
{
"key": "coding",
"label": "Coding",
"description": "Code generation, debugging, software engineering (SWE-Bench, HumanEval, LiveCodeBench, Terminal-Bench).",
"emoji": "💻",
"parent_key": null,
"sort_order": 1,
"is_scored": true,
"is_active": true
}
]
}The nine keys are coding, design_frontend, reasoning, math, vision, research, tool_use, chat and translation. Use key as the category value on the leaderboard.
GET /catalog/models
List the enriched catalog. Requires a token.
provider— type string · Filter by provider. Max length 64.search— type string · Match against id and display name. Max length 200.tag— type string · Filter by an authored tag. Max length 64.fields— type string · CSV projection, e.g.capabilities,pricing,per_provider,evals. Max length 256.configured_only— type boolean · defaultfalse· Only routable models.free_only— type boolean · defaultfalse· Only free-tier models.servable_only— type boolean · defaultfalse· Only models callable right now through the direct-pin path.include_hidden— type boolean · defaultfalse· Include models hidden from the public catalog.limit— type integer · default200· 1 to 1000.offset— type integer · default0· Pagination offset.
curl -s -H "Authorization: Bearer $SPIDERGATE_TOKEN" \
"https://spideriq.ai/api/gate/v1/catalog/models?provider=openrouter&limit=1"{
"total": 1213,
"count": 1,
"fields": null,
"models": [
{
"id": "openai/gpt-4o",
"provider": "openrouter",
"model_id": "openai/gpt-4o",
"display_name": "OpenAI: GPT-4o",
"owned_by": "openai",
"context_window": 128000,
"pricing_input": 2.5,
"pricing_output": 10.0,
"is_free": false,
"capabilities": [],
"is_configured": false,
"servable": false,
"tags": [],
"badges": []
}
]
}Tip:
totalcounts what the query can return, which excludes hidden models unless you passinclude_hidden=true. Usefieldsto keep responses small when you only need pricing or capabilities.
GET /catalog/models/{model_id}
One model's full record, including its per-category scores. Requires a token.
model_id is a path parameter and usually contains a slash, so URL-encode it: openai/gpt-4o becomes openai%2Fgpt-4o.
curl -s -H "Authorization: Bearer $SPIDERGATE_TOKEN" \
"https://spideriq.ai/api/gate/v1/catalog/models/openai%2Fgpt-4o"The record carries everything from the list shape plus sort_order, hidden, and category_scores:
{
"id": "openai/gpt-4o",
"display_name": "OpenAI: GPT-4o",
"category_scores": [
{
"category_key": "translation",
"label": "Translation",
"emoji": "🌐",
"score": 50,
"rank": 33,
"n_signals": 1,
"confidence": "low",
"components": [
{ "name": "MMMLU", "self_reported": true, "normalized_score": 0.814 }
]
}
]
}A model with no benchmark evidence returns an empty category_scores. That means not scored yet, not scored zero.
GET /catalog/models/{model_id}/evals
A model's eval aggregate: automated runs, human ratings, and a summary. Requires a token.
model_id— type string (path) · Required. URL-encode the slash.task_type— type string · Scope the aggregate to one task type. Max length 64.
curl -s -H "Authorization: Bearer $SPIDERGATE_TOKEN" \
"https://spideriq.ai/api/gate/v1/catalog/models/openai%2Fgpt-4o/evals"{
"model": "gpt-4o",
"model_id": "openai/gpt-4o",
"display_name": "OpenAI: GPT-4o",
"task_type": null,
"auto": [],
"human": [],
"summary": { "auto_count": 0, "human_count": 0, "avg_stars": null }
}Note: evals are just getting started. The endpoint and its shape are live, but coverage is currently very thin, so expect empty
autoandhumanarrays for most models. Treatsummary.avg_stars: nullas no data, never as a low rating.
Errors
401— No token, or a malformed one, on any endpoint except/catalog/leaderboard. · SendAuthorization: Bearer <client_id>:<api_key>:<api_secret>or aspideriq_pat_…token.404—model_iddoes not match any catalog row. · Check the id against/catalog/models. Remember to URL-encode the slash.422— A parameter failed validation, e.g.limit=99999against a max of 500. · Readdetail[].locin the response to find the offending parameter, then apply the limits listed under that endpoint above.500— The catalog query failed server-side. · Retry. If it persists, the response body carries a generic message; check the gateway status page.
An unknown category on the leaderboard is not an error. It returns 200 with found: false.
Reading the catalog from an agent
The same data is available to agents through the @spideriq/gateway-skills marketplace package and the mcp-gate MCP slice, which wrap these endpoints as gate_catalog_list, gate_catalog_get, gate_catalog_model_evals and gate_leaderboard. An agent picking a model for a task ranks it exactly the way the dashboard does.