OpenAI protocol compatibility: chat/completions vs responses

Tutorials Published 2026-09-26 Updated 2026-09-27 60 views API Compass
The two endpoints look like they do the same thing, but using the wrong one gives you an immediate 404. This article explains what each one is, who uses it, and how well relay sites implement them.

The two endpoints

/v1/chat/completions/v1/responses
First appearedEarly, now the de facto standardMore recent
Request bodyA messages arrayAn input field
Used byThe vast majority of tools and SDKsNewer official tools such as Codex CLI
Implementation rate at relay sitesVery high, almost universalLower

chat/completions: the de facto standard

{
  "model": "gpt-4o",
  "messages": [
    { "role": "system", "content": "You are an assistant" },
    { "role": "user", "content": "Hello" }
  ],
  "stream": true
}

Why it became the standard: it arrived early, the structure is simple, and the ecosystem is wide. Practically any OpenAI SDK code you write will run.

responses: the newer shape

{
  "model": "gpt-4o",
  "input": "Hello"
}

It is designed around a single interaction rather than a conversation history, and its support for tool calls and multi-step tasks is more structured. Newer official tools such as Codex CLI depend on it.

What the incompatibility looks like in practice

your tool needs /v1/responses
        |
the site only implements /v1/chat/completions
        |
404 Not Found

This is why so many people find that everything is configured correctly but nothing works.

How to check which endpoints a site supports

# test chat/completions
curl -s -o /dev/null -w "chat: %{http_code}\n" -X POST https://your-endpoint/v1/chat/completions \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"model":"gpt-4o","messages":[{"role":"user","content":"hi"}],"max_tokens":5}'

# test responses
curl -s -o /dev/null -w "responses: %{http_code}\n" -X POST https://your-endpoint/v1/responses \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"model":"gpt-4o","input":"hi"}'

A 200 or a 400, where the 400 is a parameter problem, both mean the endpoint exists. A 404 or a 405 means it is not implemented.

Beyond the protocol, other compatibility gaps

Even when the endpoint exists, the depth of the implementation can differ:

CapabilityHow it commonly fails
Tool calls (tools)The request goes through but the response contains no tool_calls
Streaming (stream)It works, but the whole response is buffered before being returned
Special parametersCache markers or thinking budgets are silently dropped
Multimodal inputImage fields are not processed

This is why it works and it works well are different claims.

One practical suggestion

Test with your real tool, not with curl.

curl can only confirm that an endpoint exists. It cannot confirm the details your actual tool depends on. Run one minimal but real workflow end to end and most compatibility problems will surface at once.

What to do when no site supports responses

  1. Change tools -- use an equivalent tool that only depends on chat/completions
  2. Build a protocol translation layer -- use a gateway such as LiteLLM
  3. Go official -- official endpoints support everything, of course

Option 2 demands more engineering, but it solves the compatibility problem once and for all.

Related reading

  • Pointing Codex CLI at a third-party API: what to watch for
  • Claude Code with a relay service: full configuration and troubleshooting
  • What the /v1/models endpoint is, and why it can verify a relay service

Was this useful? If you have run into something the article does not cover, tell us and we will verify it and update the text.

Related articles

Video generation behind a relay: three API shapes, four billing traps, one acceptance checklist

2026-10-19

MCP through a relay: what works, what never will, and how to test it in ten minutes

2026-10-19

A relay selection decision tree: working back from your scenario to a site

2026-10-07

Logging and reconciliation: attributing token spend to the project level

2026-10-06

Migrating suppliers gradually: replacing an API site without interrupting service

2026-10-06

Build your own probe: twenty lines of script to monitor your API suppliers

2026-10-06

The models this article mentions are available on these services

Filtered by the model families the article mentions and ordered by overall score and uptime. This is not a recommendation. Click through to see each service's uptime, latency and endpoint verification.

See the full list in the directory, or browse by model family.