{ "$defs": { "AccessTier": { "description": "Access tier for tiered pricing, derived from revealed buyer identity.\n\n- ``public``: no identity \u2014 price ranges only\n- ``seat``: authenticated DSP (demand-side platform) seat\n- ``agency``: agency identity revealed\n- ``advertiser``: advertiser identity revealed (best rates)", "enum": [ "public", "seat", "agency", "advertiser" ], "title": "AccessTier", "type": "string" }, "CancellationTerms": { "description": "Structured cancellation window for linear TV deals.", "properties": { "cancellable_pct": { "description": "Portion of the deal that can be cancelled (0.0-1.0).", "maximum": 1.0, "minimum": 0.0, "title": "Cancellable Pct", "type": "number" }, "deadline": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "description": "Absolute deadline for cancellation.", "title": "Deadline" }, "force_majeure": { "default": true, "description": "Whether force majeure exceptions apply.", "title": "Force Majeure", "type": "boolean" }, "notice_days": { "description": "Days of notice required before cancellation.", "title": "Notice Days", "type": "integer" } }, "required": [ "notice_days", "cancellable_pct" ], "title": "CancellationTerms", "type": "object" }, "ConsentContext": { "description": "Privacy consent signals that travel with a deal (flagged decision FD-10).\n\nFull build-out (EP-10.4) of the EP-1.2 placeholder: the three\ninteroperable consent-string carriers \u2014 GPP (Global Privacy Platform)\nwith its applicable section ids, TCF (Transparency & Consent Framework)\nwith the ``gdpr_applies`` gate, and the US Privacy (``us_privacy``)\nstring \u2014 plus the SGP (SafeGuard Privacy / IAB Diligence Platform)\n``diligence_status``. Field names from the EP-1.2 placeholder are kept\nunchanged for backward compatibility; the build-out is purely additive.\nIt travels with the Deal, Quote, and Order. Strings are carried opaque:\nno decoding/vendor-list validation is claimed (see the conformance\nstandards registry).", "properties": { "applicable_regimes": { "description": "Privacy regime identifiers in scope (e.g. 'GDPR', 'CCPA').", "items": { "type": "string" }, "title": "Applicable Regimes", "type": "array" }, "diligence_status": { "$ref": "#/$defs/DiligenceStatus", "default": "unknown", "description": "Counterparty diligence status (SGP = SafeGuard Privacy / IAB Diligence Platform)." }, "gdpr_applies": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "description": "Whether GDPR (EU General Data Protection Regulation) applies to this context; None when undetermined. Gates interpretation of the TCF string.", "title": "Gdpr Applies" }, "gpp_section_ids": { "description": "GPP section ids present in the string.", "items": { "type": "integer" }, "title": "Gpp Section Ids", "type": "array" }, "gpp_string": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "GPP (Global Privacy Platform) consent string.", "title": "Gpp String" }, "tcf_string": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "TCF (Transparency & Consent Framework) TC string, when GDPR applies.", "title": "Tcf String" }, "us_privacy": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "US Privacy (CCPA) string, e.g. '1YNN'; superseded by GPP where present.", "title": "Us Privacy" }, "verified_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "default": null, "description": "Timezone-aware timestamp of the last diligence verification, if any.", "title": "Verified At" } }, "title": "ConsentContext", "type": "object" }, "DealStatus": { "description": "ONE deal status vocabulary, unioned from the four competing sets.\n\nSources: buyer ``DealResponse.status`` (proposed/active/rejected/\nexpired/completed), seller ``DealBookingStatus`` (proposed/active/\nexpired/cancelled), buyer ``BuyerDealStatus`` (quoted/negotiating/\naccepted/booking/booked/delivering/... + linear TV extensions).\n\nRecorded aliases (retired values, NOT valid on the wire):\n``delivering`` -> ``active``; ``booking`` -> ``booked``;\n``quoted`` -> represented by QuoteStatus, not a deal state;\n``partially_canceled`` -> ``partially_cancelled``.", "enum": [ "proposed", "negotiating", "accepted", "booked", "active", "makegood_pending", "partially_cancelled", "completed", "rejected", "failed", "cancelled", "expired" ], "title": "DealStatus", "type": "string" }, "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" }, "DiligenceStatus": { "description": "Status of counterparty privacy diligence (IAB Diligence Platform).", "enum": [ "unknown", "pending", "passed", "failed" ], "title": "DiligenceStatus", "type": "string" }, "LinearTVQuoteDetails": { "description": "Linear-TV-specific quote details (seller-populated).\n\nNested under ``Quote.linear_tv`` when ``media_type == \"linear_tv\"``.", "properties": { "audience_estimate": { "additionalProperties": true, "description": "Audience estimates; expected keys \"demo\", \"universe\", \"impressions_equiv\".", "title": "Audience Estimate", "type": "object" }, "cancellation_terms": { "anyOf": [ { "$ref": "#/$defs/CancellationTerms" }, { "type": "null" } ], "default": null }, "cpp": { "$ref": "#/$defs/Money", "description": "CPP (cost per point) offered by the seller." }, "dayparts": { "items": { "type": "string" }, "title": "Dayparts", "type": "array" }, "estimated_grps": { "description": "Estimated GRPs (gross rating points).", "title": "Estimated Grps", "type": "number" }, "estimated_rating": { "title": "Estimated Rating", "type": "number" }, "makegood_policy": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Makegood policy: \"standard\" (audience deficiency unit), \"negotiated\", or \"none\".", "title": "Makegood Policy" }, "measurement_currency": { "title": "Measurement Currency", "type": "string" }, "networks": { "items": { "type": "string" }, "title": "Networks", "type": "array" }, "spot_length": { "title": "Spot Length", "type": "integer" }, "spots_per_week": { "title": "Spots Per Week", "type": "integer" }, "target_demo": { "title": "Target Demo", "type": "string" }, "total_spots": { "title": "Total Spots", "type": "integer" } }, "required": [ "target_demo", "estimated_grps", "estimated_rating", "cpp", "dayparts", "networks", "spots_per_week", "total_spots", "spot_length", "measurement_currency" ], "title": "LinearTVQuoteDetails", "type": "object" }, "MediaType": { "description": "Media type discriminator carried on quotes and deals.\n\nSellers that do not support ``linear_tv`` MUST return a structured\nrejection rather than silently mispricing (flagged decision FD-6);\nthe field exists on the shared schema so that rejection can be\nstructural.", "enum": [ "digital", "ctv", "linear_tv" ], "title": "MediaType", "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" }, "OpenRTBParams": { "description": "OpenRTB (Open Real-Time Bidding) deal parameters for DSP\n(demand-side platform) activation.", "properties": { "at": { "default": 3, "description": "Auction type (3 = fixed price).", "title": "At", "type": "integer" }, "bidfloor": { "$ref": "#/$defs/Money", "description": "Bid floor (exact micros; FD-11). Adapters translate to the raw OpenRTB float `bidfloor`/`bidfloorcur` encoding at the DSP edge." }, "id": { "description": "Deal id as it appears in the OpenRTB bid stream.", "title": "Id", "type": "string" }, "wadomain": { "description": "Allowed advertiser domains.", "items": { "type": "string" }, "title": "Wadomain", "type": "array" }, "wseat": { "description": "Allowed buyer seats.", "items": { "type": "string" }, "title": "Wseat", "type": "array" } }, "required": [ "id", "bidfloor" ], "title": "OpenRTBParams", "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" }, "ProductRef": { "description": "Lightweight product summary embedded in quotes and deals.", "properties": { "inventory_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Inventory Type" }, "name": { "title": "Name", "type": "string" }, "product_id": { "description": "Seller-issued product identifier.", "title": "Product Id", "type": "string" } }, "required": [ "product_id", "name" ], "title": "ProductRef", "type": "object" }, "QuotePricing": { "description": "Pricing breakdown on a quote or deal.\n\n``base_cpm``/``final_cpm`` are optional to support\n``pricing_type=on_request`` \u2014 when the seller has not provided pricing,\nthese fields are None. CPM = cost per mille (thousand impressions);\nCPP = cost per point (linear TV).", "properties": { "base_cpm": { "anyOf": [ { "$ref": "#/$defs/Money" }, { "type": "null" } ], "default": null }, "base_cpp": { "anyOf": [ { "$ref": "#/$defs/Money" }, { "type": "null" } ], "default": null, "description": "Linear TV base CPP; None for digital/CTV." }, "final_cpm": { "anyOf": [ { "$ref": "#/$defs/Money" }, { "type": "null" } ], "default": null }, "final_cpp": { "anyOf": [ { "$ref": "#/$defs/Money" }, { "type": "null" } ], "default": null, "description": "Linear TV final CPP; None for digital/CTV." }, "pricing_model": { "$ref": "#/$defs/PricingModel", "default": "cpm" }, "pricing_type": { "$ref": "#/$defs/PricingType", "default": "fixed" }, "rationale": { "default": "", "title": "Rationale", "type": "string" }, "tier_discount_pct": { "default": 0.0, "title": "Tier Discount Pct", "type": "number" }, "volume_discount_pct": { "default": 0.0, "title": "Volume Discount Pct", "type": "number" } }, "title": "QuotePricing", "type": "object" }, "QuoteTerms": { "description": "Volume, flight, and guarantee terms on a quote or deal.", "properties": { "flight_end": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "Flight End" }, "flight_start": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "Flight Start" }, "grps": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "description": "Linear TV volume in GRPs (gross rating points).", "title": "Grps" }, "guaranteed": { "default": false, "title": "Guaranteed", "type": "boolean" }, "guaranteed_grps": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Guaranteed Grps" }, "impressions": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "title": "Impressions" }, "target_demo": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Linear TV target demographic.", "title": "Target Demo" } }, "title": "QuoteTerms", "type": "object" }, "SupplyChain": { "description": "OpenRTB SupplyChain object (``schain``): the ordered node path.\n\n``complete`` is the OpenRTB 0/1 flag: 1 means every node from the\ninitial impression to the final bidder is present (no undisclosed\nhops). Nodes are ordered from the first seller to the entity making the\nrequest. Carried optionally on the :class:`Deal` for transparency.", "properties": { "complete": { "default": 1, "description": "OpenRTB 0/1: 1 = all nodes in the path are disclosed.", "maximum": 1, "minimum": 0, "title": "Complete", "type": "integer" }, "ext": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "description": "Extension slot.", "title": "Ext" }, "nodes": { "description": "Supply path, ordered first-seller -> requesting-entity.", "items": { "$ref": "#/$defs/SupplyChainNode" }, "title": "Nodes", "type": "array" }, "ver": { "default": "1.0", "description": "SupplyChain object version (OpenRTB ``ver``).", "title": "Ver", "type": "string" } }, "title": "SupplyChain", "type": "object" }, "SupplyChainNode": { "description": "One hop in the OpenRTB supply chain (``schain`` node).\n\nField names are the OpenRTB SupplyChainNode names verbatim. ``asi`` is\nthe advertising system identifier (the canonical domain of the system\nthe node operates in, e.g. ``\"exchange.example.com\"``); ``sid`` is the\nseller id **within that system** and matches a ``seller_id`` in that\nsystem's sellers.json.", "properties": { "asi": { "description": "Advertising system identifier (canonical domain of the system).", "title": "Asi", "type": "string" }, "domain": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Business domain of the entity represented by this node.", "title": "Domain" }, "ext": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "description": "Extension slot.", "title": "Ext" }, "hp": { "default": 1, "description": "Handled-payment flag (OpenRTB 0/1): 1 = node is paid for this inventory.", "maximum": 1, "minimum": 0, "title": "Hp", "type": "integer" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Business name of the entity represented by this node.", "title": "Name" }, "rid": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Request id issued by the seller (OpenRTB ``rid``), when present.", "title": "Rid" }, "sid": { "description": "Seller id within the ``asi`` system; matches its sellers.json seller_id.", "title": "Sid", "type": "string" } }, "required": [ "asi", "sid" ], "title": "SupplyChainNode", "type": "object" } }, "description": "A confirmed deal booked from a quote (Deals API v1.0 book phase).\n\nID minting: ``deal_id`` is seller-issued.", "properties": { "activation_instructions": { "additionalProperties": { "type": "string" }, "title": "Activation Instructions", "type": "object" }, "buyer_tier": { "$ref": "#/$defs/AccessTier", "default": "public" }, "consent_context": { "anyOf": [ { "$ref": "#/$defs/ConsentContext" }, { "type": "null" } ], "default": null, "description": "Privacy consent signals riding with the deal (FD-10)." }, "created_at": { "format": "date-time", "title": "Created At", "type": "string" }, "deal_id": { "description": "Seller-issued deal identifier.", "title": "Deal Id", "type": "string" }, "deal_type": { "$ref": "#/$defs/DealType" }, "expires_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "default": null, "description": "Acceptance window for a proposed deal.", "title": "Expires At" }, "linear_tv": { "anyOf": [ { "$ref": "#/$defs/LinearTVQuoteDetails" }, { "type": "null" } ], "default": null, "description": "Linear TV details carried over from the booked quote (FD-6)." }, "media_type": { "$ref": "#/$defs/MediaType", "default": "digital" }, "openrtb_params": { "anyOf": [ { "$ref": "#/$defs/OpenRTBParams" }, { "type": "null" } ], "default": null }, "pricing": { "$ref": "#/$defs/QuotePricing" }, "product": { "$ref": "#/$defs/ProductRef" }, "quote_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Seller-issued id of the quote this deal booked.", "title": "Quote Id" }, "rate_card_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Seller-issued id of the private rate card this deal books against, when the pair has one (FD-9). Never embedded, only referenced.", "title": "Rate Card Id" }, "seller_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Registry-issued id of the selling agent.", "title": "Seller Id" }, "status": { "$ref": "#/$defs/DealStatus", "default": "proposed" }, "supply_chain": { "anyOf": [ { "$ref": "#/$defs/SupplyChain" }, { "type": "null" } ], "default": null, "description": "OpenRTB supply chain (schain) for transparency (EP-10.3); optional so pre-schain deals still validate." }, "terms": { "$ref": "#/$defs/QuoteTerms" } }, "required": [ "deal_id", "deal_type", "product", "pricing", "terms" ], "title": "Deal", "type": "object" }