The Responses API (POST /v1/responses) is OpenAI's recommended API for all new projects, superseding Chat Completions. It's a superset that adds stateful sessions, built-in tools, semantic streaming events, and better reasoning model support.
Chat Completions vs Responses API
| Capability | Chat Completions | Responses API |
|---|---|---|
| Text generation | ✓ | ✓ |
| Vision | ✓ | ✓ |
| Structured Outputs | ✓ | ✓ |
| Function calling | ✓ | ✓ |
| Web search | — | ✓ |
| File search | — | ✓ |
| Code interpreter | — | ✓ |
| Image generation | — | ✓ |
| MCP (Model Context Protocol) | — | ✓ |
| Stateful multi-turn | Manual | previous_response_id |
| Semantic SSE events | No | Yes |
The Responses API shows a 3% improvement on SWE-benchmark vs Chat Completions with the same prompt, and 40–80% improvement in cache utilization.
Basic Usage
Responses also unifies the input shape: a plain string for one-shot calls, a typed message list (input_text, input_image, input_file) for multi-modal or multi-turn. The same endpoint handles every modality. You don't pick a different URL for vision vs text; the input list says so.
For new product code, the question is no longer 'should I use Responses?' — it is 'is there a reason I cannot use Responses?' The two common answers are: (1) you have an existing chat.completions.create call that already works, or (2) you depend on a tool/SDK feature that hasn't crossed over yet. Both shrink as time passes.