Deals API 1.0 JSON Schema Unofficial

Unofficial · Not an IAB Tech Lab artifact

Deals API 1.0, generated as JSON Schema

An unofficial JSON Schema for Deals API 1.0, the Deal Sync API, main of 2026-05-26, generated from the specification text by Postindustria, an IAB Tech Lab member. The specification remains the reference: where this site and the text differ, the text wins.

Open the type mapHow it's builtGet the schema filesRead the decisions

What generating it took

A pipeline reads the specification's markdown and, through a mapping of every attribute row, code list, and statement to a type, generates the JSON Schema 2020-12 files and the rules JSON Schema can't express, each with test vectors. The mapping and the 33 decisions are recorded by hand, each with the lines of the text it rests on. How it's built explains each step.

32open points filledWhere the text leaves a point open, a decision fills it, the same way in both variants: how a timestamp is written, what recommended asks, which field "Price attribute" names.
1change we proposeWhere the text settles a point and we would write it differently. You can switch it off.
5example rows checkedThe Example Scenarios table's rows are parts of a deal, and every one validates in both variants.

What the schemas cover

Two documents: Deal, the push body, and BuyerSeat, the status response. Each other object an attribute holds is a closed object of its own, BuyerStatus, Curation, Inventory, Terms, and every object's ext is Ext, open to the parties' extensions (D-021). The text's own code lists are 9 vocabularies, each code with the label the text gives it, and CategoryTaxonomy and DeviceType take AdCOM 1.0's lists from the registry on this site, at the commit it pins (D-027).

What they leave out

The text defines no paths, no request body for the status call, no response codes, and no authorization, so there is no OpenAPI here: the schemas cover the two payloads (D-025). Duties that no payload shows, such as a buyer validating bid requests against the deal, are 24 obligations of the party they name, not schema keywords.

How to read the two switches

mainTag 1.0-202602 Input

main is the text on the Deals API's main branch at 3028ddc, with the errata applied after the tag.

Tag 1.0-202602 is the text at 938a5d1, where sellerstatus gives the code 4 twice (D-010).

As writtenWith our proposals Variant

As written switches our proposal off, so each field it changes takes the form the text writes. With our proposals switches it on. In both, the 32 open points stay filled by their decisions.

The change we propose

Each row is one proposal, and what the as-written variant takes instead.

RecordQuestionAs writtenWith our proposals
D-004What is a country code in countries, which the text writes as "ISO-3166-3"?Any string, as the row types it: the codes ISO 3166-3 names are the four-letter codes of countries that no longer exist, which no current deal can run in, so the row's string type is all that stays.An ISO 3166-1 alpha-3 code, such as USA, as OpenRTB 2.6 writes geo.country, checked against the codes ISO 3166-1 assigns.

Inputs

Specification: IABTechLab/deal-api, deal1.0.md. The two inputs differ in one code list, sellerstatus, and in a spelling. Read the lock comparison, which classes each schema change as breaking, additive, or an annotation.