@adcp/client 4.14.0 → 4.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/bin/adcp.js +2 -0
  2. package/dist/lib/adapters/governance-adapter.d.ts +2 -2
  3. package/dist/lib/adapters/governance-adapter.d.ts.map +1 -1
  4. package/dist/lib/adapters/governance-adapter.js +1 -3
  5. package/dist/lib/adapters/governance-adapter.js.map +1 -1
  6. package/dist/lib/adapters/si-session-manager.d.ts.map +1 -1
  7. package/dist/lib/adapters/si-session-manager.js +8 -3
  8. package/dist/lib/adapters/si-session-manager.js.map +1 -1
  9. package/dist/lib/agents/index.generated.d.ts +9 -1
  10. package/dist/lib/agents/index.generated.d.ts.map +1 -1
  11. package/dist/lib/agents/index.generated.js +12 -0
  12. package/dist/lib/agents/index.generated.js.map +1 -1
  13. package/dist/lib/core/ADCPMultiAgentClient.d.ts.map +1 -1
  14. package/dist/lib/core/ADCPMultiAgentClient.js +10 -3
  15. package/dist/lib/core/ADCPMultiAgentClient.js.map +1 -1
  16. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  17. package/dist/lib/core/AsyncHandler.d.ts.map +1 -1
  18. package/dist/lib/core/AsyncHandler.js +1 -1
  19. package/dist/lib/core/AsyncHandler.js.map +1 -1
  20. package/dist/lib/core/GovernanceMiddleware.d.ts +2 -10
  21. package/dist/lib/core/GovernanceMiddleware.d.ts.map +1 -1
  22. package/dist/lib/core/GovernanceMiddleware.js +8 -51
  23. package/dist/lib/core/GovernanceMiddleware.js.map +1 -1
  24. package/dist/lib/core/GovernanceTypes.d.ts +4 -4
  25. package/dist/lib/core/GovernanceTypes.d.ts.map +1 -1
  26. package/dist/lib/core/GovernanceTypes.js +1 -0
  27. package/dist/lib/core/GovernanceTypes.js.map +1 -1
  28. package/dist/lib/core/SingleAgentClient.d.ts +1 -1
  29. package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
  30. package/dist/lib/core/SingleAgentClient.js +7 -4
  31. package/dist/lib/core/SingleAgentClient.js.map +1 -1
  32. package/dist/lib/core/TaskExecutor.d.ts +4 -0
  33. package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
  34. package/dist/lib/core/TaskExecutor.js +61 -18
  35. package/dist/lib/core/TaskExecutor.js.map +1 -1
  36. package/dist/lib/index.d.ts +5 -3
  37. package/dist/lib/index.d.ts.map +1 -1
  38. package/dist/lib/index.js +12 -6
  39. package/dist/lib/index.js.map +1 -1
  40. package/dist/lib/protocols/index.d.ts +1 -0
  41. package/dist/lib/protocols/index.d.ts.map +1 -1
  42. package/dist/lib/protocols/index.js +14 -4
  43. package/dist/lib/protocols/index.js.map +1 -1
  44. package/dist/lib/protocols/mcp-tasks.d.ts +55 -0
  45. package/dist/lib/protocols/mcp-tasks.d.ts.map +1 -0
  46. package/dist/lib/protocols/mcp-tasks.js +334 -0
  47. package/dist/lib/protocols/mcp-tasks.js.map +1 -0
  48. package/dist/lib/protocols/mcp.d.ts +9 -0
  49. package/dist/lib/protocols/mcp.d.ts.map +1 -1
  50. package/dist/lib/protocols/mcp.js +4 -0
  51. package/dist/lib/protocols/mcp.js.map +1 -1
  52. package/dist/lib/registry/types.generated.d.ts +9 -9
  53. package/dist/lib/registry/types.generated.d.ts.map +1 -1
  54. package/dist/lib/registry/types.generated.js +1 -1
  55. package/dist/lib/server/index.d.ts +2 -0
  56. package/dist/lib/server/index.d.ts.map +1 -1
  57. package/dist/lib/server/index.js +7 -1
  58. package/dist/lib/server/index.js.map +1 -1
  59. package/dist/lib/server/tasks.d.ts +86 -0
  60. package/dist/lib/server/tasks.d.ts.map +1 -0
  61. package/dist/lib/server/tasks.js +110 -0
  62. package/dist/lib/server/tasks.js.map +1 -0
  63. package/dist/lib/testing/agent-tester.d.ts +1 -1
  64. package/dist/lib/testing/agent-tester.d.ts.map +1 -1
  65. package/dist/lib/testing/agent-tester.js +52 -2
  66. package/dist/lib/testing/agent-tester.js.map +1 -1
  67. package/dist/lib/testing/client.d.ts +18 -0
  68. package/dist/lib/testing/client.d.ts.map +1 -1
  69. package/dist/lib/testing/client.js +39 -1
  70. package/dist/lib/testing/client.js.map +1 -1
  71. package/dist/lib/testing/compliance/comply.d.ts +4 -0
  72. package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
  73. package/dist/lib/testing/compliance/comply.js +406 -173
  74. package/dist/lib/testing/compliance/comply.js.map +1 -1
  75. package/dist/lib/testing/compliance/types.d.ts +7 -1
  76. package/dist/lib/testing/compliance/types.d.ts.map +1 -1
  77. package/dist/lib/testing/index.d.ts +3 -1
  78. package/dist/lib/testing/index.d.ts.map +1 -1
  79. package/dist/lib/testing/index.js +13 -2
  80. package/dist/lib/testing/index.js.map +1 -1
  81. package/dist/lib/testing/orchestrator.d.ts +4 -0
  82. package/dist/lib/testing/orchestrator.d.ts.map +1 -1
  83. package/dist/lib/testing/orchestrator.js +19 -2
  84. package/dist/lib/testing/orchestrator.js.map +1 -1
  85. package/dist/lib/testing/scenarios/capabilities.js +2 -2
  86. package/dist/lib/testing/scenarios/capabilities.js.map +1 -1
  87. package/dist/lib/testing/scenarios/creative.js +4 -4
  88. package/dist/lib/testing/scenarios/creative.js.map +1 -1
  89. package/dist/lib/testing/scenarios/deterministic.d.ts +37 -0
  90. package/dist/lib/testing/scenarios/deterministic.d.ts.map +1 -0
  91. package/dist/lib/testing/scenarios/deterministic.js +705 -0
  92. package/dist/lib/testing/scenarios/deterministic.js.map +1 -0
  93. package/dist/lib/testing/scenarios/discovery.js +2 -2
  94. package/dist/lib/testing/scenarios/discovery.js.map +1 -1
  95. package/dist/lib/testing/scenarios/edge-cases.d.ts.map +1 -1
  96. package/dist/lib/testing/scenarios/edge-cases.js +18 -25
  97. package/dist/lib/testing/scenarios/edge-cases.js.map +1 -1
  98. package/dist/lib/testing/scenarios/error-compliance.d.ts.map +1 -1
  99. package/dist/lib/testing/scenarios/error-compliance.js +9 -13
  100. package/dist/lib/testing/scenarios/error-compliance.js.map +1 -1
  101. package/dist/lib/testing/scenarios/governance.d.ts +15 -0
  102. package/dist/lib/testing/scenarios/governance.d.ts.map +1 -1
  103. package/dist/lib/testing/scenarios/governance.js +386 -49
  104. package/dist/lib/testing/scenarios/governance.js.map +1 -1
  105. package/dist/lib/testing/scenarios/health.js +2 -2
  106. package/dist/lib/testing/scenarios/health.js.map +1 -1
  107. package/dist/lib/testing/scenarios/index.d.ts +2 -1
  108. package/dist/lib/testing/scenarios/index.d.ts.map +1 -1
  109. package/dist/lib/testing/scenarios/index.js +12 -1
  110. package/dist/lib/testing/scenarios/index.js.map +1 -1
  111. package/dist/lib/testing/scenarios/media-buy.d.ts.map +1 -1
  112. package/dist/lib/testing/scenarios/media-buy.js +258 -31
  113. package/dist/lib/testing/scenarios/media-buy.js.map +1 -1
  114. package/dist/lib/testing/scenarios/schema-compliance.js +2 -2
  115. package/dist/lib/testing/scenarios/schema-compliance.js.map +1 -1
  116. package/dist/lib/testing/scenarios/signals.d.ts.map +1 -1
  117. package/dist/lib/testing/scenarios/signals.js +35 -2
  118. package/dist/lib/testing/scenarios/signals.js.map +1 -1
  119. package/dist/lib/testing/scenarios/sponsored-intelligence.d.ts.map +1 -1
  120. package/dist/lib/testing/scenarios/sponsored-intelligence.js +8 -7
  121. package/dist/lib/testing/scenarios/sponsored-intelligence.js.map +1 -1
  122. package/dist/lib/testing/stubs/governance-agent-stub.d.ts +72 -0
  123. package/dist/lib/testing/stubs/governance-agent-stub.d.ts.map +1 -0
  124. package/dist/lib/testing/stubs/governance-agent-stub.js +295 -0
  125. package/dist/lib/testing/stubs/governance-agent-stub.js.map +1 -0
  126. package/dist/lib/testing/stubs/index.d.ts +3 -0
  127. package/dist/lib/testing/stubs/index.d.ts.map +1 -0
  128. package/dist/lib/testing/stubs/index.js +6 -0
  129. package/dist/lib/testing/stubs/index.js.map +1 -0
  130. package/dist/lib/testing/test-controller.d.ts +46 -0
  131. package/dist/lib/testing/test-controller.d.ts.map +1 -0
  132. package/dist/lib/testing/test-controller.js +143 -0
  133. package/dist/lib/testing/test-controller.js.map +1 -0
  134. package/dist/lib/testing/types.d.ts +8 -1
  135. package/dist/lib/testing/types.d.ts.map +1 -1
  136. package/dist/lib/types/core.generated.d.ts +562 -97
  137. package/dist/lib/types/core.generated.d.ts.map +1 -1
  138. package/dist/lib/types/core.generated.js +1 -1
  139. package/dist/lib/types/error-codes.d.ts +4 -4
  140. package/dist/lib/types/error-codes.d.ts.map +1 -1
  141. package/dist/lib/types/error-codes.js +26 -2
  142. package/dist/lib/types/error-codes.js.map +1 -1
  143. package/dist/lib/types/schemas.generated.d.ts +4625 -8682
  144. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  145. package/dist/lib/types/schemas.generated.js +711 -403
  146. package/dist/lib/types/schemas.generated.js.map +1 -1
  147. package/dist/lib/types/tools.generated.d.ts +1188 -405
  148. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  149. package/dist/lib/utils/response-schemas.d.ts.map +1 -1
  150. package/dist/lib/utils/response-schemas.js +2 -0
  151. package/dist/lib/utils/response-schemas.js.map +1 -1
  152. package/dist/lib/utils/response-unwrapper.d.ts.map +1 -1
  153. package/dist/lib/utils/response-unwrapper.js +12 -0
  154. package/dist/lib/utils/response-unwrapper.js.map +1 -1
  155. package/dist/lib/utils/union-errors.d.ts +16 -0
  156. package/dist/lib/utils/union-errors.d.ts.map +1 -0
  157. package/dist/lib/utils/union-errors.js +34 -0
  158. package/dist/lib/utils/union-errors.js.map +1 -0
  159. package/dist/lib/version.d.ts +3 -3
  160. package/dist/lib/version.js +3 -3
  161. package/package.json +1 -1
