Output schema 400 missing_items: an array node needs items

A Format output_schema with an array and no items fails with 400 and rule missing_items before anything runs. The bad schema, the fix, the violation.

3 min readSume
All posts

If a Format run answers 400 output_schema_invalid and one of the entries in details.violations[] has the rule missing_items, you declared a node with "type": "array" and no items. Add an items schema to that array and send the request again. Sume checks the schema at submit, before anything runs, and charges nothing for the rejected call (Structured output).

Plain JSON Schema allows an array with no items, which means an array of anything. The strict subset that Sume enforces does not, because Sume only fills a schema it can satisfy mechanically.

Bad and fixed

The first schema is rejected. The second names the element type, so it passes the check.

// rejected: rule missing_items at #/properties/captions
{
  "type": "object",
  "additionalProperties": false,
  "required": ["captions"],
  "properties": { "captions": { "type": "array" } }
}

// accepted
{
  "type": "object",
  "additionalProperties": false,
  "required": ["captions"],
  "properties": { "captions": { "type": "array", "items": { "type": "string" } } }
}

Read the rule, not the message

Each violation is { path, rule, message }. The path is a JSON-Pointer-style location such as #/properties/scenes/items/properties/clip. The message is text for a person and can change, while rule is a stable lowercase token you can switch on. Sume reports every problem in one response, so one 400 is usually enough to fix the whole schema.

Source: docs.sume.com, read 2026-10-06.
ruleWhat it flags
missing_itemsAn array node with no items.
missing_typeA node with no type, $ref or anyOf.
unsupported_typeA type outside the seven allowed types.
additional_properties_falseAn object node without additionalProperties: false.
required_completenessA declared property missing from required, or the reverse.

If the items are objects

An items object is itself a node, so it needs additionalProperties: false, every property in required, and a type on each property. For repeated shapes, put the object under root $defs and point items at #/$defs/<name>. The same rules apply on a schedule, where you paste the schema into the dashboard, and on an Agent Completion.

Sources

Related posts

More in Formats

All Formats posts

Written by Sume