> ## Documentation Index > Fetch the complete documentation index at: https://openrouter.ai/docs/llms.txt > Use this file to discover all available pages before exploring further. # Claude Opus 5 Migration Guide > Migrate to Claude Opus 5 — reasoning on by default, effort restrictions when disabling reasoning, and mid-conversation tool changes ## What's New Claude Opus 5 ships as [`anthropic/claude-opus-5`](https://openrouter.ai/anthropic/claude-opus-5), with fast mode available as a `fast` service tier endpoint on the same model. Three changes matter for migration: 1. **Reasoning is on by default** — a first for Opus-family models, following the default Sonnet 5 introduced 2. **Disabling reasoning is restricted by effort level** — allowed at `high` or lower; `xhigh` and `max` require reasoning to stay on 3. **Mid-conversation tool changes (beta)** — add and remove tools between turns without invalidating the prompt cache, via OpenRouter's [Messages API](/docs/api/api-reference/anthropic-messages/create-a-message) only ## Reasoning On by Default On every Opus model before Opus 5, reasoning was off unless you explicitly turned it on. On Opus 5 — like [Sonnet 5](https://platform.claude.com/docs/en/about-claude/models/whats-new-sonnet-5#adaptive-thinking-on-by-default) before it — requests that don't configure reasoning run with adaptive thinking **enabled**. If your integration assumes non-reasoning responses — latency budgets, output parsing that doesn't handle reasoning blocks, cost models — either handle reasoning output or disable it explicitly: ```json lines theme={null} // Chat Completions API { "model": "anthropic/claude-opus-5", "reasoning": { "enabled": false }, "messages": [{ "role": "user", "content": "Hello" }] } ``` ```json lines theme={null} // Messages API { "model": "anthropic/claude-opus-5", "thinking": { "type": "disabled" }, "messages": [{ "role": "user", "content": "Hello" }] } ``` Like Sonnet 5, Opus 5 supports only adaptive thinking: token budgets (`reasoning.max_tokens` in Chat Completions, `thinking.budget_tokens` in Messages) are ignored. ## Effort Restrictions When Reasoning Is Disabled Anthropic only allows disabling thinking at effort levels up to and including `high`. Combining disabled reasoning with `xhigh` or `max` effort returns a 400 from Anthropic: | Effort level | Reasoning disabled | | ----------------------- | ----------------------- | | `low`, `medium`, `high` | Allowed | | `xhigh`, `max` | Rejected upstream (400) | ```json lines theme={null} // Chat Completions API — OK: disabled reasoning at high effort { "model": "anthropic/claude-opus-5", "reasoning": { "enabled": false, "effort": "high" } } ``` ```json lines theme={null} // Chat Completions API — 400 from Anthropic: xhigh requires reasoning { "model": "anthropic/claude-opus-5", "reasoning": { "enabled": false, "effort": "xhigh" } } ``` The same restriction applies on the Messages API with `thinking: { "type": "disabled" }` and `output_config.effort`. To migrate: keep reasoning enabled at `xhigh`/`max`, or lower effort to `high` or below. ## Mid-Conversation Tool Changes (Beta) Opus 5 supports [changing the available tool set between turns](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages#mid-conversation-tool-changes) without invalidating the prompt cache, using system-role content blocks: * `tool_addition` — surface a tool declared in `tools[]` with `defer_loading: true` * `tool_removal` — remove a tool by name (the block must sit at the end of `messages` or immediately before an assistant message) Blocks reference a tool by name from the request's `tools[]` — individual MCP tools and whole MCP toolsets can also be referenced — so the `tools[]` array itself never changes and the cached prefix stays intact. Model support: [Claude Opus 5](https://openrouter.ai/anthropic/claude-opus-5), [Claude Opus 4.8](https://openrouter.ai/anthropic/claude-opus-4.8) (including their fast variants), and [Claude Fable 5](https://openrouter.ai/anthropic/claude-fable-5). **Not** supported on Claude Sonnet 5 or models older than Claude Opus 4.8 — note this differs from [mid-conversation system messages](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages), which Sonnet 5 does support. As of launch, Amazon Bedrock supports tool changes on Claude Opus 5 only. ```json lines theme={null} // Messages API { "model": "anthropic/claude-opus-5", "max_tokens": 1024, "tools": [ { "name": "get_weather", "description": "Get weather", "input_schema": { "type": "object", "properties": { "city": { "type": "string" } } } }, { "name": "get_forecast", "description": "Get 5-day forecast", "input_schema": { "type": "object", "properties": { "city": { "type": "string" } } }, "defer_loading": true } ], "messages": [ { "role": "user", "content": "What tools do you have for weather in Paris?" }, { "role": "system", "content": [ { "type": "tool_addition", "tool": { "type": "tool_reference", "name": "get_forecast" } } ] } ] } ``` To change a tool's definition, remove the old tool with `tool_removal`, then send the updated definition in `tools[]` on the next request. This feature is only supported on OpenRouter's [Messages API](/docs/api/api-reference/anthropic-messages/create-a-message) (`/api/v1/messages`) — the Chat Completions API has no representation for these blocks. You do **not** need to send the `anthropic-beta: mid-conversation-tool-changes-2026-07-01` header: OpenRouter detects requests that use tool changes and attaches the beta for you, and routes those requests only to providers that support it. ## Fast Mode Like Opus 4.6–4.8, Opus 5 supports fast mode with up to 2.5x faster output at premium pricing. Send `speed: "fast"` (or `service_tier: "fast"` / `"priority"`) with `anthropic/claude-opus-5` — the request routes to the model's `fast` service tier endpoint. The dedicated [`anthropic/claude-opus-5-fast`](https://openrouter.ai/anthropic/claude-opus-5-fast) model is deprecated: it keeps working and is served by the same fast tier capacity, but new integrations should target `anthropic/claude-opus-5`. See [Fast Mode](/docs/cookbook/coding-agents/claude-code-integration#fast-mode) for details. ## Migration Checklist 1. Swap the slug to `anthropic/claude-opus-5`. Requests that don't configure reasoning now run with reasoning on — verify your response handling and latency/cost assumptions, or disable reasoning explicitly. 2. If you disable reasoning with `xhigh`/`max` effort, either re-enable reasoning or lower effort to `high` or below. 3. If you manage large tool sets on the Messages API, adopt `defer_loading` + `tool_addition`/`tool_removal` to keep the prompt cache warm across tool-set changes. ## Breaking Changes | Behavior | Opus 4.8 | Opus 5 | | ------------------------------------------------- | ------------------ | ------------------------------- | | Reasoning default | Off unless enabled | **On** unless disabled | | `reasoning.enabled: false` + `xhigh`/`max` effort | Allowed | Rejected upstream (400) | | Thinking modes (when enabled) | Adaptive | Adaptive only (budgets ignored) | ## Resources * [Reasoning Tokens](/docs/guides/best-practices/reasoning-tokens) * [OpenRouter Messages API](/docs/api/api-reference/anthropic-messages/create-a-message) * [Fast Mode](/docs/cookbook/coding-agents/claude-code-integration#fast-mode) * [Anthropic model migration guide](https://platform.claude.com/docs/en/about-claude/models/migration-guide)