IAB Tech Lab Quotes API

The Quotes API from IAB Tech Lab — 2 operation(s) for quotes.

Operations 2

POST /api/v1/quotes Request a non-binding quote (money-mutating; idempotency_key required) #
GET /api/v1/quotes/{quote_id} Retrieve a quote #

Documentation

Specifications

Schemas & Data

📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-deal.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-order.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-product.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-negotiation.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-proposal.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-mediakit.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-agent.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-line.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-account.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-organization.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-creative.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-creativeapproval.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-assignment.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-changerequest.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-consentcontext.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/iab-tech-lab/refs/heads/main/json-schema/iab-tech-lab-agentic-primitive-decisionrecord.json

Other Resources

Work with this as data

Every API 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 apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/iab-tech-lab-quotes-api"
All apis
curl "https://apis.io/api/v1/apis?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.

OpenAPI Specification

iab-tech-lab-quotes-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Iab Tech Lab Quotes API
  version: '1.0'
  description: 'Operations tagged Quotes across 2 of this provider''s published API definitions: iab-tech-lab-agentic-advertising-api-openapi.yaml, iab-tech-lab-seller-agent-openapi.json. Each path carries the servers of the definition it was published in.'
tags:
- name: Quotes
paths:
  /api/v1/quotes:
    post:
      operationId: createQuote
      summary: Request a non-binding quote (money-mutating; idempotency_key required)
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: ../jsonschema/protocol/QuoteRequest.json
      responses:
        '201':
          description: Quote envelope wrapping the Quote primitive.
          content:
            application/json:
              schema:
                $ref: ../jsonschema/protocol/QuoteResponse.json
        '400':
          description: Validation failure, or the FD-6 structured capability rejection (error=unsupported_capability with the unsupported list, e.g. linear_tv).
          content:
            application/json:
              schema:
                $ref: ../jsonschema/protocol/ErrorEnvelope.json
        '404':
          $ref: '#/components/responses/Error'
      tags:
      - Quotes
  /api/v1/quotes/{quote_id}:
    get:
      operationId: getQuote
      summary: Retrieve a quote
      parameters:
      - name: quote_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Quote envelope.
          content:
            application/json:
              schema:
                $ref: ../jsonschema/protocol/QuoteResponse.json
        '404':
          $ref: '#/components/responses/Error'
        '410':
          description: Quote expired (error=quote_expired).
          content:
            application/json:
              schema:
                $ref: ../jsonschema/protocol/ErrorEnvelope.json
      tags:
      - Quotes
