> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ninjachat.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Model catalog API

> Quick guide to picking the right model for your use case.

<Tip>
  **Not sure which model to pick?** Set `model: "ninja/auto"` and NinjaChat chooses from the current catalog. [Learn more about smart routing](/smart-routing)
</Tip>

## Pick a model

Chat bills per token. The rates below are the live **input · output \$/MTok** at the time of writing; see [Pricing](/pricing) for the full sheet and [`GET /api/v1/pricing`](/pricing#live-price-sheet) for a machine-readable copy.

| I want to...                           | Model                                                           | Price                 | ID                 |
| -------------------------------------- | --------------------------------------------------------------- | --------------------- | ------------------ |
| Let NinjaChat decide                   | Ninja Router                                                    | resolved model's rate | `ninja/auto`       |
| Hardest reasoning and coding           | [GPT-5.6 Sol](/api-reference/models/chat/gpt-5-6-sol)           | \$4 · \$20 /MTok      | `gpt-5.6-sol`      |
| Highest-capability long-running agents | [Claude Fable 5](/api-reference/models/chat/claude-fable-5)     | \$10 · \$50 /MTok     | `claude-fable-5`   |
| Build production coding agents         | [Claude Sonnet 5](/api-reference/models/chat/claude-sonnet-5)   | \$2 · \$10 /MTok      | `claude-sonnet-5`  |
| Run high-capability agents             | [Claude Opus 5](/api-reference/models/chat/claude-opus-5)       | \$5 · \$25 /MTok      | `claude-opus-5`    |
| Fast multimodal work                   | [Gemini 3.7 Flash](/api-reference/models/chat/gemini-3-7-flash) | \$1.50 · \$7.50 /MTok | `gemini-3.7-flash` |
| Long-context multimodal reasoning      | [Gemini 3.1 Pro](/api-reference/models/chat/gemini-3-1-pro)     | \$2 · \$12 /MTok      | `gemini-3.1-pro`   |
| Cost-efficient reasoning               | [DeepSeek V4 Pro](/api-reference/models/chat/deepseek-v4-pro)   | \$1.74 · \$3.48 /MTok | `deepseek-v4-pro`  |
| Low-cost long-context agents           | [MiniMax M2.7](/api-reference/models/chat/minimax-m2-7)         | \$0.30 · \$1.20 /MTok | `minimax-m2.7`     |
| Generate images                        | [Nano Banana 2](/api-reference/models/image/nano-banana-2)      | \$0.045/img           | `nano-banana-2`    |
| Generate video                         | [Veo 3.1 Fast](/api-reference/models/video/veo-3-1-fast)        | \$1.20/video          | `veo-3.1-fast`     |
| Search the web                         | [Web Search](/search)                                           | \$0.05/query          | —                  |

Browse all models with full specs, context windows, and pricing in the [Models tab](/models-overview).

## Fetch models via API

<CodeGroup>
  ```typescript TypeScript SDK theme={null}
  const models = await client.models.list();
  const gpt = await client.models.retrieve("gpt-5.6-sol");
  ```

  ```python Python SDK theme={null}
  models = client.models.list()
  gpt = client.models.retrieve("gpt-5.6-sol")
  ```

  ```bash cURL theme={null}
  curl "https://www.ninjachat.ai/api/v1/models?modality=text&capability=tools"
  ```
</CodeGroup>

`GET /models` and `GET /models/{id}` are public — no API key needed. Each model carries `id`, `name`, `modality` (`text`, `image`, `image_edit`, `video`), `status`, `servable`, `brand`, `description`, `capabilities`, `contextWindow`, `maxOutputTokens`, `pricing` (`meteredPromptPerToken`, `meteredCachedPromptPerToken`, and `meteredCompletionPerToken` for chat; `perUnitUsd` for media), `providers` (each rail with `role`, `available`, `trainsOnData`, `zeroRetentionAvailable`), `supply` (rail counts and redundancy), and `supportedParameters`. `ninja/auto` additionally reports `virtual: true` and its `router.candidates`.

Filter with query parameters: `modality`, `provider`, `capability`, `availability`, and `virtual=false` to hide the router entry.
