Skip to main content
AdCP uses two related but distinct concepts when working with creative formats. Their names are similar, which causes a recurring implementation error — this page defines both precisely and names the two failure modes.

format_id — structured reference object

format_id is always a JSON object, never a plain string. It identifies a format by the agent that declared it and the format’s local slug:
Optional dimension and duration fields extend it for parameterized template formats:
format_id is a pointer — it names a format without carrying its definition.

format — full definition object

format is the complete specification of a creative format. It is returned by list_creative_formats and related tasks. A format object contains a format_id as one of its properties, plus the asset requirements, render specs, and all other metadata:
A format is a definition — it describes what the format requires and how it renders.

Contrast at a glance

Two named failure modes

Anti-pattern A — string in a format_id slot

Wrong — format_id must be an object, not a plain string:
Correct:
AJV error: format_id must be of type object. Cause: the .id string inside the format_id object looks like a self-contained name and is sometimes extracted and used directly.

Anti-pattern B — format_id object in a format / formats slot

Wrong — a formats[] element must be a full definition object, not a bare format_id:
Correct:
AJV error: formats[0] must have required property 'name'. Cause: format_id and format are both objects; the shorter object is sometimes put in the slot that expects the larger one.

See also