API reference
2026-08-31
One process serves four dialects on one port. Nothing needs to be enabled; they are all live.
OpenAI
| Method | Route | Notes |
|---|---|---|
GET | /v1/models | Reports the one loaded model. |
GET | /v1/models/{id} | Single-model lookup. Answers for any id. |
POST | /v1/chat/completions | Chat. stream defaults to false. |
POST | /v1/responses | The Responses API, which Codex speaks. |
Anthropic
| Method | Route | Notes |
|---|---|---|
POST | /v1/messages | What Claude Code speaks. |
POST | /v1/messages/count_tokens | A fast estimate. Callers budget with it; nothing decodes from it. |
Ollama native
For apps that integrate Ollama and offer no generic endpoint field.
| Method | Route | Notes |
|---|---|---|
GET | /api/tags | Model list. This is the discovery call. |
GET | /api/version | Reports 0.12.0-tempo9 — semver-parseable, and tagged so it never claims to be an Ollama release. |
GET | /api/ps | Loaded models. One, always resident. |
POST | /api/show | Model detail. capabilities reflects this build: tools always, vision only with --tower. |
POST | /api/chat | Chat. |
POST | /api/generate | Bare-prompt completion. Replies use response, not message. |
POST | /api/embed, /api/embeddings | 501. We serve no embeddings, and say so in the caller's dialect rather than 404ing. |
Three things differ from the OpenAI dialect, and each fails silently against a client that assumes otherwise:
- Streaming is newline-delimited JSON. No
data:prefix, no[DONE]sentinel; the last object carriesdone: true. streamdefaults totrue. The opposite of OpenAI.- Tool-call arguments are a JSON object, not a JSON string.
Authentication
None. See Limits.