OpenAI compatibility
What is served, what is passed through, and what does not exist here.
Eterial speaks the OpenAI protocol. The official SDKs work against it unmodified, as does anything built on them — LangChain, LlamaIndex, the Vercel AI SDK, Cline, OpenWebUI.
This page is the exact extent of that.
Endpoints
| Endpoint | Served |
|---|---|
POST /v1/chat/completions | Yes |
GET /v1/models | Yes |
POST /v1/embeddings | No |
POST /v1/completions | No |
POST /v1/responses | No |
| Images, audio, files | No |
| Assistants, batch, moderations | No |
Two endpoints, and nothing else. A call to any of the others is a 404.
Request fields
| Field | Behaviour |
|---|---|
model | Required. Rejected with 404 if unknown. |
messages | Required, including multimodal content parts. |
stream | Supported. |
stream_options | Supported; usage is always returned regardless. |
max_tokens | Supported. Also sets the balance reserved. |
tools, tool_choice, functions | Supported, on models with the capability. |
reasoning, reasoning_effort | Supported, on models with the capability. |
response_format | Passed through; not enforced by us. |
temperature, top_p, stop, n, seed, logprobs, logit_bias, presence_penalty, frequency_penalty, user | Passed through to the model as sent. |
Passed through means exactly that
A field in the last row is neither rejected nor guaranteed. It reaches the model, and the model decides what to do with it. If your code depends on one, test it against the model you intend to use — and re-test when you change models.
Response fields
id, object, created, model, choices and usage are always present and
have their usual shapes. Inside usage, prompt_tokens_details and
completion_tokens_details appear when the model reports them.
system_fingerprint is not something to rely on here.
Behavioural differences
- Output is not reproducible. A model is served by more than one backend, so
identical requests can produce different answers.
seeddoes not change that. See Routing. - Capabilities are checked before the request runs. Asking for tools,
reasoning, image or file input on a model without them is a
400, not a silently ignored field. Web search needstools— see Web search. - Error bodies use the OpenAI envelope, and add a stable
error.codeto it. Branch on that rather than onerror.message. See Errors. - Mid-stream failures are events, not statuses. See Streaming.
Things OpenAI does not have
Idempotency-Keyon chat completions, for non-streamed requests.capabilitieson each entry of/v1/models.- Automatic failover between backends inside a single request.