# List models

> List the catalog or fetch one model, with prices and capabilities.

**GET** `https://deference.si/v1/models`

Returns every active model, of every type. Read `architecture.output_modalities` to tell text models from `image` and `embeddings` models. No key is needed. Claude Code reads this endpoint for model discovery, with `?limit=1000`.

**GET** `https://deference.si/v1/models/{id}`

Returns one model — the object itself, not the list wrapper. Ids contain a slash, so write it as part of the path: `/v1/models/anthropic/claude-haiku-4.5`. An unknown id returns `404 model_not_found`.

Ids can also end in `:incognito`. Those models run only on Phala's confidential-computing hardware, at Phala's price, and carry an `incognito` object: `{ "provider": "Phala", "zdr": true, "verification": "provider_reported" }`. See [Incognito](https://deference.si/docs/incognito).

Ids ending in `:overdrive` run on the one provider each model is pinned to, at that endpoint's price, with no fallback. They carry an `overdrive` object naming the provider, `fallback: false` and a dated observed speed. See [Overdrive](https://deference.si/docs/overdrive).

## Send a request

**curl**

```bash
curl https://deference.si/v1/models
```

**Python**

```python
import requests

models = requests.get("https://deference.si/v1/models").json()["data"]
print([model["id"] for model in models][:5])
```

**TypeScript**

```typescript
const response = await fetch("https://deference.si/v1/models");
const { data } = await response.json();
console.log(data.slice(0, 5).map((model: { id: string }) => model.id));
```

## Response

```json
{
  "object": "list",
  "data": [
    {
      "id": "anthropic/claude-sonnet-5.5",
      "object": "model",
      "created": 1790618686,
      "owned_by": "anthropic",
      "display_name": "Anthropic: Claude Sonnet 5.5",
      "name": "Anthropic: Claude Sonnet 5.5",
      "description": "Claude Sonnet 5.5 is Anthropic's Sonnet-class model for well-scoped everyday work, succeeding Claude Sonnet 5 as a direct upgrade. It is especially strong at building features, fixing bugs, and producing...",
      "context_length": 1000000,
      "max_output_tokens": 128000,
      "architecture": { "input_modalities": ["text", "image", "file"], "output_modalities": ["text"] },
      "pricing": {
        "prompt": "0.0000021",
        "completion": "0.0000105",
        "input_cache_read": "0.000000105",
        "input_cache_write": "0.000002625",
        "request": "0",
        "image": "0",
        "image_output": "0"
      },
      "supported_parameters": ["include_reasoning", "max_completion_tokens", "max_tokens", "reasoning", "reasoning_effort", "response_format", "stop", "structured_outputs", "tool_choice", "tools", "verbosity"]
    }
  ],
  "has_more": false,
  "first_id": "anthropic/claude-sonnet-5.5",
  "last_id": "anthropic/claude-sonnet-5.5"
}
```

## Fields

* `id` (string): The id to send as `model`.
* `display_name` (string): A readable name.
* `name` (string): The same name again, under OpenRouter's field.
* `description` (string): What the model is for.
* `context_length` (integer): Context window in tokens.
* `max_output_tokens` (integer | null): The largest output the model allows, or `null` when the model has no output cap — the case for embedding models.
* `architecture` (object): `input_modalities` and `output_modalities`.
* `pricing` (object): USD per token as strings: `prompt`, `completion`, `input_cache_read`, `input_cache_write`, `image_output`. `image_output` is the price per output image token. `request` and `image` are USD per request and per input image.
* `supported_parameters` (array): Request parameters the model accepts.
