---
title: Model IDs & capabilities
description: How CrossModel model IDs are named, choosing a protocol, and capability differences.
---

# Model IDs & capabilities

CrossModel uses one model ID format:

```text
vendor/model-name
```

For example:

```text
deepseek/deepseek-v4-pro
anthropic/claude-sonnet-4.6
openai/gpt-5-mini
```

## Discover available models

Call `/v1/models` to get the list of models available right now:

```bash
curl https://api.crossmodel.ai/v1/models \
  -H "Authorization: Bearer $CROSSMODEL_API_KEY"
```

If a request names a model that doesn't exist, isn't listed, or is currently unavailable, the endpoint returns:

```json
{
  "error": {
    "message": "Model 'foo/bar' was not found or is unavailable.",
    "type": "invalid_request_error",
    "param": "model",
    "code": "model_not_found"
  }
}
```

## Protocols and models

CrossModel routes each model to the right provider and protocol. You can use the same CrossModel model ID across different endpoints:

| Endpoint | Good for |
|------|------|
| `/v1/chat/completions` | The OpenAI Chat Completions ecosystem — fits most applications. |
| `/v1/responses` | The OpenAI Responses style — structured input and output. |
| `/v1/messages` | The Anthropic Messages style — the Anthropic SDK, Claude Code, and similar tools. |

Not every model supports every advanced capability. Whether multimodal input, tool calling, structured output, reasoning budgets, or cached tokens take effect depends on the model and provider.

## Capability differences

When choosing a model, these dimensions are worth weighing:

| Capability | Notes |
|------|------|
| Context length | Long-context models suit big documents, codebases, and long conversations — usually at higher cost. |
| Max output tokens | Caps how much a single reply can generate. A request's `max_tokens` / `max_completion_tokens` is bounded by the model's limit. |
| Vision input | Models that support image content blocks can handle `image_url`, `input_image`, or Anthropic `image`. |
| Tool calling | Models with function/tool use can return structured call requests. |
| Reasoning controls | Some models support `reasoning_effort`, `reasoning.effort`, or Anthropic `thinking`. |
| Streaming | Most text models support `stream: true`, but the event format differs by protocol. |

## Recommended approach

1. For a new project, start with `/v1/chat/completions` unless you specifically need the Responses or Anthropic Messages shape.
2. In production, keep the model ID as a config value so you can switch models quickly.
3. On `model_not_found`, call `/v1/models` first to confirm the spelling and availability.
4. Before relying on an advanced parameter, validate it against the target model with a little traffic.
