{
  "description": "Request shapes that fail on claude-fable-5, each with the fix. All return HTTP 400 unless noted.",
  "gotchas": [
    {
      "old_habit": "temperature, top_p, or top_k in the request",
      "result": "HTTP 400 — sampling parameters are removed",
      "fix": "Delete the parameters; steer behavior with prompting"
    },
    {
      "old_habit": "thinking: {type: 'enabled', budget_tokens: N}",
      "result": "HTTP 400 — fixed thinking budgets are removed",
      "fix": "Use thinking: {type: 'adaptive'}; control depth with output_config.effort"
    },
    {
      "old_habit": "thinking: {type: 'disabled'}",
      "result": "HTTP 400 — Fable-specific (accepted on Opus 4.7/4.8)",
      "fix": "Omit the thinking field entirely to run without thinking"
    },
    {
      "old_habit": "Assistant-turn prefill as the last message",
      "result": "HTTP 400 — prefills are removed",
      "fix": "Use structured outputs (output_config.format) or a system-prompt instruction"
    },
    {
      "old_habit": "max_tokens > ~16000 without streaming",
      "result": "SDK refusal or HTTP timeout (not a 400)",
      "fix": "Use the streaming API; 128K max output is reachable only via streaming"
    },
    {
      "old_habit": "Reading block.thinking and rendering it to users",
      "result": "Empty text — thinking display defaults to 'omitted' (silent change, no error)",
      "fix": "Request thinking: {type: 'adaptive', display: 'summarized'}"
    }
  ],
  "source": "https://fableguide.com/#rules",
  "last_verified": "2026-06-10"
}
