# Claude Opus 5 Effort Toggle: Stop Overpaying the API

> Source: <https://byteiota.com/claude-opus-5-effort-toggle-stop-overpaying-the-api/>
> Published: 2026-08-29 14:08:21+00:00

Claude Opus 5 launched July 24 with a parameter most developers are ignoring: `effort`

. While the industry debated benchmark numbers, Anthropic shipped a cost dial that can trim your Opus 5 bill by 40–60% on real workloads — without switching models or sacrificing quality where it matters. Most teams are running every request at the default `high`

effort and paying for reasoning they do not need. Here is how to fix that.

## What the Effort Parameter Actually Does

Set `output_config: {"effort": "medium"}`

in your API call. Five levels exist: `low`

, `medium`

, `high`

(the default), `xhigh`

, and `max`

. The per-token price does not change — Opus 5 bills at $5 input / $25 output per million tokens regardless. What changes is how many output tokens get consumed. Lower effort means fewer thinking tokens, fewer tool calls, and shorter internal deliberation. You pay for what the model actually generates.

This is not a quality slider in the crude sense. It is a reasoning budget. At `low`

effort, Claude still thinks when a problem is hard — it just thinks less than it would at `high`

on the same prompt. For a ticket classification task, the difference is invisible. For a multi-constraint architecture review, it matters. The [official Anthropic docs](https://platform.claude.com/docs/en/build-with-claude/effort) describe it precisely: “Effort is a behavioral signal, not a strict token budget.”

## Why the Default Is Costing You Money

The API default is `high`

. Anthropic designed that as a sensible starting point, not a permanent setting. Their own guidance says to “use low and medium liberally as your primary control for token cost and response time wherever your evals show quality holds.” Most teams skip the evals and leave everything at `high`

.

On classification, extraction, formatting, summarization, and high-volume pipeline steps, quality at `low`

or `medium`

is routinely indistinguishable from `high`

. You are paying for deliberation that produces no measurable difference in output. Because [output tokens cost $25 per million](https://platform.claude.com/docs/en/about-claude/pricing), thinking depth translates directly into cost. The effort parameter is effectively a price dial that also moves quality and latency.

## The Routing Strategy Worth Implementing Today

Treat effort level as a first-class routing decision. Here is a practical map:

| Effort Level | Use For |
|---|---|
low | Classification, extraction, formatting, summarization, high-volume subagents, latency-sensitive paths |
medium | Everyday coding, document analysis, agent pipeline steps — if you pick one global value, pick this |
high (default) | Complex reasoning, debugging, architectural decisions, security review |
xhigh | Long agentic runs (30+ minutes), repeated tool calling, knowledge-base search |
max | Frontier problems only — on most workloads, max adds significant cost for relatively small quality gains |

The 80/20 rule applies: route the routine 80% of requests through `low`

or `medium`

, escalate the hard 20% to `high`

or above. In practice:

``` python
import anthropic

client = anthropic.Anthropic()

def call_claude(prompt: str, effort: str = "medium") -> str:
    response = client.messages.create(
        model="claude-opus-5",
        max_tokens=4096,
        messages=[{"role": "user", "content": prompt}],
        output_config={"effort": effort},
    )
    return response.content[0].text

# High-volume classification — low effort
category = call_claude(f"Classify this ticket: {ticket}", effort="low")

# Standard coding task — medium effort
code = call_claude(f"Refactor this function: {fn}", effort="medium")

# Complex debugging — high effort
analysis = call_claude(f"Debug this race condition: {trace}", effort="high")
```

The effort decision also replaces the old “which model tier” question. Instead of maintaining routing logic across Haiku, Sonnet, and Opus, you stay on one model family and route by reasoning depth required. Simpler to maintain, easier to benchmark.

## Stack It with Two More Levers

Effort is one of three independent cost controls. The other two stack with it:

**Prompt caching:** Cache reads cost $0.50/million — a 90% discount off the $5/million standard input rate. If you send the same system prompt or large document context on every request (RAG, multi-turn chat, data pipelines), [prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) is the second biggest lever after effort. One implementation note: changing effort between turns invalidates cached prefixes. Pick one effort level per session and hold it constant.

**Batch API:** 50% off both input and output ($2.50/$12.50/million) for async, non-time-sensitive workloads. Document processing, nightly analysis runs, offline enrichment pipelines — if you do not need real-time results, batch takes half the bill. It stacks with prompt caching.

## The max_tokens Trap at xhigh and max

If you are moving workloads to `xhigh`

or `max`

effort, check your `max_tokens`

setting. Thinking tokens count against `max_tokens`

— it is a hard cap on total output (thinking plus response text combined). Legacy code set to `max_tokens: 4096`

will bottleneck the model before it finishes reasoning. Anthropic recommends starting at 64,000 and tuning from there. Also: passing `thinking: {"type": "disabled"}`

at `xhigh`

or `max`

returns a 400 error. Thinking cannot be turned off at those levels on Opus 5.

## Run Your Evals Before Committing

Before shipping a new effort level to production, run a task-specific eval: send 50–100 representative prompts through both the current and proposed effort level and compare outputs. Find the cheapest setting where quality still meets your bar — do not assume a setting from a blog post applies to your use case. Anthropic is explicit: “If you carried effort settings over from an earlier model, run a fresh effort sweep on your evals rather than reusing them.”

The effort toggle is live, requires no feature flag, and works across all Opus 5 deployments — API, Bedrock, Google Cloud, and Microsoft Foundry. The only reason to wait is if you haven’t run your evals yet. Run them.
