Skip to content

Browse catalog

Search catalog

[READY] Type a title, tag, or description.

NOTES // concept

Refusal as API contract

LAST_MODIFIED
2026.10.07
CATEGORY
concept

A refusal on Claude Fable 5 is a successful HTTP 200 with stop_reason: "refusal", not an exception. Code that treats every 200 as usable output is wrong on this tier. Anthropic shipped Fable 5 (claude-fable-5) on 2026-06-09 at $10/$50 per million tokens with a 1M context; the integration-breaking change is the classifier contract, not the price.

What to build

  1. Branch on stop_reason === "refusal" on every call.
  2. Retry on Opus 5 (or enable Anthropic’s beta automatic fallbacks).
  3. Account for billing: as of September 2026 a refusal before any output is free in most categories but billed for bio, frontier_llm, and reasoning_extraction, and a mid-stream refusal bills the input plus streamed output; fallback credit covers the prompt-cache cost of the retry model.
const msg = await client.messages.create({
  model: "claude-fable-5",
  max_tokens: 4096,
  messages,
});

if (msg.stop_reason === "refusal") {
  // HTTP 200, not an exception. Retry on another Claude model.
  return retryOn("claude-opus-5", messages);
}

Fable 5 is an escalation tier - move up only when Opus 5 is not enough, because the price doubles and refusal handling adds integration cost lower tiers do not have. Mythos 5 is the same model without classifiers, limited to verified organizations. Fable 5.1 (claude-fable-5-1, same price) has since superseded Fable 5 and keeps the same refusal contract.

Full playbook: Claude Fable 5: refusals are an API contract, not an error.

Sources

  1. Refusals and fallbackAnthropic
  2. Fallback creditAnthropic
  3. PricingAnthropic
claudefablerefusalsapi

Related_Notes