CrossModel

Models

List the models CrossModel currently has available, or look up a single model.

Endpoint

GET https://api.crossmodel.ai/v1/models
GET https://api.crossmodel.ai/v1/models/{model}
Authorization: Bearer cm-YOUR_KEY
# Or: x-api-key: cm-YOUR_KEY

Both endpoints accept either OpenAI-style Authorization: Bearer authentication or Anthropic-style x-api-key authentication. anthropic-version is accepted but isn't required or validated for these endpoints.

$
List models
1curl https://api.crossmodel.ai/v1/models \2  -H "Authorization: Bearer $CROSSMODEL_API_KEY"

The model object

FieldTypeNotes
idstringModel ID in vendor/short_name form, e.g. deepseek/deepseek-v4-pro. For an alias, this is the alias name you defined.
objectstringAlways model.
typestringAlways model. Anthropic-compatible equivalent of object.
display_namestringHuman-readable model name.
createdintegerModel release time, as a Unix timestamp (seconds).
created_atstringModel release time in RFC 3339 format.
owned_bystringThe model's author, e.g. deepseek, openai, anthropic.
context_lengthintegerMaximum context window, in tokens. Omitted when unknown.
max_completion_tokensintegerMaximum output tokens. Omitted when unknown.
architecture.input_modalitiesstring[]Accepted input modalities, e.g. ["text", "image"].
architecture.output_modalitiesstring[]Produced output modalities, e.g. ["text"].
capabilitiesobjectWhat the model supports — see Capabilities below.
rootstringOnly present for model aliases: the real vendor/short_name the alias resolves to.

Capabilities

FieldTypeNotes
streamingbooleanSupports streamed responses (SSE).
toolsbooleanSupports function calling / tool use.
jsonbooleanSupports structured output (JSON mode).
visionbooleanAccepts image input.
thinkingbooleanA reasoning model.
reasoningobjectOnly present when thinking is true: the reasoning controls the model accepts. An empty object means the model reasons but exposes no controls.
reasoning.togglebooleanReasoning can be turned off. Absent when reasoning is always on.
reasoning.effortstring[]Accepted effort levels, lowest to highest, e.g. ["low", "medium", "high"].
reasoning.budget_tokensobjectSupports a thinking-token budget; min / max bounds are included when known.

List models

GET /v1/models

Returns every model currently available.

curl https://api.crossmodel.ai/v1/models \
  -H "Authorization: Bearer cm-YOUR_KEY"

Anthropic-style authentication works on the same URL:

curl https://api.crossmodel.ai/v1/models \
  -H "x-api-key: cm-YOUR_KEY" \
  -H "anthropic-version: 2023-06-01"
{
  "object": "list",
  "data": [
    {
      "id": "deepseek/deepseek-v4-pro",
      "object": "model",
      "type": "model",
      "display_name": "DeepSeek V4 Pro",
      "created": 1716239400,
      "created_at": "2024-05-20T22:30:00+00:00",
      "owned_by": "deepseek",
      "context_length": 65536,
      "max_completion_tokens": 8192,
      "architecture": { "input_modalities": ["text"], "output_modalities": ["text"] },
      "capabilities": {
        "streaming": true,
        "tools": true,
        "json": true,
        "vision": false,
        "thinking": true,
        "reasoning": { "toggle": true, "effort": ["high", "xhigh"] }
      }
    },
    {
      "id": "anthropic/claude-sonnet-4.6",
      "object": "model",
      "type": "model",
      "display_name": "Claude Sonnet 4.6",
      "created": 1716239401,
      "created_at": "2024-05-20T22:30:01+00:00",
      "owned_by": "anthropic",
      "context_length": 200000,
      "max_completion_tokens": 64000,
      "architecture": { "input_modalities": ["text", "image"], "output_modalities": ["text"] },
      "capabilities": {
        "streaming": true,
        "tools": true,
        "json": true,
        "vision": true,
        "thinking": true,
        "reasoning": {
          "effort": ["low", "medium", "high", "max"],
          "budget_tokens": { "min": 1024 }
        }
      }
    }
  ],
  "has_more": false,
  "first_id": "deepseek/deepseek-v4-pro",
  "last_id": "anthropic/claude-sonnet-4.6"
}
FieldTypeNotes
objectstringAlways list.
dataarrayAn array of model objects.
has_morebooleanCurrently always false; the complete catalog is returned.
first_idstring or nullID of the first returned model, or null for an empty catalog.
last_idstring or nullID of the last returned model, or null for an empty catalog.

The response is a union of the OpenAI and Anthropic model schemas. Unknown fields can be ignored. Pagination query parameters are accepted, but the current implementation returns the complete catalog and doesn't paginate.

If you've configured model aliases on your API key, they appear first in data, each with a root field pointing at the real model it resolves to (carrying that model's capabilities). The full catalog follows, so real model IDs remain listed alongside your aliases.

Retrieve a model

GET /v1/models/{model}

Get a single model. Use the full model ID for {model}; URL-encode the / as %2F.

curl https://api.crossmodel.ai/v1/models/deepseek%2Fdeepseek-v4-pro \
  -H "Authorization: Bearer cm-YOUR_KEY"
{
  "id": "deepseek/deepseek-v4-pro",
  "object": "model",
  "type": "model",
  "display_name": "DeepSeek V4 Pro",
  "created": 1716239400,
  "created_at": "2024-05-20T22:30:00+00:00",
  "owned_by": "deepseek",
  "context_length": 65536,
  "max_completion_tokens": 8192,
  "architecture": { "input_modalities": ["text"], "output_modalities": ["text"] },
  "capabilities": {
    "streaming": true,
    "tools": true,
    "json": true,
    "vision": false,
    "thinking": true,
    "reasoning": { "toggle": true, "effort": ["high", "xhigh"] }
  }
}

You can also retrieve one of your own aliases by its name; the response includes a root field with the real model ID it resolves to.

For a prefix alias, querying a concrete matching name returns that concrete name as id and the configured target as root. For example, if the prefix claude-opus points to anthropic/claude-opus-4-8:

{
  "id": "claude-opus-4-9",
  "object": "model",
  "root": "anthropic/claude-opus-4-8",
  "context_length": 1000000,
  "max_completion_tokens": 128000
}

If the model doesn't exist, the endpoint returns 404 with the code model_not_found.

Errors

Bearer-authenticated requests use the OpenAI-compatible error format:

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

Requests carrying a non-empty x-api-key use the Anthropic-compatible error format:

{
  "type": "error",
  "error": {
    "type": "not_found_error",
    "message": "Model 'foo/bar' was not found or is unavailable."
  },
  "request_id": "req_..."
}
HTTP statustypeCommon codeNotes
401authentication_errormissing_api_key, invalid_api_keyAPI key missing or invalid.
404invalid_request_errormodel_not_foundThe requested model doesn't exist or is currently unavailable.
500api_errorinternal_errorA CrossModel internal error.