@@ -1,15 +1,19 @@
1
1
  /**
2
- * Brand identifier within the house portfolio. Optional for single-brand domains.
2
+ * Account lifecycle status. See the Accounts Protocol overview for the operations matrix showing which tasks are permitted in each state.
3
3
  */
4
- export type BrandID = string;
4
+ export type AccountStatus = 'active' | 'pending_approval' | 'rejected' | 'payment_required' | 'suspended' | 'closed';
5
5
  /**
6
- * Authentication schemes for push notification endpoints
6
+ * Brand identifier within the house portfolio. Optional for single-brand domains.
7
7
  */
8
- export type AuthenticationScheme = 'Bearer' | 'HMAC-SHA256';
8
+ export type BrandID = string;
9
9
  /**
10
10
  * Status of a media buy.
11
11
  */
12
12
  export type MediaBuyStatus = 'pending_activation' | 'active' | 'paused' | 'completed' | 'rejected' | 'canceled';
13
+ /**
14
+ * Which party initiated the cancellation. 'buyer' when canceled via update_media_buy; 'seller' when the seller cancels (e.g., policy violation, inventory withdrawal).
15
+ */
16
+ export type CanceledBy = 'buyer' | 'seller';
13
17
  /**
14
18
  * Budget pacing strategy
15
19
  */
