TL;DR — Bookmark page: real LLM API errors indexed by their exact error strings, because that is how you search when things break at 2am. Each entry: the verbatim message → what it actually means → the fix, with a deep-dive link. Maintained as new errors surface (latest additions: 2026-08). If you hit an error that is not here, that is a gap we want to know about.
DeepSeek — thinking mode & reasoning_content family
The most-hit error family of 2026, caused by DeepSeek's contract that thinking traces must round-trip in tool-calling conversations.
| Exact error | Meaning | Fix |
|-------------|---------|-----|
| The reasoning_content in the thinking mode must be passed back to the api (HTTP 400) | Your client/proxy dropped the thinking block when replaying history with tool calls | Full fix — 3 approaches |
| cc switch local proxy failed while handling codex endpoint /responses ... upstream_status: http 400 | cc-switch's API-shape translation strips reasoning_content before forwarding to DeepSeek | Proxy-layer fix |
| deepseek returned tool calls without replayable thinking content; continuing with degraded reasoning | Defensive client stripped thinking mode after the trace went missing — silent quality loss, not a crash | Restore the round-trip |
| LangChain agent loops → same 400 on second tool step | Memory class rebuilt messages without additional_kwargs | LangChain-specific fix |
Background on why Chinese providers' thinking modes differ: the thinking-mode API trap guide.
Claude Code & Anthropic endpoints
| Exact symptom | Meaning | Fix | |---------------|---------|-----| | HTTP 401 immediately after setting a custom base URL | Two env vars fighting: an old provider key variable wins over your new config | The double-env-var 401 |
Cursor & OpenAI-compatible overrides
| Exact symptom | Meaning | Fix | |---------------|---------|-----| | Claude models vanish after overriding OpenAI base URL | Cursor disables built-in models when the OpenAI endpoint is overridden — by design | Override without breaking Claude | | Custom model name rejected in Cursor settings | Model dropdown hardcodes known names; custom endpoints need exact configured IDs | Configuration guide |
Google AI Studio / Gemini endpoints
| Exact symptom | Meaning | Fix |
|---------------|---------|-----|
| 404 Not Found on chat completions | Base URL missing the /v1beta/openai/ suffix — the compatibility path is exact | Endpoint setup |
| 404 model not found with gpt-4o etc. | OpenAI model names do not exist on Gemini's endpoint — use gemini-3-flash style names | Same guide |
| 401 Unauthorized with a service-account key | Endpoint takes AI Studio API keys, not Vertex service-account auth | Key types explained |
Why so many of these are middleware errors
A pattern worth naming: most entries above are not model bugs — they are translation-layer failures. Proxies, history stores, and framework memory classes drop provider-specific fields (thinking traces, cache markers) that the provider contract requires back. That is also the honest pitch for running traffic through infrastructure that treats those fields as first-class: what a router API should handle for you, and which models need special handling.
Contribute an error
Hit something not listed? The bar for inclusion: the exact error string, the provider/tool combination, and a reproducible cause. This reference only stays useful if it stays real.