@adcp/client 4.8.0 → 4.10.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 (149) hide show
  1. package/bin/adcp.js +346 -0
  2. package/dist/lib/adapters/governance-adapter.d.ts +88 -0
  3. package/dist/lib/adapters/governance-adapter.d.ts.map +1 -0
  4. package/dist/lib/adapters/governance-adapter.js +96 -0
  5. package/dist/lib/adapters/governance-adapter.js.map +1 -0
  6. package/dist/lib/adapters/index.d.ts +1 -0
  7. package/dist/lib/adapters/index.d.ts.map +1 -1
  8. package/dist/lib/adapters/index.js +7 -1
  9. package/dist/lib/adapters/index.js.map +1 -1
  10. package/dist/lib/agents/index.generated.d.ts +33 -1
  11. package/dist/lib/agents/index.generated.d.ts.map +1 -1
  12. package/dist/lib/agents/index.generated.js +48 -0
  13. package/dist/lib/agents/index.generated.js.map +1 -1
  14. package/dist/lib/core/AgentClient.d.ts +92 -1
  15. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  16. package/dist/lib/core/AgentClient.js +237 -0
  17. package/dist/lib/core/AgentClient.js.map +1 -1
  18. package/dist/lib/core/AsyncHandler.d.ts +19 -2
  19. package/dist/lib/core/AsyncHandler.d.ts.map +1 -1
  20. package/dist/lib/core/AsyncHandler.js.map +1 -1
  21. package/dist/lib/core/ConversationTypes.d.ts +8 -2
  22. package/dist/lib/core/ConversationTypes.d.ts.map +1 -1
  23. package/dist/lib/core/GovernanceMiddleware.d.ts +86 -0
  24. package/dist/lib/core/GovernanceMiddleware.d.ts.map +1 -0
  25. package/dist/lib/core/GovernanceMiddleware.js +289 -0
  26. package/dist/lib/core/GovernanceMiddleware.js.map +1 -0
  27. package/dist/lib/core/GovernanceTypes.d.ts +118 -0
  28. package/dist/lib/core/GovernanceTypes.d.ts.map +1 -0
  29. package/dist/lib/core/GovernanceTypes.js +69 -0
  30. package/dist/lib/core/GovernanceTypes.js.map +1 -0
  31. package/dist/lib/core/SingleAgentClient.d.ts +103 -1
  32. package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
  33. package/dist/lib/core/SingleAgentClient.js +151 -0
  34. package/dist/lib/core/SingleAgentClient.js.map +1 -1
  35. package/dist/lib/core/TaskExecutor.d.ts +10 -0
  36. package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
  37. package/dist/lib/core/TaskExecutor.js +95 -10
  38. package/dist/lib/core/TaskExecutor.js.map +1 -1
  39. package/dist/lib/index.d.ts +6 -2
  40. package/dist/lib/index.d.ts.map +1 -1
  41. package/dist/lib/index.js +22 -4
  42. package/dist/lib/index.js.map +1 -1
  43. package/dist/lib/observability/index.d.ts +8 -0
  44. package/dist/lib/observability/index.d.ts.map +1 -0
  45. package/dist/lib/observability/index.js +17 -0
  46. package/dist/lib/observability/index.js.map +1 -0
  47. package/dist/lib/observability/tracing.d.ts +42 -0
  48. package/dist/lib/observability/tracing.d.ts.map +1 -0
  49. package/dist/lib/observability/tracing.js +126 -0
  50. package/dist/lib/observability/tracing.js.map +1 -0
  51. package/dist/lib/protocols/a2a.d.ts.map +1 -1
  52. package/dist/lib/protocols/a2a.js +16 -1
  53. package/dist/lib/protocols/a2a.js.map +1 -1
  54. package/dist/lib/protocols/index.d.ts.map +1 -1
  55. package/dist/lib/protocols/index.js +37 -29
  56. package/dist/lib/protocols/index.js.map +1 -1
  57. package/dist/lib/protocols/mcp.d.ts.map +1 -1
  58. package/dist/lib/protocols/mcp.js +21 -1
  59. package/dist/lib/protocols/mcp.js.map +1 -1
  60. package/dist/lib/registry/types.generated.d.ts +754 -5
  61. package/dist/lib/registry/types.generated.d.ts.map +1 -1
  62. package/dist/lib/registry/types.generated.js +1 -1
  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 +36 -11
  66. package/dist/lib/testing/agent-tester.js.map +1 -1
  67. package/dist/lib/testing/client.d.ts +6 -1
  68. package/dist/lib/testing/client.d.ts.map +1 -1
  69. package/dist/lib/testing/client.js +36 -19
  70. package/dist/lib/testing/client.js.map +1 -1
  71. package/dist/lib/testing/compliance/briefs.d.ts +12 -0
  72. package/dist/lib/testing/compliance/briefs.d.ts.map +1 -0
  73. package/dist/lib/testing/compliance/briefs.js +157 -0
  74. package/dist/lib/testing/compliance/briefs.js.map +1 -0
  75. package/dist/lib/testing/compliance/comply.d.ts +26 -0
  76. package/dist/lib/testing/compliance/comply.d.ts.map +1 -0
  77. package/dist/lib/testing/compliance/comply.js +540 -0
  78. package/dist/lib/testing/compliance/comply.js.map +1 -0
  79. package/dist/lib/testing/compliance/convince.d.ts +27 -0
  80. package/dist/lib/testing/compliance/convince.d.ts.map +1 -0
  81. package/dist/lib/testing/compliance/convince.js +418 -0
  82. package/dist/lib/testing/compliance/convince.js.map +1 -0
  83. package/dist/lib/testing/compliance/index.d.ts +13 -0
  84. package/dist/lib/testing/compliance/index.d.ts.map +1 -0
  85. package/dist/lib/testing/compliance/index.js +22 -0
  86. package/dist/lib/testing/compliance/index.js.map +1 -0
  87. package/dist/lib/testing/compliance/types.d.ts +123 -0
  88. package/dist/lib/testing/compliance/types.d.ts.map +1 -0
  89. package/dist/lib/testing/compliance/types.js +9 -0
  90. package/dist/lib/testing/compliance/types.js.map +1 -0
  91. package/dist/lib/testing/index.d.ts +1 -0
  92. package/dist/lib/testing/index.d.ts.map +1 -1
  93. package/dist/lib/testing/index.js +15 -1
  94. package/dist/lib/testing/index.js.map +1 -1
  95. package/dist/lib/testing/orchestrator.d.ts +0 -2
  96. package/dist/lib/testing/orchestrator.d.ts.map +1 -1
  97. package/dist/lib/testing/orchestrator.js +14 -3
  98. package/dist/lib/testing/orchestrator.js.map +1 -1
  99. package/dist/lib/testing/scenarios/capabilities.d.ts.map +1 -1
  100. package/dist/lib/testing/scenarios/capabilities.js +70 -9
  101. package/dist/lib/testing/scenarios/capabilities.js.map +1 -1
  102. package/dist/lib/testing/scenarios/creative.d.ts +14 -0
  103. package/dist/lib/testing/scenarios/creative.d.ts.map +1 -1
  104. package/dist/lib/testing/scenarios/creative.js +261 -55
  105. package/dist/lib/testing/scenarios/creative.js.map +1 -1
  106. package/dist/lib/testing/scenarios/discovery.d.ts.map +1 -1
  107. package/dist/lib/testing/scenarios/discovery.js +7 -5
  108. package/dist/lib/testing/scenarios/discovery.js.map +1 -1
  109. package/dist/lib/testing/scenarios/edge-cases.d.ts.map +1 -1
  110. package/dist/lib/testing/scenarios/edge-cases.js +90 -112
  111. package/dist/lib/testing/scenarios/edge-cases.js.map +1 -1
  112. package/dist/lib/testing/scenarios/governance.d.ts +48 -0
  113. package/dist/lib/testing/scenarios/governance.d.ts.map +1 -1
  114. package/dist/lib/testing/scenarios/governance.js +725 -39
  115. package/dist/lib/testing/scenarios/governance.js.map +1 -1
  116. package/dist/lib/testing/scenarios/index.d.ts +3 -3
  117. package/dist/lib/testing/scenarios/index.d.ts.map +1 -1
  118. package/dist/lib/testing/scenarios/index.js +8 -1
  119. package/dist/lib/testing/scenarios/index.js.map +1 -1
  120. package/dist/lib/testing/scenarios/media-buy.d.ts +14 -5
  121. package/dist/lib/testing/scenarios/media-buy.d.ts.map +1 -1
  122. package/dist/lib/testing/scenarios/media-buy.js +358 -63
  123. package/dist/lib/testing/scenarios/media-buy.js.map +1 -1
  124. package/dist/lib/testing/scenarios/schema-compliance.d.ts.map +1 -1
  125. package/dist/lib/testing/scenarios/schema-compliance.js +26 -22
  126. package/dist/lib/testing/scenarios/schema-compliance.js.map +1 -1
  127. package/dist/lib/testing/scenarios/signals.d.ts +4 -8
  128. package/dist/lib/testing/scenarios/signals.d.ts.map +1 -1
  129. package/dist/lib/testing/scenarios/signals.js +17 -59
  130. package/dist/lib/testing/scenarios/signals.js.map +1 -1
  131. package/dist/lib/testing/scenarios/sponsored-intelligence.d.ts.map +1 -1
  132. package/dist/lib/testing/scenarios/sponsored-intelligence.js +23 -19
  133. package/dist/lib/testing/scenarios/sponsored-intelligence.js.map +1 -1
  134. package/dist/lib/testing/types.d.ts +3 -2
  135. package/dist/lib/testing/types.d.ts.map +1 -1
  136. package/dist/lib/types/core.generated.d.ts +629 -5
  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/schemas.generated.d.ts +13059 -11101
  140. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  141. package/dist/lib/types/schemas.generated.js +573 -107
  142. package/dist/lib/types/schemas.generated.js.map +1 -1
  143. package/dist/lib/types/tools.generated.d.ts +1827 -360
  144. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  145. package/dist/lib/utils/capabilities.d.ts +17 -2
  146. package/dist/lib/utils/capabilities.d.ts.map +1 -1
  147. package/dist/lib/utils/capabilities.js +26 -2
  148. package/dist/lib/utils/capabilities.js.map +1 -1
  149. package/package.json +13 -3
