Today, Anthropic released Claude Opus 5. It replaces Claude Opus 4.8 as the Opus-tier flagship. Pricing is unchanged at $5 per million input tokens and $25 per million output tokens.
The Anthropic team positions Opus 5 as approaching the intelligence of Claude Fable 5 at half the price. It is now the default model on Claude Max and the strongest model on Claude Pro.
What actually changed at the API level
Three changes are quite important before any benchmark does:
Thinking is on by default. On Opus 4.8, requests ran without thinking unless you set thinking: {“type”: “adaptive”}. On Opus 5 the same request thinks, and the effort parameter controls depth. Because max_tokens caps thinking plus response text, existing values need review.
There is a breaking change. Setting thinking: {“type”: “disabled”} with effort xhigh or max now returns a 400 error. The restriction is enforced per request. You either cap effort at high or drop the thinking field.
Anthropic tells developers to delete their verification prompts. Instructions like “include a final verification step” now cause over-verification, because the model already verifies its own work. The Opus 5 prompting guide covers the tuning patterns.
The model ID is claude-opus-5. Context is 1M tokens as both default and maximum, with no smaller variant. Maximum output is 128k tokens on the synchronous Messages API. The Message Batches API reaches 300k with the output-300k-2026-03-24 beta header. The minimum cacheable prompt drops to 512 tokens, down from 1,024.
#mtp-op5-explainer{margin:28px 0}
#mtp-op5-explainer + p:empty,#mtp-op5-explainer + br{display:none !important}
#mtp-op5-explainer hr,#mtp-op5-explainer p:empty,#mtp-op5-explainer del,#mtp-op5-explainer s{display:none !important}
#mtp-op5-explainer iframe{width:100% !important;border:0 !important;display:block !important;background:#0a0a0a !important}
(function(){
var f=document.getElementById(“mtp-op5-explainer-frame”);
if(!f) return;
window.addEventListener(“message”,function(e){
if(!e||!e.data||e.data.mtpEmbed!==”op5-explainer”) return;
var h=parseInt(e.data.height,10);
if(h>0&&h

