chat-completions-apilisted
Install: claude install-skill air-gapped/skills
# Chat Completions Compatibility Reference
Chat Completions is the lingua franca of LLM serving — and because everyone
has implemented and extended it longest, it carries the MOST undocumented
divergence of the three open protocols. OpenAI keeps it fully supported but
second-choice ("we recommend trying Responses") — and since 2026-07-29
OpenAI's own publications call it "our **legacy** Chat Completions API"
(ARC-AGI-3 post; still no deprecation or sunset date); xAI, Groq, and Azure
declare it legacy too. Legacy `/v1/completions` loses its last
first-party OpenAI models 2026-09-28 and survives as a local/third-party
surface.
**Fleet property: stateless.** Full history resent every turn, like
Messages; no server-side session state to break load-balanced fleets
(contrast responses-api's `previous_response_id`).
**Last refreshed**: 2026-07-19 (source-examined at commits of 2026-07-16..18;
provenance in `references/sources.md`).
## Critical Gotchas
- **The reasoning-field schism**: `reasoning_content` (SGLang, llama.cpp,
mistral.rs, DeepSeek, xAI) vs `reasoning` (vLLM, Ollama, Together, Groq,
OpenRouter) vs inline `<think>` — and vLLM silently RENAMES incoming
`reasoning_content`→`reasoning`. Servers should emit both; clients should
read both. Full table: `references/backend-implementations.md`.
- **Reasoning must be passed BACK in tool loops** on DeepSeek v4 (with tool
calls) and OpenRouter (exact block sequence) — clients that strip
reasoning break agentic loop