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.
recommended asks, which field "Price attribute" names.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.
| Record | Question | As written | With our proposals |
|---|---|---|---|
| D-004 | What 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.