{
 "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 \u2014 sampling parameters are removed",
   "fix": "Delete the parameters; steer behavior with prompting"
  },
  {
   "old_habit": "thinking: {type: 'enabled', budget_tokens: N}",
   "result": "HTTP 400 \u2014 fixed thinking budgets are removed",
   "fix": "Use thinking: {type: 'adaptive'}; control depth with output_config.effort"
  },
  {
   "old_habit": "thinking: {type: 'disabled'}",
   "result": "HTTP 400 \u2014 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 \u2014 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 \u2014 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",
 "version": "1.0.0",
 "dateModified": "2026-06-10"
}