@@ -2,6 +2,10 @@
2
2
  * Brand identifier within the house portfolio. Optional for single-brand domains.
3
3
  */
4
4
  export type BrandID = string;
5
+ /**
6
+ * Authentication schemes for push notification endpoints
7
+ */
8
+ export type AuthenticationScheme = 'Bearer' | 'HMAC-SHA256';
5
9
  /**
6
10
  * Status of a media buy.
7
11
  */
@@ -301,6 +305,29 @@ export interface Account {
301
305
  * How the seller scoped this account. operator: shared across all brands for this operator. brand: shared across all operators for this brand. operator_brand: dedicated to a specific operator+brand combination. agent: the agent's default account with no brand or operator association.
302
306
  */
303
307
  account_scope?: 'operator' | 'brand' | 'operator_brand' | 'agent';
308
+ /**
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).
310
+ */
311
+ governance_agents?: {
312
+ /**
313
+ * Governance agent endpoint URL.
314
+ */
315
+ 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
+ /**
327
+ * Governance categories this agent handles (e.g., ['budget_authority', 'strategic_alignment']). When omitted, the agent handles all categories.
328
+ */
329
+ categories?: string[];
330
+ }[];
304
331
  /**
305
332
  * When true, this is a sandbox account — no real platform calls, no real spend. For explicit accounts (require_operator_auth: true), sandbox accounts are pre-existing test accounts on the platform discovered via list_accounts. For implicit accounts, sandbox is part of the natural key: the same brand/operator pair can have both a production and sandbox account.
306
333
  */
@@ -1653,11 +1680,15 @@ export type PropertyTag = string;
1653
1680
  /**
1654
1681
  * Standardized advertising media channels describing how buyers allocate budget. Channels are planning abstractions, not technical substrates. See the Media Channel Taxonomy specification for detailed definitions.
1655
1682
  */
1656
- export type MediaChannel = 'display' | 'olv' | 'social' | 'search' | 'ctv' | 'linear_tv' | 'radio' | 'streaming_audio' | 'podcast' | 'dooh' | 'ooh' | 'print' | 'cinema' | 'email' | 'gaming' | 'retail_media' | 'influencer' | 'affiliate' | 'product_placement';
1683
+ export type MediaChannel = 'display' | 'olv' | 'social' | 'search' | 'ctv' | 'linear_tv' | 'radio' | 'streaming_audio' | 'podcast' | 'dooh' | 'ooh' | 'print' | 'cinema' | 'email' | 'gaming' | 'retail_media' | 'influencer' | 'affiliate' | 'product_placement' | 'sponsored_intelligence';
1657
1684
  /**
1658
1685
  * Type of inventory delivery
1659
1686
  */
1660
1687
  export type DeliveryType = 'guaranteed' | 'non_guaranteed';
1688
+ /**
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.
1690
+ */
1691
+ export type Exclusivity = 'none' | 'category' | 'exclusive';
1661
1692
  /**
1662
1693
  * 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.
1663
1694
  */
@@ -1733,6 +1764,22 @@ export type DataProviderSignalSelector = {
1733
1764
  * Where the conversion event originated
1734
1765
  */
1735
1766
  export type ActionSource = 'website' | 'app' | 'offline' | 'phone_call' | 'chat' | 'email' | 'in_store' | 'system_generated' | 'other';
1767
+ /**
1768
+ * Lifecycle status of the episode
1769
+ */
1770
+ export type EpisodeStatus = 'scheduled' | 'tentative' | 'live' | 'postponed' | 'cancelled' | 'aired' | 'published';
1771
+ /**
1772
+ * Rating system used
1773
+ */
1774
+ export type ContentRatingSystem = 'tv_parental' | 'mpaa' | 'podcast' | 'esrb' | 'bbfc' | 'fsk' | 'acb' | 'custom';
1775
+ /**
1776
+ * Role of this person on the show or episode
1777
+ */
1778
+ export type TalentRole = 'host' | 'guest' | 'creator' | 'cast' | 'narrator' | 'producer' | 'correspondent';
1779
+ /**
1780
+ * What kind of derivative content this is
1781
+ */
1782
+ export type DerivativeType = 'clip' | 'highlight' | 'recap' | 'trailer' | 'bonus';
1736
1783
  /**
1737
1784
  * Represents available advertising inventory
1738
1785
  */
@@ -1766,6 +1813,7 @@ export interface Product {
1766
1813
  */
1767
1814
  placements?: Placement[];
1768
1815
  delivery_type: DeliveryType;
1816
+ exclusivity?: Exclusivity;
1769
1817
  /**
1770
1818
  * Available pricing models for this product
1771
1819
  */
@@ -1773,9 +1821,9 @@ export interface Product {
1773
1821
  forecast?: DeliveryForecast;
1774
1822
  outcome_measurement?: OutcomeMeasurement;
1775
1823
  /**
1776
- * Measurement provider and methodology for delivery metrics. The buyer accepts the declared provider as the source of truth for the buy. REQUIRED for all products.
1824
+ * Measurement provider and methodology for delivery metrics. The buyer accepts the declared provider as the source of truth for the buy. When absent, buyers should apply their own measurement defaults.
1777
1825
  */
1778
- delivery_measurement: {
1826
+ delivery_measurement?: {
1779
1827
  /**
1780
1828
  * Measurement provider(s) used for this product (e.g., 'Google Ad Manager with IAS viewability', 'Nielsen DAR', 'Geopath for DOOH impressions')
1781
1829
  */
@@ -1898,6 +1946,18 @@ export interface Product {
1898
1946
  */
1899
1947
  manifest: {};
1900
1948
  };
1949
+ /**
1950
+ * References to shows in the response's top-level shows array. When present, the product covers inventory associated with these shows. A product can span multiple shows (e.g., a podcast network bundle).
1951
+ */
1952
+ show_ids?: string[];
1953
+ /**
1954
+ * Specific episodes included in this product. Each episode references its parent show via show_id when the product spans multiple shows. When absent with show_ids present, the product covers the shows broadly (run-of-show).
1955
+ */
1956
+ episodes?: Episode[];
1957
+ /**
1958
+ * Registry policy IDs the seller enforces for this product. Enforcement level comes from the policy registry. Buyers can filter products by required policies.
1959
+ */
1960
+ enforced_policies?: string[];
1901
1961
  ext?: ExtensionObject;
1902
1962
  }
1903
1963
  /**
@@ -2509,6 +2569,118 @@ export interface CreativePolicy {
2509
2569
  */
2510
2570
  provenance_required?: boolean;
2511
2571
  }
2572
+ /**
2573
+ * 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.
2574
+ */
2575
+ export interface Episode {
2576
+ /**
2577
+ * Unique identifier for this episode within the show
2578
+ */
2579
+ episode_id: string;
2580
+ /**
2581
+ * Parent show reference. Required when the product spans multiple shows (has multiple entries in show_ids on the product).
2582
+ */
2583
+ show_id?: string;
2584
+ /**
2585
+ * Episode title
2586
+ */
2587
+ name?: string;
2588
+ /**
2589
+ * Season identifier (e.g., '1', '2024', 'spring_2026')
2590
+ */
2591
+ season?: string;
2592
+ /**
2593
+ * Episode number within the season (e.g., '3', '47')
2594
+ */
2595
+ episode_number?: string;
2596
+ /**
2597
+ * When the episode airs or publishes (ISO 8601)
2598
+ */
2599
+ scheduled_at?: string;
2600
+ status?: EpisodeStatus;
2601
+ /**
2602
+ * Expected duration of the episode in seconds
2603
+ */
2604
+ duration_seconds?: number;
2605
+ /**
2606
+ * Whether the end time is approximate (live events, sports)
2607
+ */
2608
+ flexible_end?: boolean;
2609
+ /**
2610
+ * When this episode data expires and should be re-queried. Agents should re-query before committing budget to products with tentative episodes.
2611
+ */
2612
+ valid_until?: string;
2613
+ content_rating?: ContentRating;
2614
+ /**
2615
+ * 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.
2616
+ */
2617
+ topics?: string[];
2618
+ /**
2619
+ * Episode-specific guests and talent. Additive to the show's recurring talent.
2620
+ */
2621
+ guest_talent?: Talent[];
2622
+ ad_inventory?: AdInventoryConfiguration;
2623
+ /**
2624
+ * 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.
2625
+ */
2626
+ derivative_of?: {
2627
+ /**
2628
+ * The source episode this content is derived from
2629
+ */
2630
+ episode_id: string;
2631
+ type: DerivativeType;
2632
+ };
2633
+ ext?: ExtensionObject;
2634
+ }
2635
+ /**
2636
+ * Episode-specific content rating. Overrides the show's baseline content_rating when present.
2637
+ */
2638
+ export interface ContentRating {
2639
+ system: ContentRatingSystem;
2640
+ /**
2641
+ * Rating value within the system (e.g., 'TV-PG', 'R', 'explicit')
2642
+ */
2643
+ rating: string;
2644
+ }
2645
+ /**
2646
+ * A person associated with a show or episode, with an optional link to their brand.json identity
2647
+ */
2648
+ export interface Talent {
2649
+ role: TalentRole;
2650
+ /**
2651
+ * Person's name as credited on the show
2652
+ */
2653
+ name: string;
2654
+ /**
2655
+ * URL to this person's brand.json entry. Enables buyer agents to evaluate the talent's brand identity and associations.
2656
+ */
2657
+ brand_url?: string;
2658
+ }
2659
+ /**
2660
+ * Break-based ad inventory for this episode. For non-break formats (host reads, integrations), use product placements.
2661
+ */
2662
+ export interface AdInventoryConfiguration {
2663
+ /**
2664
+ * Number of planned ad breaks in the episode
2665
+ */
2666
+ expected_breaks: number;
2667
+ /**
2668
+ * Total seconds of ad time across all breaks
2669
+ */
2670
+ total_ad_seconds?: number;
2671
+ /**
2672
+ * Maximum duration in seconds for a single ad within a break. Buyers need this to know whether their creative fits.
2673
+ */
2674
+ max_ad_duration_seconds?: number;
2675
+ /**
2676
+ * Whether ad breaks are dynamic and driven by live conditions (sports timeouts, election coverage). When false, all breaks are pre-defined.
2677
+ */
2678
+ unplanned_breaks?: boolean;
2679
+ /**
2680
+ * Ad format types supported in breaks (e.g., 'video', 'audio', 'display')
2681
+ */
2682
+ supported_formats?: string[];
2683
+ }
2512
2684
  /**
2513
2685
  * Type of advertising property
2514
2686
  */
@@ -2553,11 +2725,11 @@ export interface Property {
2553
2725
  /**
2554
2726
  * Type of AdCP operation that triggered this webhook. Enables webhook handlers to route to appropriate processing logic.
2555
2727
  */
2556
- export type TaskType = 'create_media_buy' | 'update_media_buy' | 'sync_creatives' | 'activate_signal' | 'get_signals' | 'create_property_list' | 'update_property_list' | 'get_property_list' | 'list_property_lists' | 'delete_property_list' | 'sync_accounts' | 'get_account_financials' | 'get_creative_delivery' | 'sync_event_sources' | 'sync_audiences' | 'sync_catalogs' | 'log_event';
2728
+ export type TaskType = 'create_media_buy' | 'update_media_buy' | 'sync_creatives' | 'activate_signal' | 'get_signals' | 'create_property_list' | 'update_property_list' | 'get_property_list' | 'list_property_lists' | 'delete_property_list' | 'sync_accounts' | 'get_account_financials' | 'get_creative_delivery' | 'sync_event_sources' | 'sync_audiences' | 'sync_catalogs' | 'log_event' | 'get_brand_identity' | 'get_rights' | 'acquire_rights';
2557
2729
  /**
2558
2730
  * AdCP domain this task belongs to. Helps classify the operation type at a high level.
2559
2731
  */
2560
- export type AdCPDomain = 'media-buy' | 'signals' | 'governance' | 'creative';
2732
+ export type AdCPDomain = 'media-buy' | 'signals' | 'governance' | 'creative' | 'brand';
2561
2733
  /**
2562
2734
  * Current task status. Webhooks are triggered for status changes after initial submission.
2563
2735
  */
@@ -2566,6 +2738,26 @@ export type TaskStatus = 'submitted' | 'working' | 'input-required' | 'completed
2566
2738
  * 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.
2567
2739
  */
2568
2740
  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;
2741
+ /**
2742
+ * How frequently the show releases new episodes
2743
+ */
2744
+ export type ShowCadence = 'daily' | 'weekly' | 'seasonal' | 'event' | 'irregular';
2745
+ /**
2746
+ * Lifecycle status of the show
2747
+ */
2748
+ export type ShowStatus = 'active' | 'hiatus' | 'ended' | 'upcoming';
2749
+ /**
2750
+ * Production quality tier. Seller-declared. Maps to OpenRTB content.prodq (professional=1, prosumer=2, ugc=3).
2751
+ */
2752
+ export type ProductionQuality = 'professional' | 'prosumer' | 'ugc';
2753
+ /**
2754
+ * Type of distribution identifier
2755
+ */
2756
+ export type DistributionIdentifierType = 'apple_podcast_id' | 'spotify_show_id' | 'rss_url' | 'podcast_guid' | 'amazon_music_id' | 'iheart_id' | 'podcast_index_id' | 'youtube_channel_id' | 'youtube_playlist_id' | 'amazon_title_id' | 'roku_channel_id' | 'pluto_channel_id' | 'tubi_id' | 'peacock_id' | 'tiktok_id' | 'twitch_channel' | 'imdb_id' | 'gracenote_id' | 'eidr_id' | 'domain' | 'substack_id';
2757
+ /**
2758
+ * How the shows are related
2759
+ */
2760
+ export type ShowRelationship = 'spinoff' | 'companion' | 'sequel' | 'prequel' | 'crossover';
2569
2761
  /**
2570
2762
  * Response for completed or failed create_media_buy
2571
2763
  */
@@ -2578,6 +2770,157 @@ export type UpdateMediaBuyResponse = UpdateMediaBuySuccess | UpdateMediaBuyError
2578
2770
  * Response for completed or failed build_creative
2579
2771
  */
2580
2772
  export type BuildCreativeResponse = BuildCreativeSuccess | BuildCreativeMultiSuccess | BuildCreativeError;
2773
+ /**
2774
+ * Types of rights usage that can be licensed through the brand protocol. Aligned with DDEX UseType direction for interoperability with music and media rights systems.
2775
+ */
2776
+ export type RightUse = 'likeness' | 'voice' | 'name' | 'endorsement' | 'motion_capture' | 'signature' | 'catchphrase' | 'sync' | 'background_music' | 'editorial' | 'commercial';
2777
+ /**
2778
+ * Type of rights (talent, music, etc.). Helps identify constraints when a creative combines multiple rights types.
2779
+ */
2780
+ export type RightType = 'talent' | 'character' | 'brand_ip' | 'music' | 'stock_media';
2781
+ /**
2782
+ * A single rendered piece of a creative preview with discriminated output format
2783
+ */
2784
+ export type PreviewRender = {
2785
+ /**
2786
+ * Unique identifier for this rendered piece within the variant
2787
+ */
2788
+ render_id: string;
2789
+ /**
2790
+ * Discriminator indicating preview_url is provided
2791
+ */
2792
+ output_format: 'url';
2793
+ /**
2794
+ * URL to an HTML page that renders this piece. Can be embedded in an iframe.
2795
+ */
2796
+ preview_url: string;
2797
+ /**
2798
+ * Semantic role of this rendered piece. Use 'primary' for main content, 'companion' for associated banners, descriptive strings for device variants or custom roles.
2799
+ */
2800
+ role: string;
2801
+ /**
2802
+ * Dimensions for this rendered piece
2803
+ */
2804
+ dimensions?: {
2805
+ width: number;
2806
+ height: number;
2807
+ };
2808
+ /**
2809
+ * Optional security and embedding metadata for safe iframe integration
2810
+ */
2811
+ embedding?: {
2812
+ /**
2813
+ * Recommended iframe sandbox attribute value (e.g., 'allow-scripts allow-same-origin')
2814
+ */
2815
+ recommended_sandbox?: string;
2816
+ /**
2817
+ * Whether this output requires HTTPS for secure embedding
2818
+ */
2819
+ requires_https?: boolean;
2820
+ /**
2821
+ * Whether this output supports fullscreen mode
2822
+ */
2823
+ supports_fullscreen?: boolean;
2824
+ /**
2825
+ * Content Security Policy requirements for embedding
2826
+ */
2827
+ csp_policy?: string;
2828
+ };
2829
+ } | {
2830
+ /**
2831
+ * Unique identifier for this rendered piece within the variant
2832
+ */
2833
+ render_id: string;
2834
+ /**
2835
+ * Discriminator indicating preview_html is provided
2836
+ */
2837
+ output_format: 'html';
2838
+ /**
2839
+ * Raw HTML for this rendered piece. Can be embedded directly in the page without iframe. Security warning: Only use with trusted creative agents as this bypasses iframe sandboxing.
2840
+ */
2841
+ preview_html: string;
2842
+ /**
2843
+ * Semantic role of this rendered piece. Use 'primary' for main content, 'companion' for associated banners, descriptive strings for device variants or custom roles.
2844
+ */
2845
+ role: string;
2846
+ /**
2847
+ * Dimensions for this rendered piece
2848
+ */
2849
+ dimensions?: {
2850
+ width: number;
2851
+ height: number;
2852
+ };
2853
+ /**
2854
+ * Optional security and embedding metadata
2855
+ */
2856
+ embedding?: {
2857
+ /**
2858
+ * Recommended iframe sandbox attribute value (e.g., 'allow-scripts allow-same-origin')
2859
+ */
2860
+ recommended_sandbox?: string;
2861
+ /**
2862
+ * Whether this output requires HTTPS for secure embedding
2863
+ */
2864
+ requires_https?: boolean;
2865
+ /**
2866
+ * Whether this output supports fullscreen mode
2867
+ */
2868
+ supports_fullscreen?: boolean;
2869
+ /**
2870
+ * Content Security Policy requirements for embedding
2871
+ */
2872
+ csp_policy?: string;
2873
+ };
2874
+ } | {
2875
+ /**
2876
+ * Unique identifier for this rendered piece within the variant
2877
+ */
2878
+ render_id: string;
2879
+ /**
2880
+ * Discriminator indicating both preview_url and preview_html are provided
2881
+ */
2882
+ output_format: 'both';
2883
+ /**
2884
+ * URL to an HTML page that renders this piece. Can be embedded in an iframe.
2885
+ */
2886
+ preview_url: string;
2887
+ /**
2888
+ * Raw HTML for this rendered piece. Can be embedded directly in the page without iframe. Security warning: Only use with trusted creative agents as this bypasses iframe sandboxing.
2889
+ */
2890
+ preview_html: string;
2891
+ /**
2892
+ * Semantic role of this rendered piece. Use 'primary' for main content, 'companion' for associated banners, descriptive strings for device variants or custom roles.
2893
+ */
2894
+ role: string;
2895
+ /**
2896
+ * Dimensions for this rendered piece
2897
+ */
2898
+ dimensions?: {
2899
+ width: number;
2900
+ height: number;
2901
+ };
2902
+ /**
2903
+ * Optional security and embedding metadata for safe iframe integration
2904
+ */
2905
+ embedding?: {
2906
+ /**
2907
+ * Recommended iframe sandbox attribute value (e.g., 'allow-scripts allow-same-origin')
2908
+ */
2909
+ recommended_sandbox?: string;
2910
+ /**
2911
+ * Whether this output requires HTTPS for secure embedding
2912
+ */
2913
+ requires_https?: boolean;
2914
+ /**
2915
+ * Whether this output supports fullscreen mode
2916
+ */
2917
+ supports_fullscreen?: boolean;
2918
+ /**
2919
+ * Content Security Policy requirements for embedding
2920
+ */
2921
+ csp_policy?: string;
2922
+ };
2923
+ };
2581
2924
  /**
2582
2925
  * Response for completed or failed sync_creatives
2583
2926
  */
@@ -2635,6 +2978,10 @@ export interface GetProductsResponse {
2635
2978
  * Array of matching products
2636
2979
  */
2637
2980
  products: Product[];
2981
+ /**
2982
+ * Shows referenced by products in this response. Only includes shows referenced by the returned products. Under pagination, each page includes all show objects needed for that page's products.
2983
+ */
2984
+ shows?: Show[];
2638
2985
  /**
2639
2986
  * Optional array of proposed media plans with budget allocations across products. Publishers include proposals when they can provide strategic guidance based on the brief. Proposals are actionable - buyers can refine them via follow-up get_products calls within the same session, or execute them directly via create_media_buy.
2640
2987
  */
@@ -2697,6 +3044,81 @@ export interface GetProductsResponse {
2697
3044
  context?: ContextObject;
2698
3045
  ext?: ExtensionObject;
2699
3046
  }
3047
+ /**
3048
+ * A persistent content program that produces episodes over time. Shows are reusable objects that products reference by show_id. The show_id is seller-scoped — use distribution identifiers for cross-seller matching.
3049
+ */
3050
+ export interface Show {
3051
+ /**
3052
+ * Seller-assigned identifier for this show. Unique within a single get_products response but not globally unique across sellers. Use distribution identifiers for cross-seller matching.
3053
+ */
3054
+ show_id: string;
3055
+ /**
3056
+ * Human-readable show name
3057
+ */
3058
+ name: string;
3059
+ /**
3060
+ * What the show is about
3061
+ */
3062
+ description?: string;
3063
+ /**
3064
+ * Genre tags. When genre_taxonomy is present, values are taxonomy IDs (e.g., IAB Content Taxonomy 3.0 codes). Otherwise free-form.
3065
+ */
3066
+ genre?: string[];
3067
+ /**
3068
+ * Taxonomy system for genre values (e.g., 'iab_content_3.0'). When present, genre values should be valid taxonomy IDs. Recommended for machine-readable brand safety evaluation.
3069
+ */
3070
+ genre_taxonomy?: string;
3071
+ /**
3072
+ * Primary language (BCP 47 tag, e.g., 'en', 'es-MX')
3073
+ */
3074
+ language?: string;
3075
+ content_rating?: ContentRating;
3076
+ cadence?: ShowCadence;
3077
+ /**
3078
+ * Current or most recent season identifier (e.g., '3', '2026', 'spring_2026'). A lightweight label — not a full season object.
3079
+ */
3080
+ season?: string;
3081
+ status?: ShowStatus;
3082
+ production_quality?: ProductionQuality;
3083
+ /**
3084
+ * Hosts, recurring cast, creators associated with the show. Each talent entry may include a brand_url linking to their brand.json identity.
3085
+ */
3086
+ talent?: Talent[];
3087
+ /**
3088
+ * Where this show is distributed. Each entry maps the show to a publisher platform with platform-specific identifiers. Shows SHOULD include at least one platform-independent identifier (imdb_id, gracenote_id, eidr_id) when available.
3089
+ */
3090
+ distribution?: ShowDistribution[];
3091
+ /**
3092
+ * Relationships to other shows (spin-offs, companion shows, etc.). Each entry references another show by show_id within the same response.
3093
+ */
3094
+ related_shows?: {
3095
+ /**
3096
+ * The related show's show_id within this seller's response
3097
+ */
3098
+ show_id: string;
3099
+ relationship: ShowRelationship;
3100
+ }[];
3101
+ ext?: ExtensionObject;
3102
+ }
3103
+ /**
3104
+ * A show's presence on a specific publisher platform, identified by platform-specific identifiers. Enables cross-seller matching when the same show is sold by different agents.
3105
+ */
3106
+ export interface ShowDistribution {
3107
+ /**
3108
+ * Domain of the publisher platform where the show is distributed (e.g., 'youtube.com', 'spotify.com')
3109
+ */
3110
+ publisher_domain: string;
3111
+ /**
3112
+ * Platform-specific identifiers for the show on this publisher
3113
+ */
3114
+ identifiers: {
3115
+ type: DistributionIdentifierType;
3116
+ /**
3117
+ * The identifier value
3118
+ */
3119
+ value: string;
3120
+ }[];
3121
+ }
2700
3122
  /**
2701
3123
  * A proposed media plan with budget allocations across products. Represents the publisher's strategic recommendation for how to structure a campaign based on the brief. Proposals are actionable - buyers can execute them directly via create_media_buy by providing the proposal_id.
2702
3124
  */
@@ -2925,6 +3347,7 @@ export interface CreateMediaBuySuccess {
2925
3347
  * Array of created packages with complete state information
2926
3348
  */
2927
3349
  packages: Package[];
3350
+ planned_delivery?: PlannedDelivery;
2928
3351
  /**
2929
3352
  * When true, this response contains simulated data from sandbox mode.
2930
3353
  */
@@ -2932,6 +3355,54 @@ export interface CreateMediaBuySuccess {
2932
3355
  context?: ContextObject;
2933
3356
  ext?: ExtensionObject;
2934
3357
  }
3358
+ /**
3359
+ * The seller's interpreted delivery parameters. Describes what the seller will actually run -- geo, channels, flight dates, frequency caps, and budget. Present when the account has governance_agents or when the seller chooses to provide delivery transparency.
3360
+ */
3361
+ export interface PlannedDelivery {
3362
+ /**
3363
+ * Geographic targeting the seller will apply.
3364
+ */
3365
+ geo?: {
3366
+ /**
3367
+ * ISO 3166-1 alpha-2 country codes where ads will deliver.
3368
+ */
3369
+ countries?: string[];
3370
+ /**
3371
+ * ISO 3166-2 subdivision codes where ads will deliver.
3372
+ */
3373
+ regions?: string[];
3374
+ };
3375
+ /**
3376
+ * Channels the seller will deliver on.
3377
+ */
3378
+ channels?: MediaChannel[];
3379
+ /**
3380
+ * Actual flight start the seller will use.
3381
+ */
3382
+ start_time?: string;
3383
+ /**
3384
+ * Actual flight end the seller will use.
3385
+ */
3386
+ end_time?: string;
3387
+ frequency_cap?: FrequencyCap;
3388
+ /**
3389
+ * Human-readable summary of the audience the seller will target.
3390
+ */
3391
+ audience_summary?: string;
3392
+ /**
3393
+ * Total budget the seller will deliver against.
3394
+ */
3395
+ total_budget?: number;
3396
+ /**
3397
+ * ISO 4217 currency code for the budget.
3398
+ */
3399
+ currency?: string;
3400
+ /**
3401
+ * Registry policy IDs the seller will enforce for this delivery.
3402
+ */
3403
+ enforced_policies?: string[];
3404
+ ext?: ExtensionObject;
3405
+ }
2935
3406
  /**
2936
3407
  * Error response - operation failed, no media buy created
2937
3408
  */
@@ -3080,6 +3551,52 @@ export interface BuildCreativeSuccess {
3080
3551
  * ISO 8601 timestamp when generated asset URLs in the manifest expire. Set to the earliest expiration across all generated assets. Re-build the creative after this time to get fresh URLs.
3081
3552
  */
3082
3553
  expires_at?: string;
3554
+ /**
3555
+ * Preview renders included when the request set include_preview to true and the agent supports it. Contains the same content fields as a preview_creative single response (previews, interactive_url, expires_at) minus the response_type discriminator, so clients can reuse the same preview rendering logic.
3556
+ */
3557
+ preview?: {
3558
+ /**
3559
+ * Array of preview variants. Each preview corresponds to an input set from preview_inputs, or a single default preview if no inputs were provided.
3560
+ */
3561
+ previews: {
3562
+ /**
3563
+ * Unique identifier for this preview variant
3564
+ */
3565
+ preview_id: string;
3566
+ /**
3567
+ * Array of rendered pieces for this preview variant. Most formats render as a single piece. Companion ad formats render as multiple pieces.
3568
+ */
3569
+ renders: PreviewRender[];
3570
+ /**
3571
+ * The input parameters that generated this preview variant. Echoes back the request input or shows defaults used.
3572
+ */
3573
+ input: {
3574
+ /**
3575
+ * Human-readable name for this variant
3576
+ */
3577
+ name: string;
3578
+ /**
3579
+ * Macro values applied to this variant
3580
+ */
3581
+ macros?: {
3582
+ [k: string]: string | undefined;
3583
+ };
3584
+ /**
3585
+ * Context description applied to this variant
3586
+ */
3587
+ context_description?: string;
3588
+ };
3589
+ }[];
3590
+ /**
3591
+ * Optional URL to an interactive testing page that shows all preview variants with controls to switch between them.
3592
+ */
3593
+ interactive_url?: string;
3594
+ /**
3595
+ * ISO 8601 timestamp when preview URLs expire. May differ from the manifest's expires_at.
3596
+ */
3597
+ expires_at: string;
3598
+ };
3599
+ preview_error?: Error;
3083
3600
  context?: ContextObject;
3084
3601
  ext?: ExtensionObject;
3085
3602
  }
@@ -3100,9 +3617,69 @@ export interface CreativeManifest {
3100
3617
  */
3101
3618
  [k: string]: ImageAsset | VideoAsset | AudioAsset | VASTAsset | TextAsset | URLAsset | HTMLAsset | JavaScriptAsset | WebhookAsset | CSSAsset | DAASTAsset | MarkdownAsset | BriefAsset | CatalogAsset;
3102
3619
  };
3620
+ /**
3621
+ * Rights constraints attached to this creative. Each entry represents constraints from a single rights holder. A creative may combine multiple rights constraints (e.g., talent likeness + music license). For v1, rights constraints are informational metadata — the buyer/orchestrator manages creative lifecycle against these terms.
3622
+ */
3623
+ rights?: RightsConstraint[];
3103
3624
  provenance?: Provenance;
3104
3625
  ext?: ExtensionObject;
3105
3626
  }
3627
+ /**
3628
+ * Rights metadata attached to a creative manifest. Each entry represents constraints from a single rights holder. A creative may combine multiple rights constraints (e.g., talent likeness + music license). For v1, rights constraints are informational metadata — the buyer/orchestrator manages creative lifecycle against these terms.
3629
+ */
3630
+ export interface RightsConstraint {
3631
+ /**
3632
+ * Rights grant identifier from the acquire_rights response
3633
+ */
3634
+ rights_id: string;
3635
+ /**
3636
+ * The agent that granted these rights
3637
+ */
3638
+ rights_agent: {
3639
+ /**
3640
+ * MCP endpoint URL of the rights agent
3641
+ */
3642
+ url: string;
3643
+ /**
3644
+ * Agent identifier
3645
+ */
3646
+ id: string;
3647
+ };
3648
+ /**
3649
+ * Start of the rights validity period
3650
+ */
3651
+ valid_from?: string;
3652
+ /**
3653
+ * End of the rights validity period. Creative should not be served after this time.
3654
+ */
3655
+ valid_until?: string;
3656
+ /**
3657
+ * Rights uses covered by this constraint
3658
+ */
3659
+ uses: RightUse[];
3660
+ /**
3661
+ * Countries where this creative may be served under these rights (ISO 3166-1 alpha-2). If omitted, no country restriction. When both countries and excluded_countries are present, the effective set is countries minus excluded_countries.
3662
+ */
3663
+ countries?: string[];
3664
+ /**
3665
+ * Countries excluded from rights availability (ISO 3166-1 alpha-2). Use when the grant is worldwide except specific markets.
3666
+ */
3667
+ excluded_countries?: string[];
3668
+ /**
3669
+ * Maximum total impressions allowed for the full validity period (valid_from to valid_until). This is the absolute cap across all creatives using this rights grant, not a per-creative or per-period limit.
3670
+ */
3671
+ impression_cap?: number;
3672
+ right_type?: RightType;
3673
+ /**
3674
+ * Approval status from the rights holder at manifest creation time (snapshot, not a live value)
3675
+ */
3676
+ approval_status?: 'pending' | 'approved' | 'rejected';
3677
+ /**
3678
+ * URL where downstream supply chain participants can verify this rights grant is active. Returns HTTP 200 with the current grant status, or 404 if revoked. Enables SSPs and verification vendors to confirm rights before serving.
3679
+ */
3680
+ verification_url?: string;
3681
+ ext?: ExtensionObject;
3682
+ }
3106
3683
  /**
3107
3684
  * Multi-format success response. Returned when the request used target_format_ids. Contains one manifest per requested format. Multi-format requests are atomic — all formats must succeed or the entire request fails with an error response. Array order corresponds to the target_format_ids request order.
3108
3685
  */
@@ -3119,6 +3696,53 @@ export interface BuildCreativeMultiSuccess {
3119
3696
  * ISO 8601 timestamp when the earliest generated asset URL expires across all manifests. Re-build after this time to get fresh URLs.
3120
3697
  */
3121
3698
  expires_at?: string;
3699
+ /**
3700
+ * Preview renders included when the request set include_preview to true and the agent supports it. Contains one default preview per requested format. preview_inputs is ignored for multi-format requests.
3701
+ */
3702
+ preview?: {
3703
+ /**
3704
+ * Array of preview entries, one per requested format. Array order matches creative_manifests. Each entry includes a format_id for explicit correlation.
3705
+ */
3706
+ previews: {
3707
+ /**
3708
+ * Unique identifier for this preview
3709
+ */
3710
+ preview_id: string;
3711
+ format_id: FormatID;
3712
+ /**
3713
+ * Array of rendered pieces for this format's preview. Most formats render as a single piece. Companion ad formats render as multiple pieces.
3714
+ */
3715
+ renders: PreviewRender[];
3716
+ /**
3717
+ * The input parameters that generated this preview. For multi-format responses, this is always a default input.
3718
+ */
3719
+ input: {
3720
+ /**
3721
+ * Human-readable name for this preview
3722
+ */
3723
+ name: string;
3724
+ /**
3725
+ * Macro values applied to this preview
3726
+ */
3727
+ macros?: {
3728
+ [k: string]: string | undefined;
3729
+ };
3730
+ /**
3731
+ * Context description applied to this preview
3732
+ */
3733
+ context_description?: string;
3734
+ };
3735
+ }[];
3736
+ /**
3737
+ * Optional URL to an interactive testing page that shows all format previews with controls to switch between them.
3738
+ */
3739
+ interactive_url?: string;
3740
+ /**
3741
+ * ISO 8601 timestamp when preview URLs expire. May differ from the manifest's expires_at.
3742
+ */
3743
+ expires_at: string;
3744
+ };
3745
+ preview_error?: Error;
3122
3746
  context?: ContextObject;
3123
3747
  ext?: ExtensionObject;
3124
3748
  }