# OpenAI-compatible API (/en/docs/developers/model/guides/openai-compatible)



Use the OpenAI SDK at `https://api.deepraxis.com/openai/v1`. Requests are forwarded using the same protocol; compatibility does not imply that every official endpoint, field, or model is available.

## Choose the right address [#choose-the-right-address]

| Client            | Base URL                              | Model catalog                                                                |
| ----------------- | ------------------------------------- | ---------------------------------------------------------------------------- |
| OpenAI SDK        | `https://api.deepraxis.com/openai/v1` | `/openai/v1/models`                                                          |
| Anthropic SDK     | `https://api.deepraxis.com/anthropic` | `/anthropic/v1/models`                                                       |
| Google GenAI SDK  | `https://api.deepraxis.com/google`    | `/google/v1beta/models`                                                      |
| Praxis native API | `https://api.deepraxis.com/model/v1`  | See the [native API](/en/docs/api/native/model), including `providerOptions` |

Each compatible catalog lists models that offer its protocol. Membership in the OpenAI catalog does not imply both Chat Completions and Responses support. An undeclared operation returns `404 model_protocol_not_offered`.

## Field differences: where to check [#field-differences-where-to-check]

| Your application uses                                           | Check before sending                                                                                                                                                   |
| --------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `messages`, tools, sampling, reasoning, or provider preferences | [Chat Completions field support](/en/docs/api/compatible/openai/createChatCompletion)                                                                                  |
| `input`, stored responses, or response tools                    | [Responses field support](/en/docs/api/compatible/openai/createResponse)                                                                                               |
| `usage.cost` or generation IDs                                  | [Cost handling in the migration guide](/en/docs/cookbook/migration/from-openai#behavior-differences) and [generation records](/en/docs/api/native/model/getGeneration) |
| Uploads and file purposes                                       | [Upload a file](/en/docs/api/compatible/openai/createFile)                                                                                                             |
| An endpoint beyond chat                                         | [Operation support](/en/docs/api/compatible/openai) and [unsupported alternatives](/en/docs/cookbook/migration/from-openai#unsupported-endpoints-and-alternatives)     |

Unknown top-level fields can be forwarded to the same-protocol upstream; acceptance does not prove that they took effect. Declared fields still undergo validation. Consult the endpoint's field support before relying on an option.

## 1. Prepare [#1-prepare]

You need Python 3.10+, [uv](https://docs.astral.sh/uv/getting-started/installation/), and a Praxis key. Create one in [Console → API Keys](https://console.deepraxis.ai/keys) and securely inject it into the current terminal as `PRAXIS_API_KEY`. Never put the key in code or logs. Keep your original service configuration and key for rollback. Run the commands below in Bash on macOS or Linux.

```bash
test -n "${PRAXIS_API_KEY:-}"
```

Expected: exit code 0. Exit code 1 means the variable is missing; set it before continuing.

## 2. Verify Responses [#2-verify-responses]

This example uses `deepseek-flash`. As of October 12, 2026, `glm-5.3-flash` also offers Responses; `gpt-5.6-sol` offers Chat Completions but not Responses. Confirm the operation in the [model catalog](https://console.deepraxis.ai/models).

```bash
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY http_proxy https_proxy all_proxy
uv run -q --no-project --with openai --with anthropic python - <<'PY'
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.deepraxis.com/openai/v1",
    api_key=os.environ["PRAXIS_API_KEY"],
    timeout=90.0,
    max_retries=0,
)
models = client.models.list()
assert "deepseek-flash" in {m.id for m in models.data}
raw = client.responses.with_raw_response.create(
    model="deepseek-flash",
    input="Reply OK.",
    max_output_tokens=1024,
)
reply = raw.parse()
text = reply.output_text
print("HTTP", raw.status_code)
print("X-Request-Id:", raw.headers.get("x-request-id"))
print("X-Praxis-Generation-Id:", raw.headers.get("x-praxis-generation-id"))
print(text)
assert raw.status_code == 200 and text and text.strip()
assert raw.headers.get("x-request-id")
PY
```

Expected: exit code 0, `HTTP 200`, nonempty text (usually `OK.`), and an `X-Request-Id`. Assertions check both model availability and a real reply, not just connectivity. Keep the request ID for troubleshooting, never the key. The example incurs a small usage charge.

Expected: `output_text` contains the final answer; reasoning output is not treated as user-facing text. If the request returns `model_protocol_not_offered`, select a Responses-capable model. If it says `does not exist`, copy an exact catalog ID. To roll back an existing application, restore the original base URL, key, and model together, then rerun its original smoke request.

[API reference →](/en/docs/api/compatible/openai) · [Cookbook: migrate from OpenAI →](/en/docs/cookbook/migration/from-openai)
