Structured Output Schema Checker

See whether OpenAI, Claude and Gemini accept your JSON Schema for structured outputs — and fix it in one click

Need a schema to start from? Generate one from sample JSON with the JSON Schema Generator.

Rules follow each provider's structured-output docs (October 2026). Constraints the fix removes (like minimum or maxLength) aren't enforced by the model — check them after parsing, e.g. with Zod or Pydantic.

Was the Structured Output Schema Checker helpful?

Get new tools in your inbox

About once a month, when new tools ship. No spam, one-click unsubscribe.

We store only your email to send these updates. Privacy

About this tool

The Structured Output Schema Checker tells you whether OpenAI, Claude and Gemini will accept a JSON Schema for structured outputs — before the API answers with a 400. The providers support different subsets of JSON Schema: OpenAI's strict mode needs additionalProperties: false on every object and every property listed in required (optional fields become "type": ["string", "null"]), rejects allOf, not and if/then/else, and limits formats, nesting depth and enum sizes. Claude also requires additionalProperties: false and allows optional fields, but doesn't support recursive schemas, numeric limits like minimum, or string length limits. Gemini accepts most of JSON Schema and silently ignores constraints like minLength and uniqueItems. Paste a bare schema or a whole response_format, tool or function definition — the checker finds the schema inside and lists every problem with its exact path. The auto-fix produces a version the provider accepts and tells you which constraints it removed, so you can check them in your own code. You also get the exact place the schema goes in each provider's request.

When to use it

  • →Fixing "Invalid schema for response_format" or "additionalProperties must be false" errors from OpenAI
  • →Moving a structured-output integration between OpenAI, Claude and Gemini
  • →Checking a schema generated by Zod, Pydantic or a JSON Schema generator before using it with an LLM
  • →Turning optional fields into the nullable form strict mode needs
  • →Learning which JSON Schema keywords each provider actually enforces

Tips

  • ◆In OpenAI strict mode, "optional" means nullable: the field is always present, but the model may set it to null.
  • ◆Constraints a provider doesn't support aren't enforced by the model — validate the parsed output with Zod (.parse) or Pydantic (model_validate_json) anyway.
  • ◆Claude's Python and TypeScript SDKs remove unsupported constraints like minimum or maxLength automatically and check them after the response; with raw HTTP you must remove them yourself.
  • ◆Keep schemas shallow and enums short — very large schemas are slower to compile and can be rejected outright.

Frequently asked questions

Why does OpenAI require every property to be in required?

Strict mode constrains generation so the output always matches the schema exactly. A field that may or may not appear makes that harder, so OpenAI requires all fields and asks you to express optionality as a union with null instead.

Does the same schema work for Claude and OpenAI?

Often, after a few changes. A schema fixed for OpenAI strict mode (all fields required and nullable, additionalProperties: false, no numeric or length limits) is also accepted by Claude. Going the other way, Claude allows optional fields that OpenAI strict mode rejects.

Are these rules current?

They follow each provider's structured-output documentation as of October 2026. Providers expand their support over time, so if an API accepts something this tool flags, the API wins.

Related tools

ToolNinja