OpenRouter removes the "client" scope from deferred_tools: requests that send it now return 400 (November 9, 2026)
OpenRouter's deferred_tools.scope now accepts only "all" or "mcp". Requests and saved presets that send "client" return 400.
Your keys
0 of 1 ready
Create each key on its own page, paste it below, then copy the finished lines into your project's .env file. What you paste stays in this tab. It is never sent to Wirestack or saved.
- OpenRouter API keyOPENROUTER_API_KEYGet key
Click Create API Key
What changed
On November 9, 2026, the OpenRouter API changelog listed a breaking change marked "Action required": the client value was removed from deferred_tools.scope.
deferred_tools.scope now accepts only "all" (the default when omitted) or "mcp". Requests or saved presets that send "scope": "client" now return 400.
The changelog lists six endpoints that use this schema:
POST /chat/completionsPOST /messagesPOST /responsesPOST /presets/{slug}/chat/completionsPOST /presets/{slug}/messagesPOST /presets/{slug}/responses
What to do
Search your code and your saved presets for deferred_tools. If any of them sends "scope": "client", change it before the next request:
- Omit
scope, or set"scope": "all", to defer across all eligible tools. - Set
"scope": "mcp"to defer MCP tools only.
Presets matter here because a preset saved with the old value fails the same way as a request that sends it directly. Check presets you created through the three /presets/{slug}/... endpoints as well as request bodies in your code.
If you never set deferred_tools, or you set it without scope, nothing changes. Nothing changes on the bill. Requests go out with your OpenRouter API key in OPENROUTER_API_KEY as before.
Not confirmed
The changelog does not say whether there is still a way to defer only the tools your own code defines, which is what client selected by its name, or why the value was removed. It also does not say whether saved presets holding the old value were migrated; the migration note says they return 400.
