IAB Tech Lab · Schema
ChangeRequest
A request to modify an existing order or deal post-booking. ID minting: ``change_request_id`` is seller-issued (the buyer submits the request; the seller assigns the identifier and owns its lifecycle).
CompanyAdvertisingAdTechStandardsProgrammaticReal-Time BiddingConsentPrivacyVideo AdsAgentic AdvertisingNon-Profit
Properties
| Name | Type | Description |
|---|---|---|
| applied_at | object | |
| applied_by | object | |
| approved_at | object | |
| approved_by | object | |
| availability_check | object | |
| change_request_id | string | Seller-issued change request identifier. |
| change_type | object | |
| deal_id | object | Deal being modified; at least one of order_id/deal_id. |
| diffs | array | |
| makegood | object | Required when change_type == 'makegood' (FD-6). |
| order_id | object | Order being modified; at least one of order_id/deal_id. |
| pricing_impact | object | |
| proposed_values | object | |
| reason | string | |
| rejection_reason | object | |
| requested_at | string | |
| requested_by | string | Actor id: 'system', 'human: |
| severity | object | |
| status | object | |
| validation_errors | array |
JSON Schema
{
"$defs": {
"ChangeRequestStatus": {
"description": "Lifecycle status of a change request.",
"enum": [
"pending",
"validating",
"pending_approval",
"approved",
"rejected",
"applied",
"failed"
],
"title": "ChangeRequestStatus",
"type": "string"
},
"ChangeSeverity": {
"description": "How significant the change is \u2014 determines approval requirements.",
"enum": [
"minor",
"material",
"critical"
],
"title": "ChangeSeverity",
"type": "string"
},
"ChangeType": {
"description": "Category of change being requested.\n\n``makegood`` implements flagged decision FD-6: makegoods are a typed\nChangeRequest subtype, not a separate primitive.",
"enum": [
"flight_dates",
"impressions",
"pricing",
"creative",
"targeting",
"cancellation",
"makegood",
"other"
],
"title": "ChangeType",
"type": "string"
},
"FieldDiff": {
"description": "A single field-level change.",
"properties": {
"field": {
"title": "Field",
"type": "string"
},
"new_value": {
"default": null,
"title": "New Value"
},
"old_value": {
"default": null,
"title": "Old Value"
}
},
"required": [
"field"
],
"title": "FieldDiff",
"type": "object"
},
"MakegoodDetails": {
"description": "Makegood payload for a ChangeRequest of type ``makegood`` (FD-6).\n\nSent when delivery falls short of the guaranteed level; the seller\nresponds with replacement inventory. Carries the compensation terms:\nwhat is owed (``shortfall_grps`` for linear TV, ``owed_impressions``\nfor digital), the proposed replacement flight, and the makegood\n``status``. The human-readable reason lives on the enclosing\n:class:`ChangeRequest.reason` (not duplicated here). GRP = gross rating\npoint.",
"properties": {
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Notes"
},
"original_daypart": {
"description": "Daypart where the underdelivery occurred.",
"title": "Original Daypart",
"type": "string"
},
"owed_impressions": {
"anyOf": [
{
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Impressions owed for a digital makegood; None for a pure-GRP makegood.",
"title": "Owed Impressions"
},
"preferred_dayparts": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Buyer's preferred dayparts for replacement inventory.",
"title": "Preferred Dayparts"
},
"replacement_flight_end": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Proposed end of the replacement flight.",
"title": "Replacement Flight End"
},
"replacement_flight_start": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Proposed start of the replacement flight.",
"title": "Replacement Flight Start"
},
"shortfall_grps": {
"description": "GRP shortfall owed that needs to be made up (linear TV).",
"title": "Shortfall Grps",
"type": "number"
},
"status": {
"$ref": "#/$defs/MakegoodStatus",
"default": "proposed",
"description": "Compensation status of the makegood."
},
"target_demo": {
"description": "Target demographic for makegood inventory.",
"title": "Target Demo",
"type": "string"
}
},
"required": [
"shortfall_grps",
"original_daypart",
"target_demo"
],
"title": "MakegoodDetails",
"type": "object"
},
"MakegoodStatus": {
"description": "Compensation status of a makegood (EP-10.2).",
"enum": [
"proposed",
"accepted",
"scheduled",
"delivered",
"rejected"
],
"title": "MakegoodStatus",
"type": "string"
}
},
"description": "A request to modify an existing order or deal post-booking.\n\nID minting: ``change_request_id`` is seller-issued (the buyer submits\nthe request; the seller assigns the identifier and owns its lifecycle).",
"properties": {
"applied_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Applied At"
},
"applied_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Applied By"
},
"approved_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Approved At"
},
"approved_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Approved By"
},
"availability_check": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Availability Check"
},
"change_request_id": {
"description": "Seller-issued change request identifier.",
"title": "Change Request Id",
"type": "string"
},
"change_type": {
"$ref": "#/$defs/ChangeType"
},
"deal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Deal being modified; at least one of order_id/deal_id.",
"title": "Deal Id"
},
"diffs": {
"items": {
"$ref": "#/$defs/FieldDiff"
},
"title": "Diffs",
"type": "array"
},
"makegood": {
"anyOf": [
{
"$ref": "#/$defs/MakegoodDetails"
},
{
"type": "null"
}
],
"default": null,
"description": "Required when change_type == 'makegood' (FD-6)."
},
"order_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Order being modified; at least one of order_id/deal_id.",
"title": "Order Id"
},
"pricing_impact": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Pricing Impact"
},
"proposed_values": {
"additionalProperties": true,
"title": "Proposed Values",
"type": "object"
},
"reason": {
"default": "",
"title": "Reason",
"type": "string"
},
"rejection_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rejection Reason"
},
"requested_at": {
"format": "date-time",
"title": "Requested At",
"type": "string"
},
"requested_by": {
"default": "system",
"description": "Actor id: 'system', 'human:<id>', or 'agent:<id>'.",
"title": "Requested By",
"type": "string"
},
"severity": {
"$ref": "#/$defs/ChangeSeverity",
"default": "material"
},
"status": {
"$ref": "#/$defs/ChangeRequestStatus",
"default": "pending"
},
"validation_errors": {
"items": {
"type": "string"
},
"title": "Validation Errors",
"type": "array"
}
},
"required": [
"change_request_id",
"change_type"
],
"title": "ChangeRequest",
"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
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/iab-tech-lab-agentic-primitive-changerequest"
All schemas
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.