Structured output means the model returns data your code can parse, usually JSON.
It is what lets a language model sit inside an ordinary software pipeline.
Free prose has to be parsed with regular expressions, which breaks the moment wording shifts.
The weak version is asking for JSON in the prompt and hoping.
That mostly works and fails often enough to hurt at scale.
Typical failures are a stray sentence before the JSON, a trailing comma, or a fenced code block.
The strong version is schema enforcement offered by the API itself.
You supply a JSON Schema and the decoder is constrained to tokens that keep the output valid.
Invalid JSON then becomes impossible rather than unlikely.
Field names carry meaning, so calling a field urgency_score guides what goes in it.
Adding a short description to each field improves the values noticeably.
Enumerations are better than free strings whenever the set of answers is known.
Ask for a reasoning field before the answer field if you want the reasoning to help.
Order matters, since a field generated after the answer cannot have influenced it.
Always validate on your side anyway, because a schema constrains shape and not sense.