STOP WASTING PAID TOKENS. START POOLING ACCOUNTS TODAY. [ GET YOUR VAULT ]

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/v1

All paths below are relative to that base.

Authentication

Authorization: Bearer <client_id>:<api_key>:<api_secret>
Authorization: Bearer spideriq_pat_…

Note: only /catalog/leaderboard is public. The other four endpoints return 401 without a token. See Authentication for the token formats.

Endpoint summary

  • GET /catalog/leaderboardpublic · Rank models globally, by task type, or by capability category

  • GET /catalog/categoriestoken required · List the nine capability categories

  • GET /catalog/modelstoken required · List the enriched catalog with filters and a field projection

  • GET /catalog/models/{model_id}token required · One model's full enriched record

  • GET /catalog/models/{model_id}/evalstoken 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 over task_type.

  • sort — type string · default score · Only score is supported (within-category percentile, best first). Max length 32.

  • limit — type integer · default 100 · 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 category returns 200 with found: false and an empty leaderboard, not a 404. Check found before trusting an empty list.

GET /catalog/categories

List the capability categories. Requires a token.

  • include_inactive — type boolean · default false · 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 · default false · Only routable models.

  • free_only — type boolean · default false · Only free-tier models.

  • servable_only — type boolean · default false · Only models callable right now through the direct-pin path.

  • include_hidden — type boolean · default false · Include models hidden from the public catalog.

  • limit — type integer · default 200 · 1 to 1000.

  • offset — type integer · default 0 · 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: total counts what the query can return, which excludes hidden models unless you pass include_hidden=true. Use fields to 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 auto and human arrays for most models. Treat summary.avg_stars: null as no data, never as a low rating.

Errors

  • 401 — No token, or a malformed one, on any endpoint except /catalog/leaderboard. · Send Authorization: Bearer <client_id>:<api_key>:<api_secret> or a spideriq_pat_… token.

  • 404model_id does 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=99999 against a max of 500. · Read detail[].loc in 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.