components:
  responses:
    Error:
      description: 'Structured error envelope: {"detail": {"error": <ErrorCode>, "message": "...", "unsupported": [...]}}.'
      content:
        application/json:
          schema:
            $ref: ../jsonschema/protocol/ErrorEnvelope.json
  schemas:
    PricingType:
      type: string
      enum:
      - fixed
      - floor
      - on_request
      title: 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 — buyers must never fabricate\n  a price for on_request inventory)"
    MediaType:
      type: string
      enum:
      - digital
      - ctv
      - linear_tv
      title: MediaType
      description: 'Media type discriminator carried on quotes and deals.


        Sellers that do not support ``linear_tv`` MUST return a structured

        rejection rather than silently mispricing (flagged decision FD-6);

        the field exists on the shared schema so that rejection can be

        structural.'
    QuoteAvailability:
      properties:
        inventory_available:
          type: boolean
          title: Inventory Available
          default: true
        estimated_fill_rate:
          anyOf:
          - type: number
          - type: 'null'
          title: Estimated Fill Rate
        competing_demand:
          anyOf:
          - type: string
          - type: 'null'
          title: Competing Demand
      type: object
      title: QuoteAvailability
      description: Inventory availability information in a quote.
    AccessTier:
      type: string
      enum:
      - public
      - seat
      - agency
      - advertiser
      title: AccessTier
      description: 'Access tier for tiered pricing, derived from revealed buyer identity.


        - ``public``: no identity — price ranges only

        - ``seat``: authenticated DSP (demand-side platform) seat

        - ``agency``: agency identity revealed

        - ``advertiser``: advertiser identity revealed (best rates)'
    BuyerIdentity:
      properties:
        seat_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Seat Id
          description: DSP seat identifier.
        seat_name:
          anyOf:
          - type: string
          - type: 'null'
          title: Seat Name
          description: DSP platform display name.
        dsp_platform:
          anyOf:
          - type: string
          - type: 'null'
          title: Dsp Platform
          description: DSP platform slug (e.g. 'ttd', 'dv360').
        agency_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Agency Id
        agency_name:
          anyOf:
          - type: string
          - type: 'null'
          title: Agency Name
        agency_holding_company:
          anyOf:
          - type: string
          - type: 'null'
          title: Agency Holding Company
        advertiser_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Advertiser Id
        advertiser_name:
          anyOf:
          - type: string
          - type: 'null'
          title: Advertiser Name
        advertiser_industry:
          anyOf:
          - type: string
          - type: 'null'
          title: Advertiser Industry
        campaign_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Campaign Id
          description: Optional campaign scope for campaign-specific deals.
        campaign_name:
          anyOf:
          - type: string
          - type: 'null'
          title: Campaign Name
      type: object
      title: BuyerIdentity
      description: 'Buyer identity revealed progressively to unlock better pricing.


        Superset of the buyer repo''s ``BuyerIdentity`` and the seller repo''s

        ``BuyerIdentity``/``QuoteBuyerIdentity``; every field is optional so a

        partially revealed identity is always representable. The tier derived

        from these fields is capped server-side by the registry-verified trust

        status of the calling agent — it is never self-asserted.'
    DealType:
      type: string
      enum:
      - PG
      - PD
      - PA
      title: DealType
      description: 'Programmatic deal types. The short wire encoding is canonical.


        - ``PG`` = Programmatic Guaranteed: fixed price, guaranteed impressions

        - ``PD`` = Preferred Deal: fixed price, non-guaranteed first look

        - ``PA`` = Private Auction: auction with floor price, invited buyers


        Mapping from the seller repo''s retired long-form encoding

        (``models/core.py``): ``programmaticguaranteed`` -> ``PG``,

        ``preferreddeal`` -> ``PD``, ``privateauction`` -> ``PA``. The

        long-form strings are NOT valid wire values.'
    DiligenceStatus:
      type: string
      enum:
      - unknown
      - pending
      - passed
      - failed
      title: DiligenceStatus
      description: Status of counterparty privacy diligence (IAB Diligence Platform).
    QuoteRequest:
      properties:
        idempotency_key:
          type: string
          minLength: 1
          title: Idempotency Key
          description: Requester-minted opaque key (UUID recommended). Same key -> same response, no duplicate side effects (FD-12). Reusing a key with a different body is an idempotency_conflict error.
        product_id:
          type: string
          title: Product Id
          description: Seller-issued product to quote.
        deal_type:
          $ref: '#/components/schemas/DealType'
          description: '''PG'' (Programmatic Guaranteed), ''PD'' (Preferred Deal), ''PA'' (Private Auction). Typed — the retired long-form strings are not valid wire values.'
        impressions:
          anyOf:
          - type: integer
            minimum: 0.0
          - type: 'null'
          title: Impressions
          description: Requested volume; required for PG.
        flight_start:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          title: Flight Start
        flight_end:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          title: Flight End
        target_cpm:
          anyOf:
          - $ref: '#/components/schemas/Money'
          - type: 'null'
          description: Buyer's desired CPM (exact micros; FD-11). Advisory.
        buyer_identity:
          anyOf:
          - $ref: '#/components/schemas/BuyerIdentity'
          - type: 'null'
          description: Progressively revealed identity for tiered pricing; the effective tier is capped server-side by registry-verified trust.
        agent_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Agent Url
          description: A2A endpoint of the requesting buyer agent, for registry trust verification. The buyer already sent this; the seller's model dropped it — now part of the contract.
        rate_card_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Rate Card Id
          description: Seller-issued id of the pair's private rate card to price against (FD-9). The rate card itself never crosses the wire.
        media_type:
          $ref: '#/components/schemas/MediaType'
          description: Media discriminator (FD-6). Sellers that do not support the requested type MUST reject structurally.
          default: digital
        linear_tv:
          anyOf:
          - $ref: '#/components/schemas/LinearTVParams'
          - type: 'null'
          description: Linear TV parameters; required when media_type == 'linear_tv', must be None otherwise.
        audience_plan:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Audience Plan
          description: Audience plan slot (open object; the typed model lands with the audience-plan bead). Sellers pre-flight it against their capabilities and reject unsupported parts structurally (FD-6).
        consent_context:
          anyOf:
          - $ref: '#/components/schemas/ConsentContext'
          - type: 'null'
          description: Privacy consent signals riding with the request (FD-10).
      type: object
      required:
      - idempotency_key
      - product_id
      - deal_type
      title: QuoteRequest
      description: 'Request body for ``POST /api/v1/quotes`` (money-mutating: FD-12).


        ID minting: the seller mints ``quote_id`` in the response; the buyer

        never proposes one.'
    QuoteStatus:
      type: string
      enum:
      - available
      - booked
      - expired
      - declined
      title: QuoteStatus
      description: Status of a price quote (identical in both source repos).
    Quote:
      properties:
        quote_id:
          type: string
          title: Quote Id
          description: Seller-issued quote identifier.
        status:
          $ref: '#/components/schemas/QuoteStatus'
          default: available
        deal_type:
          $ref: '#/components/schemas/DealType'
        product:
          $ref: '#/components/schemas/ProductRef'
        pricing:
          $ref: '#/components/schemas/QuotePricing'
        terms:
          $ref: '#/components/schemas/QuoteTerms'
        availability:
          anyOf:
          - $ref: '#/components/schemas/QuoteAvailability'
          - type: 'null'
        buyer_tier:
          $ref: '#/components/schemas/AccessTier'
          default: public
        rate_card_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Rate Card Id
          description: Seller-issued id of the private rate card this quote prices against, when the pair has one (FD-9). The rate card itself is never embedded.
        expires_at:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Expires At
        seller_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Seller Id
          description: Registry-issued id of the quoting seller agent.
        created_at:
          type: string
          format: date-time
          title: Created At
        deal_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Deal Id
          description: Seller-issued deal id, set once the quote is booked.
        media_type:
          $ref: '#/components/schemas/MediaType'
          default: digital
        linear_tv:
          anyOf:
          - $ref: '#/components/schemas/LinearTVQuoteDetails'
          - type: 'null'
          description: Linear TV details; None for digital/CTV.
        consent_context:
          anyOf:
          - $ref: '#/components/schemas/ConsentContext'
          - type: 'null'
          description: Privacy consent signals riding with the quote (FD-10).
      type: object
      required:
      - quote_id
      - deal_type
      - product
      - pricing
      - terms
      title: Quote
      description: 'A non-binding price quote from a seller (Deals API v1.0 quote phase).


        Carries ``media_type`` and optional ``linear_tv`` details on the shared

        schema (flagged decision FD-6) so sellers that do not support linear TV

        can reject structurally instead of silently mispricing.


        ID minting: ``quote_id`` is seller-issued.'
    QuotePricing:
      properties:
        pricing_type:
          $ref: '#/components/schemas/PricingType'
          default: fixed
        base_cpm:
          anyOf:
          - $ref: '#/components/schemas/Money'
          - type: 'null'
        tier_discount_pct:
          type: number
          title: Tier Discount Pct
          default: 0.0
        volume_discount_pct:
          type: number
          title: Volume Discount Pct
          default: 0.0
        final_cpm:
          anyOf:
          - $ref: '#/components/schemas/Money'
          - type: 'null'
        pricing_model:
          $ref: '#/components/schemas/PricingModel'
          default: cpm
        rationale:
          type: string
          title: Rationale
          default: ''
        base_cpp:
          anyOf:
          - $ref: '#/components/schemas/Money'
          - type: 'null'
          description: Linear TV base CPP; None for digital/CTV.
        final_cpp:
          anyOf:
          - $ref: '#/components/schemas/Money'
          - type: 'null'
          description: Linear TV final CPP; None for digital/CTV.
      type: object
      title: QuotePricing
      description: 'Pricing breakdown on a quote or deal.


        ``base_cpm``/``final_cpm`` are optional to support

        ``pricing_type=on_request`` — when the seller has not provided pricing,

        these fields are None. CPM = cost per mille (thousand impressions);

        CPP = cost per point (linear TV).'
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ProductRef:
      properties:
        product_id:
          type: string
          title: Product Id
          description: Seller-issued product identifier.
        name:
          type: string
          title: Name
        inventory_type:
          anyOf:
          - type: string
          - type: 'null'
          title: Inventory Type
      type: object
      required:
      - product_id
      - name
      title: ProductRef
      description: Lightweight product summary embedded in quotes and deals.
    QuoteResponse:
      properties:
        quote:
          $ref: '#/components/schemas/Quote'
      type: object
      required:
      - quote
      title: QuoteResponse
      description: 'Success envelope for the quote endpoints: wraps the Quote primitive.


        The quote carries its own ``media_type``, ``linear_tv`` details,

        ``rate_card_id``, pricing, terms, availability, and ``expires_at``

        (quotes are ephemeral — the seller enforces a TTL and answers a

        ``quote_expired`` error after it elapses).'
    LinearTVQuoteDetails:
      properties:
        target_demo:
          type: string
          title: Target Demo
        estimated_grps:
          type: number
          title: Estimated Grps
          description: Estimated GRPs (gross rating points).
        estimated_rating:
          type: number
          title: Estimated Rating
        cpp:
          $ref: '#/components/schemas/Money'
          description: CPP (cost per point) offered by the seller.
        dayparts:
          items:
            type: string
          type: array
          title: Dayparts
        networks:
          items:
            type: string
          type: array
          title: Networks
        spots_per_week:
          type: integer
          title: Spots Per Week
        total_spots:
          type: integer
          title: Total Spots
        spot_length:
          type: integer
          title: Spot Length
        measurement_currency:
          type: string
          title: Measurement Currency
        audience_estimate:
          additionalProperties: true
          type: object
          title: Audience Estimate
          description: Audience estimates; expected keys "demo", "universe", "impressions_equiv".
        cancellation_terms:
          anyOf:
          - $ref: '#/components/schemas/CancellationTerms'
          - type: 'null'
        makegood_policy:
          anyOf:
          - type: string
          - type: 'null'
          title: Makegood Policy
          description: 'Makegood policy: "standard" (audience deficiency unit), "negotiated", or "none".'
      type: object
      required:
      - target_demo
      - estimated_grps
      - estimated_rating
      - cpp
      - dayparts
      - networks
      - spots_per_week
      - total_spots
      - spot_length
      - measurement_currency
      title: LinearTVQuoteDetails
      description: 'Linear-TV-specific quote details (seller-populated).


        Nested under ``Quote.linear_tv`` when ``media_type == "linear_tv"``.'
    LinearTVParams:
      properties:
        target_demo:
          type: string
          title: Target Demo
          description: Target demographic, e.g. "A18-49", "A25-54", "HH" (households).
        grps_requested:
          anyOf:
          - type: integer
          - type: 'null'
          title: Grps Requested
          description: Requested volume in GRPs (gross rating points).
        dayparts:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          title: Dayparts
          description: Target dayparts, e.g. "primetime", "daytime", "late_night".
        networks:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          title: Networks
          description: Target networks, e.g. ["NBC", "ESPN"].
        dmas:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          title: Dmas
          description: Nielsen DMA (designated market area) codes; None means national.
        spot_length:
          type: integer
          title: Spot Length
          description: 'Spot length in seconds: 15, 30, or 60.'
          default: 30
        target_cpp:
          anyOf:
          - $ref: '#/components/schemas/Money'
          - type: 'null'
          description: Buyer's desired CPP (cost per point).
        measurement_currency:
          type: string
          title: Measurement Currency
          description: 'Audience measurement provider: "nielsen", "comscore", "videoamp".'
          default: nielsen
        rotation:
          type: string
          title: Rotation
          description: 'Spot rotation: "ros" (run of schedule), "fixed", "program_specific".'
          default: ros
      type: object
      required:
      - target_demo
      title: LinearTVParams
      description: 'Linear-TV-specific request parameters (buyer-supplied).


        Used when ``media_type == "linear_tv"``. GRP = gross rating point;

        CPP = cost per point; DMA = designated market area.'
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    QuoteTerms:
      properties:
        impressions:
          anyOf:
          - type: integer
            minimum: 0.0
          - type: 'null'
          title: Impressions
        flight_start:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          title: Flight Start
        flight_end:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          title: Flight End
        guaranteed:
          type: boolean
          title: Guaranteed
          default: false
        grps:
          anyOf:
          - type: integer
          - type: 'null'
          title: Grps
          description: Linear TV volume in GRPs (gross rating points).
        guaranteed_grps:
          anyOf:
          - type: integer
          - type: 'null'
          title: Guaranteed Grps
        target_demo:
          anyOf:
          - type: string
          - type: 'null'
          title: Target Demo
          description: Linear TV target demographic.
      type: object
      title: QuoteTerms
      description: Volume, flight, and guarantee terms on a quote or deal.
    Money:
      properties:
        amount_micros:
          type: integer
          title: Amount Micros
          description: Amount in micros; 1,000,000 micros = 1 currency unit.
        currency:
          type: string
          pattern: ^[A-Z]{3}$
          title: Currency
          description: ISO 4217 alpha-3 currency code.
          default: USD
      type: object
      required:
      - amount_micros
      title: Money
      description: 'Exact money amount in integer micros (flagged decision FD-11).


        ``1_000_000`` micros = 1 currency unit — the ad-industry convention

        (Google Ad Manager, among others, prices in micros). Float is BANNED on

        the wire for money: IEEE 754 floating point is non-deterministic for

        money math (``0.1 + 0.2 != 0.3``, and repeated CPM — cost per mille —

        arithmetic accumulates error), and the two source repos used ``float``

        end-to-end; that defect must not be fossilized into the spec. Every

        price, rate, budget, and offer in the shared contract is a ``Money``.


        ``amount_micros`` is a strict integer: float inputs are rejected at

        validation time rather than silently truncated.'
    CancellationTerms:
      properties:
        notice_days:
          type: integer
          title: Notice Days
          description: Days of notice required before cancellation.
        cancellable_pct:
          type: number
          maximum: 1.0
          minimum: 0.0
          title: Cancellable Pct
          description: Portion of the deal that can be cancelled (0.0-1.0).
        deadline:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          title: Deadline
          description: Absolute deadline for cancellation.
        force_majeure:
          type: boolean
          title: Force Majeure
          description: Whether force majeure exceptions apply.
          default: true
      type: object
      required:
      - notice_days
      - cancellable_pct
      title: CancellationTerms
      description: Structured cancellation window for linear TV deals.
    PricingModel:
      type: string
      enum:
      - cpm
      - cpmv
      - cpv
      - cpc
      - cpcv
      - cpd
      - cpp
      - flat_fee
      - unit_rate
      - hybrid
      title: PricingModel
      description: 'Unit of pricing. Union of the buyer''s ``RateType`` and the seller''s

        ``PricingModel`` plus the linear TV additions.


        - ``cpm``: cost per mille (thousand impressions)

        - ``cpmv``: cost per thousand viewable impressions

        - ``cpv``: cost per view

        - ``cpc``: cost per click

        - ``cpcv``: cost per completed view

        - ``cpd``: cost per day

        - ``cpp``: cost per (gross rating) point — linear TV

        - ``flat_fee``: flat fee (buyer repo''s ``FlatRate`` maps here)

        - ``unit_rate``: per-unit rate

        - ``hybrid``: mixed CPM/CPP pricing — linear TV'
    ConsentContext:
      properties:
        applicable_regimes:
          items:
            type: string
          type: array
          title: Applicable Regimes
          description: Privacy regime identifiers in scope (e.g. 'GDPR', 'CCPA').
        gpp_string:
          anyOf:
          - type: string
          - type: 'null'
          title: Gpp String
          description: GPP (Global Privacy Platform) consent string.
        gpp_section_ids:
          items:
            type: integer
          type: array
          title: Gpp Section Ids
          description: GPP section ids present in the string.
        tcf_string:
          anyOf:
          - type: string
          - type: 'null'
          title: Tcf String
          description: TCF (Transparency & Consent Framework) TC string, when GDPR applies.
        gdpr_applies:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Gdpr Applies
          description: Whether GDPR (EU General Data Protection Regulation) applies to this context; None when undetermined. Gates interpretation of the TCF string.
        us_privacy:
          anyOf:
          - type: string
          - type: 'null'
          title: Us Privacy
          description: US Privacy (CCPA) string, e.g. '1YNN'; superseded by GPP where present.
        diligence_status:
          $ref: '#/components/schemas/DiligenceStatus'
          description: Counterparty diligence status (SGP = SafeGuard Privacy / IAB Diligence Platform).
          default: unknown
        verified_at:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Verified At
          description: Timezone-aware timestamp of the last diligence verification, if any.
      type: object
      title: ConsentContext
      description: 'Privacy consent signals that travel with a deal (flagged decision FD-10).


        Full build-out (EP-10.4) of the EP-1.2 placeholder: the three

        interoperable consent-string carriers — GPP (Global Privacy Platform)

        with its applicable section ids, TCF (Transparency & Consent Framework)

        with the ``gdpr_applies`` gate, and the US Privacy (``us_privacy``)

        string — plus the SGP (SafeGuard Privacy / IAB Diligence Platform)

        ``diligence_status``. Field names from the EP-1.2 placeholder are kept

        unchanged for backward compatibility; the build-out is purely additive.

        It travels with the Deal, Quote, and Order. Strings are carried opaque:

        no decoding/vendor-list validation is claimed (see the conformance

        standards registry).'
x-refined-from:
- iab-tech-lab-agentic-advertising-api-openapi.yaml
- iab-tech-lab-seller-agent-openapi.json