@@ -197,23 +201,33 @@ export type OptimizationGoal = {
197
201
  */
198
202
  export interface MediaBuy {
199
203
  /**
200
- * Publisher's unique identifier for the media buy
204
+ * Seller's unique identifier for the media buy
201
205
  */
202
206
  media_buy_id: string;
203
- /**
204
- * Buyer's reference identifier for this media buy. Sellers SHOULD deduplicate requests with the same buyer_ref and account, returning the existing media buy rather than creating a duplicate.
205
- */
206
- buyer_ref?: string;
207
- /**
208
- * Buyer's campaign reference label. Groups related operations under a single campaign for CRM and ad server correlation.
209
- */
210
- buyer_campaign_ref?: string;
211
207
  account?: Account;
212
208
  status: MediaBuyStatus;
213
209
  /**
214
210
  * Reason provided by the seller when status is 'rejected'. Present only when status is 'rejected'.
215
211
  */
216
212
  rejection_reason?: string;
213
+ /**
214
+ * ISO 8601 timestamp when the seller confirmed this media buy. A successful create_media_buy response constitutes order confirmation.
215
+ */
216
+ confirmed_at?: string;
217
+ /**
218
+ * Cancellation metadata. Present only when status is 'canceled'.
219
+ */
220
+ cancellation?: {
221
+ /**
222
+ * ISO 8601 timestamp when this media buy was canceled.
223
+ */
224
+ canceled_at: string;
225
+ canceled_by: CanceledBy;
226
+ /**
227
+ * Reason provided when the media buy was canceled.
228
+ */
229
+ reason?: string;
230
+ };
217
231
  /**
218
232
  * Total budget amount
219
233
  */
@@ -222,10 +236,15 @@ export interface MediaBuy {
222
236
  * Array of packages within this media buy
223
237
  */
224
238
  packages: Package[];
239
+ invoice_recipient?: BusinessEntity;
225
240
  /**
226
241
  * ISO 8601 timestamp for creative upload deadline
227
242
  */
228
243
  creative_deadline?: string;
244
+ /**
245
+ * Monotonically increasing revision number. Incremented on every state change or update. Callers MAY include this in update_media_buy requests for optimistic concurrency — sellers MUST reject with CONFLICT if the provided revision does not match the current value.
246
+ */
247
+ revision?: number;
229
248
  /**
230
249
  * Creation timestamp
231
250
  */
@@ -256,19 +275,17 @@ export interface Account {
256
275
  * Optional intermediary who receives invoices on behalf of the advertiser (e.g., agency)
257
276
  */
258
277
  billing_proxy?: string;
259
- /**
260
- * Account status. pending_approval: seller reviewing (credit, contracts). rejected: seller declined the account request. payment_required: credit limit reached or funds depleted. suspended: was active, now paused. closed: was active, now terminated.
261
- */
262
- status: 'active' | 'pending_approval' | 'rejected' | 'payment_required' | 'suspended' | 'closed';
278
+ status: AccountStatus;
263
279
  brand?: BrandReference;
264
280
  /**
265
281
  * Domain of the entity operating this account. When the brand operates directly, this is the brand's domain.
266
282
  */
267
283
  operator?: string;
268
284
  /**
269
- * Who is invoiced on this account. operator: seller invoices the operator (agency or brand buying direct). agent: agent consolidates billing.
285
+ * Who is invoiced on this account. operator: seller invoices the operator (agency or brand buying direct). agent: agent consolidates billing. advertiser: seller invoices the advertiser directly, even when a different operator places orders on their behalf. See billing_entity for the invoiced party's business details.
270
286
  */
271
- billing?: 'operator' | 'agent';
287
+ billing?: 'operator' | 'agent' | 'advertiser';
288
+ billing_entity?: BusinessEntity;
272
289
  /**
273
290
  * Identifier for the rate card applied to this account
274
291
  */
@@ -306,23 +323,13 @@ export interface Account {
306
323
  */
307
324
  account_scope?: 'operator' | 'brand' | 'operator_brand' | 'agent';
308
325
  /**
309
- * Governance agent endpoints for this account. When present, the seller MUST call these agents for governance approval before confirming media buy requests. Each agent can be scoped to specific validation categories. All applicable agents must approve for the action to proceed (unanimous approval).
326
+ * Governance agent endpoints registered on this account. Authentication credentials are write-only and not included in responses use sync_governance to set or update credentials.
310
327
  */
311
328
  governance_agents?: {
312
329
  /**
313
- * Governance agent endpoint URL.
330
+ * Governance agent endpoint URL. Must use HTTPS.
314
331
  */
315
332
  url: string;
316
- authentication: {
317
- /**
318
- * @maxItems 1
319
- */
320
- schemes: [] | [AuthenticationScheme];
321
- /**
322
- * Authentication credential (e.g., Bearer token).
323
- */
324
- credentials: string;
325
- };
326
333
  /**
327
334
  * Governance categories this agent handles (e.g., ['budget_authority', 'strategic_alignment']). When omitted, the agent handles all categories.
328
335
  */
@@ -344,6 +351,87 @@ export interface BrandReference {
344
351
  domain: string;
345
352
  brand_id?: BrandID;
346
353
  }
354
+ /**
355
+ * Business entity details for the party responsible for payment. Contains the legal name, tax IDs, address, and bank details needed for formal B2B invoicing. Corresponds to whoever billing points to (operator, agent, or advertiser). When this account appears in a response, bank details MUST be omitted (write-only).
356
+ */
357
+ export interface BusinessEntity {
358
+ /**
359
+ * Registered legal name of the business entity
360
+ */
361
+ legal_name: string;
362
+ /**
363
+ * VAT identification number (e.g., DE123456789 for Germany, FR12345678901 for France). Required for B2B invoicing in the EU. Must be normalized: no spaces, dots, or dashes.
364
+ */
365
+ vat_id?: string;
366
+ /**
367
+ * Tax identification number for jurisdictions that do not use VAT (e.g., US EIN)
368
+ */
369
+ tax_id?: string;
370
+ /**
371
+ * Company registration number (e.g., HRB 12345 for German Handelsregister)
372
+ */
373
+ registration_number?: string;
374
+ /**
375
+ * Postal address for invoicing and legal correspondence
376
+ */
377
+ address?: {
378
+ /**
379
+ * Street address including building number
380
+ */
381
+ street: string;
382
+ city: string;
383
+ postal_code: string;
384
+ /**
385
+ * State, province, or region
386
+ */
387
+ region?: string;
388
+ /**
389
+ * ISO 3166-1 alpha-2 country code
390
+ */
391
+ country: string;
392
+ };
393
+ /**
394
+ * Contacts for billing, legal, and operational matters. Contains personal data subject to GDPR and equivalent regulations. Implementations MUST use this data only for invoicing and account management.
395
+ */
396
+ contacts?: {
397
+ /**
398
+ * Contact's functional role in the business relationship
399
+ */
400
+ role: 'billing' | 'legal' | 'creative' | 'general';
401
+ /**
402
+ * Full name of the contact
403
+ */
404
+ name?: string;
405
+ email?: string;
406
+ phone?: string;
407
+ }[];
408
+ /**
409
+ * Bank account details for payment processing. Write-only: included in requests to provide payment coordinates, but MUST NOT be echoed in responses. Sellers store these details and confirm receipt without returning them.
410
+ */
411
+ bank?: {
412
+ /**
413
+ * Name on the bank account
414
+ */
415
+ account_holder: string;
416
+ /**
417
+ * International Bank Account Number (SEPA markets)
418
+ */
419
+ iban?: string;
420
+ /**
421
+ * Bank Identifier Code / SWIFT code (SEPA markets)
422
+ */
423
+ bic?: string;
424
+ /**
425
+ * Bank routing number for non-SEPA markets (e.g., US ABA routing number, Canadian transit/institution number)
426
+ */
427
+ routing_number?: string;
428
+ /**
429
+ * Bank account number for non-SEPA markets
430
+ */
431
+ account_number?: string;
432
+ };
433
+ ext?: ExtensionObject;
434
+ }
347
435
  /**
348
436
  * Extension object for platform-specific, vendor-namespaced parameters. Extensions are always optional and must be namespaced under a vendor/platform key (e.g., ext.gam, ext.roku). Used for custom capabilities, partner-specific configuration, and features being proposed for standardization.
349
437
  */
@@ -354,13 +442,9 @@ export interface ExtensionObject {
354
442
  */
355
443
  export interface Package {
356
444
  /**
357
- * Publisher's unique identifier for the package
445
+ * Seller's unique identifier for the package
358
446
  */
359
447
  package_id: string;
360
- /**
361
- * Buyer's reference identifier for this package. Sellers SHOULD deduplicate requests with the same buyer_ref within a media buy, returning the existing package rather than creating a duplicate.
362
- */
363
- buyer_ref?: string;
364
448
  /**
365
449
  * ID of the product this package is based on
366
450
  */
@@ -378,6 +462,7 @@ export interface Package {
378
462
  * Bid price for auction-based pricing. This is the exact bid/price to honor unless the selected pricing option has max_bid=true, in which case bid_price is the buyer's maximum willingness to pay (ceiling).
379
463
  */
380
464
  bid_price?: number;
465
+ price_breakdown?: PriceBreakdown;
381
466
  /**
382
467
  * Impression goal for this package
383
468
  */
@@ -415,8 +500,50 @@ export interface Package {
415
500
  * Whether this package is paused by the buyer. Paused packages do not deliver impressions. Defaults to false.
416
501
  */
417
502
  paused?: boolean;
503
+ /**
504
+ * Whether this package has been canceled. Canceled packages stop delivery and cannot be reactivated. Defaults to false.
505
+ */
506
+ canceled?: boolean;
507
+ /**
508
+ * Cancellation metadata. Present only when canceled is true.
509
+ */
510
+ cancellation?: {
511
+ /**
512
+ * ISO 8601 timestamp when this package was canceled.
513
+ */
514
+ canceled_at: string;
515
+ canceled_by: CanceledBy;
516
+ /**
517
+ * Reason the package was canceled.
518
+ */
519
+ reason?: string;
520
+ /**
521
+ * ISO 8601 timestamp when the seller acknowledged the cancellation. Confirms inventory has been released and billing stopped. Absent until the seller processes the cancellation.
522
+ */
523
+ acknowledged_at?: string;
524
+ };
525
+ /**
526
+ * ISO 8601 timestamp for creative upload or change deadline for this package. After this deadline, creative changes are rejected. When absent, the media buy's creative_deadline applies.
527
+ */
528
+ creative_deadline?: string;
529
+ context?: ContextObject;
418
530
  ext?: ExtensionObject;
419
531
  }
532
+ /**
533
+ * Breakdown of the effective price for this package. On fixed-price packages, echoes the pricing option's breakdown. On auction packages, shows the clearing price breakdown including any commission or settlement terms.
534
+ */
535
+ export interface PriceBreakdown {
536
+ /**
537
+ * Rate card or base price before any adjustments. The starting point from which fixed_price is derived by applying fee and discount adjustments sequentially.
538
+ */
539
+ list_price: number;
540
+ /**
541
+ * Ordered list of price adjustments. Fee and discount adjustments walk list_price to fixed_price — fees increase the running price, discounts reduce it. Commission and settlement adjustments are disclosed for transparency but do not affect the buyer's committed price.
542
+ */
543
+ adjustments: {
544
+ [k: string]: unknown | undefined;
545
+ }[];
546
+ }
420
547
  /**
421
548
  * A typed data feed. Catalogs carry the items, locations, stock levels, or pricing that publishers use to render ads. They can be synced to a platform via sync_catalogs (managed lifecycle with approval), provided inline, or fetched from an external URL. The catalog type determines the item schema and can be structural (offering, product, inventory, store, promotion) or vertical-specific (hotel, flight, job, vehicle, real_estate, education, destination, app). Selectors (ids, tags, category, query) filter items regardless of sourcing method.
422
549
  */
@@ -782,6 +909,11 @@ export interface CreativeAssignment {
782
909
  */
783
910
  placement_ids?: string[];
784
911
  }
912
+ /**
913
+ * Opaque correlation data that is echoed unchanged in responses. Used for internal tracking, UI session IDs, trace IDs, and other caller-specific identifiers that don't affect protocol behavior. Context data is never parsed by AdCP agents - it's simply preserved and returned.
914
+ */
915
+ export interface ContextObject {
916
+ }
785
917
  /**
786
918
  * IPTC-aligned classification of AI involvement in producing this content
787
919
  */
@@ -883,7 +1015,7 @@ export type HTTPMethod = 'GET' | 'POST';
883
1015
  /**
884
1016
  * Standardized macro placeholders for dynamic value substitution in creative tracking URLs. Macros are replaced with actual values at impression time. See docs/creative/universal-macros.mdx for detailed documentation.
885
1017
  */
886
- export type UniversalMacro = 'MEDIA_BUY_ID' | 'PACKAGE_ID' | 'CREATIVE_ID' | 'CACHEBUSTER' | 'TIMESTAMP' | 'CLICK_URL' | 'GDPR' | 'GDPR_CONSENT' | 'US_PRIVACY' | 'GPP_STRING' | 'GPP_SID' | 'IP_ADDRESS' | 'LIMIT_AD_TRACKING' | 'DEVICE_TYPE' | 'OS' | 'OS_VERSION' | 'DEVICE_MAKE' | 'DEVICE_MODEL' | 'USER_AGENT' | 'APP_BUNDLE' | 'APP_NAME' | 'COUNTRY' | 'REGION' | 'CITY' | 'ZIP' | 'DMA' | 'LAT' | 'LONG' | 'DEVICE_ID' | 'DEVICE_ID_TYPE' | 'DOMAIN' | 'PAGE_URL' | 'REFERRER' | 'KEYWORDS' | 'PLACEMENT_ID' | 'FOLD_POSITION' | 'AD_WIDTH' | 'AD_HEIGHT' | 'VIDEO_ID' | 'VIDEO_TITLE' | 'VIDEO_DURATION' | 'VIDEO_CATEGORY' | 'CONTENT_GENRE' | 'CONTENT_RATING' | 'PLAYER_WIDTH' | 'PLAYER_HEIGHT' | 'POD_POSITION' | 'POD_SIZE' | 'AD_BREAK_ID' | 'STATION_ID' | 'SHOW_NAME' | 'EPISODE_ID' | 'AUDIO_DURATION' | 'AXEM' | 'CATALOG_ID' | 'SKU' | 'GTIN' | 'OFFERING_ID' | 'JOB_ID' | 'HOTEL_ID' | 'FLIGHT_ID' | 'VEHICLE_ID' | 'LISTING_ID' | 'STORE_ID' | 'PROGRAM_ID' | 'DESTINATION_ID' | 'CREATIVE_VARIANT_ID' | 'APP_ITEM_ID';
1018
+ export type UniversalMacro = 'MEDIA_BUY_ID' | 'PACKAGE_ID' | 'CREATIVE_ID' | 'CACHEBUSTER' | 'TIMESTAMP' | 'CLICK_URL' | 'GDPR' | 'GDPR_CONSENT' | 'US_PRIVACY' | 'GPP_STRING' | 'GPP_SID' | 'IP_ADDRESS' | 'LIMIT_AD_TRACKING' | 'DEVICE_TYPE' | 'OS' | 'OS_VERSION' | 'DEVICE_MAKE' | 'DEVICE_MODEL' | 'USER_AGENT' | 'APP_BUNDLE' | 'APP_NAME' | 'COUNTRY' | 'REGION' | 'CITY' | 'ZIP' | 'DMA' | 'LAT' | 'LONG' | 'DEVICE_ID' | 'DEVICE_ID_TYPE' | 'DOMAIN' | 'PAGE_URL' | 'REFERRER' | 'KEYWORDS' | 'PLACEMENT_ID' | 'FOLD_POSITION' | 'AD_WIDTH' | 'AD_HEIGHT' | 'VIDEO_ID' | 'VIDEO_TITLE' | 'VIDEO_DURATION' | 'VIDEO_CATEGORY' | 'CONTENT_GENRE' | 'CONTENT_RATING' | 'PLAYER_WIDTH' | 'PLAYER_HEIGHT' | 'POD_POSITION' | 'POD_SIZE' | 'AD_BREAK_ID' | 'STATION_ID' | 'COLLECTION_NAME' | 'INSTALLMENT_ID' | 'AUDIO_DURATION' | 'AXEM' | 'CATALOG_ID' | 'SKU' | 'GTIN' | 'OFFERING_ID' | 'JOB_ID' | 'HOTEL_ID' | 'FLIGHT_ID' | 'VEHICLE_ID' | 'LISTING_ID' | 'STORE_ID' | 'PROGRAM_ID' | 'DESTINATION_ID' | 'CREATIVE_VARIANT_ID' | 'APP_ITEM_ID';
887
1019
  /**
888
1020
  * Expected content type of webhook response
889
1021
  */
@@ -973,7 +1105,7 @@ export type CatalogAsset = Catalog;
973
1105
  /**
974
1106
  * For generative creatives: set to 'approved' to finalize, 'rejected' to request regeneration with updated assets/message. Omit for non-generative creatives (system will set based on processing state).
975
1107
  */
976
- export type CreativeStatus = 'processing' | 'approved' | 'rejected' | 'pending_review' | 'archived';
1108
+ export type CreativeStatus = 'processing' | 'pending_review' | 'approved' | 'rejected' | 'archived';
977
1109
  /**
978
1110
  * Creative asset for upload to library - supports static assets, generative formats, and third-party snippets
979
1111
  */
@@ -1686,13 +1818,17 @@ export type MediaChannel = 'display' | 'olv' | 'social' | 'search' | 'ctv' | 'li
1686
1818
  */
1687
1819
  export type DeliveryType = 'guaranteed' | 'non_guaranteed';
1688
1820
  /**
1689
- * Whether this product offers exclusive access to its inventory. Defaults to 'none' when absent. Most relevant for guaranteed products tied to specific shows or placements.
1821
+ * Whether this product offers exclusive access to its inventory. Defaults to 'none' when absent. Most relevant for guaranteed products tied to specific collections or placements.
1690
1822
  */
1691
1823
  export type Exclusivity = 'none' | 'category' | 'exclusive';
1692
1824
  /**
1693
1825
  * A pricing model option offered by a publisher for a product. Discriminated by pricing_model field. If fixed_price is present, it's fixed pricing. If absent, it's auction-based (floor_price and price_guidance optional). Bid-based auction models may also include max_bid as a boolean signal to interpret bid_price as a buyer ceiling instead of an exact honored price.
1694
1826
  */
1695
1827
  export type PricingOption = CPMPricingOption | VCPMPricingOption | CPCPricingOption | CPCVPricingOption | CPVPricingOption | CPPPricingOption | CPAPricingOption | FlatRatePricingOption | TimeBasedPricingOption;
1828
+ /**
1829
+ * Categorizes how a price adjustment affects the transaction
1830
+ */
1831
+ export type PriceAdjustmentKind = 'fee' | 'discount' | 'commission' | 'settlement';
1696
1832
  /**
1697
1833
  * Measurement system for the demographic field. Defaults to nielsen when omitted.
1698
1834
  */
@@ -1760,14 +1896,18 @@ export type DataProviderSignalSelector = {
1760
1896
  */
1761
1897
  signal_tags: string[];
1762
1898
  };
1899
+ /**
1900
+ * Overall measurement readiness level for this product given the buyer's event setup. 'insufficient' means the product cannot optimize effectively with the current setup.
1901
+ */
1902
+ export type AssessmentStatus = 'insufficient' | 'minimum' | 'good' | 'excellent';
1763
1903
  /**
1764
1904
  * Where the conversion event originated
1765
1905
  */
1766
1906
  export type ActionSource = 'website' | 'app' | 'offline' | 'phone_call' | 'chat' | 'email' | 'in_store' | 'system_generated' | 'other';
1767
1907
  /**
1768
- * Lifecycle status of the episode
1908
+ * Lifecycle status of the installment
1769
1909
  */
1770
- export type EpisodeStatus = 'scheduled' | 'tentative' | 'live' | 'postponed' | 'cancelled' | 'aired' | 'published';
1910
+ export type InstallmentStatus = 'scheduled' | 'tentative' | 'live' | 'postponed' | 'cancelled' | 'aired' | 'published';
1771
1911
  /**
1772
1912
  * Rating system used
1773
1913
  */
@@ -1777,13 +1917,17 @@ export type ContentRatingSystem = 'tv_parental' | 'mpaa' | 'podcast' | 'esrb' |
1777
1917
  */
1778
1918
  export type SpecialCategory = 'awards' | 'championship' | 'concert' | 'conference' | 'election' | 'festival' | 'gala' | 'holiday' | 'premiere' | 'product_launch' | 'reunion' | 'tribute';
1779
1919
  /**
1780
- * Role of this person on the show or episode
1920
+ * Role of this person on the collection or installment
1781
1921
  */
1782
1922
  export type TalentRole = 'host' | 'guest' | 'creator' | 'cast' | 'narrator' | 'producer' | 'correspondent' | 'commentator' | 'analyst';
1783
1923
  /**
1784
1924
  * What kind of derivative content this is
1785
1925
  */
1786
1926
  export type DerivativeType = 'clip' | 'highlight' | 'recap' | 'trailer' | 'bonus';
1927
+ /**
1928
+ * What the publisher wants back from a TMP context match. Determines the richness level of the buyer's offer response.
1929
+ */
1930
+ export type TMPResponseType = 'activation' | 'catalog_items' | 'creative' | 'deal';
1787
1931
  /**
1788
1932
  * Represents available advertising inventory
1789
1933
  */
@@ -1884,6 +2028,7 @@ export interface Product {
1884
2028
  * Maximum number of optimization_goals this product accepts on a package. When absent, no limit is declared. Most social platforms accept only 1 goal — buyers sending arrays longer than this value should expect the seller to use only the highest-priority (lowest priority number) goal.
1885
2029
  */
1886
2030
  max_optimization_goals?: number;
2031
+ measurement_readiness?: MeasurementReadiness;
1887
2032
  /**
1888
2033
  * Conversion event tracking for this product. Presence indicates the product supports optimization_goals with kind: 'event'. Seller-level capabilities (supported event types, UID types, attribution windows) are declared in get_adcp_capabilities.
1889
2034
  */
@@ -1927,7 +2072,7 @@ export interface Product {
1927
2072
  */
1928
2073
  brief_relevance?: string;
1929
2074
  /**
1930
- * Expiration timestamp for custom products
2075
+ * Expiration timestamp. After this time, the product may no longer be available for purchase and create_media_buy may reject packages referencing it.
1931
2076
  */
1932
2077
  expires_at?: string;
1933
2078
  /**
@@ -1951,21 +2096,60 @@ export interface Product {
1951
2096
  manifest: {};
1952
2097
  };
1953
2098
  /**
1954
- * Shows available in this product. Each entry references shows declared in an adagents.json by domain and show ID. Buyers resolve full show objects from the referenced adagents.json.
2099
+ * Collections available in this product. Each entry references collections declared in an adagents.json by domain and collection ID. Buyers resolve full collection objects from the referenced adagents.json.
1955
2100
  */
1956
- shows?: ShowSelector[];
2101
+ collections?: CollectionSelector[];
1957
2102
  /**
1958
- * Whether buyers can target a subset of this product's shows. When false (default), the product is a bundle — buyers get all listed shows. When true, buyers can select specific shows in the media buy.
2103
+ * Whether buyers can target a subset of this product's collections. When false (default), the product is a bundle — buyers get all listed collections. When true, buyers can select specific collections in the media buy.
1959
2104
  */
1960
- show_targeting_allowed?: boolean;
2105
+ collection_targeting_allowed?: boolean;
1961
2106
  /**
1962
- * Specific episodes included in this product. Each episode references its parent show via show_id when the product spans multiple shows. When absent with shows present, the product covers the shows broadly (run-of-show).
2107
+ * Specific installments included in this product. Each installment references its parent collection via collection_id when the product spans multiple collections. When absent with collections present, the product covers the collections broadly (run-of-collection).
1963
2108
  */
1964
- episodes?: Episode[];
2109
+ installments?: Installment[];
1965
2110
  /**
1966
2111
  * Registry policy IDs the seller enforces for this product. Enforcement level comes from the policy registry. Buyers can filter products by required policies.
1967
2112
  */
1968
2113
  enforced_policies?: string[];
2114
+ /**
2115
+ * Trusted Match Protocol capabilities for this product. When present, the product supports real-time contextual and/or identity matching via TMP. Buyers use this to determine what response types the publisher can accept and whether brands can be selected dynamically at match time.
2116
+ */
2117
+ trusted_match?: {
2118
+ /**
2119
+ * Whether this product supports Context Match requests. When true, the publisher's TMP router will send context match requests to registered providers for this product's inventory.
2120
+ */
2121
+ context_match: boolean;
2122
+ /**
2123
+ * Whether this product supports Identity Match requests. When true, the publisher's TMP router will send identity match requests to evaluate user eligibility.
2124
+ */
2125
+ identity_match?: boolean;
2126
+ /**
2127
+ * What the publisher can accept back from context match.
2128
+ */
2129
+ response_types?: TMPResponseType[];
2130
+ /**
2131
+ * Whether the buyer can select a brand at match time. When false (default), the brand must be specified on the media buy/package. When true, the buyer's offer can include any brand — the publisher applies approval rules at match time. Enables multi-brand agreements where the holding company or buyer agent selects brand based on context.
2132
+ */
2133
+ dynamic_brands?: boolean;
2134
+ };
2135
+ /**
2136
+ * Instructions for submitting physical creative materials (print, static OOH, cinema). Present only for products requiring physical delivery outside the digital creative assignment flow. Buyer agents MUST validate url and email domains against the seller's known domains (from adagents.json) before submitting materials. Never auto-submit without human confirmation.
2137
+ */
2138
+ material_submission?: {
2139
+ /**
2140
+ * HTTPS URL for uploading or submitting physical creative materials
2141
+ */
2142
+ url?: string;
2143
+ /**
2144
+ * Email address for creative material submission
2145
+ */
2146
+ email?: string;
2147
+ /**
2148
+ * Human-readable instructions for material submission (file naming conventions, shipping address, etc.)
2149
+ */
2150
+ instructions?: string;
2151
+ ext?: ExtensionObject;
2152
+ };
1969
2153
  ext?: ExtensionObject;
1970
2154
  }
1971
2155
  /**
@@ -2022,6 +2206,11 @@ export interface CPMPricingOption {
2022
2206
  * Minimum spend requirement per package using this pricing option, in the specified currency
2023
2207
  */
2024
2208
  min_spend_per_package?: number;
2209
+ price_breakdown?: PriceBreakdown;
2210
+ /**
2211
+ * Adjustment kinds applicable to this pricing option. Tells buyer agents which adjustments are available before negotiation. When absent, no adjustments are pre-declared — the buyer should check price_breakdown if present.
2212
+ */
2213
+ eligible_adjustments?: PriceAdjustmentKind[];
2025
2214
  }
2026
2215
  /**
2027
2216
  * Optional pricing guidance for auction-based bidding
@@ -2077,6 +2266,11 @@ export interface VCPMPricingOption {
2077
2266
  * Minimum spend requirement per package using this pricing option, in the specified currency
2078
2267
  */
2079
2268
  min_spend_per_package?: number;
2269
+ price_breakdown?: PriceBreakdown;
2270
+ /**
2271
+ * Adjustment kinds applicable to this pricing option. Tells buyer agents which adjustments are available before negotiation. When absent, no adjustments are pre-declared — the buyer should check price_breakdown if present.
2272
+ */
2273
+ eligible_adjustments?: PriceAdjustmentKind[];
2080
2274
  }
2081
2275
  /**
2082
2276
  * Cost Per Click pricing. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
@@ -2111,6 +2305,11 @@ export interface CPCPricingOption {
2111
2305
  * Minimum spend requirement per package using this pricing option, in the specified currency
2112
2306
  */
2113
2307
  min_spend_per_package?: number;
2308
+ price_breakdown?: PriceBreakdown;
2309
+ /**
2310
+ * Adjustment kinds applicable to this pricing option. Tells buyer agents which adjustments are available before negotiation. When absent, no adjustments are pre-declared — the buyer should check price_breakdown if present.
2311
+ */
2312
+ eligible_adjustments?: PriceAdjustmentKind[];
2114
2313
  }
2115
2314
  /**
2116
2315
  * Cost Per Completed View (100% video/audio completion) pricing. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
@@ -2145,6 +2344,11 @@ export interface CPCVPricingOption {
2145
2344
  * Minimum spend requirement per package using this pricing option, in the specified currency
2146
2345
  */
2147
2346
  min_spend_per_package?: number;
2347
+ price_breakdown?: PriceBreakdown;
2348
+ /**
2349
+ * Adjustment kinds applicable to this pricing option. Tells buyer agents which adjustments are available before negotiation. When absent, no adjustments are pre-declared — the buyer should check price_breakdown if present.
2350
+ */
2351
+ eligible_adjustments?: PriceAdjustmentKind[];
2148
2352
  }
2149
2353
  /**
2150
2354
  * Cost Per View (at publisher-defined threshold) pricing for video/audio. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
@@ -2190,6 +2394,11 @@ export interface CPVPricingOption {
2190
2394
  * Minimum spend requirement per package using this pricing option, in the specified currency
2191
2395
  */
2192
2396
  min_spend_per_package?: number;
2397
+ price_breakdown?: PriceBreakdown;
2398
+ /**
2399
+ * Adjustment kinds applicable to this pricing option. Tells buyer agents which adjustments are available before negotiation. When absent, no adjustments are pre-declared — the buyer should check price_breakdown if present.
2400
+ */
2401
+ eligible_adjustments?: PriceAdjustmentKind[];
2193
2402
  }
2194
2403
  /**
2195
2404
  * Cost Per Point (Gross Rating Point) pricing for TV and audio campaigns. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
@@ -2234,6 +2443,11 @@ export interface CPPPricingOption {
2234
2443
  * Minimum spend requirement per package using this pricing option, in the specified currency
2235
2444
  */
2236
2445
  min_spend_per_package?: number;
2446
+ price_breakdown?: PriceBreakdown;
2447
+ /**
2448
+ * Adjustment kinds applicable to this pricing option. Tells buyer agents which adjustments are available before negotiation. When absent, no adjustments are pre-declared — the buyer should check price_breakdown if present.
2449
+ */
2450
+ eligible_adjustments?: PriceAdjustmentKind[];
2237
2451
  }
2238
2452
  /**
2239
2453
  * Cost Per Acquisition pricing. Advertiser pays a fixed price when a specified conversion event occurs. The event_type field declares which event triggers billing (e.g., purchase, lead, app_install).
@@ -2271,6 +2485,11 @@ export interface CPAPricingOption {
2271
2485
  * Minimum spend requirement per package using this pricing option, in the specified currency
2272
2486
  */
2273
2487
  min_spend_per_package?: number;
2488
+ price_breakdown?: PriceBreakdown;
2489
+ /**
2490
+ * Adjustment kinds applicable to this pricing option. Tells buyer agents which adjustments are available before negotiation. When absent, no adjustments are pre-declared — the buyer should check price_breakdown if present.
2491
+ */
2492
+ eligible_adjustments?: PriceAdjustmentKind[];
2274
2493
  }
2275
2494
  /**
2276
2495
  * Flat rate pricing for sponsorships, takeovers, and DOOH exclusive placements. A fixed total cost regardless of delivery volume. For duration-scaled pricing (rate × time units), use the `time` model instead. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
@@ -2302,6 +2521,11 @@ export interface FlatRatePricingOption {
2302
2521
  * Minimum spend requirement per package using this pricing option, in the specified currency
2303
2522
  */
2304
2523
  min_spend_per_package?: number;
2524
+ price_breakdown?: PriceBreakdown;
2525
+ /**
2526
+ * Adjustment kinds applicable to this pricing option. Tells buyer agents which adjustments are available before negotiation. When absent, no adjustments are pre-declared — the buyer should check price_breakdown if present.
2527
+ */
2528
+ eligible_adjustments?: PriceAdjustmentKind[];
2305
2529
  }
2306
2530
  /**
2307
2531
  * DOOH inventory allocation parameters. Sponsorship and takeover flat_rate options omit this field entirely — only include for digital out-of-home inventory.
@@ -2386,6 +2610,11 @@ export interface TimeBasedPricingOption {
2386
2610
  * Minimum spend requirement per package using this pricing option, in the specified currency
2387
2611
  */
2388
2612
  min_spend_per_package?: number;
2613
+ price_breakdown?: PriceBreakdown;
2614
+ /**
2615
+ * Adjustment kinds applicable to this pricing option. Tells buyer agents which adjustments are available before negotiation. When absent, no adjustments are pre-declared — the buyer should check price_breakdown if present.
2616
+ */
2617
+ eligible_adjustments?: PriceAdjustmentKind[];
2389
2618
  }
2390
2619
  /**
2391
2620
  * Forecasted delivery metrics for this product. Gives buyers an estimate of expected performance before requesting a proposal.
@@ -2578,32 +2807,67 @@ export interface CreativePolicy {
2578
2807
  provenance_required?: boolean;
2579
2808
  }
2580
2809
  /**
2581
- * References shows declared in an adagents.json. Buyers resolve full show objects by fetching the adagents.json at the given domain and matching show_ids against its shows array.
2810
+ * Assessment of whether the buyer's event source setup is sufficient for this product to optimize effectively. Only present when the seller can evaluate the buyer's account context. Buyers should check this before creating media buys with event-based optimization goals.
2811
+ */
2812
+ export interface MeasurementReadiness {
2813
+ status: AssessmentStatus;
2814
+ /**
2815
+ * Event types this product needs for effective optimization. Buyers should ensure their event sources cover these types.
2816
+ */
2817
+ required_event_types?: EventType[];
2818
+ /**
2819
+ * Event types this product requires that the buyer has not configured. Empty or absent when all required types are covered.
2820
+ */
2821
+ missing_event_types?: EventType[];
2822
+ /**
2823
+ * Actionable issues preventing full measurement readiness. Sellers should limit to the top 3-5 most actionable items. Buyer agents should sort by severity rather than relying on array position.
2824
+ */
2825
+ issues?: DiagnosticIssue[];
2826
+ /**
2827
+ * Seller explanation of the readiness assessment, recommendations for improvement, or context about what the buyer needs to change.
2828
+ */
2829
+ notes?: string;
2830
+ }
2831
+ /**
2832
+ * An actionable issue detected during a health or readiness assessment. Used by event source health and measurement readiness to surface problems and recommendations.
2833
+ */
2834
+ export interface DiagnosticIssue {
2835
+ /**
2836
+ * 'error': blocks optimization until resolved. 'warning': optimization works but effectiveness is reduced. 'info': suggestion for improvement.
2837
+ */
2838
+ severity: 'error' | 'warning' | 'info';
2839
+ /**
2840
+ * Human/agent-readable description of the issue and how to resolve it.
2841
+ */
2842
+ message: string;
2843
+ }
2844
+ /**
2845
+ * References collections declared in an adagents.json. Buyers resolve full collection objects by fetching the adagents.json at the given domain and matching collection_ids against its collections array.
2582
2846
  */
2583
- export interface ShowSelector {
2847
+ export interface CollectionSelector {
2584
2848
  /**
2585
- * Domain where the adagents.json declaring these shows is hosted (e.g., 'mrbeast.com'). The shows array in that file contains the authoritative show definitions.
2849
+ * Domain where the adagents.json declaring these collections is hosted (e.g., 'mrbeast.com'). The collections array in that file contains the authoritative collection definitions.
2586
2850
  */
2587
2851
  publisher_domain: string;
2588
2852
  /**
2589
- * Show IDs from the adagents.json shows array. Each ID must match a show_id declared in that file.
2853
+ * Collection IDs from the adagents.json collections array. Each ID must match a collection_id declared in that file.
2590
2854
  */
2591
- show_ids: string[];
2855
+ collection_ids: string[];
2592
2856
  }
2593
2857
  /**
2594
- * A specific installment of a show. Episodes inherit show-level fields they don't override: content_rating defaults to the show's baseline, guest_talent is additive to the show's recurring talent, and topics add context beyond the show's genre.
2858
+ * A single bookable unit within a collection — one episode, issue, event, or rotation period. The parent collection's kind indicates how to interpret each installment: TV/podcast episodes, print issues, live event airings, newsletter editions, or DOOH rotation periods. Installments inherit collection-level fields they don't override: content_rating defaults to the collection's baseline, guest_talent is additive to the collection's recurring talent, and topics add context beyond the collection's genre.
2595
2859
  */
2596
- export interface Episode {
2860
+ export interface Installment {
2597
2861
  /**
2598
- * Unique identifier for this episode within the show
2862
+ * Unique identifier for this installment within the collection
2599
2863
  */
2600
- episode_id: string;
2864
+ installment_id: string;
2601
2865
  /**
2602
- * Parent show reference. Required when the product spans multiple shows. Maps to a show_id declared in one of the publishers' adagents.json files referenced by the product's shows selectors.
2866
+ * Parent collection reference. Required when the product spans multiple collections. Maps to a collection_id declared in one of the publishers' adagents.json files referenced by the product's collection selectors.
2603
2867
  */
2604
- show_id?: string;
2868
+ collection_id?: string;
2605
2869
  /**
2606
- * Episode title
2870
+ * Installment title
2607
2871
  */
2608
2872
  name?: string;
2609
2873
  /**
@@ -2611,16 +2875,16 @@ export interface Episode {
2611
2875
  */
2612
2876
  season?: string;
2613
2877
  /**
2614
- * Episode number within the season (e.g., '3', '47')
2878
+ * Installment number within the season (e.g., '3', '47')
2615
2879
  */
2616
- episode_number?: string;
2880
+ installment_number?: string;
2617
2881
  /**
2618
- * When the episode airs or publishes (ISO 8601)
2882
+ * When the installment airs or publishes (ISO 8601)
2619
2883
  */
2620
2884
  scheduled_at?: string;
2621
- status?: EpisodeStatus;
2885
+ status?: InstallmentStatus;
2622
2886
  /**
2623
- * Expected duration of the episode in seconds
2887
+ * Expected duration of the installment in seconds
2624
2888
  */
2625
2889
  duration_seconds?: number;
2626
2890
  /**
@@ -2628,34 +2892,35 @@ export interface Episode {
2628
2892
  */
2629
2893
  flexible_end?: boolean;
2630
2894
  /**
2631
- * When this episode data expires and should be re-queried. Agents should re-query before committing budget to products with tentative episodes.
2895
+ * When this installment data expires and should be re-queried. Agents should re-query before committing budget to products with tentative installments.
2632
2896
  */
2633
2897
  valid_until?: string;
2634
2898
  content_rating?: ContentRating;
2635
2899
  /**
2636
- * Content topics for this episode. Uses the same taxonomy as the show's genre_taxonomy when present. Enables episode-level brand safety evaluation beyond content_rating.
2900
+ * Content topics for this installment. Uses the same taxonomy as the collection's genre_taxonomy when present. Enables installment-level brand safety evaluation beyond content_rating.
2637
2901
  */
2638
2902
  topics?: string[];
2639
2903
  special?: Special;
2640
2904
  /**
2641
- * Episode-specific guests and talent. Additive to the show's recurring talent.
2905
+ * Installment-specific guests and talent. Additive to the collection's recurring talent.
2642
2906
  */
2643
2907
  guest_talent?: Talent[];
2644
2908
  ad_inventory?: AdInventoryConfiguration;
2909
+ deadlines?: InstallmentDeadlines;
2645
2910
  /**
2646
- * When this episode is a clip, highlight, or recap derived from a full episode. The source episode_id must reference an episode within the same response.
2911
+ * When this installment is a clip, highlight, or recap derived from a full installment. The source installment_id must reference an installment within the same response.
2647
2912
  */
2648
2913
  derivative_of?: {
2649
2914
  /**
2650
- * The source episode this content is derived from
2915
+ * The source installment this content is derived from
2651
2916
  */
2652
- episode_id: string;
2917
+ installment_id: string;
2653
2918
  type: DerivativeType;
2654
2919
  };
2655
2920
  ext?: ExtensionObject;
2656
2921
  }
2657
2922
  /**
2658
- * Episode-specific content rating. Overrides the show's baseline content_rating when present.
2923
+ * Installment-specific content rating. Overrides the collection's baseline content_rating when present.
2659
2924
  */
2660
2925
  export interface ContentRating {
2661
2926
  system: ContentRatingSystem;
@@ -2665,7 +2930,7 @@ export interface ContentRating {
2665
2930
  rating: string;
2666
2931
  }
2667
2932
  /**
2668
- * Episode-specific event context. When present, this episode is anchored to a real-world event. Overrides the show-level special when present.
2933
+ * Installment-specific event context. When present, this installment is anchored to a real-world event. Overrides the collection-level special when present.
2669
2934
  */
2670
2935
  export interface Special {
2671
2936
  /**
@@ -2683,12 +2948,12 @@ export interface Special {
2683
2948
  ends?: string;
2684
2949
  }
2685
2950
  /**
2686
- * A person associated with a show or episode, with an optional link to their brand.json identity
2951
+ * A person associated with a collection or installment, with an optional link to their brand.json identity
2687
2952
  */
2688
2953
  export interface Talent {
2689
2954
  role: TalentRole;
2690
2955
  /**
2691
- * Person's name as credited on the show
2956
+ * Person's name as credited on the collection
2692
2957
  */
2693
2958
  name: string;
2694
2959
  /**
@@ -2697,11 +2962,11 @@ export interface Talent {
2697
2962
  brand_url?: string;
2698
2963
  }
2699
2964
  /**
2700
- * Break-based ad inventory for this episode. For non-break formats (host reads, integrations), use product placements.
2965
+ * Break-based ad inventory for this installment. For non-break formats (host reads, integrations), use product placements.
2701
2966
  */
2702
2967
  export interface AdInventoryConfiguration {
2703
2968
  /**
2704
- * Number of planned ad breaks in the episode
2969
+ * Number of planned ad breaks in the installment
2705
2970
  */
2706
2971
  expected_breaks: number;
2707
2972
  /**
@@ -2721,14 +2986,48 @@ export interface AdInventoryConfiguration {
2721
2986
  */
2722
2987
  supported_formats?: string[];
2723
2988
  }
2989
+ /**
2990
+ * Booking, cancellation, and material submission deadlines for this installment. Present when the installment has time-sensitive inventory that requires advance commitment or material delivery.
2991
+ */
2992
+ export interface InstallmentDeadlines {
2993
+ /**
2994
+ * Last date/time to book a placement in this installment (ISO 8601). After this point, the seller will not accept new bookings.
2995
+ */
2996
+ booking_deadline?: string;
2997
+ /**
2998
+ * Last date/time to cancel without penalty (ISO 8601). Cancellations after this point may incur fees per the seller's terms.
2999
+ */
3000
+ cancellation_deadline?: string;
3001
+ /**
3002
+ * Stages for creative material submission. Items MUST be in chronological order by due_at (earliest first). Typical pattern: 'draft' for raw materials the seller will process, 'final' for production-ready assets. Print example: draft artwork then press-ready PDF. Influencer example: talking points then approved script.
3003
+ */
3004
+ material_deadlines?: MaterialDeadline[];
3005
+ }
3006
+ /**
3007
+ * A deadline for creative material submission. Sellers declare stages to distinguish draft materials (e.g., talking points, raw artwork) from production-ready assets (e.g., approved scripts, press-ready PDFs).
3008
+ */
3009
+ export interface MaterialDeadline {
3010
+ /**
3011
+ * Submission stage identifier. Use 'draft' for materials that need seller processing and 'final' for production-ready assets. Sellers may define additional stages.
3012
+ */
3013
+ stage: string;
3014
+ /**
3015
+ * When materials for this stage are due (ISO 8601)
3016
+ */
3017
+ due_at: string;
3018
+ /**
3019
+ * What the seller needs at this stage (e.g., 'Talking points and brand guidelines', 'Press-ready PDF with bleed')
3020
+ */
3021
+ label?: string;
3022
+ }
2724
3023
  /**
2725
3024
  * Type of advertising property
2726
3025
  */
2727
- export type PropertyType = 'website' | 'mobile_app' | 'ctv_app' | 'desktop_app' | 'dooh' | 'podcast' | 'radio' | 'streaming_audio';
3026
+ export type PropertyType = 'website' | 'mobile_app' | 'ctv_app' | 'desktop_app' | 'dooh' | 'podcast' | 'radio' | 'streaming_audio' | 'ai_assistant';
2728
3027
  /**
2729
3028
  * Type of identifier for this property
2730
3029
  */
2731
- export type PropertyIdentifierTypes = 'domain' | 'subdomain' | 'network_id' | 'ios_bundle' | 'android_package' | 'apple_app_store_id' | 'google_play_id' | 'roku_store_id' | 'fire_tv_asin' | 'samsung_app_id' | 'apple_tv_bundle' | 'bundle_id' | 'venue_id' | 'screen_id' | 'openooh_venue_type' | 'rss_url' | 'apple_podcast_id' | 'spotify_show_id' | 'podcast_guid';
3030
+ export type PropertyIdentifierTypes = 'domain' | 'subdomain' | 'network_id' | 'ios_bundle' | 'android_package' | 'apple_app_store_id' | 'google_play_id' | 'roku_store_id' | 'fire_tv_asin' | 'samsung_app_id' | 'apple_tv_bundle' | 'bundle_id' | 'venue_id' | 'screen_id' | 'openooh_venue_type' | 'rss_url' | 'apple_podcast_id' | 'spotify_collection_id' | 'podcast_guid';
2732
3031
  /**
2733
3032
  * An advertising property that can be validated via adagents.json
2734
3033
  */
@@ -2778,10 +3077,107 @@ export type TaskStatus = 'submitted' | 'working' | 'input-required' | 'completed
2778
3077
  * Task-specific payload matching the status. For completed/failed, contains the full task response. For working/input-required/submitted, contains status-specific data. This is the data layer that AdCP specs - same structure used in A2A status.message.parts[].data.
2779
3078
  */
2780
3079
  export type AdCPAsyncResponseData = GetProductsResponse | GetProductsAsyncWorking | GetProductsAsyncInputRequired | GetProductsAsyncSubmitted | CreateMediaBuyResponse | CreateMediaBuyAsyncWorking | CreateMediaBuyAsyncInputRequired | CreateMediaBuyAsyncSubmitted | UpdateMediaBuyResponse | UpdateMediaBuyAsyncWorking | UpdateMediaBuyAsyncInputRequired | UpdateMediaBuyAsyncSubmitted | BuildCreativeResponse | BuildCreativeAsyncWorking | BuildCreativeAsyncInputRequired | BuildCreativeAsyncSubmitted | SyncCreativesResponse | SyncCreativesAsyncWorking | SyncCreativesAsyncInputRequired | SyncCreativesAsyncSubmitted | SyncCatalogsResponse | SyncCatalogsAsyncWorking | SyncCatalogsAsyncInputRequired | SyncCatalogsAsyncSubmitted;
3080
+ /**
3081
+ * Lifecycle status of this proposal. When absent, the proposal is ready to buy (backward compatible). 'draft' means indicative pricing — finalize via refine before purchasing. 'committed' means firm pricing with inventory reserved until expires_at.
3082
+ */
3083
+ export type ProposalStatus = 'draft' | 'committed';
2781
3084
  /**
2782
3085
  * Response for completed or failed create_media_buy
2783
3086
  */
2784
3087
  export type CreateMediaBuyResponse = CreateMediaBuySuccess | CreateMediaBuyError;
3088
+ /**
3089
+ * Selects an audience by signal reference or natural language description. Uses 'type' as the primary discriminator (signal vs description). Signal selectors additionally use 'value_type' to determine the targeting expression format (matching signal-targeting.json variants).
3090
+ */
3091
+ export type AudienceSelector = {
3092
+ /**
3093
+ * Discriminator for signal-based selectors
3094
+ */
3095
+ type: 'signal';
3096
+ signal_id: SignalID;
3097
+ /**
3098
+ * Discriminator for binary signals
3099
+ */
3100
+ value_type: 'binary';
3101
+ /**
3102
+ * Whether to include (true) or exclude (false) users matching this signal
3103
+ */
3104
+ value: boolean;
3105
+ } | {
3106
+ /**
3107
+ * Discriminator for signal-based selectors
3108
+ */
3109
+ type: 'signal';
3110
+ signal_id: SignalID;
3111
+ /**
3112
+ * Discriminator for categorical signals
3113
+ */
3114
+ value_type: 'categorical';
3115
+ /**
3116
+ * Values to target. Users with any of these values will be included.
3117
+ */
3118
+ values: string[];
3119
+ } | {
3120
+ /**
3121
+ * Discriminator for signal-based selectors
3122
+ */
3123
+ type: 'signal';
3124
+ signal_id: SignalID;
3125
+ /**
3126
+ * Discriminator for numeric signals
3127
+ */
3128
+ value_type: 'numeric';
3129
+ /**
3130
+ * Minimum value (inclusive). Omit for no minimum. Must be <= max_value when both are provided.
3131
+ */
3132
+ min_value?: number;
3133
+ /**
3134
+ * Maximum value (inclusive). Omit for no maximum. Must be >= min_value when both are provided.
3135
+ */
3136
+ max_value?: number;
3137
+ } | {
3138
+ /**
3139
+ * Discriminator for description-based selectors
3140
+ */
3141
+ type: 'description';
3142
+ /**
3143
+ * Natural language description of the audience (e.g., 'likely EV buyers', 'high net worth individuals', 'vulnerable communities')
3144
+ */
3145
+ description: string;
3146
+ /**
3147
+ * Optional grouping hint for the governance agent (e.g., 'demographic', 'behavioral', 'contextual', 'financial')
3148
+ */
3149
+ category?: string;
3150
+ };
3151
+ /**
3152
+ * The signal to target
3153
+ */
3154
+ export type SignalID = {
3155
+ /**
3156
+ * Discriminator indicating this signal is from a data provider's published catalog
3157
+ */
3158
+ source: 'catalog';
3159
+ /**
3160
+ * Domain of the data provider that owns this signal (e.g., 'polk.com', 'experian.com'). The signal definition is published at this domain's /.well-known/adagents.json
3161
+ */
3162
+ data_provider_domain: string;
3163
+ /**
3164
+ * Signal identifier within the data provider's catalog (e.g., 'likely_tesla_buyers', 'income_100k_plus')
3165
+ */
3166
+ id: string;
3167
+ } | {
3168
+ /**
3169
+ * Discriminator indicating this signal is native to the agent (not from a data provider catalog)
3170
+ */
3171
+ source: 'agent';
3172
+ /**
3173
+ * URL of the signals agent that provides this signal (e.g., 'https://liveramp.com/.well-known/adcp/signals')
3174
+ */
3175
+ agent_url: string;
3176
+ /**
3177
+ * Signal identifier within the agent's signal set (e.g., 'custom_auto_intenders')
3178
+ */
3179
+ id: string;
3180
+ };
2785
3181
  /**
2786
3182
  * Response for completed or failed update_media_buy
2787
3183
  */
@@ -3080,10 +3476,12 @@ export interface Proposal {
3080
3476
  * Budget allocations across products. Allocation percentages MUST sum to 100. Publishers are responsible for ensuring the sum equals 100; buyers SHOULD validate this before execution.
3081
3477
  */
3082
3478
  allocations: ProductAllocation[];
3479
+ proposal_status?: ProposalStatus;
3083
3480
  /**
3084
- * When this proposal expires and can no longer be executed. After expiration, referenced products or pricing may no longer be available.
3481
+ * When this proposal expires and can no longer be executed. For draft proposals, indicates when indicative pricing becomes stale. For committed proposals, indicates when the inventory hold lapses — the buyer must call create_media_buy before this time.
3085
3482
  */
3086
3483
  expires_at?: string;
3484
+ insertion_order?: InsertionOrder;
3087
3485
  /**
3088
3486
  * Optional budget guidance for this proposal
3089
3487
  */
@@ -3155,6 +3553,62 @@ export interface ProductAllocation {
3155
3553
  forecast?: DeliveryForecast;
3156
3554
  ext?: ExtensionObject;
3157
3555
  }
3556
+ /**
3557
+ * Formal insertion order attached to a committed proposal. Present when the seller requires a signed agreement before the media buy can proceed. The buyer references the io_id in io_acceptance on create_media_buy.
3558
+ */
3559
+ export interface InsertionOrder {
3560
+ /**
3561
+ * Unique identifier for this insertion order. Referenced by io_acceptance on create_media_buy.
3562
+ */
3563
+ io_id: string;
3564
+ /**
3565
+ * Structured terms for agent validation. Agents can programmatically verify these match the proposal and campaign requirements.
3566
+ */
3567
+ terms?: {
3568
+ /**
3569
+ * Advertiser name or identifier
3570
+ */
3571
+ advertiser?: string;
3572
+ /**
3573
+ * Publisher name or identifier
3574
+ */
3575
+ publisher?: string;
3576
+ /**
3577
+ * Total committed budget
3578
+ */
3579
+ total_budget?: {
3580
+ amount: number;
3581
+ /**
3582
+ * ISO 4217 currency code
3583
+ */
3584
+ currency: string;
3585
+ };
3586
+ /**
3587
+ * Campaign start date
3588
+ */
3589
+ flight_start?: string;
3590
+ /**
3591
+ * Campaign end date
3592
+ */
3593
+ flight_end?: string;
3594
+ /**
3595
+ * Payment terms
3596
+ */
3597
+ payment_terms?: 'net_30' | 'net_60' | 'net_90' | 'prepaid' | 'due_on_receipt';
3598
+ };
3599
+ /**
3600
+ * URL to a human-readable document containing the full insertion order terms
3601
+ */
3602
+ terms_url?: string;
3603
+ /**
3604
+ * URL to an electronic signing service (e.g., DocuSign) for human signature workflows. When present, a human must sign before the buyer agent can proceed with create_media_buy.
3605
+ */
3606
+ signing_url?: string;
3607
+ /**
3608
+ * Whether the buyer must accept this IO before creating a media buy. When true, create_media_buy requires an io_acceptance referencing this io_id.
3609
+ */
3610
+ requires_signature: boolean;
3611
+ }
3158
3612
  /**
3159
3613
  * Standard error structure for task-specific errors and warnings
3160
3614
  */
@@ -3205,11 +3659,6 @@ export interface PaginationResponse {
3205
3659
  */
3206
3660
  total_count?: number;
3207
3661
  }
3208
- /**
3209
- * Opaque correlation data that is echoed unchanged in responses. Used for internal tracking, UI session IDs, trace IDs, and other caller-specific identifiers that don't affect protocol behavior. Context data is never parsed by AdCP agents - it's simply preserved and returned.
3210
- */
3211
- export interface ContextObject {
3212
- }
3213
3662
  /**
3214
3663
  * Progress data for working get_products
3215
3664
  */
@@ -3268,22 +3717,28 @@ export interface GetProductsAsyncSubmitted {
3268
3717
  */
3269
3718
  export interface CreateMediaBuySuccess {
3270
3719
  /**
3271
- * Publisher's unique identifier for the created media buy
3720
+ * Seller's unique identifier for the created media buy
3272
3721
  */
3273
3722
  media_buy_id: string;
3723
+ account?: Account;
3724
+ invoice_recipient?: BusinessEntity;
3725
+ status?: MediaBuyStatus;
3274
3726
  /**
3275
- * Buyer's reference identifier for this media buy
3276
- */
3277
- buyer_ref: string;
3278
- /**
3279
- * Buyer's campaign reference label, echoed from the request
3727
+ * ISO 8601 timestamp when this media buy was confirmed by the seller. A successful create_media_buy response constitutes order confirmation.
3280
3728
  */
3281
- buyer_campaign_ref?: string;
3282
- account?: Account;
3729
+ confirmed_at?: string;
3283
3730
  /**
3284
3731
  * ISO 8601 timestamp for creative upload deadline
3285
3732
  */
3286
3733
  creative_deadline?: string;
3734
+ /**
3735
+ * Initial revision number for this media buy. Use in subsequent update_media_buy requests for optimistic concurrency.
3736
+ */
3737
+ revision?: number;
3738
+ /**
3739
+ * Actions the buyer can perform on this media buy after creation. Saves a round-trip to get_media_buys.
3740
+ */
3741
+ valid_actions?: ('pause' | 'resume' | 'cancel' | 'update_budget' | 'update_dates' | 'update_packages' | 'add_packages' | 'sync_creatives')[];
3287
3742
  /**
3288
3743
  * Array of created packages with complete state information
3289
3744
  */
@@ -3330,6 +3785,10 @@ export interface PlannedDelivery {
3330
3785
  * Human-readable summary of the audience the seller will target.
3331
3786
  */
3332
3787
  audience_summary?: string;
3788
+ /**
3789
+ * Structured audience targeting the seller will activate. Each entry is either a signal reference or a descriptive criterion. When present, governance agents MUST use this for bias/fairness validation and SHOULD ignore audience_summary for validation purposes. The audience_summary field is a human-readable rendering of this array, not an independent declaration.
3790
+ */
3791
+ audience_targeting?: AudienceSelector[];
3333
3792
  /**
3334
3793
  * Total budget the seller will deliver against.
3335
3794
  */
@@ -3405,21 +3864,27 @@ export interface CreateMediaBuyAsyncSubmitted {
3405
3864
  */
3406
3865
  export interface UpdateMediaBuySuccess {
3407
3866
  /**
3408
- * Publisher's identifier for the media buy
3867
+ * Seller's identifier for the media buy
3409
3868
  */
3410
3869
  media_buy_id: string;
3870
+ status?: MediaBuyStatus;
3411
3871
  /**
3412
- * Buyer's reference identifier for the media buy
3872
+ * Revision number after this update. Use this value in subsequent update_media_buy requests for optimistic concurrency.
3413
3873
  */
3414
- buyer_ref: string;
3874
+ revision?: number;
3415
3875
  /**
3416
3876
  * ISO 8601 timestamp when changes take effect (null if pending approval)
3417
3877
  */
3418
3878
  implementation_date?: string | null;
3879
+ invoice_recipient?: BusinessEntity;
3419
3880
  /**
3420
3881
  * Array of packages that were modified with complete state information
3421
3882
  */
3422
3883
  affected_packages?: Package[];
3884
+ /**
3885
+ * Actions the buyer can perform after this update. Saves a round-trip to get_media_buys.
3886
+ */
3887
+ valid_actions?: ('pause' | 'resume' | 'cancel' | 'update_budget' | 'update_dates' | 'update_packages' | 'add_packages' | 'sync_creatives')[];
3423
3888
  /**
3424
3889
  * When true, this response contains simulated data from sandbox mode.
3425
3890
  */