# Refusal as API contract

> Fable 5 safety classifiers return refusals as HTTP 200 with stop_reason refusal - every integration needs refusal handling and a fallback, not just errors.

URL: https://bartlomiejkrupa.dev/notes/refusal-as-api-contract/
Category: concept | Updated: 2026-10-07
Summary: Fable 5 safety classifiers return refusals as HTTP 200 with stop_reason refusal - every integration needs refusal handling and a fallback, not just errors.

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.

```typescript
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](/articles/claude-fable-5).

Sources:
- Refusals and fallback: https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback
- Fallback credit: https://platform.claude.com/docs/en/build-with-claude/fallback-credit
- Pricing: https://platform.claude.com/docs/en/about-claude/pricing
