Product
Sellable unit of publisher inventory. Merges the buyer's OpenDirect (the IAB direct-buying API standard) ``Product`` with the seller's taxonomy-driven ``Product``. Targeting intent uses the three IAB (Interactive Advertising Bureau) taxonomies: Audience (who sees the ad), Ad Product (what is advertised), and Content (where ads appear). ``base_price`` is the seller's public/list price signal, if disclosed; the private negotiated rate for a buyer/seller pair lives on their RateCard (flagged decision FD-9), never here. ID minting: ``product_id`` is seller-issued.
Properties
| Name | Type | Description |
|---|---|---|
| ad_formats | array | OpenRTB (Open Real-Time Bidding) formats: "banner", "video", "native", "audio". |
| ad_product_targeting | object | IAB Ad Product Taxonomy targeting intent. |
| audience_targeting | object | IAB Audience Taxonomy targeting intent. |
| available_impressions | object | |
| base_price | object | Public list price, if disclosed; None when pricing is on request. |
| commercial_terms | object | |
| content_targeting | object | IAB Content Taxonomy targeting intent. |
| delivery_type | object | |
| description | object | |
| domain | object | |
| ext | object | Extension slot. |
| name | string | |
| pricing_model | object | |
| pricing_type | object | |
| product_id | string | Seller-issued product identifier. |
| seller_organization_id | string | Registry-issued id of the owning seller organization. |
JSON Schema
{
"$defs": {
"CommercialTerms": {
"description": "Commercial capabilities a product supports (not binding terms).",
"properties": {
"guarantee_allowed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Guarantee Allowed"
},
"makegood_allowed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Makegood Allowed"
},
"minimum_deal_value": {
"anyOf": [
{
"$ref": "#/$defs/Money"
},
{
"type": "null"
}
],
"default": null
},
"supported_deal_types": {
"description": "Supported deal types: 'PG' (Programmatic Guaranteed), 'PD' (Preferred Deal), 'PA' (Private Auction).",
"items": {
"$ref": "#/$defs/DealType"
},
"title": "Supported Deal Types",
"type": "array"
},
"supported_pricing_models": {
"items": {
"$ref": "#/$defs/PricingModel"
},
"title": "Supported Pricing Models",
"type": "array"
}
},
"title": "CommercialTerms",
"type": "object"
},
"DealType": {
"description": "Programmatic deal types. The short wire encoding is canonical.\n\n- ``PG`` = Programmatic Guaranteed: fixed price, guaranteed impressions\n- ``PD`` = Preferred Deal: fixed price, non-guaranteed first look\n- ``PA`` = Private Auction: auction with floor price, invited buyers\n\nMapping from the seller repo's retired long-form encoding\n(``models/core.py``): ``programmaticguaranteed`` -> ``PG``,\n``preferreddeal`` -> ``PD``, ``privateauction`` -> ``PA``. The\nlong-form strings are NOT valid wire values.",
"enum": [
"PG",
"PD",
"PA"
],
"title": "DealType",
"type": "string"
},
"DeliveryType": {
"description": "Delivery type for a product (OpenDirect vocabulary).\n\nPMP = private marketplace.",
"enum": [
"Exclusive",
"Guaranteed",
"PMP"
],
"title": "DeliveryType",
"type": "string"
},
"Money": {
"description": "Exact money amount in integer micros (flagged decision FD-11).\n\n``1_000_000`` micros = 1 currency unit \u2014 the ad-industry convention\n(Google Ad Manager, among others, prices in micros). Float is BANNED on\nthe wire for money: IEEE 754 floating point is non-deterministic for\nmoney math (``0.1 + 0.2 != 0.3``, and repeated CPM \u2014 cost per mille \u2014\narithmetic accumulates error), and the two source repos used ``float``\nend-to-end; that defect must not be fossilized into the spec. Every\nprice, rate, budget, and offer in the shared contract is a ``Money``.\n\n``amount_micros`` is a strict integer: float inputs are rejected at\nvalidation time rather than silently truncated.",
"properties": {
"amount_micros": {
"description": "Amount in micros; 1,000,000 micros = 1 currency unit.",
"title": "Amount Micros",
"type": "integer"
},
"currency": {
"default": "USD",
"description": "ISO 4217 alpha-3 currency code.",
"pattern": "^[A-Z]{3}$",
"title": "Currency",
"type": "string"
}
},
"required": [
"amount_micros"
],
"title": "Money",
"type": "object"
},
"PricingModel": {
"description": "Unit of pricing. Union of the buyer's ``RateType`` and the seller's\n``PricingModel`` plus the linear TV additions.\n\n- ``cpm``: cost per mille (thousand impressions)\n- ``cpmv``: cost per thousand viewable impressions\n- ``cpv``: cost per view\n- ``cpc``: cost per click\n- ``cpcv``: cost per completed view\n- ``cpd``: cost per day\n- ``cpp``: cost per (gross rating) point \u2014 linear TV\n- ``flat_fee``: flat fee (buyer repo's ``FlatRate`` maps here)\n- ``unit_rate``: per-unit rate\n- ``hybrid``: mixed CPM/CPP pricing \u2014 linear TV",
"enum": [
"cpm",
"cpmv",
"cpv",
"cpc",
"cpcv",
"cpd",
"cpp",
"flat_fee",
"unit_rate",
"hybrid"
],
"title": "PricingModel",
"type": "string"
},
"PricingType": {
"description": "How a price signal should be interpreted.\n\n- ``fixed``: price is set by the seller, use as-is\n- ``floor``: minimum price; negotiation expected above this level\n- ``on_request``: no price available; buyer must negotiate before any\n pricing exists (pricing fields are None \u2014 buyers must never fabricate\n a price for on_request inventory)",
"enum": [
"fixed",
"floor",
"on_request"
],
"title": "PricingType",
"type": "string"
}
},
"description": "Sellable unit of publisher inventory.\n\nMerges the buyer's OpenDirect (the IAB direct-buying API standard)\n``Product`` with the seller's taxonomy-driven ``Product``. Targeting\nintent uses the three IAB (Interactive Advertising Bureau) taxonomies:\nAudience (who sees the ad), Ad Product (what is advertised), and\nContent (where ads appear).\n\n``base_price`` is the seller's public/list price signal, if disclosed;\nthe private negotiated rate for a buyer/seller pair lives on their\nRateCard (flagged decision FD-9), never here.\n\nID minting: ``product_id`` is seller-issued.",
"properties": {
"ad_formats": {
"description": "OpenRTB (Open Real-Time Bidding) formats: \"banner\", \"video\", \"native\", \"audio\".",
"items": {
"type": "string"
},
"title": "Ad Formats",
"type": "array"
},
"ad_product_targeting": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "IAB Ad Product Taxonomy targeting intent.",
"title": "Ad Product Targeting"
},
"audience_targeting": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "IAB Audience Taxonomy targeting intent.",
"title": "Audience Targeting"
},
"available_impressions": {
"anyOf": [
{
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Available Impressions"
},
"base_price": {
"anyOf": [
{
"$ref": "#/$defs/Money"
},
{
"type": "null"
}
],
"default": null,
"description": "Public list price, if disclosed; None when pricing is on request."
},
"commercial_terms": {
"anyOf": [
{
"$ref": "#/$defs/CommercialTerms"
},
{
"type": "null"
}
],
"default": null
},
"content_targeting": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "IAB Content Taxonomy targeting intent.",
"title": "Content Targeting"
},
"delivery_type": {
"$ref": "#/$defs/DeliveryType",
"default": "Guaranteed"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Domain"
},
"ext": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Extension slot.",
"title": "Ext"
},
"name": {
"maxLength": 128,
"title": "Name",
"type": "string"
},
"pricing_model": {
"$ref": "#/$defs/PricingModel",
"default": "cpm"
},
"pricing_type": {
"$ref": "#/$defs/PricingType",
"default": "fixed"
},
"product_id": {
"description": "Seller-issued product identifier.",
"title": "Product Id",
"type": "string"
},
"seller_organization_id": {
"description": "Registry-issued id of the owning seller organization.",
"title": "Seller Organization Id",
"type": "string"
}
},
"required": [
"product_id",
"seller_organization_id",
"name"
],
"title": "Product",
"type": "object"
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
curl "https://apis.io/api/v1/json-schemas/iab-tech-lab-agentic-primitive-product"
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.