As of 2026-10-12, the Claude platform release notes place Claude Haiku 5.5 (claude-haiku-5-5) on 2026-10-07. It is for classification, routing, extraction, and subagents. The context window is 1M tokens and the output cap is 128k. The same text counts as about 30% more tokens than on Haiku 4.5. Structured Outputs are not available for this model on Amazon Bedrock. That includes output_config.format and tools with strict: true. Validate inputs and final JSON in your own code. On the Claude API, strict is available and every object still needs additionalProperties: false. A reply can start with a thinking block. Why the contract is an object: why AI models like JSON. What Structured Outputs are: AI Structured Output.
A ticket router runs hundreds of thousands of times a day. After the model ID changes from claude-haiku-4-5 to claude-haiku-5-5, priority can still arrive as the string "2", and an extra note can still reach the executor. Bedrock has no grammar constraint. A local Schema is the gate before execution.
What the docs actually say
As of 2026-10-12, follow What's new in Claude Haiku 5.5 and the migration guide. Against Haiku 4.5, these items touch the JSON contract:
- Job: high volume and low latency. Classification, routing, extraction, subagents. Adaptive thinking is on by default. Use
output_config.effortto trade quality for speed. - Window: context goes from 200k to 1M, output from 64k to 128k. Thinking tokens count toward
max_tokens. A small limit can stop after athinkingblock withstop_reason: "max_tokens"before any text. - Structured Outputs: checklist item 11 says Haiku 5.5 on Amazon Bedrock does not have the feature. That covers
output_config.formatandstrict: truetools. The sentence names Bedrock. The other platform IDs are listed separately. - Forced tools: Haiku 5.5 accepts
tool_choiceanyand a named tool. The response starts with the tool call and has nothinkingblock. To think first, send{"type":"auto"}and say in the prompt when to call the tool. - Old fields return 400:
thinking: {"type":"enabled","budget_tokens":N},temperatureother than 1,top_pother than 0.99, anytop_k, sendingtemperatureandtop_ptogether, and assistant prefill. The documented replacement for prefill is Structured Outputs, or a tool withenumfields. On Bedrock those two paths are unavailable, so the check stays local.
One line. The high-volume card has a new model ID. The shape constraint did not follow it onto Bedrock. Keep a JSON Schema that can reject a bad object before anything runs.
Model IDs on five platforms
The migration table. claude-haiku-5-5 is a fixed ID, with no date suffix and no separate alias:
{
"claude_api": "claude-haiku-5-5",
"amazon_bedrock": "anthropic.claude-haiku-5-5",
"claude_platform_on_aws": "claude-haiku-5-5",
"google_cloud": "claude-haiku-5-5",
"microsoft_foundry": "claude-haiku-5-5"
}
Haiku 4.5 on the Claude API is claude-haiku-4-5-20251001 or claude-haiku-4-5, on Bedrock anthropic.claude-haiku-4-5, and on Google Cloud claude-haiku-4-5@20251001. The same text is about 30% more tokens. The exact increase depends on the content. Recount with model: "claude-haiku-5-5". The minimum cacheable prompt drops from 4,096 tokens to 512.
No strict on Bedrock
The official sentence is worth keeping: Structured outputs aren't available for Claude Haiku 5.5 on Amazon Bedrock. Describe the format in the prompt, or use a tool without strict, then validate the output in your code.
The Claude API Structured Outputs page splits two paths. JSON outputs control what the model says. Strict tool use validates tool parameters. They share one JSON Schema subset. Haiku 5.5 on Bedrock offers neither. Classification results, routing fields, and extracted objects need another check after you receive tool_use.input or text.
The Sonnet 5.5 migration guide uses the same Bedrock sentence, and tool_choice types any and tool return 400 there. Haiku 5.5 still accepts both forced choices. Do not share one “force the call” branch across the two cards. A forced call on Haiku skips the thinking block.
The strict contract on the Claude API
Where Structured Outputs exist, strict: true sits at the top of the tool definition, next to name, description, and input_schema. The official strict page uses claude-opus-5-5 in its example. This route_ticket object follows the same rules for a Haiku classification job. It is a local sample, not a snippet from the release notes:
{
"model": "claude-haiku-5-5",
"max_tokens": 1024,
"tool_choice": { "type": "auto" },
"tools": [
{
"name": "route_ticket",
"description": "Classify a support ticket into a queue.",
"strict": true,
"input_schema": {
"type": "object",
"properties": {
"queue": {
"type": "string",
"enum": ["billing", "access", "bug"]
},
"priority": { "type": "integer" }
},
"required": ["queue", "priority"],
"additionalProperties": false
}
}
]
}
A final object uses output_config.format with type json_schema. The old name output_format is deprecated. Sending it without the beta header returns 400. To keep the old field, send structured-outputs-2025-11-13.
{
"output_config": {
"format": {
"type": "json_schema",
"schema": {
"type": "object",
"properties": {
"queue": { "type": "string", "enum": ["billing", "access", "bug"] },
"priority": { "type": "integer" }
},
"required": ["queue", "priority"],
"additionalProperties": false
}
}
}
}
The computer use and browser use toolset entries (computer_toolset_20260801, browser_toolset_20260801) reject strict: true. On the Claude API and Google Cloud, Haiku 5.5 replaces computer_20250124 with that computer toolset. On Bedrock, use computer_20251124 and the beta header computer-use-2025-11-24.
The first block is not always the answer
Adaptive thinking is on by default. A request that never mentions thinking can still begin with one or more thinking blocks. By default each block has an empty thinking string and a signature. For a summary, set thinking: {"type":"adaptive","display":"summarized"}. Select blocks by type. Reading content[0] as the classification returns the thinking block.
{
"content": [
{ "type": "thinking", "thinking": "", "signature": "EqQB..." },
{
"type": "tool_use",
"id": "toolu_01AbCd",
"name": "route_ticket",
"input": { "queue": "billing", "priority": 2 }
}
]
}
Thinking tokens count toward max_tokens. A small cap can stop after thinking, with incomplete JSON. The docs say stop_reason: "max_tokens" means the output may miss the schema. stop_reason: "refusal" is still HTTP 200, it is billed, and the refusal text takes precedence over the schema. Haiku 5.5 runs safety classifiers and has no server-side fallback. Do not ask a field for step-by-step reasoning. That can trigger a reasoning_extraction refusal.
With a forced tool_choice, the response starts at the tool call and has no thinking block. That sentence is in the migration guide. The default “think first” behavior depends on whether you forced the call.
Subset, enums, and size
Structured Outputs and strict tools share the limits. additionalProperties on an object must be false. Numerical constraints (minimum, maximum, multipleOf), string minLength and maxLength, complex enums, recursive schemas, and external $ref return 400. Array minItems supports only 0 and 1. allOf with $ref is unsupported.
One request may include at most 20 tools with strict: true. Across all strict schemas and JSON output schemas, parameters absent from required total at most 24. Parameters that use anyOf or a type array such as ["string","null"] total at most 16. Past the internal grammar size, the API returns 400 with “Schema is too complex for compilation.” Compilation times out at 180 seconds. The first use of a schema adds compile latency. Grammars cache for 24 hours. Changing the schema structure, or the tool set when both features are on, invalidates the cache. Changing only name or description does not.
String enum and const values are not guaranteed to match capitalization. The model can return a value that differs only in case, the request still returns 200, and there is no special stop_reason. Compare enums case-insensitively. Do not define two enum values that differ only by case.
Even with strict on the Claude API, the range of priority, the case of queue, and a truncated JSON body still need a local check. On Bedrock there is no strict, so all three bad samples can appear:
{
"ok": { "queue": "billing", "priority": 2 },
"string_priority": { "queue": "billing", "priority": "2" },
"extra_note": { "queue": "bug", "priority": 1, "note": "user is angry" },
"missing_queue": { "priority": 3 }
}
How to check it in JSON Toolbox
Tighten priority locally, outside the official subset. This minimum / maximum must not go into a strict schema, or the API returns 400. It is only the local gate before execution:
{
"type": "object",
"properties": {
"queue": { "type": "string", "enum": ["billing", "access", "bug"] },
"priority": { "type": "integer", "minimum": 1, "maximum": 3 }
},
"required": ["queue", "priority"],
"additionalProperties": false
}
- Paste the tool definition and the four inputs into JSON format and confirm they parse.
- Use JSON → Schema on
ok, then addenum,required, andadditionalProperties: false. Leave the range on the local copy. - Run
string_priority,extra_note, andmissing_queuethrough Schema validator. All three should fail.okshould pass. - Wrap the same contract in Function Calling and Structured Output. Treat the Bedrock path as having no
strict. The Claude API path can turn it on, and still needs a local check for range and enum case.
The data stays in the browser. It is not uploaded. Get an object that rejects a string priority and an extra note before you change the model ID to claude-haiku-5-5.
FAQ
Does Haiku 5.5 still accept a forced tool_choice?
Yes. Both any and a named tool are accepted. The response starts at the tool call and has no thinking block. To think first, use auto and say in the prompt when to call the tool.
Why is strict unavailable on Bedrock?
The checklist says Haiku 5.5 on Amazon Bedrock has no Structured Outputs. output_config.format and strict: true are both absent. Validate in code.
Why is the first content block an empty thinking block?
Adaptive thinking is on by default. The thinking field is empty and only a signature comes back. Select tool_use or text by type.
Can additionalProperties be true?
Not on strict tools or JSON outputs. It must be false. Numeric and string-length constraints are outside the subset. Check them locally.
Is this the same note as mid-conversation tool changes?
No. That note is tool_addition and mcp_tool_listing, in mid-conversation tools. This one is the Haiku 5.5 validation path.
Summary
As of 2026-10-12, the Claude Haiku 5.5 release note is dated 2026-10-07. The model ID is claude-haiku-5-5, and on Bedrock it is anthropic.claude-haiku-5-5. It takes classification and routing. Bedrock has no Structured Outputs, so strict: true is unavailable and a bad priority or an extra field has to fail your own Schema. On the Claude API, strict is available, objects must set additionalProperties: false, a request allows at most 20 strict tools, and range constraints are outside the subset. A reply can start with an empty thinking block. A forced tool_choice skips thinking. Reject "2" and an extra note before you change the model ID.