# Model catalog (/en/docs/developers/model/catalog)



Models and prices change. Read the [Console → Model catalog](https://console.deepraxis.ai/models) or live API instead of relying on a static list.

## 1. Prepare the query [#1-prepare-the-query]

Install Python 3.10+ and [uv](https://docs.astral.sh/uv/getting-started/installation/). The native `GET /model/v1/models` catalog needs no key. This example also queries the OpenAI-compatible catalog, so set `PRAXIS_API_KEY` using the [quickstart](/docs/developers/model/quickstart).

Expected: the key environment variable is set. Examples default to `https://api.deepraxis.com`. To switch environments, set `PRAXIS_API_BASE` to the API origin without a trailing slash or API path.

## 2. Check the model and protocol [#2-check-the-model-and-protocol]

Save as `catalog.py` and run `uv run -q --no-project --with openai --with anthropic --with google-genai python catalog.py`.

```python
import os
import httpx

base = os.environ.get("PRAXIS_API_BASE", "https://api.deepraxis.com")
with httpx.Client(timeout=60.0) as client:
    response = client.get(base + "/model/v1/models")
    response.raise_for_status()
    models = response.json()["data"]
    model = next(item for item in models if item["id"] == "deepseek-flash")
    assert "openai.chat.completions" in model["supported_apis"]
    for field in ("id", "type", "supported_apis", "context_window", "pricing"):
        print(field + ":", model[field])
    print("X-Request-Id:", response.headers.get("x-request-id"))

    filtered = client.get(
        base + "/openai/v1/models",
        params={"api": "responses"},
        headers={"Authorization": "Bearer " + os.environ["PRAXIS_API_KEY"]},
    )
    filtered.raise_for_status()
    ids = [item["id"] for item in filtered.json()["data"]]
    assert "deepseek-flash" in ids
    print("Responses models:", ids)
    print("X-Request-Id:", filtered.headers.get("x-request-id"))
```

Expected: exit code 0, the type, protocols, context, and prices for `deepseek-flash`, and a Responses list containing that ID. Checked on 2026-10-13; current query results take precedence. If an assertion fails, do not send a request to that protocol. Select a supporting model from the latest list first.

## 3. Choose from the results [#3-choose-from-the-results]

Start with `type` for the task category, then confirm the intended protocol in `supported_apis`. Model names do not establish protocol support. The native list also accepts `supported_api=openai.responses`; `api=chat,embeddings` on the OpenAI-compatible list matches either API.

Check context and output limits, then prices for input, output, cache reads, or non-token units. [Models and the catalog](/docs/developers/model/concepts/models-and-catalog) explains billing units and availability. [List models API](/docs/api/native/model/listModels) defines the fields.

Expected: the selected ID supports your protocol, its limits fit your request, and its billing unit fits the task. Then use the [quickstart](/docs/developers/model/quickstart) to make a real call and check its actual cost.

[API reference →](/docs/api/native/model) · [Cookbook →](/docs/cookbook)
