POST /v1/messages
{
"model": "claude-opus-5",
"thinking": { "type": "disabled" },
"effort": "xhigh"
}
→ HTTP 400 (invalid_request_error)
On claude-opus-5, thinking: {"type": "disabled"} is only accepted at effort high or below. Either drop the effort level to high, medium, or low and keep thinking disabled, or keep xhigh/max and remove the thinking block entirely (Opus 5 has thinking on by default, so omitting it is usually what you want).
This is a change from Opus 4.8, where disabling thinking at any effort level was legal. That is what makes it easy to hit: a request body that worked yesterday can fail today purely from swapping the model string to claude-opus-5, with no other edit. If you migrated a working Opus 4.8 call and it started 400ing, this is almost certainly why.