Models

GET/v1/models

Request

Returns all available models with pricing, context lengths, and capabilities. OpenRouter-compatible format.

No authentication required.

Pricing is in per-token strings (multiply by 1M for $/1M tokens rate). Cached for 60 seconds.

GET /v1/models
bash
curl https://api.surplusintelligence.ai/v1/models
json
{
  "data": [
    {
      "id": "claude-opus-4.6",
      "name": "Claude Opus 4.6",
      "context_length": 200000,
      "max_completion_tokens": 32000,
      "pricing": {
        "prompt": "0.000015",
        "completion": "0.000075"
      },
      "architecture": {
        "input_modalities": ["text"],
        "output_modalities": ["text"]
      },
      "supported_parameters": ["temperature", "top_p", "tools", "stream"],
      "top_provider": {
        "max_completion_tokens": 32000
      }
    }
  ]
}

Reading Capabilities

GET /v1/models is the capability surface for everything that varies by model. Three fields carry it:

FieldCarries
architecture.input_modalitiesWhat the model accepts: text, image, video, file, audio
supported_featuresCoarse capability labels: vision, file_input, reasoning, tools, streaming, prompt_caching, and others
supported_parametersThe request knobs the model takes, including reasoning_effort, reasoning, tools. Note that include_reasoning appears on many rows but is always stripped on the chat wire (Reasoning Controls)

Check input_modalities and supported_features together for image input. They disagree on a meaningful number of rows (claude-opus-5 declares vision while its input_modalities still reads ["text"]), and the router treats a model as image-capable when either says so.

bash
# Models that accept image input, by either signal
curl -s https://api.surplusintelligence.ai/v1/models \
  | jq -r '.data[]
      | select(((.architecture.input_modalities // []) | index("image"))
               or ((.supported_features // []) | index("vision")))
      | .id'

# Models that accept a reasoning-effort setting
curl -s https://api.surplusintelligence.ai/v1/models \
  | jq -r '.data[] | select((.supported_parameters // []) | index("reasoning_effort")) | .id'

These values describe the model, not the individual seller offer that serves a given request. See Media Inputs, Reasoning Controls, and Provider & Model Verification.

Provider Allowlist

GET/v1/providers

The curated provider allowlist, unauthenticated and cached for 5 minutes. Each entry carries id, name, base_url, host, trusted, and a cost_reference_url pointing at that provider's own published pricing. trusted is the flag the default trusted-only routing preference filters on.

Current Counts

A recent live snapshot returned 145 catalog models and 76 active marketplace models. Counts change as models and seller liquidity change; use the endpoint response as source of truth.