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

# OpenAI Compatibility

> What carries over, what differs, what returns 404.

## Unchanged

* **Request shape.** `messages`, `temperature`, `top_p`, `max_tokens`, `max_completion_tokens`, `stream`, `tools`, `tool_choice`, `user`.
* **Response shape.** A `chat.completion` with `choices`, `message`, `finish_reason`, `usage`.
* **Streaming.** `stream=True` / `stream: true`, Server-Sent Event chunks.
* **Tool calling.** The model returns `tool_calls`; your code runs them and returns a `tool` message.
* **Prompt caching.** `cache_control` on content parts, on routes that support it. See [Prompt Caching](/api/features/prompt-caching).
* **Reasoning.** `reasoning_details` in the response, `reasoning_tokens` in `usage`.
* **Model listing.**

## Differences

* `system_fingerprint` is always `null`.
* Exactly one choice; `n > 1` is rejected.
* The error envelope is `{"error": {"message", "code", "param"}}` with no `type` field.
* The privacy level travels with the model (`:confidential`); there is no privacy parameter. [Encrypted](/api/api-reference/chat-and-text/encrypted) adds client-side encryption and request headers on top.
* `/v1/chat/completions` drops unknown fields at gateway-owned objects. Controls the model cannot honor return `400`.
* Rate-limit headers: `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`, and `Retry-After` on `429`. See [Rate Limits](/api/api-reference/errors-and-rate-limits/rate-limits).
* OpenAI model names are not Nito IDs. See [model mapping](/api/sdks/openai-drop-in/model-mapping).

## Other Surfaces

* **Responses API** (`/v1/responses`): a stateless shim. `store: true` and `previous_response_id` are rejected. See the [Responses reference](/api/api-reference/endpoints/responses/createopenairesponse).
* **Files API** (`/v1/files`): not served, `404`. Send documents inline. See [Multimodal](/api/features/multimodal).

## Rejected Inputs

* Audio and video input.
* `file_id` content references. Supply file content inline.
* `response_format` (`json_object`, `json_schema`) on models that do not advertise `json_mode` or `structured_outputs`.

| Capability | Status |
| - | - |
| Chat Completions | Supported |
| Streaming | Supported |
| Function tools | Supported (you execute them) |
| Prompt caching | Supported (`cache_control` passthrough) |
| Reasoning | Supported |
| `GET /v1/models` | Supported |
| Responses API | Stateless shim |
| Files API | Not served (404) |
| Audio / video input | Rejected |
| Structured outputs | On capable models |

## Related

<CardGroup cols={3}>
  <Card title="SDKs" icon="screwdriver-wrench" href="/api/sdks">
    Overview.
  </Card>

  <Card title="Model Mapping" icon="chart-tree-map" href="/api/sdks/openai-drop-in/model-mapping">
    Names to IDs.
  </Card>

  <Card title="Chat Completions" icon="message-dots" href="/api/features/chat-completions">
    The endpoint.
  </Card>

  <Card title="Streaming" icon="signal-stream" href="/api/features/streaming">
    Token by token.
  </Card>

  <Card title="Error Format" icon="book-open-lines" href="/api/api-reference/overview/error-format">
    The envelope.
  </Card>

  <Card title="Privacy Levels" icon="file-shield" href="/privacy/levels">
    The four levels.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.