@adcp/client 3.7.1 → 3.8.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 (103) hide show
  1. package/bin/adcp.js +42 -3
  2. package/dist/lib/adapters/content-standards-adapter.d.ts +106 -0
  3. package/dist/lib/adapters/content-standards-adapter.d.ts.map +1 -0
  4. package/dist/lib/adapters/content-standards-adapter.js +199 -0
  5. package/dist/lib/adapters/content-standards-adapter.js.map +1 -0
  6. package/dist/lib/adapters/index.d.ts +18 -0
  7. package/dist/lib/adapters/index.d.ts.map +1 -0
  8. package/dist/lib/adapters/index.js +41 -0
  9. package/dist/lib/adapters/index.js.map +1 -0
  10. package/dist/lib/adapters/property-list-adapter.d.ts +123 -0
  11. package/dist/lib/adapters/property-list-adapter.d.ts.map +1 -0
  12. package/dist/lib/adapters/property-list-adapter.js +212 -0
  13. package/dist/lib/adapters/property-list-adapter.js.map +1 -0
  14. package/dist/lib/adapters/proposal-manager.d.ts +142 -0
  15. package/dist/lib/adapters/proposal-manager.d.ts.map +1 -0
  16. package/dist/lib/adapters/proposal-manager.js +184 -0
  17. package/dist/lib/adapters/proposal-manager.js.map +1 -0
  18. package/dist/lib/adapters/si-session-manager.d.ts +161 -0
  19. package/dist/lib/adapters/si-session-manager.d.ts.map +1 -0
  20. package/dist/lib/adapters/si-session-manager.js +320 -0
  21. package/dist/lib/adapters/si-session-manager.js.map +1 -0
  22. package/dist/lib/agents/index.generated.d.ts +109 -33
  23. package/dist/lib/agents/index.generated.d.ts.map +1 -1
  24. package/dist/lib/agents/index.generated.js +162 -36
  25. package/dist/lib/agents/index.generated.js.map +1 -1
  26. package/dist/lib/core/ADCPMultiAgentClient.d.ts +5 -7
  27. package/dist/lib/core/ADCPMultiAgentClient.d.ts.map +1 -1
  28. package/dist/lib/core/ADCPMultiAgentClient.js +47 -35
  29. package/dist/lib/core/ADCPMultiAgentClient.js.map +1 -1
  30. package/dist/lib/core/AgentClient.d.ts +13 -6
  31. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  32. package/dist/lib/core/AgentClient.js +23 -13
  33. package/dist/lib/core/AgentClient.js.map +1 -1
  34. package/dist/lib/core/AsyncHandler.d.ts +1 -2
  35. package/dist/lib/core/AsyncHandler.d.ts.map +1 -1
  36. package/dist/lib/core/AsyncHandler.js +0 -3
  37. package/dist/lib/core/AsyncHandler.js.map +1 -1
  38. package/dist/lib/core/ResponseValidator.d.ts.map +1 -1
  39. package/dist/lib/core/ResponseValidator.js +0 -1
  40. package/dist/lib/core/ResponseValidator.js.map +1 -1
  41. package/dist/lib/core/SingleAgentClient.d.ts +102 -10
  42. package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
  43. package/dist/lib/core/SingleAgentClient.js +244 -17
  44. package/dist/lib/core/SingleAgentClient.js.map +1 -1
  45. package/dist/lib/discovery/property-crawler.d.ts +13 -2
  46. package/dist/lib/discovery/property-crawler.d.ts.map +1 -1
  47. package/dist/lib/discovery/property-crawler.js +48 -13
  48. package/dist/lib/discovery/property-crawler.js.map +1 -1
  49. package/dist/lib/discovery/types.d.ts +7 -1
  50. package/dist/lib/discovery/types.d.ts.map +1 -1
  51. package/dist/lib/index.d.ts +13 -4
  52. package/dist/lib/index.d.ts.map +1 -1
  53. package/dist/lib/index.js +79 -5
  54. package/dist/lib/index.js.map +1 -1
  55. package/dist/lib/types/core.generated.d.ts +502 -238
  56. package/dist/lib/types/core.generated.d.ts.map +1 -1
  57. package/dist/lib/types/core.generated.js +2 -2
  58. package/dist/lib/types/core.generated.js.map +1 -1
  59. package/dist/lib/types/schemas.generated.d.ts +7237 -2284
  60. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  61. package/dist/lib/types/schemas.generated.js +1368 -461
  62. package/dist/lib/types/schemas.generated.js.map +1 -1
  63. package/dist/lib/types/tools.generated.d.ts +3128 -507
  64. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  65. package/dist/lib/types/tools.generated.js +1 -1
  66. package/dist/lib/types/tools.generated.js.map +1 -1
  67. package/dist/lib/utils/capabilities.d.ts +98 -0
  68. package/dist/lib/utils/capabilities.d.ts.map +1 -0
  69. package/dist/lib/utils/capabilities.js +155 -0
  70. package/dist/lib/utils/capabilities.js.map +1 -0
  71. package/dist/lib/utils/creative-adapter.d.ts +87 -0
  72. package/dist/lib/utils/creative-adapter.d.ts.map +1 -0
  73. package/dist/lib/utils/creative-adapter.js +125 -0
  74. package/dist/lib/utils/creative-adapter.js.map +1 -0
  75. package/dist/lib/utils/format-assets.d.ts +4 -16
  76. package/dist/lib/utils/format-assets.d.ts.map +1 -1
  77. package/dist/lib/utils/format-assets.js +16 -14
  78. package/dist/lib/utils/format-assets.js.map +1 -1
  79. package/dist/lib/utils/format-renders.d.ts +82 -0
  80. package/dist/lib/utils/format-renders.d.ts.map +1 -0
  81. package/dist/lib/utils/format-renders.js +137 -0
  82. package/dist/lib/utils/format-renders.js.map +1 -0
  83. package/dist/lib/utils/index.d.ts +2 -1
  84. package/dist/lib/utils/index.d.ts.map +1 -1
  85. package/dist/lib/utils/index.js +13 -3
  86. package/dist/lib/utils/index.js.map +1 -1
  87. package/dist/lib/utils/preview-normalizer.d.ts +109 -0
  88. package/dist/lib/utils/preview-normalizer.d.ts.map +1 -0
  89. package/dist/lib/utils/preview-normalizer.js +122 -0
  90. package/dist/lib/utils/preview-normalizer.js.map +1 -0
  91. package/dist/lib/utils/pricing-adapter.d.ts +121 -0
  92. package/dist/lib/utils/pricing-adapter.d.ts.map +1 -0
  93. package/dist/lib/utils/pricing-adapter.js +213 -0
  94. package/dist/lib/utils/pricing-adapter.js.map +1 -0
  95. package/dist/lib/utils/response-unwrapper.d.ts +2 -2
  96. package/dist/lib/utils/response-unwrapper.d.ts.map +1 -1
  97. package/dist/lib/utils/response-unwrapper.js +2 -2
  98. package/dist/lib/utils/response-unwrapper.js.map +1 -1
  99. package/dist/lib/version.d.ts +15 -7
  100. package/dist/lib/version.d.ts.map +1 -1
  101. package/dist/lib/version.js +20 -11
  102. package/dist/lib/version.js.map +1 -1
  103. package/package.json +3 -3
@@ -15,17 +15,29 @@ export type DeliveryType = 'guaranteed' | 'non_guaranteed';
15
15
  */
16
16
  export type FormatCategory = 'audio' | 'video' | 'display' | 'native' | 'dooh' | 'rich_media' | 'universal';
17
17
  /**
18
- * Standard advertising channels supported by AdCP
18
+ * Metro classification system
19
19
  */
20
- export type AdvertisingChannels = 'display' | 'video' | 'audio' | 'native' | 'dooh' | 'ctv' | 'podcast' | 'retail' | 'social';
20
+ export type MetroAreaSystem = 'nielsen_dma' | 'uk_itl1' | 'uk_itl2' | 'eurostat_nuts2' | 'custom';
21
+ /**
22
+ * 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.
23
+ */
24
+ 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';
25
+ /**
26
+ * Geographic targeting level (country, region, metro, postal_area)
27
+ */
28
+ export type GeographicTargetingLevel = 'country' | 'region' | 'metro' | 'postal_area';
21
29
  /**
22
30
  * Request parameters for discovering available advertising products
23
31
  */
24
32
  export interface GetProductsRequest {
25
33
  /**
26
- * Natural language description of campaign requirements
34
+ * Natural language description of campaign requirements. When refining a proposal, can include instructions like 'focus more on German speakers' or 'increase mobile allocation'.
27
35
  */
28
36
  brief?: string;
37
+ /**
38
+ * Optional proposal ID to refine. When provided with a brief, the publisher will use the brief as refinement instructions for the specified proposal and return an updated version.
39
+ */
40
+ proposal_id?: string;
29
41
  brand_manifest?: BrandManifestReference;
30
42
  filters?: ProductFilters;
31
43
  property_list?: PropertyListReference;
@@ -40,6 +52,10 @@ export interface BrandManifest {
40
52
  * Primary brand URL for context and asset discovery. Creative agents can infer brand information from this URL.
41
53
  */
42
54
  url?: string;
55
+ /**
56
+ * URL to the brand's privacy policy. Used for consumer consent flows when personal data may be shared with the advertiser. AI platforms can use this to present explicit privacy choices to users before data handoff.
57
+ */
58
+ privacy_policy_url?: string;
43
59
  /**
44
60
  * Brand or business name
45
61
  */
@@ -111,6 +127,44 @@ export interface BrandManifest {
111
127
  * Brand voice and messaging tone (e.g., 'professional', 'casual', 'humorous', 'trustworthy', 'innovative')
112
128
  */
113
129
  tone?: string;
130
+ /**
131
+ * Brand voice configuration for audio/conversational experiences
132
+ */
133
+ voice?: {
134
+ /**
135
+ * TTS provider (e.g., 'elevenlabs', 'openai', 'amazon_polly')
136
+ */
137
+ provider?: string;
138
+ /**
139
+ * Provider-specific voice identifier
140
+ */
141
+ voice_id?: string;
142
+ /**
143
+ * Provider-specific voice settings (speed, pitch, etc.)
144
+ */
145
+ settings?: {
146
+ [k: string]: unknown | undefined;
147
+ };
148
+ };
149
+ /**
150
+ * Brand avatar configuration for visual conversational experiences
151
+ */
152
+ avatar?: {
153
+ /**
154
+ * Avatar provider (e.g., 'd-id', 'heygen', 'synthesia')
155
+ */
156
+ provider?: string;
157
+ /**
158
+ * Provider-specific avatar identifier
159
+ */
160
+ avatar_id?: string;
161
+ /**
162
+ * Provider-specific avatar settings
163
+ */
164
+ settings?: {
165
+ [k: string]: unknown | undefined;
166
+ };
167
+ };
114
168
  /**
115
169
  * Brand tagline or slogan
116
170
  */
@@ -164,9 +218,9 @@ export interface BrandManifest {
164
218
  * Additional asset-specific metadata
165
219
  */
166
220
  metadata?: {
167
- [k: string]: unknown;
221
+ [k: string]: unknown | undefined;
168
222
  };
169
- [k: string]: unknown;
223
+ [k: string]: unknown | undefined;
170
224
  }[];
171
225
  /**
172
226
  * Product catalog information for e-commerce advertisers. Enables SKU-level creative generation and product selection.
@@ -177,9 +231,9 @@ export interface BrandManifest {
177
231
  */
178
232
  feed_url: string;
179
233
  /**
180
- * Format of the product feed
234
+ * Format of the product feed. Use 'openai_product_feed' for feeds conforming to the OpenAI Commerce Product Feed specification.
181
235
  */
182
- feed_format?: 'google_merchant_center' | 'facebook_catalog' | 'custom';
236
+ feed_format?: 'google_merchant_center' | 'facebook_catalog' | 'openai_product_feed' | 'custom';
183
237
  /**
184
238
  * Product categories available in the catalog (for filtering)
185
239
  */
@@ -192,7 +246,24 @@ export interface BrandManifest {
192
246
  * How frequently the product catalog is updated
193
247
  */
194
248
  update_frequency?: 'realtime' | 'hourly' | 'daily' | 'weekly';
195
- [k: string]: unknown;
249
+ /**
250
+ * Agentic checkout endpoint configuration. Enables AI agents to complete purchases on behalf of users through a structured checkout API.
251
+ */
252
+ agentic_checkout?: {
253
+ /**
254
+ * Base URL for checkout session API (e.g., https://merchant.com/api/checkout_sessions)
255
+ */
256
+ endpoint: string;
257
+ /**
258
+ * Checkout API specification implemented by the endpoint
259
+ */
260
+ spec: 'openai_agentic_checkout_v1';
261
+ /**
262
+ * Payment providers supported by this checkout endpoint
263
+ */
264
+ supported_payment_providers?: string[];
265
+ };
266
+ [k: string]: unknown | undefined;
196
267
  };
197
268
  /**
198
269
  * Legal disclaimers or required text that must appear in creatives
@@ -249,7 +320,7 @@ export interface BrandManifest {
249
320
  */
250
321
  version?: string;
251
322
  };
252
- [k: string]: unknown;
323
+ [k: string]: unknown | undefined;
253
324
  }
254
325
  /**
255
326
  * Structured filters for product discovery
@@ -257,7 +328,7 @@ export interface BrandManifest {
257
328
  export interface ProductFilters {
258
329
  delivery_type?: DeliveryType;
259
330
  /**
260
- * Filter for fixed price vs auction products
331
+ * Filter by pricing availability: true = products offering fixed pricing (at least one option with fixed_price), false = products offering auction pricing (at least one option without fixed_price). Products with both fixed and auction options match both true and false.
261
332
  */
262
333
  is_fixed_price?: boolean;
263
334
  /**
@@ -288,17 +359,46 @@ export interface ProductFilters {
288
359
  * Budget range to filter appropriate products
289
360
  */
290
361
  budget_range?: {
291
- [k: string]: unknown;
362
+ [k: string]: unknown | undefined;
292
363
  };
293
364
  /**
294
- * Filter by target countries using ISO 3166-1 alpha-2 country codes (e.g., ['US', 'CA', 'GB'])
365
+ * Filter by country coverage using ISO 3166-1 alpha-2 codes (e.g., ['US', 'CA', 'GB']). Works for all inventory types.
295
366
  */
296
367
  countries?: string[];
368
+ /**
369
+ * Filter by region coverage using ISO 3166-2 codes (e.g., ['US-NY', 'US-CA', 'GB-SCT']). Use for locally-bound inventory (regional OOH, local TV) where products have region-specific coverage.
370
+ */
371
+ regions?: string[];
372
+ /**
373
+ * Filter by metro coverage for locally-bound inventory (radio, DOOH, local TV). Use when products have DMA/metro-specific coverage. For digital inventory where products have broad coverage, use required_geo_targeting instead to filter by seller capability.
374
+ */
375
+ metros?: {
376
+ system: MetroAreaSystem;
377
+ /**
378
+ * Metro code within the system (e.g., '501' for NYC DMA)
379
+ */
380
+ code: string;
381
+ }[];
297
382
  /**
298
383
  * Filter by advertising channels (e.g., ['display', 'video', 'dooh'])
299
384
  */
300
- channels?: AdvertisingChannels[];
301
- [k: string]: unknown;
385
+ channels?: MediaChannel[];
386
+ /**
387
+ * Filter to products executable through specific agentic ad exchanges. URLs are canonical identifiers.
388
+ */
389
+ required_axe_integrations?: string[];
390
+ required_features?: MediaBuyFeatures;
391
+ /**
392
+ * Filter to products from sellers supporting specific geo targeting capabilities. Each entry specifies a targeting level (country, region, metro, postal_area) and optionally a system for levels that have multiple classification systems.
393
+ */
394
+ required_geo_targeting?: {
395
+ level: GeographicTargetingLevel;
396
+ /**
397
+ * Classification system within the level. Required for metro (e.g., 'nielsen_dma') and postal_area (e.g., 'us_zip'). Not applicable for country/region which use ISO standards.
398
+ */
399
+ system?: string;
400
+ }[];
401
+ [k: string]: unknown | undefined;
302
402
  }
303
403
  /**
304
404
  * Structured format identifier with agent URL and format name. Can reference: (1) a concrete format with fixed dimensions (id only), (2) a template format without parameters (id only), or (3) a template format with parameters (id + dimensions/duration). Template formats accept parameters in format_id while concrete formats have fixed dimensions in their definition. Parameterized format IDs create unique, specific format variants.
@@ -324,7 +424,25 @@ export interface FormatID {
324
424
  * Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters.
325
425
  */
326
426
  duration_ms?: number;
327
- [k: string]: unknown;
427
+ [k: string]: unknown | undefined;
428
+ }
429
+ /**
430
+ * Filter to products from sellers supporting specific protocol features. Only features set to true are used for filtering.
431
+ */
432
+ export interface MediaBuyFeatures {
433
+ /**
434
+ * Supports creatives provided inline in create_media_buy requests
435
+ */
436
+ inline_creative_management?: boolean;
437
+ /**
438
+ * Honors property_list parameter in get_products to filter results to buyer-approved properties
439
+ */
440
+ property_list_filtering?: boolean;
441
+ /**
442
+ * Full support for content_standards configuration including sampling rates and category filtering
443
+ */
444
+ content_standards?: boolean;
445
+ [k: string]: boolean | undefined;
328
446
  }
329
447
  /**
330
448
  * [AdCP 3.0] Reference to an externally managed property list. When provided, the sales agent should filter products to only those available on properties in the list.
@@ -347,13 +465,13 @@ export interface PropertyListReference {
347
465
  * 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.
348
466
  */
349
467
  export interface ContextObject {
350
- [k: string]: unknown;
468
+ [k: string]: unknown | undefined;
351
469
  }
352
470
  /**
353
471
  * 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.
354
472
  */
355
473
  export interface ExtensionObject {
356
- [k: string]: unknown;
474
+ [k: string]: unknown | undefined;
357
475
  }
358
476
  /**
359
477
  * Selects properties from a publisher's adagents.json. Used for both product definitions and agent authorization. Supports three selection patterns: all properties, specific IDs, or by tags.
@@ -367,7 +485,7 @@ export type PublisherPropertySelector = {
367
485
  * Discriminator indicating all properties from this publisher are included
368
486
  */
369
487
  selection_type: 'all';
370
- [k: string]: unknown;
488
+ [k: string]: unknown | undefined;
371
489
  } | {
372
490
  /**
373
491
  * Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')
@@ -383,7 +501,7 @@ export type PublisherPropertySelector = {
383
501
  * @minItems 1
384
502
  */
385
503
  property_ids: [PropertyID, ...PropertyID[]];
386
- [k: string]: unknown;
504
+ [k: string]: unknown | undefined;
387
505
  } | {
388
506
  /**
389
507
  * Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')
@@ -399,7 +517,7 @@ export type PublisherPropertySelector = {
399
517
  * @minItems 1
400
518
  */
401
519
  property_tags: [PropertyTag, ...PropertyTag[]];
402
- [k: string]: unknown;
520
+ [k: string]: unknown | undefined;
403
521
  };
404
522
  /**
405
523
  * Identifier for a publisher property. Must be lowercase alphanumeric with underscores only.
@@ -412,7 +530,7 @@ export type PropertyTag = string;
412
530
  /**
413
531
  * Type of inventory delivery
414
532
  */
415
- export type PricingOption = CPMFixedRatePricingOption | CPMAuctionPricingOption | VCPMFixedRatePricingOption | VCPMAuctionPricingOption | CPCPricingOption | CPCVPricingOption | CPVPricingOption | CPPPricingOption | FlatRatePricingOption;
533
+ export type PricingOption = CPMPricingOption | VCPMPricingOption | CPCPricingOption | CPCVPricingOption | CPVPricingOption | CPPPricingOption | FlatRatePricingOption;
416
534
  /**
417
535
  * Available frequencies for delivery reports and metrics updates
418
536
  */
@@ -437,6 +555,10 @@ export interface GetProductsResponse {
437
555
  * Array of matching products
438
556
  */
439
557
  products: Product[];
558
+ /**
559
+ * 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 subsequent get_products calls or execute them directly via create_media_buy.
560
+ */
561
+ proposals?: Proposal[];
440
562
  /**
441
563
  * Task-specific errors and warnings (e.g., product filtering issues)
442
564
  */
@@ -528,9 +650,9 @@ export interface Product {
528
650
  * Asset manifest for rendering the card, structure defined by the format
529
651
  */
530
652
  manifest: {
531
- [k: string]: unknown;
653
+ [k: string]: unknown | undefined;
532
654
  };
533
- [k: string]: unknown;
655
+ [k: string]: unknown | undefined;
534
656
  };
535
657
  /**
536
658
  * Optional detailed card with carousel and full specifications. Provides rich product presentation similar to media kit pages.
@@ -541,12 +663,12 @@ export interface Product {
541
663
  * Asset manifest for rendering the detailed card, structure defined by the format
542
664
  */
543
665
  manifest: {
544
- [k: string]: unknown;
666
+ [k: string]: unknown | undefined;
545
667
  };
546
- [k: string]: unknown;
668
+ [k: string]: unknown | undefined;
547
669
  };
548
670
  ext?: ExtensionObject;
549
- [k: string]: unknown;
671
+ [k: string]: unknown | undefined;
550
672
  }
551
673
  /**
552
674
  * Structured format identifier with agent URL and format name. Can reference: (1) a concrete format with fixed dimensions (id only), (2) a template format without parameters (id only), or (3) a template format with parameters (id + dimensions/duration). Template formats accept parameters in format_id while concrete formats have fixed dimensions in their definition. Parameterized format IDs create unique, specific format variants.
@@ -570,66 +692,36 @@ export interface Placement {
570
692
  * @minItems 1
571
693
  */
572
694
  format_ids?: [FormatID, ...FormatID[]];
573
- [k: string]: unknown;
695
+ [k: string]: unknown | undefined;
574
696
  }
575
697
  /**
576
- * Cost Per Mille (cost per 1,000 impressions) with guaranteed fixed rate - common for direct/guaranteed deals
698
+ * Cost Per Mille (cost per 1,000 impressions) pricing. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
577
699
  */
578
- export interface CPMFixedRatePricingOption {
700
+ export interface CPMPricingOption {
579
701
  /**
580
- * Unique identifier for this pricing option within the product (e.g., 'cpm_usd_guaranteed')
702
+ * Unique identifier for this pricing option within the product
581
703
  */
582
704
  pricing_option_id: string;
583
705
  /**
584
706
  * Cost per 1,000 impressions
585
707
  */
586
708
  pricing_model: 'cpm';
587
- /**
588
- * Fixed CPM rate (cost per 1,000 impressions)
589
- */
590
- rate: number;
591
709
  /**
592
710
  * ISO 4217 currency code
593
711
  */
594
712
  currency: string;
595
713
  /**
596
- * Whether this is a fixed rate (true) or auction-based (false)
714
+ * Fixed price per unit. If present, this is fixed pricing. If absent, auction-based.
597
715
  */
598
- is_fixed: true;
716
+ fixed_price?: number;
599
717
  /**
600
- * Minimum spend requirement per package using this pricing option, in the specified currency
601
- */
602
- min_spend_per_package?: number;
603
- [k: string]: unknown;
604
- }
605
- /**
606
- * Cost Per Mille (cost per 1,000 impressions) with auction-based pricing - common for programmatic/non-guaranteed inventory
607
- */
608
- export interface CPMAuctionPricingOption {
609
- /**
610
- * Unique identifier for this pricing option within the product (e.g., 'cpm_usd_auction')
611
- */
612
- pricing_option_id: string;
613
- /**
614
- * Cost per 1,000 impressions
615
- */
616
- pricing_model: 'cpm';
617
- /**
618
- * ISO 4217 currency code
619
- */
620
- currency: string;
621
- /**
622
- * Whether this is a fixed rate (true) or auction-based (false)
718
+ * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
623
719
  */
624
- is_fixed: false;
720
+ floor_price?: number;
625
721
  /**
626
- * Pricing guidance for auction-based CPM bidding
722
+ * Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.
627
723
  */
628
- price_guidance: {
629
- /**
630
- * Minimum bid price - publisher will reject bids under this value
631
- */
632
- floor: number;
724
+ price_guidance?: {
633
725
  /**
634
726
  * 25th percentile winning price
635
727
  */
@@ -651,66 +743,36 @@ export interface CPMAuctionPricingOption {
651
743
  * Minimum spend requirement per package using this pricing option, in the specified currency
652
744
  */
653
745
  min_spend_per_package?: number;
654
- [k: string]: unknown;
746
+ [k: string]: unknown | undefined;
655
747
  }
656
748
  /**
657
- * Viewable Cost Per Mille (cost per 1,000 viewable impressions) with guaranteed fixed rate - impressions meeting MRC viewability standard (50% pixels in-view for 1 second for display, 2 seconds for video)
749
+ * Viewable Cost Per Mille (cost per 1,000 viewable impressions) pricing - MRC viewability standard. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
658
750
  */
659
- export interface VCPMFixedRatePricingOption {
751
+ export interface VCPMPricingOption {
660
752
  /**
661
- * Unique identifier for this pricing option within the product (e.g., 'vcpm_usd_guaranteed')
753
+ * Unique identifier for this pricing option within the product
662
754
  */
663
755
  pricing_option_id: string;
664
756
  /**
665
757
  * Cost per 1,000 viewable impressions (MRC standard)
666
758
  */
667
759
  pricing_model: 'vcpm';
668
- /**
669
- * Fixed vCPM rate (cost per 1,000 viewable impressions)
670
- */
671
- rate: number;
672
760
  /**
673
761
  * ISO 4217 currency code
674
762
  */
675
763
  currency: string;
676
764
  /**
677
- * Whether this is a fixed rate (true) or auction-based (false)
678
- */
679
- is_fixed: true;
680
- /**
681
- * Minimum spend requirement per package using this pricing option, in the specified currency
682
- */
683
- min_spend_per_package?: number;
684
- [k: string]: unknown;
685
- }
686
- /**
687
- * Viewable Cost Per Mille (cost per 1,000 viewable impressions) with auction-based pricing - impressions meeting MRC viewability standard (50% pixels in-view for 1 second for display, 2 seconds for video)
688
- */
689
- export interface VCPMAuctionPricingOption {
690
- /**
691
- * Unique identifier for this pricing option within the product (e.g., 'vcpm_usd_auction')
692
- */
693
- pricing_option_id: string;
694
- /**
695
- * Cost per 1,000 viewable impressions (MRC standard)
696
- */
697
- pricing_model: 'vcpm';
698
- /**
699
- * ISO 4217 currency code
765
+ * Fixed price per unit. If present, this is fixed pricing. If absent, auction-based.
700
766
  */
701
- currency: string;
767
+ fixed_price?: number;
702
768
  /**
703
- * Whether this is a fixed rate (true) or auction-based (false)
769
+ * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
704
770
  */
705
- is_fixed: false;
771
+ floor_price?: number;
706
772
  /**
707
- * Statistical guidance for auction pricing
773
+ * Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.
708
774
  */
709
- price_guidance: {
710
- /**
711
- * Minimum acceptable bid price
712
- */
713
- floor: number;
775
+ price_guidance?: {
714
776
  /**
715
777
  * 25th percentile of recent winning bids
716
778
  */
@@ -732,218 +794,323 @@ export interface VCPMAuctionPricingOption {
732
794
  * Minimum spend requirement per package using this pricing option, in the specified currency
733
795
  */
734
796
  min_spend_per_package?: number;
735
- [k: string]: unknown;
797
+ [k: string]: unknown | undefined;
736
798
  }
737
799
  /**
738
- * Cost Per Click fixed-rate pricing for performance-driven advertising campaigns
800
+ * Cost Per Click pricing. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
739
801
  */
740
802
  export interface CPCPricingOption {
741
803
  /**
742
- * Unique identifier for this pricing option within the product (e.g., 'cpc_usd_fixed')
804
+ * Unique identifier for this pricing option within the product
743
805
  */
744
806
  pricing_option_id: string;
745
807
  /**
746
808
  * Cost per click
747
809
  */
748
810
  pricing_model: 'cpc';
749
- /**
750
- * Fixed CPC rate (cost per click)
751
- */
752
- rate: number;
753
811
  /**
754
812
  * ISO 4217 currency code
755
813
  */
756
814
  currency: string;
757
815
  /**
758
- * Whether this is a fixed rate (true) or auction-based (false)
816
+ * Fixed price per click. If present, this is fixed pricing. If absent, auction-based.
817
+ */
818
+ fixed_price?: number;
819
+ /**
820
+ * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
821
+ */
822
+ floor_price?: number;
823
+ /**
824
+ * Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.
759
825
  */
760
- is_fixed: true;
826
+ price_guidance?: {
827
+ /**
828
+ * 25th percentile of recent winning bids
829
+ */
830
+ p25?: number;
831
+ /**
832
+ * Median of recent winning bids
833
+ */
834
+ p50?: number;
835
+ /**
836
+ * 75th percentile of recent winning bids
837
+ */
838
+ p75?: number;
839
+ /**
840
+ * 90th percentile of recent winning bids
841
+ */
842
+ p90?: number;
843
+ };
761
844
  /**
762
845
  * Minimum spend requirement per package using this pricing option, in the specified currency
763
846
  */
764
847
  min_spend_per_package?: number;
765
- [k: string]: unknown;
848
+ [k: string]: unknown | undefined;
766
849
  }
767
850
  /**
768
- * Cost Per Completed View (100% video/audio completion) fixed-rate pricing
851
+ * Cost Per Completed View (100% video/audio completion) pricing. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
769
852
  */
770
853
  export interface CPCVPricingOption {
771
854
  /**
772
- * Unique identifier for this pricing option within the product (e.g., 'cpcv_usd_guaranteed')
855
+ * Unique identifier for this pricing option within the product
773
856
  */
774
857
  pricing_option_id: string;
775
858
  /**
776
859
  * Cost per completed view (100% completion)
777
860
  */
778
861
  pricing_model: 'cpcv';
779
- /**
780
- * Fixed CPCV rate (cost per 100% completion)
781
- */
782
- rate: number;
783
862
  /**
784
863
  * ISO 4217 currency code
785
864
  */
786
865
  currency: string;
787
866
  /**
788
- * Whether this is a fixed rate (true) or auction-based (false)
867
+ * Fixed price per completed view. If present, this is fixed pricing. If absent, auction-based.
868
+ */
869
+ fixed_price?: number;
870
+ /**
871
+ * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
872
+ */
873
+ floor_price?: number;
874
+ /**
875
+ * Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.
789
876
  */
790
- is_fixed: true;
877
+ price_guidance?: {
878
+ /**
879
+ * 25th percentile of recent winning bids
880
+ */
881
+ p25?: number;
882
+ /**
883
+ * Median of recent winning bids
884
+ */
885
+ p50?: number;
886
+ /**
887
+ * 75th percentile of recent winning bids
888
+ */
889
+ p75?: number;
890
+ /**
891
+ * 90th percentile of recent winning bids
892
+ */
893
+ p90?: number;
894
+ };
791
895
  /**
792
896
  * Minimum spend requirement per package using this pricing option, in the specified currency
793
897
  */
794
898
  min_spend_per_package?: number;
795
- [k: string]: unknown;
899
+ [k: string]: unknown | undefined;
796
900
  }
797
901
  /**
798
- * Cost Per View (at publisher-defined threshold) fixed-rate pricing for video/audio
902
+ * 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.
799
903
  */
800
904
  export interface CPVPricingOption {
801
905
  /**
802
- * Unique identifier for this pricing option within the product (e.g., 'cpv_usd_50pct')
906
+ * Unique identifier for this pricing option within the product
803
907
  */
804
908
  pricing_option_id: string;
805
909
  /**
806
910
  * Cost per view at threshold
807
911
  */
808
912
  pricing_model: 'cpv';
809
- /**
810
- * Fixed CPV rate (cost per view)
811
- */
812
- rate: number;
813
913
  /**
814
914
  * ISO 4217 currency code
815
915
  */
816
916
  currency: string;
817
917
  /**
818
- * Whether this is a fixed rate (true) or auction-based (false)
918
+ * Fixed price per view. If present, this is fixed pricing. If absent, auction-based.
919
+ */
920
+ fixed_price?: number;
921
+ /**
922
+ * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
819
923
  */
820
- is_fixed: true;
924
+ floor_price?: number;
925
+ /**
926
+ * Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.
927
+ */
928
+ price_guidance?: {
929
+ /**
930
+ * 25th percentile of recent winning bids
931
+ */
932
+ p25?: number;
933
+ /**
934
+ * Median of recent winning bids
935
+ */
936
+ p50?: number;
937
+ /**
938
+ * 75th percentile of recent winning bids
939
+ */
940
+ p75?: number;
941
+ /**
942
+ * 90th percentile of recent winning bids
943
+ */
944
+ p90?: number;
945
+ };
821
946
  /**
822
947
  * CPV-specific parameters defining the view threshold
823
948
  */
824
949
  parameters: {
825
950
  view_threshold: number | {
826
951
  /**
827
- * Seconds of viewing required (e.g., 30 for YouTube-style '30 seconds = view')
952
+ * Seconds of viewing required
828
953
  */
829
954
  duration_seconds: number;
830
- [k: string]: unknown;
955
+ [k: string]: unknown | undefined;
831
956
  };
832
- [k: string]: unknown;
957
+ [k: string]: unknown | undefined;
833
958
  };
834
959
  /**
835
960
  * Minimum spend requirement per package using this pricing option, in the specified currency
836
961
  */
837
962
  min_spend_per_package?: number;
838
- [k: string]: unknown;
963
+ [k: string]: unknown | undefined;
839
964
  }
840
965
  /**
841
- * Cost Per Point (Gross Rating Point) fixed-rate pricing for TV and audio campaigns requiring demographic measurement
966
+ * 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.
842
967
  */
843
968
  export interface CPPPricingOption {
844
969
  /**
845
- * Unique identifier for this pricing option within the product (e.g., 'cpp_usd_p18-49')
970
+ * Unique identifier for this pricing option within the product
846
971
  */
847
972
  pricing_option_id: string;
848
973
  /**
849
974
  * Cost per Gross Rating Point
850
975
  */
851
976
  pricing_model: 'cpp';
852
- /**
853
- * Fixed CPP rate (cost per rating point)
854
- */
855
- rate: number;
856
977
  /**
857
978
  * ISO 4217 currency code
858
979
  */
859
980
  currency: string;
860
981
  /**
861
- * Whether this is a fixed rate (true) or auction-based (false)
982
+ * Fixed price per rating point. If present, this is fixed pricing. If absent, auction-based.
983
+ */
984
+ fixed_price?: number;
985
+ /**
986
+ * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
987
+ */
988
+ floor_price?: number;
989
+ /**
990
+ * Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.
862
991
  */
863
- is_fixed: true;
992
+ price_guidance?: {
993
+ /**
994
+ * 25th percentile of recent winning bids
995
+ */
996
+ p25?: number;
997
+ /**
998
+ * Median of recent winning bids
999
+ */
1000
+ p50?: number;
1001
+ /**
1002
+ * 75th percentile of recent winning bids
1003
+ */
1004
+ p75?: number;
1005
+ /**
1006
+ * 90th percentile of recent winning bids
1007
+ */
1008
+ p90?: number;
1009
+ };
864
1010
  /**
865
- * CPP-specific parameters for demographic targeting and GRP requirements
1011
+ * CPP-specific parameters for demographic targeting
866
1012
  */
867
1013
  parameters: {
868
1014
  /**
869
- * Target demographic in Nielsen format: P/M/W/A/C + age range. Examples: P18-49 (Persons 18-49), M25-54 (Men 25-54), W35+ (Women 35+), A18-34 (Adults 18-34), C2-11 (Children 2-11)
1015
+ * Target demographic in Nielsen format (P18-49, M25-54, W35+, etc.)
870
1016
  */
871
1017
  demographic: string;
872
1018
  /**
873
- * Minimum GRPs/TRPs required for this pricing option
1019
+ * Minimum GRPs/TRPs required
874
1020
  */
875
1021
  min_points?: number;
876
- [k: string]: unknown;
1022
+ [k: string]: unknown | undefined;
877
1023
  };
878
1024
  /**
879
1025
  * Minimum spend requirement per package using this pricing option, in the specified currency
880
1026
  */
881
1027
  min_spend_per_package?: number;
882
- [k: string]: unknown;
1028
+ [k: string]: unknown | undefined;
883
1029
  }
884
1030
  /**
885
- * Flat rate pricing for DOOH, sponsorships, and time-based campaigns - fixed cost regardless of delivery volume
1031
+ * Flat rate pricing for DOOH, sponsorships, and time-based campaigns. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
886
1032
  */
887
1033
  export interface FlatRatePricingOption {
888
1034
  /**
889
- * Unique identifier for this pricing option within the product (e.g., 'flat_rate_usd_24h_takeover')
1035
+ * Unique identifier for this pricing option within the product
890
1036
  */
891
1037
  pricing_option_id: string;
892
1038
  /**
893
1039
  * Fixed cost regardless of delivery volume
894
1040
  */
895
1041
  pricing_model: 'flat_rate';
896
- /**
897
- * Flat rate cost
898
- */
899
- rate: number;
900
1042
  /**
901
1043
  * ISO 4217 currency code
902
1044
  */
903
1045
  currency: string;
904
1046
  /**
905
- * Whether this is a fixed rate (true) or auction-based (false)
1047
+ * Flat rate cost. If present, this is fixed pricing. If absent, auction-based.
906
1048
  */
907
- is_fixed: true;
1049
+ fixed_price?: number;
1050
+ /**
1051
+ * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
1052
+ */
1053
+ floor_price?: number;
1054
+ /**
1055
+ * Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.
1056
+ */
1057
+ price_guidance?: {
1058
+ /**
1059
+ * 25th percentile of recent winning bids
1060
+ */
1061
+ p25?: number;
1062
+ /**
1063
+ * Median of recent winning bids
1064
+ */
1065
+ p50?: number;
1066
+ /**
1067
+ * 75th percentile of recent winning bids
1068
+ */
1069
+ p75?: number;
1070
+ /**
1071
+ * 90th percentile of recent winning bids
1072
+ */
1073
+ p90?: number;
1074
+ };
908
1075
  /**
909
1076
  * Flat rate parameters for DOOH and time-based campaigns
910
1077
  */
911
1078
  parameters?: {
912
1079
  /**
913
- * Duration in hours for time-based flat rate pricing (DOOH)
1080
+ * Duration in hours for time-based pricing
914
1081
  */
915
1082
  duration_hours?: number;
916
1083
  /**
917
- * Guaranteed share of voice as percentage (DOOH, 0-100)
1084
+ * Guaranteed share of voice (0-100)
918
1085
  */
919
1086
  sov_percentage?: number;
920
1087
  /**
921
- * Duration of ad loop rotation in seconds (DOOH)
1088
+ * Duration of ad loop rotation in seconds
922
1089
  */
923
1090
  loop_duration_seconds?: number;
924
1091
  /**
925
- * Minimum number of times ad plays per hour (DOOH frequency guarantee)
1092
+ * Minimum plays per hour
926
1093
  */
927
1094
  min_plays_per_hour?: number;
928
1095
  /**
929
- * Named venue package identifier for DOOH (e.g., 'times_square_network', 'airport_terminals')
1096
+ * Named venue package identifier
930
1097
  */
931
1098
  venue_package?: string;
932
1099
  /**
933
- * Estimated impressions for this flat rate option (informational, commonly used with SOV or time-based DOOH)
1100
+ * Estimated impressions (informational)
934
1101
  */
935
1102
  estimated_impressions?: number;
936
1103
  /**
937
- * Specific daypart for time-based pricing (e.g., 'morning_commute', 'evening_prime', 'overnight')
1104
+ * Specific daypart for time-based pricing
938
1105
  */
939
1106
  daypart?: string;
940
- [k: string]: unknown;
1107
+ [k: string]: unknown | undefined;
941
1108
  };
942
1109
  /**
943
1110
  * Minimum spend requirement per package using this pricing option, in the specified currency
944
1111
  */
945
1112
  min_spend_per_package?: number;
946
- [k: string]: unknown;
1113
+ [k: string]: unknown | undefined;
947
1114
  }
948
1115
  /**
949
1116
  * Measurement capabilities included with a product
@@ -965,7 +1132,7 @@ export interface Measurement {
965
1132
  * Reporting frequency and format
966
1133
  */
967
1134
  reporting: string;
968
- [k: string]: unknown;
1135
+ [k: string]: unknown | undefined;
969
1136
  }
970
1137
  /**
971
1138
  * Reporting capabilities available for a product
@@ -993,7 +1160,7 @@ export interface ReportingCapabilities {
993
1160
  * Metrics available in reporting. Impressions and spend are always implicitly included.
994
1161
  */
995
1162
  available_metrics: AvailableMetric[];
996
- [k: string]: unknown;
1163
+ [k: string]: unknown | undefined;
997
1164
  }
998
1165
  /**
999
1166
  * Creative requirements and restrictions for a product
@@ -1005,7 +1172,7 @@ export interface CreativePolicy {
1005
1172
  * Whether creative templates are provided
1006
1173
  */
1007
1174
  templates_available: boolean;
1008
- [k: string]: unknown;
1175
+ [k: string]: unknown | undefined;
1009
1176
  }
1010
1177
  /**
1011
1178
  * Structured format identifier with agent URL and format name. Can reference: (1) a concrete format with fixed dimensions (id only), (2) a template format without parameters (id only), or (3) a template format with parameters (id + dimensions/duration). Template formats accept parameters in format_id while concrete formats have fixed dimensions in their definition. Parameterized format IDs create unique, specific format variants.
@@ -1031,7 +1198,7 @@ export interface FormatID1 {
1031
1198
  * Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters.
1032
1199
  */
1033
1200
  duration_ms?: number;
1034
- [k: string]: unknown;
1201
+ [k: string]: unknown | undefined;
1035
1202
  }
1036
1203
  /**
1037
1204
  * Structured format identifier with agent URL and format name. Can reference: (1) a concrete format with fixed dimensions (id only), (2) a template format without parameters (id only), or (3) a template format with parameters (id + dimensions/duration). Template formats accept parameters in format_id while concrete formats have fixed dimensions in their definition. Parameterized format IDs create unique, specific format variants.
@@ -1057,49 +1224,135 @@ export interface FormatID2 {
1057
1224
  * Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters.
1058
1225
  */
1059
1226
  duration_ms?: number;
1060
- [k: string]: unknown;
1227
+ [k: string]: unknown | undefined;
1061
1228
  }
1062
1229
  /**
1063
1230
  * 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.
1064
1231
  */
1065
- export interface Error {
1232
+ export interface Proposal {
1066
1233
  /**
1067
- * Error code for programmatic handling
1234
+ * Unique identifier for this proposal. Used to refine the proposal in subsequent get_products calls or to execute it via create_media_buy.
1068
1235
  */
1069
- code: string;
1236
+ proposal_id: string;
1070
1237
  /**
1071
- * Human-readable error message
1238
+ * Human-readable name for this media plan proposal
1072
1239
  */
1073
- message: string;
1240
+ name: string;
1074
1241
  /**
1075
- * Field path associated with the error (e.g., 'packages[0].targeting')
1242
+ * Explanation of the proposal strategy and what it achieves
1076
1243
  */
1077
- field?: string;
1244
+ description?: string;
1078
1245
  /**
1079
- * Suggested fix for the error
1246
+ * 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.
1247
+ *
1248
+ * @minItems 1
1080
1249
  */
1081
- suggestion?: string;
1250
+ allocations: [ProductAllocation, ...ProductAllocation[]];
1082
1251
  /**
1083
- * Seconds to wait before retrying the operation
1252
+ * When this proposal expires and can no longer be executed. After expiration, referenced products or pricing may no longer be available.
1084
1253
  */
1085
- retry_after?: number;
1254
+ expires_at?: string;
1086
1255
  /**
1087
- * Additional task-specific error details
1256
+ * Optional budget guidance for this proposal
1088
1257
  */
1089
- details?: {
1090
- [k: string]: unknown;
1258
+ total_budget_guidance?: {
1259
+ /**
1260
+ * Minimum recommended budget
1261
+ */
1262
+ min?: number;
1263
+ /**
1264
+ * Recommended budget for optimal performance
1265
+ */
1266
+ recommended?: number;
1267
+ /**
1268
+ * Maximum budget before diminishing returns
1269
+ */
1270
+ max?: number;
1271
+ /**
1272
+ * ISO 4217 currency code
1273
+ */
1274
+ currency?: string;
1275
+ [k: string]: unknown | undefined;
1091
1276
  };
1092
- [k: string]: unknown;
1277
+ /**
1278
+ * Explanation of how this proposal aligns with the campaign brief
1279
+ */
1280
+ brief_alignment?: string;
1281
+ ext?: ExtensionObject;
1282
+ [k: string]: unknown | undefined;
1093
1283
  }
1094
1284
  /**
1095
- * 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.
1096
- */
1097
- /**
1098
- * Filter by format type (technical categories with distinct requirements)
1285
+ * A budget allocation for a specific product within a proposal. Percentages across all allocations in a proposal should sum to 100.
1099
1286
  */
1100
- export interface ListCreativeFormatsRequest {
1287
+ export interface ProductAllocation {
1101
1288
  /**
1102
- * Return only these specific format IDs (e.g., from get_products response)
1289
+ * ID of the product (must reference a product in the products array)
1290
+ */
1291
+ product_id: string;
1292
+ /**
1293
+ * Percentage of total budget allocated to this product (0-100)
1294
+ */
1295
+ allocation_percentage: number;
1296
+ /**
1297
+ * Recommended pricing option ID from the product's pricing_options array
1298
+ */
1299
+ pricing_option_id?: string;
1300
+ /**
1301
+ * Explanation of why this product and allocation are recommended
1302
+ */
1303
+ rationale?: string;
1304
+ /**
1305
+ * Optional ordering hint for multi-line-item plans (1-based)
1306
+ */
1307
+ sequence?: number;
1308
+ /**
1309
+ * Categorical tags for this allocation (e.g., 'desktop', 'german', 'mobile') - useful for grouping/filtering allocations by dimension
1310
+ */
1311
+ tags?: string[];
1312
+ ext?: ExtensionObject;
1313
+ [k: string]: unknown | undefined;
1314
+ }
1315
+ /**
1316
+ * Standard error structure for task-specific errors and warnings
1317
+ */
1318
+ export interface Error {
1319
+ /**
1320
+ * Error code for programmatic handling
1321
+ */
1322
+ code: string;
1323
+ /**
1324
+ * Human-readable error message
1325
+ */
1326
+ message: string;
1327
+ /**
1328
+ * Field path associated with the error (e.g., 'packages[0].targeting')
1329
+ */
1330
+ field?: string;
1331
+ /**
1332
+ * Suggested fix for the error
1333
+ */
1334
+ suggestion?: string;
1335
+ /**
1336
+ * Seconds to wait before retrying the operation
1337
+ */
1338
+ retry_after?: number;
1339
+ /**
1340
+ * Additional task-specific error details
1341
+ */
1342
+ details?: {
1343
+ [k: string]: unknown | undefined;
1344
+ };
1345
+ [k: string]: unknown | undefined;
1346
+ }
1347
+ /**
1348
+ * 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.
1349
+ */
1350
+ /**
1351
+ * Filter by format type (technical categories with distinct requirements)
1352
+ */
1353
+ export interface ListCreativeFormatsRequest {
1354
+ /**
1355
+ * Return only these specific format IDs (e.g., from get_products response)
1103
1356
  */
1104
1357
  format_ids?: FormatID[];
1105
1358
  type?: FormatCategory;
@@ -1145,14 +1398,6 @@ export type FormatIDParameter = 'dimensions' | 'duration';
1145
1398
  * Type of asset
1146
1399
  */
1147
1400
  export type AssetContentType1 = 'image' | 'video' | 'audio' | 'text' | 'markdown' | 'html' | 'css' | 'javascript' | 'vast' | 'daast' | 'promoted_offerings' | 'url' | 'webhook';
1148
- /**
1149
- * Type of asset
1150
- */
1151
- export type AssetContentType2 = 'image' | 'video' | 'audio' | 'text' | 'markdown' | 'html' | 'css' | 'javascript' | 'vast' | 'daast' | 'promoted_offerings' | 'url' | 'webhook';
1152
- /**
1153
- * Type of asset
1154
- */
1155
- export type AssetContentType3 = 'image' | 'video' | 'audio' | 'text' | 'markdown' | 'html' | 'css' | 'javascript' | 'vast' | 'daast' | 'promoted_offerings' | 'url' | 'webhook';
1156
1401
  /**
1157
1402
  * Capabilities supported by creative agents for format handling
1158
1403
  */
@@ -1202,10 +1447,6 @@ export interface Format {
1202
1447
  * Plain text explanation of what this format does and what assets it requires
1203
1448
  */
1204
1449
  description?: string;
1205
- /**
1206
- * DEPRECATED: Use format_card instead. Optional preview image URL for format browsing/discovery UI. Should be 400x300px (4:3 aspect ratio) PNG or JPG. Used as thumbnail/card image in format browsers. This field is maintained for backward compatibility but format_card provides a more flexible, structured approach.
1207
- */
1208
- preview_image?: string;
1209
1450
  /**
1210
1451
  * Optional URL to showcase page with examples and interactive demos of this format
1211
1452
  */
@@ -1222,86 +1463,16 @@ export interface Format {
1222
1463
  */
1223
1464
  renders?: [
1224
1465
  ({
1225
- [k: string]: unknown;
1466
+ [k: string]: unknown | undefined;
1226
1467
  } | {
1227
1468
  parameters_from_format_id: true;
1228
1469
  }),
1229
1470
  ...({
1230
- [k: string]: unknown;
1471
+ [k: string]: unknown | undefined;
1231
1472
  } | {
1232
1473
  parameters_from_format_id: true;
1233
1474
  })[]
1234
1475
  ];
1235
- /**
1236
- * @deprecated
1237
- * DEPRECATED: Use 'assets' instead. Array of required assets or asset groups for this format. Each asset is identified by its asset_id, which must be used as the key in creative manifests. Can contain individual assets or repeatable asset sequences (e.g., carousel products, slideshow frames). This field is maintained for backward compatibility; new implementations should use 'assets' with the 'required' boolean on each asset.
1238
- */
1239
- assets_required?: ({
1240
- /**
1241
- * Discriminator indicating this is an individual asset requirement
1242
- */
1243
- item_type: 'individual';
1244
- /**
1245
- * Unique identifier for this asset. Creative manifests MUST use this exact value as the key in the assets object.
1246
- */
1247
- asset_id: string;
1248
- asset_type: AssetContentType;
1249
- /**
1250
- * Optional descriptive label for this asset's purpose (e.g., 'hero_image', 'logo'). Not used for referencing assets in manifests—use asset_id instead. This field is for human-readable documentation and UI display only.
1251
- */
1252
- asset_role?: string;
1253
- /**
1254
- * Whether this asset is required
1255
- */
1256
- required?: boolean;
1257
- /**
1258
- * Technical requirements for this asset (dimensions, file size, duration, etc.). For template formats, use parameters_from_format_id: true to indicate asset parameters must match the format_id parameters (width/height/unit and/or duration_ms).
1259
- */
1260
- requirements?: {
1261
- [k: string]: unknown;
1262
- };
1263
- } | {
1264
- /**
1265
- * Discriminator indicating this is a repeatable asset group
1266
- */
1267
- item_type: 'repeatable_group';
1268
- /**
1269
- * Identifier for this asset group (e.g., 'product', 'slide', 'card')
1270
- */
1271
- asset_group_id: string;
1272
- /**
1273
- * Minimum number of repetitions required
1274
- */
1275
- min_count: number;
1276
- /**
1277
- * Maximum number of repetitions allowed
1278
- */
1279
- max_count: number;
1280
- /**
1281
- * Assets within each repetition of this group
1282
- */
1283
- assets: {
1284
- /**
1285
- * Identifier for this asset within the group
1286
- */
1287
- asset_id: string;
1288
- asset_type: AssetContentType1;
1289
- /**
1290
- * Optional descriptive label for this asset's purpose (e.g., 'hero_image', 'logo'). Not used for referencing assets in manifests—use asset_id instead. This field is for human-readable documentation and UI display only.
1291
- */
1292
- asset_role?: string;
1293
- /**
1294
- * Whether this asset is required in each repetition
1295
- */
1296
- required?: boolean;
1297
- /**
1298
- * Technical requirements for this asset. For template formats, use parameters_from_format_id: true to indicate asset parameters must match the format_id parameters (width/height/unit and/or duration_ms).
1299
- */
1300
- requirements?: {
1301
- [k: string]: unknown;
1302
- };
1303
- }[];
1304
- })[];
1305
1476
  /**
1306
1477
  * Array of all assets supported for this format. Each asset is identified by its asset_id, which must be used as the key in creative manifests. Use the 'required' boolean on each asset to indicate whether it's mandatory. This field replaces the deprecated 'assets_required' and enables full asset discovery for buyers and AI agents.
1307
1478
  */
@@ -1314,7 +1485,7 @@ export interface Format {
1314
1485
  * Unique identifier for this asset. Creative manifests MUST use this exact value as the key in the assets object.
1315
1486
  */
1316
1487
  asset_id: string;
1317
- asset_type: AssetContentType2;
1488
+ asset_type: AssetContentType;
1318
1489
  /**
1319
1490
  * Optional descriptive label for this asset's purpose (e.g., 'hero_image', 'logo', 'third_party_tracking'). Not used for referencing assets in manifests—use asset_id instead. This field is for human-readable documentation and UI display only.
1320
1491
  */
@@ -1327,7 +1498,7 @@ export interface Format {
1327
1498
  * Technical requirements for this asset (dimensions, file size, duration, etc.). For template formats, use parameters_from_format_id: true to indicate asset parameters must match the format_id parameters (width/height/unit and/or duration_ms).
1328
1499
  */
1329
1500
  requirements?: {
1330
- [k: string]: unknown;
1501
+ [k: string]: unknown | undefined;
1331
1502
  };
1332
1503
  } | {
1333
1504
  /**
@@ -1358,7 +1529,7 @@ export interface Format {
1358
1529
  * Identifier for this asset within the group
1359
1530
  */
1360
1531
  asset_id: string;
1361
- asset_type: AssetContentType3;
1532
+ asset_type: AssetContentType1;
1362
1533
  /**
1363
1534
  * Optional descriptive label for this asset's purpose. Not used for referencing assets in manifests—use asset_id instead. This field is for human-readable documentation and UI display only.
1364
1535
  */
@@ -1371,7 +1542,7 @@ export interface Format {
1371
1542
  * Technical requirements for this asset. For template formats, use parameters_from_format_id: true to indicate asset parameters must match the format_id parameters (width/height/unit and/or duration_ms).
1372
1543
  */
1373
1544
  requirements?: {
1374
- [k: string]: unknown;
1545
+ [k: string]: unknown | undefined;
1375
1546
  };
1376
1547
  }[];
1377
1548
  })[];
@@ -1379,7 +1550,7 @@ export interface Format {
1379
1550
  * Delivery method specifications (e.g., hosted, VAST, third-party tags)
1380
1551
  */
1381
1552
  delivery?: {
1382
- [k: string]: unknown;
1553
+ [k: string]: unknown | undefined;
1383
1554
  };
1384
1555
  /**
1385
1556
  * List of universal macros supported by this format (e.g., MEDIA_BUY_ID, CACHEBUSTER, DEVICE_ID). Used for validation and developer tooling.
@@ -1398,9 +1569,9 @@ export interface Format {
1398
1569
  * Asset manifest for rendering the card, structure defined by the format
1399
1570
  */
1400
1571
  manifest: {
1401
- [k: string]: unknown;
1572
+ [k: string]: unknown | undefined;
1402
1573
  };
1403
- [k: string]: unknown;
1574
+ [k: string]: unknown | undefined;
1404
1575
  };
1405
1576
  /**
1406
1577
  * Optional detailed card with carousel and full specifications. Provides rich format documentation similar to ad spec pages.
@@ -1411,11 +1582,11 @@ export interface Format {
1411
1582
  * Asset manifest for rendering the detailed card, structure defined by the format
1412
1583
  */
1413
1584
  manifest: {
1414
- [k: string]: unknown;
1585
+ [k: string]: unknown | undefined;
1415
1586
  };
1416
- [k: string]: unknown;
1587
+ [k: string]: unknown | undefined;
1417
1588
  };
1418
- [k: string]: unknown;
1589
+ [k: string]: unknown | undefined;
1419
1590
  }
1420
1591
  /**
1421
1592
  * Structured format identifier with agent URL and format name
@@ -1441,7 +1612,7 @@ export interface FormatID3 {
1441
1612
  * Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters.
1442
1613
  */
1443
1614
  duration_ms?: number;
1444
- [k: string]: unknown;
1615
+ [k: string]: unknown | undefined;
1445
1616
  }
1446
1617
  /**
1447
1618
  * Standard error structure for task-specific errors and warnings
@@ -1450,6 +1621,10 @@ export interface FormatID3 {
1450
1621
  * Budget pacing strategy
1451
1622
  */
1452
1623
  export type Pacing = 'even' | 'asap' | 'front_loaded';
1624
+ /**
1625
+ * Metro area classification system (e.g., 'nielsen_dma', 'uk_itl2')
1626
+ */
1627
+ export type PostalCodeSystem = 'us_zip' | 'us_zip_plus_four' | 'gb_outward' | 'gb_full' | 'ca_fsa' | 'ca_full' | 'de_plz' | 'fr_code_postal' | 'au_postcode';
1453
1628
  /**
1454
1629
  * JavaScript module type
1455
1630
  */
@@ -1479,7 +1654,7 @@ export type VASTAsset = {
1479
1654
  * Tracking events supported by this VAST tag
1480
1655
  */
1481
1656
  tracking_events?: VASTTrackingEvent[];
1482
- [k: string]: unknown;
1657
+ [k: string]: unknown | undefined;
1483
1658
  } | {
1484
1659
  /**
1485
1660
  * Discriminator indicating VAST is delivered as inline XML content
@@ -1502,7 +1677,7 @@ export type VASTAsset = {
1502
1677
  * Tracking events supported by this VAST tag
1503
1678
  */
1504
1679
  tracking_events?: VASTTrackingEvent[];
1505
- [k: string]: unknown;
1680
+ [k: string]: unknown | undefined;
1506
1681
  };
1507
1682
  /**
1508
1683
  * VAST specification version
@@ -1541,7 +1716,7 @@ export type DAASTAsset = {
1541
1716
  * Whether companion display ads are included
1542
1717
  */
1543
1718
  companion_ads?: boolean;
1544
- [k: string]: unknown;
1719
+ [k: string]: unknown | undefined;
1545
1720
  } | {
1546
1721
  /**
1547
1722
  * Discriminator indicating DAAST is delivered as inline XML content
@@ -1564,7 +1739,7 @@ export type DAASTAsset = {
1564
1739
  * Whether companion display ads are included
1565
1740
  */
1566
1741
  companion_ads?: boolean;
1567
- [k: string]: unknown;
1742
+ [k: string]: unknown | undefined;
1568
1743
  };
1569
1744
  /**
1570
1745
  * DAAST specification version
@@ -1582,6 +1757,10 @@ export type DAASTVersion1 = '1.0' | '1.1';
1582
1757
  * Brand information manifest containing assets, themes, and guidelines. Can be provided inline or as a URL reference to a hosted manifest.
1583
1758
  */
1584
1759
  export type URLAssetType = 'clickthrough' | 'tracker_pixel' | 'tracker_script';
1760
+ /**
1761
+ * 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).
1762
+ */
1763
+ export type CreativeStatus = 'processing' | 'approved' | 'rejected' | 'pending_review' | 'archived';
1585
1764
  /**
1586
1765
  * Brand information manifest serving as the namespace and identity for this media buy. Provides brand context, assets, and product catalog. Can be provided inline or as a URL reference to a hosted manifest. Can be cached and reused across multiple requests.
1587
1766
  */
@@ -1595,7 +1774,7 @@ export type StartTiming = 'asap' | string;
1595
1774
  */
1596
1775
  export type AuthenticationScheme = 'Bearer' | 'HMAC-SHA256';
1597
1776
  /**
1598
- * Request parameters for creating a media buy
1777
+ * Standard delivery and performance metrics available for reporting
1599
1778
  */
1600
1779
  export interface CreateMediaBuyRequest {
1601
1780
  /**
@@ -1603,9 +1782,26 @@ export interface CreateMediaBuyRequest {
1603
1782
  */
1604
1783
  buyer_ref: string;
1605
1784
  /**
1606
- * Array of package configurations
1785
+ * ID of a proposal from get_products to execute. When provided with total_budget, the publisher converts the proposal's allocation percentages into packages automatically. Alternative to providing packages array.
1607
1786
  */
1608
- packages: PackageRequest[];
1787
+ proposal_id?: string;
1788
+ /**
1789
+ * Total budget for the media buy when executing a proposal. The publisher applies the proposal's allocation percentages to this amount to derive package budgets.
1790
+ */
1791
+ total_budget?: {
1792
+ /**
1793
+ * Total budget amount
1794
+ */
1795
+ amount: number;
1796
+ /**
1797
+ * ISO 4217 currency code
1798
+ */
1799
+ currency: string;
1800
+ };
1801
+ /**
1802
+ * Array of package configurations. Required when not using proposal_id. When executing a proposal, this can be omitted and packages will be derived from the proposal's allocations.
1803
+ */
1804
+ packages?: PackageRequest[];
1609
1805
  brand_manifest: BrandManifestReference1;
1610
1806
  /**
1611
1807
  * Purchase order number for tracking
@@ -1616,12 +1812,13 @@ export interface CreateMediaBuyRequest {
1616
1812
  * Campaign end date/time in ISO 8601 format
1617
1813
  */
1618
1814
  end_time: string;
1815
+ reporting_webhook?: ReportingWebhook;
1619
1816
  /**
1620
- * Optional webhook configuration for automated reporting delivery. Combines push_notification_config structure with reporting-specific fields.
1817
+ * Optional webhook configuration for content artifact delivery. Used by governance agents to validate content adjacency. Seller pushes artifacts to this endpoint; orchestrator forwards to governance agent for validation.
1621
1818
  */
1622
- reporting_webhook?: {
1819
+ artifact_webhook?: {
1623
1820
  /**
1624
- * Webhook endpoint URL for reporting notifications
1821
+ * Webhook endpoint URL for artifact delivery
1625
1822
  */
1626
1823
  url: string;
1627
1824
  /**
@@ -1644,13 +1841,17 @@ export interface CreateMediaBuyRequest {
1644
1841
  credentials: string;
1645
1842
  };
1646
1843
  /**
1647
- * Frequency for automated reporting delivery. Must be supported by all products in the media buy.
1844
+ * How artifacts are delivered. 'realtime' pushes artifacts as impressions occur. 'batched' aggregates artifacts and pushes periodically (see batch_frequency).
1845
+ */
1846
+ delivery_mode: 'realtime' | 'batched';
1847
+ /**
1848
+ * For batched delivery, how often to push artifacts. Required when delivery_mode is 'batched'.
1648
1849
  */
1649
- reporting_frequency: 'hourly' | 'daily' | 'monthly';
1850
+ batch_frequency?: 'hourly' | 'daily';
1650
1851
  /**
1651
- * Optional list of metrics to include in webhook notifications. If omitted, all available metrics are included. Must be subset of product's available_metrics.
1852
+ * Fraction of impressions to include (0-1). 1.0 = all impressions, 0.1 = 10% sample. Default: 1.0
1652
1853
  */
1653
- requested_metrics?: ('impressions' | 'spend' | 'clicks' | 'ctr' | 'video_completions' | 'completion_rate' | 'conversions' | 'viewability' | 'engagement_rate')[];
1854
+ sampling_rate?: number;
1654
1855
  };
1655
1856
  context?: ContextObject;
1656
1857
  ext?: ExtensionObject;
@@ -1696,38 +1897,54 @@ export interface PackageRequest {
1696
1897
  paused?: boolean;
1697
1898
  targeting_overlay?: TargetingOverlay;
1698
1899
  /**
1699
- * Creative IDs to assign to this package at creation time (references existing library creatives)
1900
+ * Assign existing library creatives to this package with optional weights and placement targeting
1700
1901
  */
1701
- creative_ids?: string[];
1902
+ creative_assignments?: CreativeAssignment[];
1702
1903
  /**
1703
- * Full creative objects to upload and assign to this package at creation time (alternative to creative_ids - creatives will be added to library). Supports both static and generative creatives.
1904
+ * Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.
1704
1905
  *
1705
1906
  * @maxItems 100
1706
1907
  */
1707
1908
  creatives?: CreativeAsset[];
1708
1909
  ext?: ExtensionObject;
1709
- [k: string]: unknown;
1910
+ [k: string]: unknown | undefined;
1710
1911
  }
1711
1912
  /**
1712
1913
  * Structured format identifier with agent URL and format name. Can reference: (1) a concrete format with fixed dimensions (id only), (2) a template format without parameters (id only), or (3) a template format with parameters (id + dimensions/duration). Template formats accept parameters in format_id while concrete formats have fixed dimensions in their definition. Parameterized format IDs create unique, specific format variants.
1713
1914
  */
1714
1915
  export interface TargetingOverlay {
1715
1916
  /**
1716
- * Restrict delivery to specific countries (ISO codes). Use for regulatory compliance or RCT testing.
1917
+ * Restrict delivery to specific countries. ISO 3166-1 alpha-2 codes (e.g., 'US', 'GB', 'DE').
1717
1918
  */
1718
- geo_country_any_of?: string[];
1919
+ geo_countries?: string[];
1719
1920
  /**
1720
- * Restrict delivery to specific regions/states. Use for regulatory compliance or RCT testing.
1921
+ * Restrict delivery to specific regions/states. ISO 3166-2 subdivision codes (e.g., 'US-CA', 'GB-SCT').
1721
1922
  */
1722
- geo_region_any_of?: string[];
1923
+ geo_regions?: string[];
1723
1924
  /**
1724
- * Restrict delivery to specific metro areas (DMA codes). Use for regulatory compliance or RCT testing.
1925
+ * Restrict delivery to specific metro areas. Each entry specifies the classification system and target values. Seller must declare supported systems in get_adcp_capabilities.
1725
1926
  */
1726
- geo_metro_any_of?: string[];
1927
+ geo_metros?: {
1928
+ system: MetroAreaSystem;
1929
+ /**
1930
+ * Metro codes within the system (e.g., ['501', '602'] for Nielsen DMAs)
1931
+ *
1932
+ * @minItems 1
1933
+ */
1934
+ values: [string, ...string[]];
1935
+ }[];
1727
1936
  /**
1728
- * Restrict delivery to specific postal/ZIP codes. Use for regulatory compliance or RCT testing.
1937
+ * Restrict delivery to specific postal areas. Each entry specifies the postal system and target values. Seller must declare supported systems in get_adcp_capabilities.
1729
1938
  */
1730
- geo_postal_code_any_of?: string[];
1939
+ geo_postal_areas?: {
1940
+ system: PostalCodeSystem;
1941
+ /**
1942
+ * Postal codes within the system (e.g., ['10001', '10002'] for us_zip)
1943
+ *
1944
+ * @minItems 1
1945
+ */
1946
+ values: [string, ...string[]];
1947
+ }[];
1731
1948
  /**
1732
1949
  * AXE segment ID to include for targeting
1733
1950
  */
@@ -1737,7 +1954,7 @@ export interface TargetingOverlay {
1737
1954
  */
1738
1955
  axe_exclude_segment?: string;
1739
1956
  frequency_cap?: FrequencyCap;
1740
- [k: string]: unknown;
1957
+ [k: string]: unknown | undefined;
1741
1958
  }
1742
1959
  /**
1743
1960
  * Frequency capping settings for package-level application
@@ -1747,7 +1964,27 @@ export interface FrequencyCap {
1747
1964
  * Minutes to suppress after impression
1748
1965
  */
1749
1966
  suppress_minutes: number;
1750
- [k: string]: unknown;
1967
+ [k: string]: unknown | undefined;
1968
+ }
1969
+ /**
1970
+ * Assignment of a creative asset to a package with optional placement targeting. Used in create_media_buy and update_media_buy requests. Note: sync_creatives does not support placement_ids - use create/update_media_buy for placement-level targeting.
1971
+ */
1972
+ export interface CreativeAssignment {
1973
+ /**
1974
+ * Unique identifier for the creative
1975
+ */
1976
+ creative_id: string;
1977
+ /**
1978
+ * Delivery weight for this creative
1979
+ */
1980
+ weight?: number;
1981
+ /**
1982
+ * Optional array of placement IDs where this creative should run. When omitted, the creative runs on all placements in the package. References placement_id values from the product's placements array.
1983
+ *
1984
+ * @minItems 1
1985
+ */
1986
+ placement_ids?: [string, ...string[]];
1987
+ [k: string]: unknown | undefined;
1751
1988
  }
1752
1989
  /**
1753
1990
  * Creative asset for upload to library - supports static assets, generative formats, and third-party snippets
@@ -1766,7 +2003,7 @@ export interface CreativeAsset {
1766
2003
  * Assets required by the format, keyed by asset_role
1767
2004
  */
1768
2005
  assets: {
1769
- [k: string]: unknown;
2006
+ [k: string]: unknown | undefined;
1770
2007
  };
1771
2008
  /**
1772
2009
  * Preview contexts for generative formats - defines what scenarios to generate previews for
@@ -1780,22 +2017,19 @@ export interface CreativeAsset {
1780
2017
  * Macro values to apply for this preview
1781
2018
  */
1782
2019
  macros?: {
1783
- [k: string]: string;
2020
+ [k: string]: string | undefined;
1784
2021
  };
1785
2022
  /**
1786
2023
  * Natural language description of the context for AI-generated content
1787
2024
  */
1788
2025
  context_description?: string;
1789
- [k: string]: unknown;
2026
+ [k: string]: unknown | undefined;
1790
2027
  }[];
1791
2028
  /**
1792
2029
  * User-defined tags for organization and searchability
1793
2030
  */
1794
2031
  tags?: string[];
1795
- /**
1796
- * For generative creatives: set to true to approve and finalize, false to request regeneration with updated assets/message. Omit for non-generative creatives.
1797
- */
1798
- approved?: boolean;
2032
+ status?: CreativeStatus;
1799
2033
  /**
1800
2034
  * Optional delivery weight for creative rotation when uploading via create_media_buy or update_media_buy (0-100). If omitted, platform determines rotation. Only used during upload to media buy - not stored in creative library.
1801
2035
  */
@@ -1806,7 +2040,7 @@ export interface CreativeAsset {
1806
2040
  * @minItems 1
1807
2041
  */
1808
2042
  placement_ids?: [string, ...string[]];
1809
- [k: string]: unknown;
2043
+ [k: string]: unknown | undefined;
1810
2044
  }
1811
2045
  /**
1812
2046
  * Structured format identifier with agent URL and format name. Can reference: (1) a concrete format with fixed dimensions (id only), (2) a template format without parameters (id only), or (3) a template format with parameters (id + dimensions/duration). Template formats accept parameters in format_id while concrete formats have fixed dimensions in their definition. Parameterized format IDs create unique, specific format variants.
@@ -1832,7 +2066,7 @@ export interface ImageAsset {
1832
2066
  * Alternative text for accessibility
1833
2067
  */
1834
2068
  alt_text?: string;
1835
- [k: string]: unknown;
2069
+ [k: string]: unknown | undefined;
1836
2070
  }
1837
2071
  /**
1838
2072
  * Video asset with URL and specifications
@@ -1862,7 +2096,7 @@ export interface VideoAsset {
1862
2096
  * Video bitrate in kilobits per second
1863
2097
  */
1864
2098
  bitrate_kbps?: number;
1865
- [k: string]: unknown;
2099
+ [k: string]: unknown | undefined;
1866
2100
  }
1867
2101
  /**
1868
2102
  * Audio asset with URL and specifications
@@ -1884,7 +2118,7 @@ export interface AudioAsset {
1884
2118
  * Audio bitrate in kilobits per second
1885
2119
  */
1886
2120
  bitrate_kbps?: number;
1887
- [k: string]: unknown;
2121
+ [k: string]: unknown | undefined;
1888
2122
  }
1889
2123
  /**
1890
2124
  * Text content asset
@@ -1898,7 +2132,7 @@ export interface TextAsset {
1898
2132
  * Language code (e.g., 'en', 'es', 'fr')
1899
2133
  */
1900
2134
  language?: string;
1901
- [k: string]: unknown;
2135
+ [k: string]: unknown | undefined;
1902
2136
  }
1903
2137
  /**
1904
2138
  * HTML content asset
@@ -1912,7 +2146,7 @@ export interface HTMLAsset {
1912
2146
  * HTML version (e.g., 'HTML5')
1913
2147
  */
1914
2148
  version?: string;
1915
- [k: string]: unknown;
2149
+ [k: string]: unknown | undefined;
1916
2150
  }
1917
2151
  /**
1918
2152
  * CSS stylesheet asset
@@ -1926,7 +2160,7 @@ export interface CSSAsset {
1926
2160
  * CSS media query context (e.g., 'screen', 'print')
1927
2161
  */
1928
2162
  media?: string;
1929
- [k: string]: unknown;
2163
+ [k: string]: unknown | undefined;
1930
2164
  }
1931
2165
  /**
1932
2166
  * JavaScript code asset
@@ -1937,34 +2171,22 @@ export interface JavaScriptAsset {
1937
2171
  */
1938
2172
  content: string;
1939
2173
  module_type?: JavaScriptModuleType;
1940
- [k: string]: unknown;
2174
+ [k: string]: unknown | undefined;
1941
2175
  }
1942
2176
  /**
1943
- * Complete offering specification combining brand manifest, product selectors, and asset filters. Provides all context needed for creative generation about what is being promoted.
2177
+ * Complete offering specification combining brand manifest, product selectors, and optional SI agent endpoint. Provides all context needed for creative generation and/or conversational experiences about what is being promoted. When si_agent_url is present, hosts can connect users to conversational experiences about any of the offerings.
1944
2178
  */
1945
2179
  export interface PromotedOfferings {
1946
2180
  brand_manifest: BrandManifestReference;
2181
+ /**
2182
+ * MCP endpoint URL for the brand's SI agent. When present, hosts can connect users to conversational experiences about any of the offerings. The agent handles si_get_offering lookups and full conversations.
2183
+ */
2184
+ si_agent_url?: string;
1947
2185
  product_selectors?: PromotedProducts;
1948
2186
  /**
1949
- * Inline offerings for campaigns without a product catalog. Each offering has a name, description, and associated assets.
2187
+ * Offerings available for promotion. Each offering can include creative assets (via portfolio_ref or inline assets) for traditional ads. When si_agent_url is set at the parent level, hosts can offer conversational experiences about any of these offerings.
1950
2188
  */
1951
- offerings?: {
1952
- /**
1953
- * Offering name (e.g., 'Winter Sale', 'New Product Launch')
1954
- */
1955
- name: string;
1956
- /**
1957
- * Description of what's being offered
1958
- */
1959
- description?: string;
1960
- /**
1961
- * Assets specific to this offering
1962
- */
1963
- assets?: {
1964
- [k: string]: unknown;
1965
- }[];
1966
- [k: string]: unknown;
1967
- }[];
2189
+ offerings?: Offering[];
1968
2190
  /**
1969
2191
  * Selectors to choose specific assets from the brand manifest
1970
2192
  */
@@ -1981,9 +2203,9 @@ export interface PromotedOfferings {
1981
2203
  * Exclude assets with these tags
1982
2204
  */
1983
2205
  exclude_tags?: string[];
1984
- [k: string]: unknown;
2206
+ [k: string]: unknown | undefined;
1985
2207
  };
1986
- [k: string]: unknown;
2208
+ [k: string]: unknown | undefined;
1987
2209
  }
1988
2210
  /**
1989
2211
  * Inline brand manifest object
@@ -2005,10 +2227,67 @@ export interface PromotedProducts {
2005
2227
  * Natural language query to select products from the brand manifest (e.g., 'all Kraft Heinz pasta sauces', 'organic products under $20')
2006
2228
  */
2007
2229
  manifest_query?: string;
2008
- [k: string]: unknown;
2230
+ [k: string]: unknown | undefined;
2231
+ }
2232
+ /**
2233
+ * A promotable offering from a brand. Can represent a campaign, product promotion, service, or any other thing the brand wants to make available. Offerings can be promoted via traditional creatives (using portfolio_ref or assets) or conversational SI experiences (via si_agent_url at the promoted-offerings level).
2234
+ */
2235
+ export interface Offering {
2236
+ /**
2237
+ * Unique identifier for this offering. Used by hosts to reference specific offerings in si_get_offering calls.
2238
+ */
2239
+ offering_id: string;
2240
+ /**
2241
+ * Human-readable offering name (e.g., 'Winter Sale', 'Free Trial', 'Enterprise Platform')
2242
+ */
2243
+ name: string;
2244
+ /**
2245
+ * Description of what's being offered
2246
+ */
2247
+ description?: string;
2248
+ /**
2249
+ * Short promotional tagline for the offering
2250
+ */
2251
+ tagline?: string;
2252
+ /**
2253
+ * When the offering becomes available. If not specified, offering is immediately available.
2254
+ */
2255
+ valid_from?: string;
2256
+ /**
2257
+ * When the offering expires. If not specified, offering has no expiration.
2258
+ */
2259
+ valid_to?: string;
2260
+ /**
2261
+ * URL for checkout/purchase flow when the brand doesn't support agentic checkout.
2262
+ */
2263
+ checkout_url?: string;
2264
+ /**
2265
+ * Landing page URL for this offering.
2266
+ */
2267
+ landing_url?: string;
2268
+ /**
2269
+ * Assets specific to this offering (images, videos, copy)
2270
+ */
2271
+ assets?: {
2272
+ [k: string]: unknown | undefined;
2273
+ }[];
2274
+ /**
2275
+ * Reference to a creative portfolio for this offering. Portfolios contain organized creative assets across formats, enabling consistent ad delivery for this specific offering.
2276
+ */
2277
+ portfolio_ref?: string;
2278
+ /**
2279
+ * Keywords for matching this offering to user intent. Hosts use these for retrieval/relevance scoring.
2280
+ */
2281
+ keywords?: string[];
2282
+ /**
2283
+ * Categories this offering belongs to (e.g., 'measurement', 'identity', 'programmatic')
2284
+ */
2285
+ categories?: string[];
2286
+ ext?: ExtensionObject;
2287
+ [k: string]: unknown | undefined;
2009
2288
  }
2010
2289
  /**
2011
- * URL reference asset
2290
+ * 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.
2012
2291
  */
2013
2292
  export interface URLAsset {
2014
2293
  /**
@@ -2020,10 +2299,48 @@ export interface URLAsset {
2020
2299
  * Description of what this URL points to
2021
2300
  */
2022
2301
  description?: string;
2023
- [k: string]: unknown;
2302
+ [k: string]: unknown | undefined;
2024
2303
  }
2025
2304
  /**
2026
- * 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.
2305
+ * Optional webhook configuration for automated reporting delivery
2306
+ */
2307
+ export interface ReportingWebhook {
2308
+ /**
2309
+ * Webhook endpoint URL for reporting notifications
2310
+ */
2311
+ url: string;
2312
+ /**
2313
+ * Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.
2314
+ */
2315
+ token?: string;
2316
+ /**
2317
+ * Authentication configuration for webhook delivery (A2A-compatible)
2318
+ */
2319
+ authentication: {
2320
+ /**
2321
+ * Array of authentication schemes. Supported: ['Bearer'] for simple token auth, ['HMAC-SHA256'] for signature verification (recommended for production)
2322
+ *
2323
+ * @minItems 1
2324
+ * @maxItems 1
2325
+ */
2326
+ schemes: [AuthenticationScheme];
2327
+ /**
2328
+ * Credentials for authentication. For Bearer: token sent in Authorization header. For HMAC-SHA256: shared secret used to generate signature. Minimum 32 characters. Exchanged out-of-band during onboarding.
2329
+ */
2330
+ credentials: string;
2331
+ };
2332
+ /**
2333
+ * Frequency for automated reporting delivery. Must be supported by all products in the media buy.
2334
+ */
2335
+ reporting_frequency: 'hourly' | 'daily' | 'monthly';
2336
+ /**
2337
+ * Optional list of metrics to include in webhook notifications. If omitted, all available metrics are included. Must be subset of product's available_metrics.
2338
+ */
2339
+ requested_metrics?: AvailableMetric[];
2340
+ [k: string]: unknown | undefined;
2341
+ }
2342
+ /**
2343
+ * 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.
2027
2344
  */
2028
2345
  /**
2029
2346
  * Response payload for create_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the media buy is either fully created or not created at all.
@@ -2099,34 +2416,14 @@ export interface Package {
2099
2416
  */
2100
2417
  paused?: boolean;
2101
2418
  ext?: ExtensionObject;
2102
- [k: string]: unknown;
2419
+ [k: string]: unknown | undefined;
2103
2420
  }
2104
2421
  /**
2105
2422
  * Optional geographic refinements for media buys. Most targeting should be expressed in the brief and handled by the publisher. These fields are primarily for geographic restrictions (RCT testing, regulatory compliance).
2106
2423
  */
2107
- export interface CreativeAssignment {
2424
+ export interface CreateMediaBuyError {
2108
2425
  /**
2109
- * Unique identifier for the creative
2110
- */
2111
- creative_id: string;
2112
- /**
2113
- * Delivery weight for this creative
2114
- */
2115
- weight?: number;
2116
- /**
2117
- * Optional array of placement IDs where this creative should run. When omitted, the creative runs on all placements in the package. References placement_id values from the product's placements array.
2118
- *
2119
- * @minItems 1
2120
- */
2121
- placement_ids?: [string, ...string[]];
2122
- [k: string]: unknown;
2123
- }
2124
- /**
2125
- * Structured format identifier with agent URL and format name. Can reference: (1) a concrete format with fixed dimensions (id only), (2) a template format without parameters (id only), or (3) a template format with parameters (id + dimensions/duration). Template formats accept parameters in format_id while concrete formats have fixed dimensions in their definition. Parameterized format IDs create unique, specific format variants.
2126
- */
2127
- export interface CreateMediaBuyError {
2128
- /**
2129
- * Array of errors explaining why the operation failed
2426
+ * Array of errors explaining why the operation failed
2130
2427
  */
2131
2428
  errors: Error[];
2132
2429
  context?: ContextObject;
@@ -2295,17 +2592,9 @@ export interface SyncCreativesError {
2295
2592
  /**
2296
2593
  * Standard error structure for task-specific errors and warnings
2297
2594
  */
2298
- /**
2299
- * Filter by creative approval status
2300
- */
2301
- export type CreativeStatus = 'processing' | 'approved' | 'rejected' | 'pending_review';
2302
2595
  /**
2303
2596
  * Status of a creative asset
2304
2597
  */
2305
- export type CreativeStatus1 = 'processing' | 'approved' | 'rejected' | 'pending_review';
2306
- /**
2307
- * Field to sort by
2308
- */
2309
2598
  export type CreativeSortField = 'created_date' | 'updated_date' | 'name' | 'status' | 'assignment_count' | 'performance_score';
2310
2599
  /**
2311
2600
  * Sort direction
@@ -2356,22 +2645,17 @@ export interface ListCreativesRequest {
2356
2645
  ext?: ExtensionObject;
2357
2646
  }
2358
2647
  /**
2359
- * Filter criteria for querying creative assets from the centralized library
2648
+ * Filter criteria for querying creative assets from the centralized library. By default, archived creatives are excluded from results. To include archived creatives, explicitly filter by status='archived' or include 'archived' in the statuses array.
2360
2649
  */
2361
2650
  export interface CreativeFilters {
2362
2651
  /**
2363
- * Filter by creative format type (e.g., video, audio, display)
2364
- */
2365
- format?: string;
2366
- /**
2367
- * Filter by multiple creative format types
2652
+ * Filter by creative format types (e.g., video, audio, display)
2368
2653
  */
2369
2654
  formats?: string[];
2370
- status?: CreativeStatus;
2371
2655
  /**
2372
- * Filter by multiple creative statuses
2656
+ * Filter by creative approval statuses
2373
2657
  */
2374
- statuses?: CreativeStatus1[];
2658
+ statuses?: CreativeStatus[];
2375
2659
  /**
2376
2660
  * Filter by creative tags (all tags must match)
2377
2661
  */
@@ -2406,10 +2690,6 @@ export interface CreativeFilters {
2406
2690
  * Filter creatives last updated before this date (ISO 8601)
2407
2691
  */
2408
2692
  updated_before?: string;
2409
- /**
2410
- * Filter creatives assigned to this specific package
2411
- */
2412
- assigned_to_package?: string;
2413
2693
  /**
2414
2694
  * Filter creatives assigned to any of these packages
2415
2695
  */
@@ -2430,7 +2710,7 @@ export interface CreativeFilters {
2430
2710
  * Filter creatives that have performance data when true
2431
2711
  */
2432
2712
  has_performance_data?: boolean;
2433
- [k: string]: unknown;
2713
+ [k: string]: unknown | undefined;
2434
2714
  }
2435
2715
  /**
2436
2716
  * 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.
@@ -2455,7 +2735,7 @@ export type SubAsset = {
2455
2735
  * URL for media assets (images, videos, etc.)
2456
2736
  */
2457
2737
  content_uri: string;
2458
- [k: string]: unknown;
2738
+ [k: string]: unknown | undefined;
2459
2739
  } | {
2460
2740
  /**
2461
2741
  * Discriminator indicating this is a text asset with content
@@ -2473,7 +2753,7 @@ export type SubAsset = {
2473
2753
  * Text content for text-based assets like headlines, body text, CTA text, etc.
2474
2754
  */
2475
2755
  content: string | string[];
2476
- [k: string]: unknown;
2756
+ [k: string]: unknown | undefined;
2477
2757
  };
2478
2758
  /**
2479
2759
  * Response from creative library query with filtered results, metadata, and optional enriched data
@@ -2581,17 +2861,13 @@ export interface ListCreativesResponse {
2581
2861
  */
2582
2862
  package_id: string;
2583
2863
  /**
2584
- * Human-readable package name
2864
+ * Buyer's reference identifier for this package
2585
2865
  */
2586
- package_name?: string;
2866
+ buyer_ref?: string;
2587
2867
  /**
2588
2868
  * When this assignment was created
2589
2869
  */
2590
2870
  assigned_date: string;
2591
- /**
2592
- * Status of this specific assignment
2593
- */
2594
- status: 'active' | 'paused' | 'ended';
2595
2871
  }[];
2596
2872
  };
2597
2873
  /**
@@ -2644,6 +2920,10 @@ export interface ListCreativesResponse {
2644
2920
  * Breakdown of creatives by status
2645
2921
  */
2646
2922
  status_summary?: {
2923
+ /**
2924
+ * Number of creatives being processed
2925
+ */
2926
+ processing?: number;
2647
2927
  /**
2648
2928
  * Number of approved creatives
2649
2929
  */
@@ -2670,11 +2950,7 @@ export interface ListCreativesResponse {
2670
2950
  /**
2671
2951
  * Request parameters for updating campaign and package settings
2672
2952
  */
2673
- export type UpdateMediaBuyRequest = UpdateMediaBuyRequest1;
2674
- /**
2675
- * Campaign start timing: 'asap' or ISO 8601 date-time
2676
- */
2677
- export interface UpdateMediaBuyRequest1 {
2953
+ export type UpdateMediaBuyRequest = {
2678
2954
  /**
2679
2955
  * Publisher's ID of the media buy to update
2680
2956
  */
@@ -2695,17 +2971,61 @@ export interface UpdateMediaBuyRequest1 {
2695
2971
  /**
2696
2972
  * Package-specific updates
2697
2973
  */
2698
- packages?: ({
2699
- [k: string]: unknown;
2700
- } | {
2701
- [k: string]: unknown;
2702
- })[];
2974
+ packages?: PackageUpdate[];
2975
+ reporting_webhook?: ReportingWebhook;
2703
2976
  push_notification_config?: PushNotificationConfig;
2704
2977
  context?: ContextObject;
2705
2978
  ext?: ExtensionObject;
2706
- }
2979
+ } & {
2980
+ [k: string]: unknown | undefined;
2981
+ };
2982
+ /**
2983
+ * Campaign start timing: 'asap' or ISO 8601 date-time
2984
+ */
2985
+ export type PackageUpdate = {
2986
+ /**
2987
+ * Publisher's ID of package to update
2988
+ */
2989
+ package_id?: string;
2990
+ /**
2991
+ * Buyer's reference for the package to update
2992
+ */
2993
+ buyer_ref?: string;
2994
+ /**
2995
+ * Updated budget allocation for this package in the currency specified by the pricing option
2996
+ */
2997
+ budget?: number;
2998
+ pacing?: Pacing;
2999
+ /**
3000
+ * Updated bid price for auction-based pricing options (only applies when pricing_option is auction-based)
3001
+ */
3002
+ bid_price?: number;
3003
+ /**
3004
+ * Updated impression goal for this package
3005
+ */
3006
+ impressions?: number;
3007
+ /**
3008
+ * Pause/resume specific package (true = paused, false = active)
3009
+ */
3010
+ paused?: boolean;
3011
+ targeting_overlay?: TargetingOverlay;
3012
+ /**
3013
+ * Replace creative assignments for this package with optional weights and placement targeting. Uses replacement semantics - omit to leave assignments unchanged.
3014
+ */
3015
+ creative_assignments?: CreativeAssignment[];
3016
+ /**
3017
+ * Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.
3018
+ *
3019
+ * @maxItems 100
3020
+ */
3021
+ creatives?: CreativeAsset[];
3022
+ ext?: ExtensionObject;
3023
+ [k: string]: unknown | undefined;
3024
+ } & {
3025
+ [k: string]: unknown | undefined;
3026
+ };
2707
3027
  /**
2708
- * Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time.
3028
+ * Budget pacing strategy
2709
3029
  */
2710
3030
  /**
2711
3031
  * Response payload for update_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - updates are either fully applied or not applied at all.
@@ -3071,63 +3391,11 @@ export interface DeliveryMetrics {
3071
3391
  * Number of screens used at this venue
3072
3392
  */
3073
3393
  screens_used?: number;
3074
- [k: string]: unknown;
3394
+ [k: string]: unknown | undefined;
3075
3395
  }[];
3076
- [k: string]: unknown;
3396
+ [k: string]: unknown | undefined;
3077
3397
  };
3078
- [k: string]: unknown;
3079
- }
3080
- /**
3081
- * Standard error structure for task-specific errors and warnings
3082
- */
3083
- /**
3084
- * Request parameters for discovering which publishers this agent is authorized to represent
3085
- */
3086
- export interface ListAuthorizedPropertiesRequest {
3087
- /**
3088
- * Filter to specific publisher domains (optional). If omitted, returns all publishers this agent represents.
3089
- */
3090
- publisher_domains?: string[];
3091
- context?: ContextObject;
3092
- ext?: ExtensionObject;
3093
- }
3094
- /**
3095
- * 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.
3096
- */
3097
- /**
3098
- * Standard advertising channels supported by AdCP
3099
- */
3100
- export interface ListAuthorizedPropertiesResponse {
3101
- /**
3102
- * Publisher domains this agent is authorized to represent. Buyers should fetch each publisher's adagents.json to see property definitions and verify this agent is in their authorized_agents list with authorization scope.
3103
- */
3104
- publisher_domains: string[];
3105
- /**
3106
- * Primary advertising channels represented in this property portfolio. Helps buying agents quickly filter relevance.
3107
- */
3108
- primary_channels?: AdvertisingChannels[];
3109
- /**
3110
- * Primary countries (ISO 3166-1 alpha-2 codes) where properties are concentrated. Helps buying agents quickly filter relevance.
3111
- */
3112
- primary_countries?: string[];
3113
- /**
3114
- * Markdown-formatted description of the property portfolio, including inventory types, audience characteristics, and special features.
3115
- */
3116
- portfolio_description?: string;
3117
- /**
3118
- * Publisher's advertising content policies, restrictions, and guidelines in natural language. May include prohibited categories, blocked advertisers, restricted tactics, brand safety requirements, or links to full policy documentation.
3119
- */
3120
- advertising_policies?: string;
3121
- /**
3122
- * ISO 8601 timestamp of when the agent's publisher authorization list was last updated. Buyers can use this to determine if their cached publisher adagents.json files might be stale.
3123
- */
3124
- last_updated?: string;
3125
- /**
3126
- * Task-specific errors and warnings (e.g., property availability issues)
3127
- */
3128
- errors?: Error[];
3129
- context?: ContextObject;
3130
- ext?: ExtensionObject;
3398
+ [k: string]: unknown | undefined;
3131
3399
  }
3132
3400
  /**
3133
3401
  * Standard error structure for task-specific errors and warnings
@@ -3135,16 +3403,7 @@ export interface ListAuthorizedPropertiesResponse {
3135
3403
  /**
3136
3404
  * Request payload for provide_performance_feedback task
3137
3405
  */
3138
- export type ProvidePerformanceFeedbackRequest = ProvidePerformanceFeedbackRequest1;
3139
- /**
3140
- * The business metric being measured
3141
- */
3142
- export type MetricType = 'overall_performance' | 'conversion_rate' | 'brand_lift' | 'click_through_rate' | 'completion_rate' | 'viewability' | 'brand_safety' | 'cost_efficiency';
3143
- /**
3144
- * Source of the performance data
3145
- */
3146
- export type FeedbackSource = 'buyer_attribution' | 'third_party_measurement' | 'platform_analytics' | 'verification_partner';
3147
- export interface ProvidePerformanceFeedbackRequest1 {
3406
+ export type ProvidePerformanceFeedbackRequest = {
3148
3407
  /**
3149
3408
  * Publisher's media buy identifier
3150
3409
  */
@@ -3182,7 +3441,17 @@ export interface ProvidePerformanceFeedbackRequest1 {
3182
3441
  feedback_source?: FeedbackSource;
3183
3442
  context?: ContextObject;
3184
3443
  ext?: ExtensionObject;
3185
- }
3444
+ } & {
3445
+ [k: string]: unknown | undefined;
3446
+ };
3447
+ /**
3448
+ * The business metric being measured
3449
+ */
3450
+ export type MetricType = 'overall_performance' | 'conversion_rate' | 'brand_lift' | 'click_through_rate' | 'completion_rate' | 'viewability' | 'brand_safety' | 'cost_efficiency';
3451
+ /**
3452
+ * Source of the performance data
3453
+ */
3454
+ export type FeedbackSource = 'buyer_attribution' | 'third_party_measurement' | 'platform_analytics' | 'verification_partner';
3186
3455
  /**
3187
3456
  * 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.
3188
3457
  */
@@ -3255,10 +3524,10 @@ export interface CreativeManifest {
3255
3524
  * IMPORTANT: Creative manifest validation MUST be performed in the context of the format specification. The format defines what type each asset_id should be, which eliminates any validation ambiguity.
3256
3525
  */
3257
3526
  assets: {
3258
- [k: string]: unknown;
3527
+ [k: string]: unknown | undefined;
3259
3528
  };
3260
3529
  ext?: ExtensionObject;
3261
- [k: string]: unknown;
3530
+ [k: string]: unknown | undefined;
3262
3531
  }
3263
3532
  /**
3264
3533
  * Format identifier this manifest is for. Can be a template format (id only) or a deterministic format (id + dimensions/duration). For dimension-specific creatives, include width/height/unit in the format_id to create a unique identifier (e.g., {id: 'display_static', width: 300, height: 250, unit: 'px'}).
@@ -3296,7 +3565,7 @@ export interface WebhookAsset {
3296
3565
  */
3297
3566
  api_key_header?: string;
3298
3567
  };
3299
- [k: string]: unknown;
3568
+ [k: string]: unknown | undefined;
3300
3569
  }
3301
3570
  /**
3302
3571
  * CSS stylesheet asset
@@ -3349,7 +3618,7 @@ export type PreviewCreativeRequest = {
3349
3618
  * Macro values to use for this preview. Supports all universal macros from the format's supported_macros list. See docs/creative/universal-macros.md for available macros.
3350
3619
  */
3351
3620
  macros?: {
3352
- [k: string]: string;
3621
+ [k: string]: string | undefined;
3353
3622
  };
3354
3623
  /**
3355
3624
  * Natural language description of the context for AI-generated content (e.g., 'User just searched for running shoes', 'Podcast discussing weather patterns', 'Article about electric vehicles')
@@ -3388,7 +3657,7 @@ export type PreviewCreativeRequest = {
3388
3657
  * Macro values to use for this preview
3389
3658
  */
3390
3659
  macros?: {
3391
- [k: string]: string;
3660
+ [k: string]: string | undefined;
3392
3661
  };
3393
3662
  /**
3394
3663
  * Natural language description of the context for AI-generated content
@@ -3432,10 +3701,10 @@ export interface CreativeManifest1 {
3432
3701
  * IMPORTANT: Creative manifest validation MUST be performed in the context of the format specification. The format defines what type each asset_id should be, which eliminates any validation ambiguity.
3433
3702
  */
3434
3703
  assets: {
3435
- [k: string]: unknown;
3704
+ [k: string]: unknown | undefined;
3436
3705
  };
3437
3706
  ext?: ExtensionObject;
3438
- [k: string]: unknown;
3707
+ [k: string]: unknown | undefined;
3439
3708
  }
3440
3709
  /**
3441
3710
  * Response containing preview links for one or more creatives. Format matches the request: single preview response for single requests, batch results for batch requests.
@@ -3489,7 +3758,7 @@ export type PreviewRender = {
3489
3758
  */
3490
3759
  csp_policy?: string;
3491
3760
  };
3492
- [k: string]: unknown;
3761
+ [k: string]: unknown | undefined;
3493
3762
  } | {
3494
3763
  /**
3495
3764
  * Unique identifier for this rendered piece within the variant
@@ -3535,7 +3804,7 @@ export type PreviewRender = {
3535
3804
  */
3536
3805
  csp_policy?: string;
3537
3806
  };
3538
- [k: string]: unknown;
3807
+ [k: string]: unknown | undefined;
3539
3808
  } | {
3540
3809
  /**
3541
3810
  * Unique identifier for this rendered piece within the variant
@@ -3585,7 +3854,7 @@ export type PreviewRender = {
3585
3854
  */
3586
3855
  csp_policy?: string;
3587
3856
  };
3588
- [k: string]: unknown;
3857
+ [k: string]: unknown | undefined;
3589
3858
  };
3590
3859
  /**
3591
3860
  * Single preview response - each preview URL returns an HTML page that can be embedded in an iframe
@@ -3619,7 +3888,7 @@ export interface PreviewCreativeSingleResponse {
3619
3888
  * Macro values applied to this variant
3620
3889
  */
3621
3890
  macros?: {
3622
- [k: string]: string;
3891
+ [k: string]: string | undefined;
3623
3892
  };
3624
3893
  /**
3625
3894
  * Context description applied to this variant
@@ -3675,7 +3944,7 @@ export type Destination = {
3675
3944
  * Optional account identifier on the platform
3676
3945
  */
3677
3946
  account?: string;
3678
- [k: string]: unknown;
3947
+ [k: string]: unknown | undefined;
3679
3948
  } | {
3680
3949
  /**
3681
3950
  * Discriminator indicating this is an agent URL-based deployment
@@ -3689,7 +3958,7 @@ export type Destination = {
3689
3958
  * Optional account identifier on the agent
3690
3959
  */
3691
3960
  account?: string;
3692
- [k: string]: unknown;
3961
+ [k: string]: unknown | undefined;
3693
3962
  };
3694
3963
  /**
3695
3964
  * Types of signal catalogs available for audience targeting
@@ -3744,7 +4013,7 @@ export interface SignalFilters {
3744
4013
  * Minimum coverage requirement
3745
4014
  */
3746
4015
  min_coverage_percentage?: number;
3747
- [k: string]: unknown;
4016
+ [k: string]: unknown | undefined;
3748
4017
  }
3749
4018
  /**
3750
4019
  * 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.
@@ -3778,7 +4047,7 @@ export type Deployment = {
3778
4047
  * Timestamp when activation completed (if is_live=true)
3779
4048
  */
3780
4049
  deployed_at?: string;
3781
- [k: string]: unknown;
4050
+ [k: string]: unknown | undefined;
3782
4051
  } | {
3783
4052
  /**
3784
4053
  * Discriminator indicating this is an agent URL-based deployment
@@ -3805,7 +4074,7 @@ export type Deployment = {
3805
4074
  * Timestamp when activation completed (if is_live=true)
3806
4075
  */
3807
4076
  deployed_at?: string;
3808
- [k: string]: unknown;
4077
+ [k: string]: unknown | undefined;
3809
4078
  };
3810
4079
  /**
3811
4080
  * The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.
@@ -3819,7 +4088,7 @@ export type ActivationKey = {
3819
4088
  * The platform-specific segment identifier to use in campaign targeting
3820
4089
  */
3821
4090
  segment_id: string;
3822
- [k: string]: unknown;
4091
+ [k: string]: unknown | undefined;
3823
4092
  } | {
3824
4093
  /**
3825
4094
  * Key-value pair based targeting
@@ -3833,7 +4102,7 @@ export type ActivationKey = {
3833
4102
  * The targeting parameter value
3834
4103
  */
3835
4104
  value: string;
3836
- [k: string]: unknown;
4105
+ [k: string]: unknown | undefined;
3837
4106
  };
3838
4107
  /**
3839
4108
  * The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.
@@ -3847,7 +4116,7 @@ export type ActivationKey1 = {
3847
4116
  * The platform-specific segment identifier to use in campaign targeting
3848
4117
  */
3849
4118
  segment_id: string;
3850
- [k: string]: unknown;
4119
+ [k: string]: unknown | undefined;
3851
4120
  } | {
3852
4121
  /**
3853
4122
  * Key-value pair based targeting
@@ -3861,7 +4130,7 @@ export type ActivationKey1 = {
3861
4130
  * The targeting parameter value
3862
4131
  */
3863
4132
  value: string;
3864
- [k: string]: unknown;
4133
+ [k: string]: unknown | undefined;
3865
4134
  };
3866
4135
  /**
3867
4136
  * Response payload for get_signals task
@@ -3967,4 +4236,2356 @@ export interface ActivateSignalError {
3967
4236
  /**
3968
4237
  * Standard error structure for task-specific errors and warnings
3969
4238
  */
4239
+ /**
4240
+ * A source of properties for a property list. Supports three selection patterns: publisher with tags, publisher with property IDs, or direct identifiers.
4241
+ */
4242
+ export type BasePropertySource = PublisherTagsSource | PublisherPropertyIDsSource | DirectIdentifiersSource;
4243
+ /**
4244
+ * Tag for categorizing publisher properties. Must be lowercase alphanumeric with underscores only.
4245
+ */
4246
+ 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';
4247
+ /**
4248
+ * 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.
4249
+ */
4250
+ export type PropertyType = 'website' | 'mobile_app' | 'ctv_app' | 'desktop_app' | 'dooh' | 'podcast' | 'radio' | 'streaming_audio';
4251
+ /**
4252
+ * Type of asset. Note: Brand manifests typically contain basic media assets (image, video, audio, text). Code assets (html, javascript, css) and ad markup (vast, daast) are usually not part of brand asset libraries.
4253
+ */
4254
+ export interface CreatePropertyListRequest {
4255
+ /**
4256
+ * Human-readable name for the list
4257
+ */
4258
+ name: string;
4259
+ /**
4260
+ * Description of the list's purpose
4261
+ */
4262
+ description?: string;
4263
+ /**
4264
+ * Array of property sources to evaluate. Each entry is a discriminated union: publisher_tags (publisher_domain + tags), publisher_ids (publisher_domain + property_ids), or identifiers (direct identifiers). If omitted, queries the agent's entire property database.
4265
+ */
4266
+ base_properties?: BasePropertySource[];
4267
+ filters?: PropertyListFilters;
4268
+ brand_manifest?: BrandManifest;
4269
+ context?: ContextObject;
4270
+ ext?: ExtensionObject;
4271
+ }
4272
+ /**
4273
+ * Select properties from a publisher by tag membership
4274
+ */
4275
+ export interface PublisherTagsSource {
4276
+ /**
4277
+ * Discriminator indicating selection by property tags within a publisher
4278
+ */
4279
+ selection_type: 'publisher_tags';
4280
+ /**
4281
+ * Domain where publisher's adagents.json is hosted (e.g., 'raptive.com')
4282
+ */
4283
+ publisher_domain: string;
4284
+ /**
4285
+ * Property tags from the publisher's adagents.json. Selects all properties with these tags.
4286
+ *
4287
+ * @minItems 1
4288
+ */
4289
+ tags: [PropertyTag, ...PropertyTag[]];
4290
+ }
4291
+ /**
4292
+ * Select specific properties from a publisher by ID
4293
+ */
4294
+ export interface PublisherPropertyIDsSource {
4295
+ /**
4296
+ * Discriminator indicating selection by specific property IDs within a publisher
4297
+ */
4298
+ selection_type: 'publisher_ids';
4299
+ /**
4300
+ * Domain where publisher's adagents.json is hosted (e.g., 'raptive.com')
4301
+ */
4302
+ publisher_domain: string;
4303
+ /**
4304
+ * Specific property IDs from the publisher's adagents.json
4305
+ *
4306
+ * @minItems 1
4307
+ */
4308
+ property_ids: [PropertyID, ...PropertyID[]];
4309
+ }
4310
+ /**
4311
+ * Select properties by direct identifiers (domains, app IDs, etc.) without publisher context
4312
+ */
4313
+ export interface DirectIdentifiersSource {
4314
+ /**
4315
+ * Discriminator indicating selection by direct identifiers
4316
+ */
4317
+ selection_type: 'identifiers';
4318
+ /**
4319
+ * Direct property identifiers (domains, app IDs, etc.)
4320
+ *
4321
+ * @minItems 1
4322
+ */
4323
+ identifiers: [Identifier, ...Identifier[]];
4324
+ }
4325
+ /**
4326
+ * A property identifier with type and value. Used to identify properties across platforms (domains, app store IDs, etc.).
4327
+ */
4328
+ export interface Identifier {
4329
+ type: PropertyIdentifierTypes;
4330
+ /**
4331
+ * The identifier value. For domain type: 'example.com' matches base domain plus www and m subdomains; 'edition.example.com' matches that specific subdomain; '*.example.com' matches ALL subdomains but NOT base domain
4332
+ */
4333
+ value: string;
4334
+ }
4335
+ /**
4336
+ * Dynamic filters to apply when resolving the list
4337
+ */
4338
+ export interface PropertyListFilters {
4339
+ /**
4340
+ * Property must have feature data for ALL listed countries (ISO codes). Required.
4341
+ */
4342
+ countries_all: string[];
4343
+ /**
4344
+ * Property must support ANY of the listed channels. Required.
4345
+ */
4346
+ channels_any: MediaChannel[];
4347
+ /**
4348
+ * Filter to these property types
4349
+ */
4350
+ property_types?: PropertyType[];
4351
+ /**
4352
+ * Feature-based requirements. Property must pass ALL requirements (AND logic).
4353
+ */
4354
+ feature_requirements?: FeatureRequirement[];
4355
+ /**
4356
+ * Identifiers to always exclude from results
4357
+ */
4358
+ exclude_identifiers?: Identifier[];
4359
+ }
4360
+ /**
4361
+ * A feature-based requirement for property filtering. Use min_value/max_value for quantitative features, allowed_values for binary/categorical features.
4362
+ */
4363
+ export interface FeatureRequirement {
4364
+ /**
4365
+ * Feature to evaluate (discovered via list_property_features)
4366
+ */
4367
+ feature_id: string;
4368
+ /**
4369
+ * Minimum numeric value required (for quantitative features)
4370
+ */
4371
+ min_value?: number;
4372
+ /**
4373
+ * Maximum numeric value allowed (for quantitative features)
4374
+ */
4375
+ max_value?: number;
4376
+ /**
4377
+ * Values that pass the requirement (for binary/categorical features)
4378
+ */
4379
+ allowed_values?: unknown[];
4380
+ /**
4381
+ * How to handle properties where this feature is not covered. 'exclude' (default): property is removed from the list. 'include': property passes this requirement (fail-open).
4382
+ */
4383
+ if_not_covered?: 'exclude' | 'include';
4384
+ }
4385
+ /**
4386
+ * Brand identity and requirements. When provided, the agent automatically applies appropriate rules based on brand characteristics (industry, target_audience, etc.).
4387
+ */
4388
+ /**
4389
+ * A source of properties for a property list. Supports three selection patterns: publisher with tags, publisher with property IDs, or direct identifiers.
4390
+ */
4391
+ export interface CreatePropertyListResponse {
4392
+ list: PropertyList;
4393
+ /**
4394
+ * Token that can be shared with sellers to authorize fetching this list. Store this - it is only returned at creation time.
4395
+ */
4396
+ auth_token: string;
4397
+ ext?: ExtensionObject;
4398
+ }
4399
+ /**
4400
+ * The created property list
4401
+ */
4402
+ export interface PropertyList {
4403
+ /**
4404
+ * Unique identifier for this property list
4405
+ */
4406
+ list_id: string;
4407
+ /**
4408
+ * Human-readable name for the list
4409
+ */
4410
+ name: string;
4411
+ /**
4412
+ * Description of the list's purpose
4413
+ */
4414
+ description?: string;
4415
+ /**
4416
+ * Principal identity that owns this list
4417
+ */
4418
+ principal?: string;
4419
+ /**
4420
+ * Array of property sources to evaluate. Each entry is a discriminated union: publisher_tags (publisher_domain + tags), publisher_ids (publisher_domain + property_ids), or identifiers (direct identifiers). If omitted, queries the agent's entire property database.
4421
+ */
4422
+ base_properties?: BasePropertySource[];
4423
+ filters?: PropertyListFilters;
4424
+ brand_manifest?: BrandManifest;
4425
+ /**
4426
+ * URL to receive notifications when the resolved list changes
4427
+ */
4428
+ webhook_url?: string;
4429
+ /**
4430
+ * Recommended cache duration for resolved list. Consumers should re-fetch after this period.
4431
+ */
4432
+ cache_duration_hours?: number;
4433
+ /**
4434
+ * When the list was created
4435
+ */
4436
+ created_at?: string;
4437
+ /**
4438
+ * When the list was last modified
4439
+ */
4440
+ updated_at?: string;
4441
+ /**
4442
+ * Number of properties in the resolved list (at time of last resolution)
4443
+ */
4444
+ property_count?: number;
4445
+ }
4446
+ /**
4447
+ * Select properties from a publisher by tag membership
4448
+ */
4449
+ /**
4450
+ * A source of properties for a property list. Supports three selection patterns: publisher with tags, publisher with property IDs, or direct identifiers.
4451
+ */
4452
+ export interface UpdatePropertyListRequest {
4453
+ /**
4454
+ * ID of the property list to update
4455
+ */
4456
+ list_id: string;
4457
+ /**
4458
+ * New name for the list
4459
+ */
4460
+ name?: string;
4461
+ /**
4462
+ * New description
4463
+ */
4464
+ description?: string;
4465
+ /**
4466
+ * Complete replacement for the base properties list (not a patch). Each entry is a discriminated union: publisher_tags (publisher_domain + tags), publisher_ids (publisher_domain + property_ids), or identifiers (direct identifiers).
4467
+ */
4468
+ base_properties?: BasePropertySource[];
4469
+ filters?: PropertyListFilters;
4470
+ brand_manifest?: BrandManifest;
4471
+ /**
4472
+ * Update the webhook URL for list change notifications (set to empty string to remove)
4473
+ */
4474
+ webhook_url?: string;
4475
+ context?: ContextObject;
4476
+ ext?: ExtensionObject;
4477
+ }
4478
+ /**
4479
+ * Select properties from a publisher by tag membership
4480
+ */
4481
+ /**
4482
+ * A source of properties for a property list. Supports three selection patterns: publisher with tags, publisher with property IDs, or direct identifiers.
4483
+ */
4484
+ export interface UpdatePropertyListResponse {
4485
+ list: PropertyList;
4486
+ ext?: ExtensionObject;
4487
+ }
4488
+ /**
4489
+ * The updated property list
4490
+ */
4491
+ /**
4492
+ * Request parameters for retrieving a property list with resolved identifiers
4493
+ */
4494
+ export interface GetPropertyListRequest {
4495
+ /**
4496
+ * ID of the property list to retrieve
4497
+ */
4498
+ list_id: string;
4499
+ /**
4500
+ * Whether to apply filters and return resolved identifiers (default: true)
4501
+ */
4502
+ resolve?: boolean;
4503
+ /**
4504
+ * Maximum identifiers to return (for large lists)
4505
+ */
4506
+ max_results?: number;
4507
+ /**
4508
+ * Pagination cursor for large result sets
4509
+ */
4510
+ cursor?: string;
4511
+ context?: ContextObject;
4512
+ ext?: ExtensionObject;
4513
+ }
4514
+ /**
4515
+ * 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.
4516
+ */
4517
+ /**
4518
+ * A source of properties for a property list. Supports three selection patterns: publisher with tags, publisher with property IDs, or direct identifiers.
4519
+ */
4520
+ export interface GetPropertyListResponse {
4521
+ list: PropertyList;
4522
+ /**
4523
+ * Resolved identifiers that passed filters (if resolve=true). Cache these locally for real-time use.
4524
+ */
4525
+ identifiers?: Identifier[];
4526
+ /**
4527
+ * Total number of identifiers in resolved list
4528
+ */
4529
+ total_count?: number;
4530
+ /**
4531
+ * Number of identifiers returned in this response
4532
+ */
4533
+ returned_count?: number;
4534
+ /**
4535
+ * Pagination information
4536
+ */
4537
+ pagination?: {
4538
+ /**
4539
+ * Whether more results are available
4540
+ */
4541
+ has_more?: boolean;
4542
+ /**
4543
+ * Cursor for next page
4544
+ */
4545
+ cursor?: string;
4546
+ };
4547
+ /**
4548
+ * When the list was resolved
4549
+ */
4550
+ resolved_at?: string;
4551
+ /**
4552
+ * Cache expiration timestamp. Re-fetch the list after this time to get updated identifiers.
4553
+ */
4554
+ cache_valid_until?: string;
4555
+ /**
4556
+ * Properties included in the list despite missing feature data. Only present when a feature_requirement has if_not_covered='include'. Maps feature_id to list of identifiers not covered for that feature.
4557
+ */
4558
+ coverage_gaps?: {
4559
+ [k: string]: Identifier[] | undefined;
4560
+ };
4561
+ ext?: ExtensionObject;
4562
+ }
4563
+ /**
4564
+ * The property list metadata (always returned)
4565
+ */
4566
+ /**
4567
+ * Request parameters for listing property lists
4568
+ */
4569
+ export interface ListPropertyListsRequest {
4570
+ /**
4571
+ * Filter to lists owned by this principal
4572
+ */
4573
+ principal?: string;
4574
+ /**
4575
+ * Filter to lists whose name contains this string
4576
+ */
4577
+ name_contains?: string;
4578
+ /**
4579
+ * Maximum lists to return
4580
+ */
4581
+ max_results?: number;
4582
+ /**
4583
+ * Pagination cursor
4584
+ */
4585
+ cursor?: string;
4586
+ context?: ContextObject;
4587
+ ext?: ExtensionObject;
4588
+ }
4589
+ /**
4590
+ * 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.
4591
+ */
4592
+ /**
4593
+ * A source of properties for a property list. Supports three selection patterns: publisher with tags, publisher with property IDs, or direct identifiers.
4594
+ */
4595
+ export interface ListPropertyListsResponse {
4596
+ /**
4597
+ * Array of property lists (metadata only, not resolved properties)
4598
+ */
4599
+ lists: PropertyList[];
4600
+ /**
4601
+ * Total number of lists matching criteria
4602
+ */
4603
+ total_count?: number;
4604
+ /**
4605
+ * Number of lists returned in this response
4606
+ */
4607
+ returned_count?: number;
4608
+ /**
4609
+ * Pagination information
4610
+ */
4611
+ pagination?: {
4612
+ /**
4613
+ * Whether more results are available
4614
+ */
4615
+ has_more?: boolean;
4616
+ /**
4617
+ * Cursor for next page
4618
+ */
4619
+ cursor?: string;
4620
+ };
4621
+ ext?: ExtensionObject;
4622
+ }
4623
+ /**
4624
+ * A managed property list with optional filters for dynamic evaluation. Lists are resolved at setup time and cached by orchestrators/sellers for real-time use.
4625
+ */
4626
+ /**
4627
+ * Request parameters for deleting a property list
4628
+ */
4629
+ export interface DeletePropertyListRequest {
4630
+ /**
4631
+ * ID of the property list to delete
4632
+ */
4633
+ list_id: string;
4634
+ context?: ContextObject;
4635
+ ext?: ExtensionObject;
4636
+ }
4637
+ /**
4638
+ * 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.
4639
+ */
4640
+ /**
4641
+ * Response payload for delete_property_list task
4642
+ */
4643
+ export interface DeletePropertyListResponse {
4644
+ /**
4645
+ * Whether the list was successfully deleted
4646
+ */
4647
+ deleted: boolean;
4648
+ /**
4649
+ * ID of the deleted list
4650
+ */
4651
+ list_id: string;
4652
+ ext?: ExtensionObject;
4653
+ }
4654
+ /**
4655
+ * 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.
4656
+ */
4657
+ /**
4658
+ * 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.
4659
+ */
4660
+ export interface ListContentStandardsRequest {
4661
+ /**
4662
+ * Filter by channel
4663
+ */
4664
+ channels?: MediaChannel[];
4665
+ /**
4666
+ * Filter by BCP 47 language tags
4667
+ */
4668
+ languages?: string[];
4669
+ /**
4670
+ * Filter by ISO 3166-1 alpha-2 country codes
4671
+ */
4672
+ countries?: string[];
4673
+ context?: ContextObject;
4674
+ ext?: ExtensionObject;
4675
+ }
4676
+ /**
4677
+ * 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.
4678
+ */
4679
+ /**
4680
+ * Response payload with list of content standards configurations
4681
+ */
4682
+ export type ListContentStandardsResponse = {
4683
+ /**
4684
+ * Array of content standards configurations matching the filter criteria
4685
+ */
4686
+ standards: ContentStandards[];
4687
+ /**
4688
+ * Field must not be present in success response
4689
+ */
4690
+ errors?: {
4691
+ [k: string]: unknown | undefined;
4692
+ };
4693
+ context?: ContextObject;
4694
+ ext?: ExtensionObject;
4695
+ } | {
4696
+ errors: Error[];
4697
+ /**
4698
+ * Field must not be present in error response
4699
+ */
4700
+ standards?: {
4701
+ [k: string]: unknown | undefined;
4702
+ };
4703
+ context?: ContextObject;
4704
+ ext?: ExtensionObject;
4705
+ };
4706
+ /**
4707
+ * 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.
4708
+ */
4709
+ export type AssetAccess = {
4710
+ method: 'bearer_token';
4711
+ /**
4712
+ * OAuth2 bearer token for Authorization header
4713
+ */
4714
+ token: string;
4715
+ } | {
4716
+ method: 'service_account';
4717
+ /**
4718
+ * Cloud provider
4719
+ */
4720
+ provider: 'gcp' | 'aws';
4721
+ /**
4722
+ * Service account credentials
4723
+ */
4724
+ credentials?: {
4725
+ [k: string]: unknown | undefined;
4726
+ };
4727
+ } | {
4728
+ method: 'signed_url';
4729
+ };
4730
+ /**
4731
+ * Authentication for secured URLs
4732
+ */
4733
+ export type AssetAccess1 = {
4734
+ method: 'bearer_token';
4735
+ /**
4736
+ * OAuth2 bearer token for Authorization header
4737
+ */
4738
+ token: string;
4739
+ } | {
4740
+ method: 'service_account';
4741
+ /**
4742
+ * Cloud provider
4743
+ */
4744
+ provider: 'gcp' | 'aws';
4745
+ /**
4746
+ * Service account credentials
4747
+ */
4748
+ credentials?: {
4749
+ [k: string]: unknown | undefined;
4750
+ };
4751
+ } | {
4752
+ method: 'signed_url';
4753
+ };
4754
+ /**
4755
+ * Authentication for secured URLs
4756
+ */
4757
+ export type AssetAccess2 = {
4758
+ method: 'bearer_token';
4759
+ /**
4760
+ * OAuth2 bearer token for Authorization header
4761
+ */
4762
+ token: string;
4763
+ } | {
4764
+ method: 'service_account';
4765
+ /**
4766
+ * Cloud provider
4767
+ */
4768
+ provider: 'gcp' | 'aws';
4769
+ /**
4770
+ * Service account credentials
4771
+ */
4772
+ credentials?: {
4773
+ [k: string]: unknown | undefined;
4774
+ };
4775
+ } | {
4776
+ method: 'signed_url';
4777
+ };
4778
+ /**
4779
+ * A content standards configuration defining brand safety and suitability policies. Standards are scoped by brand, geography, and channel. Multiple standards can be active simultaneously for different scopes.
4780
+ */
4781
+ export interface ContentStandards {
4782
+ /**
4783
+ * Unique identifier for this standards configuration
4784
+ */
4785
+ standards_id: string;
4786
+ /**
4787
+ * Human-readable name for this standards configuration
4788
+ */
4789
+ name?: string;
4790
+ /**
4791
+ * ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).
4792
+ */
4793
+ countries_all?: string[];
4794
+ /**
4795
+ * Advertising channels. Standards apply to ANY of the listed channels (OR logic).
4796
+ */
4797
+ channels_any?: MediaChannel[];
4798
+ /**
4799
+ * BCP 47 language tags (e.g., 'en', 'de', 'fr'). Standards apply to content in ANY of these languages (OR logic). Content in unlisted languages is not covered by these standards.
4800
+ *
4801
+ * @minItems 1
4802
+ */
4803
+ languages_any?: [string, ...string[]];
4804
+ /**
4805
+ * Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments.
4806
+ */
4807
+ policy?: string;
4808
+ /**
4809
+ * Training/test set to calibrate policy interpretation. Provides concrete examples of pass/fail decisions.
4810
+ */
4811
+ calibration_exemplars?: {
4812
+ /**
4813
+ * Artifacts that pass the content standards
4814
+ */
4815
+ pass?: Artifact[];
4816
+ /**
4817
+ * Artifacts that fail the content standards
4818
+ */
4819
+ fail?: Artifact[];
4820
+ };
4821
+ ext?: ExtensionObject;
4822
+ }
4823
+ /**
4824
+ * Content artifact for safety and suitability evaluation. An artifact represents content adjacent to an ad placement - a news article, podcast segment, video chapter, or social post. Artifacts are collections of assets (text, images, video, audio) plus metadata and signals.
4825
+ */
4826
+ export interface Artifact {
4827
+ property_id: Identifier;
4828
+ /**
4829
+ * Identifier for this artifact within the property. The property owner defines the scheme (e.g., 'article_12345', 'episode_42_segment_3', 'post_abc123').
4830
+ */
4831
+ artifact_id: string;
4832
+ /**
4833
+ * Identifies a specific variant of this artifact. Use for A/B tests, translations, or temporal versions. Examples: 'en', 'es-MX', 'v2', 'headline_test_b'. The combination of artifact_id + variant_id must be unique.
4834
+ */
4835
+ variant_id?: string;
4836
+ format_id?: FormatID;
4837
+ /**
4838
+ * Optional URL for this artifact (web page, podcast feed, video page). Not all artifacts have URLs (e.g., Instagram content, podcast segments, TV scenes).
4839
+ */
4840
+ url?: string;
4841
+ /**
4842
+ * When the artifact was published (ISO 8601 format)
4843
+ */
4844
+ published_time?: string;
4845
+ /**
4846
+ * When the artifact was last modified (ISO 8601 format)
4847
+ */
4848
+ last_update_time?: string;
4849
+ /**
4850
+ * Artifact assets in document flow order - text blocks, images, video, audio
4851
+ */
4852
+ assets: ({
4853
+ type: 'text';
4854
+ /**
4855
+ * Role of this text in the document. Use 'title' for the main artifact title, 'description' for summaries.
4856
+ */
4857
+ role?: 'title' | 'paragraph' | 'heading' | 'caption' | 'quote' | 'list_item' | 'description';
4858
+ /**
4859
+ * Text content
4860
+ */
4861
+ content: string;
4862
+ /**
4863
+ * BCP 47 language tag for this text (e.g., 'en', 'es-MX'). Useful when artifact contains mixed-language content.
4864
+ */
4865
+ language?: string;
4866
+ /**
4867
+ * Heading level (1-6), only for role=heading
4868
+ */
4869
+ heading_level?: number;
4870
+ } | {
4871
+ type: 'image';
4872
+ /**
4873
+ * Image URL
4874
+ */
4875
+ url: string;
4876
+ access?: AssetAccess;
4877
+ /**
4878
+ * Alt text or image description
4879
+ */
4880
+ alt_text?: string;
4881
+ /**
4882
+ * Image caption
4883
+ */
4884
+ caption?: string;
4885
+ /**
4886
+ * Image width in pixels
4887
+ */
4888
+ width?: number;
4889
+ /**
4890
+ * Image height in pixels
4891
+ */
4892
+ height?: number;
4893
+ } | {
4894
+ type: 'video';
4895
+ /**
4896
+ * Video URL
4897
+ */
4898
+ url: string;
4899
+ access?: AssetAccess1;
4900
+ /**
4901
+ * Video duration in milliseconds
4902
+ */
4903
+ duration_ms?: number;
4904
+ /**
4905
+ * Video transcript
4906
+ */
4907
+ transcript?: string;
4908
+ /**
4909
+ * How the transcript was generated
4910
+ */
4911
+ transcript_source?: 'original_script' | 'subtitles' | 'closed_captions' | 'dub' | 'generated';
4912
+ /**
4913
+ * Video thumbnail URL
4914
+ */
4915
+ thumbnail_url?: string;
4916
+ } | {
4917
+ type: 'audio';
4918
+ /**
4919
+ * Audio URL
4920
+ */
4921
+ url: string;
4922
+ access?: AssetAccess2;
4923
+ /**
4924
+ * Audio duration in milliseconds
4925
+ */
4926
+ duration_ms?: number;
4927
+ /**
4928
+ * Audio transcript
4929
+ */
4930
+ transcript?: string;
4931
+ /**
4932
+ * How the transcript was generated
4933
+ */
4934
+ transcript_source?: 'original_script' | 'closed_captions' | 'generated';
4935
+ })[];
4936
+ /**
4937
+ * Rich metadata extracted from the artifact
4938
+ */
4939
+ metadata?: {
4940
+ /**
4941
+ * Canonical URL
4942
+ */
4943
+ canonical?: string;
4944
+ /**
4945
+ * Artifact author name
4946
+ */
4947
+ author?: string;
4948
+ /**
4949
+ * Artifact keywords
4950
+ */
4951
+ keywords?: string;
4952
+ /**
4953
+ * Open Graph protocol metadata
4954
+ */
4955
+ open_graph?: {
4956
+ [k: string]: unknown | undefined;
4957
+ };
4958
+ /**
4959
+ * Twitter Card metadata
4960
+ */
4961
+ twitter_card?: {
4962
+ [k: string]: unknown | undefined;
4963
+ };
4964
+ /**
4965
+ * JSON-LD structured data (schema.org)
4966
+ */
4967
+ json_ld?: {}[];
4968
+ [k: string]: unknown | undefined;
4969
+ };
4970
+ /**
4971
+ * Platform-specific identifiers for this artifact
4972
+ */
4973
+ identifiers?: {
4974
+ /**
4975
+ * Apple Podcasts ID
4976
+ */
4977
+ apple_podcast_id?: string;
4978
+ /**
4979
+ * Spotify show ID
4980
+ */
4981
+ spotify_show_id?: string;
4982
+ /**
4983
+ * Podcast GUID (from RSS feed)
4984
+ */
4985
+ podcast_guid?: string;
4986
+ /**
4987
+ * YouTube video ID
4988
+ */
4989
+ youtube_video_id?: string;
4990
+ /**
4991
+ * RSS feed URL
4992
+ */
4993
+ rss_url?: string;
4994
+ [k: string]: unknown | undefined;
4995
+ };
4996
+ [k: string]: unknown | undefined;
4997
+ }
4998
+ /**
4999
+ * Identifier for the property where this artifact appears
5000
+ */
5001
+ /**
5002
+ * Request parameters for retrieving content safety policies
5003
+ */
5004
+ export interface GetContentStandardsRequest {
5005
+ /**
5006
+ * Identifier for the standards configuration to retrieve
5007
+ */
5008
+ standards_id: string;
5009
+ context?: ContextObject;
5010
+ ext?: ExtensionObject;
5011
+ }
5012
+ /**
5013
+ * 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.
5014
+ */
5015
+ /**
5016
+ * Response payload with content safety policies
5017
+ */
5018
+ export type GetContentStandardsResponse = ContentStandards | {
5019
+ errors: Error[];
5020
+ /**
5021
+ * Field must not be present in error response
5022
+ */
5023
+ standards_id?: {
5024
+ [k: string]: unknown | undefined;
5025
+ };
5026
+ context?: ContextObject;
5027
+ ext?: ExtensionObject;
5028
+ };
5029
+ /**
5030
+ * 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.
5031
+ */
5032
+ /**
5033
+ * 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.
5034
+ */
5035
+ export interface CreateContentStandardsRequest {
5036
+ /**
5037
+ * Where this standards configuration applies
5038
+ */
5039
+ scope: {
5040
+ /**
5041
+ * ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).
5042
+ */
5043
+ countries_all?: string[];
5044
+ /**
5045
+ * Advertising channels. Standards apply to ANY of the listed channels (OR logic).
5046
+ */
5047
+ channels_any?: MediaChannel[];
5048
+ /**
5049
+ * BCP 47 language tags (e.g., 'en', 'de', 'fr'). Standards apply to content in ANY of these languages (OR logic). Content in unlisted languages is not covered by these standards.
5050
+ */
5051
+ languages_any: string[];
5052
+ /**
5053
+ * Human-readable description of this scope
5054
+ */
5055
+ description?: string;
5056
+ };
5057
+ /**
5058
+ * Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments.
5059
+ */
5060
+ policy: string;
5061
+ /**
5062
+ * Training/test set to calibrate policy interpretation. Use URL references for pages to be fetched and analyzed, or full artifacts for pre-extracted content.
5063
+ */
5064
+ calibration_exemplars?: {
5065
+ /**
5066
+ * Content that passes the standards
5067
+ */
5068
+ pass?: ({
5069
+ /**
5070
+ * Indicates this is a URL reference
5071
+ */
5072
+ type: 'url';
5073
+ /**
5074
+ * Full URL to a specific page (e.g., 'https://espn.com/nba/story/_/id/12345/lakers-win')
5075
+ */
5076
+ value: string;
5077
+ /**
5078
+ * BCP 47 language tag for content at this URL
5079
+ */
5080
+ language?: string;
5081
+ } | Artifact)[];
5082
+ /**
5083
+ * Content that fails the standards
5084
+ */
5085
+ fail?: ({
5086
+ /**
5087
+ * Indicates this is a URL reference
5088
+ */
5089
+ type: 'url';
5090
+ /**
5091
+ * Full URL to a specific page (e.g., 'https://news.example.com/controversial-article')
5092
+ */
5093
+ value: string;
5094
+ /**
5095
+ * BCP 47 language tag for content at this URL
5096
+ */
5097
+ language?: string;
5098
+ } | Artifact1)[];
5099
+ };
5100
+ context?: ContextObject;
5101
+ ext?: ExtensionObject;
5102
+ }
5103
+ /**
5104
+ * Full artifact with pre-extracted content (text, images, video, audio)
5105
+ */
5106
+ export interface Artifact1 {
5107
+ property_id: Identifier;
5108
+ /**
5109
+ * Identifier for this artifact within the property. The property owner defines the scheme (e.g., 'article_12345', 'episode_42_segment_3', 'post_abc123').
5110
+ */
5111
+ artifact_id: string;
5112
+ /**
5113
+ * Identifies a specific variant of this artifact. Use for A/B tests, translations, or temporal versions. Examples: 'en', 'es-MX', 'v2', 'headline_test_b'. The combination of artifact_id + variant_id must be unique.
5114
+ */
5115
+ variant_id?: string;
5116
+ format_id?: FormatID;
5117
+ /**
5118
+ * Optional URL for this artifact (web page, podcast feed, video page). Not all artifacts have URLs (e.g., Instagram content, podcast segments, TV scenes).
5119
+ */
5120
+ url?: string;
5121
+ /**
5122
+ * When the artifact was published (ISO 8601 format)
5123
+ */
5124
+ published_time?: string;
5125
+ /**
5126
+ * When the artifact was last modified (ISO 8601 format)
5127
+ */
5128
+ last_update_time?: string;
5129
+ /**
5130
+ * Artifact assets in document flow order - text blocks, images, video, audio
5131
+ */
5132
+ assets: ({
5133
+ type: 'text';
5134
+ /**
5135
+ * Role of this text in the document. Use 'title' for the main artifact title, 'description' for summaries.
5136
+ */
5137
+ role?: 'title' | 'paragraph' | 'heading' | 'caption' | 'quote' | 'list_item' | 'description';
5138
+ /**
5139
+ * Text content
5140
+ */
5141
+ content: string;
5142
+ /**
5143
+ * BCP 47 language tag for this text (e.g., 'en', 'es-MX'). Useful when artifact contains mixed-language content.
5144
+ */
5145
+ language?: string;
5146
+ /**
5147
+ * Heading level (1-6), only for role=heading
5148
+ */
5149
+ heading_level?: number;
5150
+ } | {
5151
+ type: 'image';
5152
+ /**
5153
+ * Image URL
5154
+ */
5155
+ url: string;
5156
+ access?: AssetAccess;
5157
+ /**
5158
+ * Alt text or image description
5159
+ */
5160
+ alt_text?: string;
5161
+ /**
5162
+ * Image caption
5163
+ */
5164
+ caption?: string;
5165
+ /**
5166
+ * Image width in pixels
5167
+ */
5168
+ width?: number;
5169
+ /**
5170
+ * Image height in pixels
5171
+ */
5172
+ height?: number;
5173
+ } | {
5174
+ type: 'video';
5175
+ /**
5176
+ * Video URL
5177
+ */
5178
+ url: string;
5179
+ access?: AssetAccess1;
5180
+ /**
5181
+ * Video duration in milliseconds
5182
+ */
5183
+ duration_ms?: number;
5184
+ /**
5185
+ * Video transcript
5186
+ */
5187
+ transcript?: string;
5188
+ /**
5189
+ * How the transcript was generated
5190
+ */
5191
+ transcript_source?: 'original_script' | 'subtitles' | 'closed_captions' | 'dub' | 'generated';
5192
+ /**
5193
+ * Video thumbnail URL
5194
+ */
5195
+ thumbnail_url?: string;
5196
+ } | {
5197
+ type: 'audio';
5198
+ /**
5199
+ * Audio URL
5200
+ */
5201
+ url: string;
5202
+ access?: AssetAccess2;
5203
+ /**
5204
+ * Audio duration in milliseconds
5205
+ */
5206
+ duration_ms?: number;
5207
+ /**
5208
+ * Audio transcript
5209
+ */
5210
+ transcript?: string;
5211
+ /**
5212
+ * How the transcript was generated
5213
+ */
5214
+ transcript_source?: 'original_script' | 'closed_captions' | 'generated';
5215
+ })[];
5216
+ /**
5217
+ * Rich metadata extracted from the artifact
5218
+ */
5219
+ metadata?: {
5220
+ /**
5221
+ * Canonical URL
5222
+ */
5223
+ canonical?: string;
5224
+ /**
5225
+ * Artifact author name
5226
+ */
5227
+ author?: string;
5228
+ /**
5229
+ * Artifact keywords
5230
+ */
5231
+ keywords?: string;
5232
+ /**
5233
+ * Open Graph protocol metadata
5234
+ */
5235
+ open_graph?: {
5236
+ [k: string]: unknown | undefined;
5237
+ };
5238
+ /**
5239
+ * Twitter Card metadata
5240
+ */
5241
+ twitter_card?: {
5242
+ [k: string]: unknown | undefined;
5243
+ };
5244
+ /**
5245
+ * JSON-LD structured data (schema.org)
5246
+ */
5247
+ json_ld?: {}[];
5248
+ [k: string]: unknown | undefined;
5249
+ };
5250
+ /**
5251
+ * Platform-specific identifiers for this artifact
5252
+ */
5253
+ identifiers?: {
5254
+ /**
5255
+ * Apple Podcasts ID
5256
+ */
5257
+ apple_podcast_id?: string;
5258
+ /**
5259
+ * Spotify show ID
5260
+ */
5261
+ spotify_show_id?: string;
5262
+ /**
5263
+ * Podcast GUID (from RSS feed)
5264
+ */
5265
+ podcast_guid?: string;
5266
+ /**
5267
+ * YouTube video ID
5268
+ */
5269
+ youtube_video_id?: string;
5270
+ /**
5271
+ * RSS feed URL
5272
+ */
5273
+ rss_url?: string;
5274
+ [k: string]: unknown | undefined;
5275
+ };
5276
+ [k: string]: unknown | undefined;
5277
+ }
5278
+ /**
5279
+ * 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.
5280
+ */
5281
+ /**
5282
+ * Response payload for creating a content standards configuration
5283
+ */
5284
+ export type CreateContentStandardsResponse = {
5285
+ /**
5286
+ * Unique identifier for the created standards configuration
5287
+ */
5288
+ standards_id: string;
5289
+ /**
5290
+ * Field must not be present in success response
5291
+ */
5292
+ errors?: {
5293
+ [k: string]: unknown | undefined;
5294
+ };
5295
+ context?: ContextObject;
5296
+ ext?: ExtensionObject;
5297
+ } | {
5298
+ errors: Error[];
5299
+ /**
5300
+ * If the error is a scope conflict, the ID of the existing standards that conflict
5301
+ */
5302
+ conflicting_standards_id?: string;
5303
+ /**
5304
+ * Field must not be present in error response
5305
+ */
5306
+ standards_id?: {
5307
+ [k: string]: unknown | undefined;
5308
+ };
5309
+ context?: ContextObject;
5310
+ ext?: ExtensionObject;
5311
+ };
5312
+ /**
5313
+ * 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.
5314
+ */
5315
+ /**
5316
+ * 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.
5317
+ */
5318
+ export interface UpdateContentStandardsRequest {
5319
+ /**
5320
+ * ID of the standards configuration to update
5321
+ */
5322
+ standards_id: string;
5323
+ /**
5324
+ * Updated scope for where this standards configuration applies
5325
+ */
5326
+ scope?: {
5327
+ /**
5328
+ * ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).
5329
+ */
5330
+ countries_all?: string[];
5331
+ /**
5332
+ * Advertising channels. Standards apply to ANY of the listed channels (OR logic).
5333
+ */
5334
+ channels_any?: MediaChannel[];
5335
+ /**
5336
+ * BCP 47 language tags (e.g., 'en', 'de', 'fr'). Standards apply to content in ANY of these languages (OR logic). Content in unlisted languages is not covered by these standards.
5337
+ */
5338
+ languages_any?: string[];
5339
+ /**
5340
+ * Human-readable description of this scope
5341
+ */
5342
+ description?: string;
5343
+ };
5344
+ /**
5345
+ * Updated natural language policy describing acceptable and unacceptable content contexts.
5346
+ */
5347
+ policy?: string;
5348
+ /**
5349
+ * Updated training/test set to calibrate policy interpretation. Use URL references for pages to be fetched and analyzed, or full artifacts for pre-extracted content.
5350
+ */
5351
+ calibration_exemplars?: {
5352
+ /**
5353
+ * Content that passes the standards
5354
+ */
5355
+ pass?: ({
5356
+ /**
5357
+ * Indicates this is a URL reference
5358
+ */
5359
+ type: 'url';
5360
+ /**
5361
+ * Full URL to a specific page (e.g., 'https://espn.com/nba/story/_/id/12345/lakers-win')
5362
+ */
5363
+ value: string;
5364
+ /**
5365
+ * BCP 47 language tag for content at this URL
5366
+ */
5367
+ language?: string;
5368
+ } | Artifact)[];
5369
+ /**
5370
+ * Content that fails the standards
5371
+ */
5372
+ fail?: ({
5373
+ /**
5374
+ * Indicates this is a URL reference
5375
+ */
5376
+ type: 'url';
5377
+ /**
5378
+ * Full URL to a specific page (e.g., 'https://news.example.com/controversial-article')
5379
+ */
5380
+ value: string;
5381
+ /**
5382
+ * BCP 47 language tag for content at this URL
5383
+ */
5384
+ language?: string;
5385
+ } | Artifact1)[];
5386
+ };
5387
+ context?: ContextObject;
5388
+ ext?: ExtensionObject;
5389
+ }
5390
+ /**
5391
+ * Full artifact with pre-extracted content (text, images, video, audio)
5392
+ */
5393
+ /**
5394
+ * Response from updating a content standards configuration
5395
+ */
5396
+ export interface UpdateContentStandardsResponse {
5397
+ /**
5398
+ * ID of the updated standards configuration
5399
+ */
5400
+ standards_id?: string;
5401
+ /**
5402
+ * Errors that occurred during the update
5403
+ */
5404
+ errors?: Error[];
5405
+ /**
5406
+ * If scope change conflicts with another configuration, the ID of the conflicting standards
5407
+ */
5408
+ conflicting_standards_id?: string;
5409
+ context?: ContextObject;
5410
+ ext?: ExtensionObject;
5411
+ }
5412
+ /**
5413
+ * Standard error structure for task-specific errors and warnings
5414
+ */
5415
+ /**
5416
+ * Type of identifier
5417
+ */
5418
+ export interface CalibrateContentRequest {
5419
+ /**
5420
+ * Standards configuration to calibrate against
5421
+ */
5422
+ standards_id: string;
5423
+ artifact: Artifact;
5424
+ }
5425
+ /**
5426
+ * Artifact to evaluate
5427
+ */
5428
+ /**
5429
+ * Response payload with verdict and detailed explanations for collaborative calibration
5430
+ */
5431
+ export type CalibrateContentResponse = {
5432
+ /**
5433
+ * Overall pass/fail verdict for the content evaluation
5434
+ */
5435
+ verdict: 'pass' | 'fail';
5436
+ /**
5437
+ * Model confidence in the verdict (0-1)
5438
+ */
5439
+ confidence?: number;
5440
+ /**
5441
+ * Detailed natural language explanation of the decision
5442
+ */
5443
+ explanation?: string;
5444
+ /**
5445
+ * Per-feature breakdown with explanations
5446
+ */
5447
+ features?: {
5448
+ /**
5449
+ * Which feature was evaluated (e.g., brand_safety, brand_suitability, competitor_adjacency)
5450
+ */
5451
+ feature_id: string;
5452
+ /**
5453
+ * Evaluation status for this feature
5454
+ */
5455
+ status: 'passed' | 'failed' | 'warning' | 'unevaluated';
5456
+ /**
5457
+ * Human-readable explanation of why this feature passed or failed
5458
+ */
5459
+ explanation?: string;
5460
+ }[];
5461
+ /**
5462
+ * Field must not be present in success response
5463
+ */
5464
+ errors?: {
5465
+ [k: string]: unknown | undefined;
5466
+ };
5467
+ } | {
5468
+ errors: Error[];
5469
+ /**
5470
+ * Field must not be present in error response
5471
+ */
5472
+ verdict?: {
5473
+ [k: string]: unknown | undefined;
5474
+ };
5475
+ };
5476
+ /**
5477
+ * Standard error structure for task-specific errors and warnings
5478
+ */
5479
+ /**
5480
+ * Type of identifier
5481
+ */
5482
+ export interface ValidateContentDeliveryRequest {
5483
+ /**
5484
+ * Standards configuration to validate against
5485
+ */
5486
+ standards_id: string;
5487
+ /**
5488
+ * Delivery records to validate (max 10,000)
5489
+ *
5490
+ * @maxItems 10000
5491
+ */
5492
+ records: {
5493
+ /**
5494
+ * Unique identifier for this delivery record
5495
+ */
5496
+ record_id: string;
5497
+ /**
5498
+ * Media buy this record belongs to (when batching across multiple buys)
5499
+ */
5500
+ media_buy_id?: string;
5501
+ /**
5502
+ * When the delivery occurred
5503
+ */
5504
+ timestamp?: string;
5505
+ artifact: Artifact;
5506
+ /**
5507
+ * ISO 3166-1 alpha-2 country code where delivery occurred
5508
+ */
5509
+ country?: string;
5510
+ /**
5511
+ * Channel type (e.g., display, video, audio, social)
5512
+ */
5513
+ channel?: string;
5514
+ /**
5515
+ * Brand information for policy evaluation. Schema TBD - placeholder for brand identifiers.
5516
+ */
5517
+ brand_context?: {
5518
+ /**
5519
+ * Brand identifier
5520
+ */
5521
+ brand_id?: string;
5522
+ /**
5523
+ * Product/SKU identifier if applicable
5524
+ */
5525
+ sku_id?: string;
5526
+ };
5527
+ }[];
5528
+ /**
5529
+ * Specific features to evaluate (defaults to all)
5530
+ */
5531
+ feature_ids?: string[];
5532
+ /**
5533
+ * Include passed records in results
5534
+ */
5535
+ include_passed?: boolean;
5536
+ context?: ContextObject;
5537
+ ext?: ExtensionObject;
5538
+ }
5539
+ /**
5540
+ * Artifact where ad was delivered
5541
+ */
5542
+ /**
5543
+ * Response payload with per-record verdicts and optional feature breakdown
5544
+ */
5545
+ export type ValidateContentDeliveryResponse = {
5546
+ /**
5547
+ * Summary counts across all records
5548
+ */
5549
+ summary: {
5550
+ total_records: number;
5551
+ passed_records: number;
5552
+ failed_records: number;
5553
+ };
5554
+ /**
5555
+ * Per-record evaluation results
5556
+ */
5557
+ results: {
5558
+ /**
5559
+ * Which delivery record was evaluated
5560
+ */
5561
+ record_id: string;
5562
+ /**
5563
+ * Overall pass/fail verdict for this record
5564
+ */
5565
+ verdict: 'pass' | 'fail';
5566
+ /**
5567
+ * Optional feature-level breakdown
5568
+ */
5569
+ features?: {
5570
+ feature_id: string;
5571
+ status: 'passed' | 'failed' | 'warning' | 'unevaluated';
5572
+ value?: unknown;
5573
+ message?: string;
5574
+ /**
5575
+ * Which rule triggered this result (e.g., GARM category, Scope3 standard)
5576
+ */
5577
+ rule_id?: string;
5578
+ }[];
5579
+ }[];
5580
+ /**
5581
+ * Field must not be present in success response
5582
+ */
5583
+ errors?: {
5584
+ [k: string]: unknown | undefined;
5585
+ };
5586
+ context?: ContextObject;
5587
+ ext?: ExtensionObject;
5588
+ } | {
5589
+ errors: Error[];
5590
+ /**
5591
+ * Field must not be present in error response
5592
+ */
5593
+ summary?: {
5594
+ [k: string]: unknown | undefined;
5595
+ };
5596
+ context?: ContextObject;
5597
+ ext?: ExtensionObject;
5598
+ };
5599
+ /**
5600
+ * 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.
5601
+ */
5602
+ /**
5603
+ * Request parameters for retrieving content artifacts from a media buy for validation
5604
+ */
5605
+ export interface GetMediaBuyArtifactsRequest {
5606
+ /**
5607
+ * Media buy to get artifacts from
5608
+ */
5609
+ media_buy_id: string;
5610
+ /**
5611
+ * Filter to specific packages within the media buy
5612
+ */
5613
+ package_ids?: string[];
5614
+ /**
5615
+ * Sampling parameters. Defaults to the sampling rate agreed in the media buy.
5616
+ */
5617
+ sampling?: {
5618
+ /**
5619
+ * Sampling rate (0-1). 1.0 = all deliveries, 0.25 = 25% sample.
5620
+ */
5621
+ rate?: number;
5622
+ /**
5623
+ * How to select the sample
5624
+ */
5625
+ method?: 'random' | 'stratified' | 'recent' | 'failures_only';
5626
+ };
5627
+ /**
5628
+ * Filter to specific time period
5629
+ */
5630
+ time_range?: {
5631
+ /**
5632
+ * Start of time range (inclusive)
5633
+ */
5634
+ start?: string;
5635
+ /**
5636
+ * End of time range (exclusive)
5637
+ */
5638
+ end?: string;
5639
+ };
5640
+ /**
5641
+ * Maximum artifacts to return per request
5642
+ */
5643
+ limit?: number;
5644
+ /**
5645
+ * Pagination cursor for fetching subsequent pages
5646
+ */
5647
+ cursor?: string;
5648
+ context?: ContextObject;
5649
+ ext?: ExtensionObject;
5650
+ }
5651
+ /**
5652
+ * 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.
5653
+ */
5654
+ /**
5655
+ * Response containing content artifacts from a media buy for validation
5656
+ */
5657
+ export type GetMediaBuyArtifactsResponse = {
5658
+ /**
5659
+ * Media buy these artifacts belong to
5660
+ */
5661
+ media_buy_id: string;
5662
+ /**
5663
+ * Delivery records with full artifact content
5664
+ */
5665
+ artifacts: {
5666
+ /**
5667
+ * Unique identifier for this delivery record
5668
+ */
5669
+ record_id: string;
5670
+ /**
5671
+ * When the delivery occurred
5672
+ */
5673
+ timestamp?: string;
5674
+ /**
5675
+ * Which package this delivery belongs to
5676
+ */
5677
+ package_id?: string;
5678
+ artifact: Artifact;
5679
+ /**
5680
+ * ISO 3166-1 alpha-2 country code where delivery occurred
5681
+ */
5682
+ country?: string;
5683
+ /**
5684
+ * Channel type (e.g., display, video, audio, social)
5685
+ */
5686
+ channel?: string;
5687
+ /**
5688
+ * Brand information for policy evaluation. Schema TBD - placeholder for brand identifiers.
5689
+ */
5690
+ brand_context?: {
5691
+ /**
5692
+ * Brand identifier
5693
+ */
5694
+ brand_id?: string;
5695
+ /**
5696
+ * Product/SKU identifier if applicable
5697
+ */
5698
+ sku_id?: string;
5699
+ };
5700
+ /**
5701
+ * Seller's local model verdict for this artifact
5702
+ */
5703
+ local_verdict?: 'pass' | 'fail' | 'unevaluated';
5704
+ }[];
5705
+ /**
5706
+ * Information about how the sample was generated
5707
+ */
5708
+ sampling_info?: {
5709
+ /**
5710
+ * Total deliveries in the time range
5711
+ */
5712
+ total_deliveries?: number;
5713
+ /**
5714
+ * Number of artifacts in this response
5715
+ */
5716
+ sampled_count?: number;
5717
+ /**
5718
+ * Actual sampling rate achieved
5719
+ */
5720
+ effective_rate?: number;
5721
+ /**
5722
+ * Sampling method used
5723
+ */
5724
+ method?: 'random' | 'stratified' | 'recent' | 'failures_only';
5725
+ };
5726
+ /**
5727
+ * Pagination information for large result sets
5728
+ */
5729
+ pagination?: {
5730
+ /**
5731
+ * Cursor for fetching the next page
5732
+ */
5733
+ cursor?: string;
5734
+ /**
5735
+ * Whether more results are available
5736
+ */
5737
+ has_more?: boolean;
5738
+ };
5739
+ /**
5740
+ * Field must not be present in success response
5741
+ */
5742
+ errors?: {
5743
+ [k: string]: unknown | undefined;
5744
+ };
5745
+ context?: ContextObject;
5746
+ ext?: ExtensionObject;
5747
+ } | {
5748
+ errors: Error[];
5749
+ /**
5750
+ * Field must not be present in error response
5751
+ */
5752
+ media_buy_id?: {
5753
+ [k: string]: unknown | undefined;
5754
+ };
5755
+ context?: ContextObject;
5756
+ ext?: ExtensionObject;
5757
+ };
5758
+ /**
5759
+ * Type of identifier
5760
+ */
5761
+ /**
5762
+ * Get offering details and availability before session handoff. Returns offering information, availability status, and optionally matching products based on context.
5763
+ */
5764
+ export interface SIGetOfferingRequest {
5765
+ /**
5766
+ * Offering identifier from promoted offerings to get details for
5767
+ */
5768
+ offering_id: string;
5769
+ /**
5770
+ * Optional natural language context about user intent for personalized results (e.g., 'mens size 14 near Cincinnati'). Must be anonymous - no PII.
5771
+ */
5772
+ context?: string;
5773
+ /**
5774
+ * Whether to include matching products in the response
5775
+ */
5776
+ include_products?: boolean;
5777
+ /**
5778
+ * Maximum number of matching products to return
5779
+ */
5780
+ product_limit?: number;
5781
+ ext?: ExtensionObject;
5782
+ }
5783
+ /**
5784
+ * 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.
5785
+ */
5786
+ /**
5787
+ * Offering details, availability status, and optionally matching products. Use the offering_token in si_initiate_session for correlation.
5788
+ */
5789
+ export interface SIGetOfferingResponse {
5790
+ /**
5791
+ * Whether the offering is currently available
5792
+ */
5793
+ available: boolean;
5794
+ /**
5795
+ * Token to pass to si_initiate_session for session continuity. Brand stores the full query context server-side (products shown, order, context) so they can resolve references like 'the second one' when the session starts.
5796
+ */
5797
+ offering_token?: string;
5798
+ /**
5799
+ * How long this offering information is valid (seconds). Host should re-fetch after TTL expires.
5800
+ */
5801
+ ttl_seconds?: number;
5802
+ /**
5803
+ * When this offering information was retrieved
5804
+ */
5805
+ checked_at?: string;
5806
+ /**
5807
+ * Offering details
5808
+ */
5809
+ offering?: {
5810
+ /**
5811
+ * Offering identifier
5812
+ */
5813
+ offering_id?: string;
5814
+ /**
5815
+ * Offering title
5816
+ */
5817
+ title?: string;
5818
+ /**
5819
+ * Brief summary of the offering
5820
+ */
5821
+ summary?: string;
5822
+ /**
5823
+ * Short promotional tagline
5824
+ */
5825
+ tagline?: string;
5826
+ /**
5827
+ * When this offering expires
5828
+ */
5829
+ expires_at?: string;
5830
+ /**
5831
+ * Price indication (e.g., 'from $199', '50% off')
5832
+ */
5833
+ price_hint?: string;
5834
+ /**
5835
+ * Hero image for the offering
5836
+ */
5837
+ image_url?: string;
5838
+ /**
5839
+ * Landing page URL
5840
+ */
5841
+ landing_url?: string;
5842
+ };
5843
+ /**
5844
+ * Products matching the request context. Only included if include_products was true.
5845
+ */
5846
+ matching_products?: {
5847
+ /**
5848
+ * Product identifier
5849
+ */
5850
+ product_id: string;
5851
+ /**
5852
+ * Product name
5853
+ */
5854
+ name: string;
5855
+ /**
5856
+ * Display price (e.g., '$129', '$89.99')
5857
+ */
5858
+ price?: string;
5859
+ /**
5860
+ * Original price if on sale
5861
+ */
5862
+ original_price?: string;
5863
+ /**
5864
+ * Product image
5865
+ */
5866
+ image_url?: string;
5867
+ /**
5868
+ * Brief availability info (e.g., 'In stock', 'Size 14 available', '3 left')
5869
+ */
5870
+ availability_summary?: string;
5871
+ /**
5872
+ * Product detail page URL
5873
+ */
5874
+ url?: string;
5875
+ }[];
5876
+ /**
5877
+ * Total number of products matching the context (may be more than returned in matching_products)
5878
+ */
5879
+ total_matching?: number;
5880
+ /**
5881
+ * If not available, why (e.g., 'expired', 'sold_out', 'region_restricted')
5882
+ */
5883
+ unavailable_reason?: string;
5884
+ /**
5885
+ * Alternative offerings to consider if this one is unavailable
5886
+ */
5887
+ alternative_offering_ids?: string[];
5888
+ /**
5889
+ * Errors during offering lookup
5890
+ */
5891
+ errors?: Error[];
5892
+ ext?: ExtensionObject;
5893
+ }
5894
+ /**
5895
+ * Standard error structure for task-specific errors and warnings
5896
+ */
5897
+ /**
5898
+ * Host initiates a session with a brand agent
5899
+ */
5900
+ export interface SIInitiateSessionRequest {
5901
+ /**
5902
+ * Conversation handoff from the host describing what the user needs
5903
+ */
5904
+ context: string;
5905
+ identity: SIIdentity;
5906
+ /**
5907
+ * AdCP media buy ID if session was triggered by advertising
5908
+ */
5909
+ media_buy_id?: string;
5910
+ /**
5911
+ * Where this session was triggered (e.g., 'chatgpt_search', 'claude_chat')
5912
+ */
5913
+ placement?: string;
5914
+ /**
5915
+ * Brand-specific offering identifier to apply
5916
+ */
5917
+ offering_id?: string;
5918
+ supported_capabilities?: SICapabilities;
5919
+ /**
5920
+ * Token from si_get_offering response for session continuity. Brand uses this to recall what products were shown to the user, enabling natural references like 'the second one' or 'that blue shoe'.
5921
+ */
5922
+ offering_token?: string;
5923
+ ext?: ExtensionObject;
5924
+ }
5925
+ /**
5926
+ * User identity shared with brand agent (with explicit consent)
5927
+ */
5928
+ export interface SIIdentity {
5929
+ /**
5930
+ * Whether user consented to share identity
5931
+ */
5932
+ consent_granted: boolean;
5933
+ /**
5934
+ * When consent was granted (ISO 8601)
5935
+ */
5936
+ consent_timestamp?: string;
5937
+ /**
5938
+ * What data was consented to share
5939
+ */
5940
+ consent_scope?: ('name' | 'email' | 'shipping_address' | 'phone' | 'locale')[];
5941
+ /**
5942
+ * Brand privacy policy acknowledgment
5943
+ */
5944
+ privacy_policy_acknowledged?: {
5945
+ /**
5946
+ * URL to brand's privacy policy
5947
+ */
5948
+ brand_policy_url?: string;
5949
+ /**
5950
+ * Version of policy acknowledged
5951
+ */
5952
+ brand_policy_version?: string;
5953
+ [k: string]: unknown | undefined;
5954
+ };
5955
+ /**
5956
+ * User data (only present if consent_granted is true)
5957
+ */
5958
+ user?: {
5959
+ /**
5960
+ * User's email address
5961
+ */
5962
+ email?: string;
5963
+ /**
5964
+ * User's display name
5965
+ */
5966
+ name?: string;
5967
+ /**
5968
+ * User's locale (e.g., en-US)
5969
+ */
5970
+ locale?: string;
5971
+ /**
5972
+ * User's phone number
5973
+ */
5974
+ phone?: string;
5975
+ /**
5976
+ * User's shipping address for accurate pricing
5977
+ */
5978
+ shipping_address?: {
5979
+ street?: string;
5980
+ city?: string;
5981
+ state?: string;
5982
+ postal_code?: string;
5983
+ country?: string;
5984
+ [k: string]: unknown | undefined;
5985
+ };
5986
+ [k: string]: unknown | undefined;
5987
+ };
5988
+ /**
5989
+ * Session ID for anonymous users (when consent_granted is false)
5990
+ */
5991
+ anonymous_session_id?: string;
5992
+ [k: string]: unknown | undefined;
5993
+ }
5994
+ /**
5995
+ * What capabilities the host supports
5996
+ */
5997
+ export interface SICapabilities {
5998
+ /**
5999
+ * Interaction modalities supported
6000
+ */
6001
+ modalities?: {
6002
+ /**
6003
+ * Pure text exchange - the baseline modality
6004
+ */
6005
+ conversational?: boolean;
6006
+ /**
6007
+ * Audio-based interaction using brand voice
6008
+ */
6009
+ voice?: boolean | {
6010
+ /**
6011
+ * TTS provider (elevenlabs, openai, etc.)
6012
+ */
6013
+ provider?: string;
6014
+ /**
6015
+ * Brand voice identifier
6016
+ */
6017
+ voice_id?: string;
6018
+ [k: string]: unknown | undefined;
6019
+ };
6020
+ /**
6021
+ * Brand video content playback
6022
+ */
6023
+ video?: boolean | {
6024
+ /**
6025
+ * Supported video formats (mp4, webm, etc.)
6026
+ */
6027
+ formats?: string[];
6028
+ /**
6029
+ * Maximum video duration
6030
+ */
6031
+ max_duration_seconds?: number;
6032
+ [k: string]: unknown | undefined;
6033
+ };
6034
+ /**
6035
+ * Animated video presence with brand avatar
6036
+ */
6037
+ avatar?: boolean | {
6038
+ /**
6039
+ * Avatar provider (d-id, heygen, synthesia, etc.)
6040
+ */
6041
+ provider?: string;
6042
+ /**
6043
+ * Brand avatar identifier
6044
+ */
6045
+ avatar_id?: string;
6046
+ [k: string]: unknown | undefined;
6047
+ };
6048
+ [k: string]: unknown | undefined;
6049
+ };
6050
+ /**
6051
+ * Visual components supported
6052
+ */
6053
+ components?: {
6054
+ /**
6055
+ * Standard components that all SI hosts must render
6056
+ */
6057
+ standard?: ('text' | 'link' | 'image' | 'product_card' | 'carousel' | 'action_button')[];
6058
+ /**
6059
+ * Platform-specific extensions (chatgpt_apps_sdk, maps, forms, etc.)
6060
+ */
6061
+ extensions?: {
6062
+ [k: string]: unknown | undefined;
6063
+ };
6064
+ [k: string]: unknown | undefined;
6065
+ };
6066
+ /**
6067
+ * Commerce capabilities
6068
+ */
6069
+ commerce?: {
6070
+ /**
6071
+ * Supports ACP (Agentic Commerce Protocol) checkout handoff
6072
+ */
6073
+ acp_checkout?: boolean;
6074
+ [k: string]: unknown | undefined;
6075
+ };
6076
+ [k: string]: unknown | undefined;
6077
+ }
6078
+ /**
6079
+ * 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.
6080
+ */
6081
+ /**
6082
+ * Standard visual component that brand returns and host renders
6083
+ */
6084
+ export type SIUIElement = {
6085
+ [k: string]: unknown | undefined;
6086
+ } & {
6087
+ /**
6088
+ * Component type
6089
+ */
6090
+ type: 'text' | 'link' | 'image' | 'product_card' | 'carousel' | 'action_button' | 'app_handoff' | 'integration_actions';
6091
+ /**
6092
+ * Component-specific data
6093
+ */
6094
+ data?: {
6095
+ [k: string]: unknown | undefined;
6096
+ };
6097
+ [k: string]: unknown | undefined;
6098
+ };
6099
+ /**
6100
+ * Brand agent's response to session initiation
6101
+ */
6102
+ export interface SIInitiateSessionResponse {
6103
+ /**
6104
+ * Unique session identifier for subsequent messages
6105
+ */
6106
+ session_id: string;
6107
+ /**
6108
+ * Brand agent's initial response
6109
+ */
6110
+ response?: {
6111
+ /**
6112
+ * Conversational message from brand agent
6113
+ */
6114
+ message?: string;
6115
+ /**
6116
+ * Visual components to render
6117
+ */
6118
+ ui_elements?: SIUIElement[];
6119
+ };
6120
+ negotiated_capabilities?: SICapabilities;
6121
+ /**
6122
+ * Errors during session initiation
6123
+ */
6124
+ errors?: Error[];
6125
+ ext?: ExtensionObject;
6126
+ }
6127
+ /**
6128
+ * Intersection of brand and host capabilities for this session
6129
+ */
6130
+ /**
6131
+ * Send a message to the brand agent within an active session
6132
+ */
6133
+ export type SISendMessageRequest = {
6134
+ [k: string]: unknown | undefined;
6135
+ } & {
6136
+ /**
6137
+ * Active session identifier
6138
+ */
6139
+ session_id: string;
6140
+ /**
6141
+ * User's message to the brand agent
6142
+ */
6143
+ message?: string;
6144
+ /**
6145
+ * Response to a previous action_button (e.g., user clicked checkout)
6146
+ */
6147
+ action_response?: {
6148
+ /**
6149
+ * The action that was triggered
6150
+ */
6151
+ action?: string;
6152
+ /**
6153
+ * Action-specific response data
6154
+ */
6155
+ payload?: {};
6156
+ };
6157
+ ext?: ExtensionObject;
6158
+ };
6159
+ /**
6160
+ * 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.
6161
+ */
6162
+ /**
6163
+ * Standard visual component that brand returns and host renders
6164
+ */
6165
+ export interface SISendMessageResponse {
6166
+ /**
6167
+ * Session identifier
6168
+ */
6169
+ session_id: string;
6170
+ /**
6171
+ * Brand agent's response
6172
+ */
6173
+ response?: {
6174
+ /**
6175
+ * Conversational message from brand agent
6176
+ */
6177
+ message?: string;
6178
+ /**
6179
+ * Visual components to render
6180
+ */
6181
+ ui_elements?: SIUIElement[];
6182
+ };
6183
+ /**
6184
+ * Current session status
6185
+ */
6186
+ session_status: 'active' | 'pending_handoff' | 'complete';
6187
+ /**
6188
+ * Handoff request when session_status is pending_handoff
6189
+ */
6190
+ handoff?: {
6191
+ /**
6192
+ * Type of handoff: transaction (ready for ACP checkout) or complete (conversation done)
6193
+ */
6194
+ type?: 'transaction' | 'complete';
6195
+ /**
6196
+ * For transaction handoffs: what the user wants to purchase
6197
+ */
6198
+ intent?: {
6199
+ /**
6200
+ * The commerce action (e.g., 'purchase')
6201
+ */
6202
+ action?: string;
6203
+ /**
6204
+ * Product details for checkout
6205
+ */
6206
+ product?: {};
6207
+ /**
6208
+ * Price information
6209
+ */
6210
+ price?: {
6211
+ amount?: number;
6212
+ currency?: string;
6213
+ };
6214
+ };
6215
+ /**
6216
+ * Context to pass to ACP for seamless checkout
6217
+ */
6218
+ context_for_checkout?: {
6219
+ /**
6220
+ * Summary of the conversation leading to purchase
6221
+ */
6222
+ conversation_summary?: string;
6223
+ /**
6224
+ * Offer IDs that were applied during the conversation
6225
+ */
6226
+ applied_offers?: string[];
6227
+ };
6228
+ };
6229
+ errors?: Error[];
6230
+ ext?: ExtensionObject;
6231
+ }
6232
+ /**
6233
+ * Standard error structure for task-specific errors and warnings
6234
+ */
6235
+ /**
6236
+ * Request to terminate an SI session
6237
+ */
6238
+ export interface SITerminateSessionRequest {
6239
+ /**
6240
+ * Session identifier to terminate
6241
+ */
6242
+ session_id: string;
6243
+ /**
6244
+ * Reason for termination
6245
+ */
6246
+ reason: 'handoff_transaction' | 'handoff_complete' | 'user_exit' | 'session_timeout' | 'host_terminated';
6247
+ /**
6248
+ * Context for the termination
6249
+ */
6250
+ termination_context?: {
6251
+ /**
6252
+ * Summary of the conversation
6253
+ */
6254
+ summary?: string;
6255
+ /**
6256
+ * For handoff_transaction - what user wants to buy
6257
+ */
6258
+ transaction_intent?: {
6259
+ action?: 'purchase' | 'subscribe';
6260
+ /**
6261
+ * Product/service details
6262
+ */
6263
+ product?: {};
6264
+ };
6265
+ /**
6266
+ * For host_terminated - why host ended session
6267
+ */
6268
+ cause?: string;
6269
+ };
6270
+ ext?: ExtensionObject;
6271
+ }
6272
+ /**
6273
+ * 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.
6274
+ */
6275
+ /**
6276
+ * Confirmation of session termination
6277
+ */
6278
+ export interface SITerminateSessionResponse {
6279
+ /**
6280
+ * Terminated session identifier
6281
+ */
6282
+ session_id: string;
6283
+ /**
6284
+ * Whether session was successfully terminated
6285
+ */
6286
+ terminated: boolean;
6287
+ /**
6288
+ * ACP checkout handoff data (for handoff_transaction)
6289
+ */
6290
+ acp_handoff?: {
6291
+ /**
6292
+ * ACP checkout initiation URL
6293
+ */
6294
+ checkout_url?: string;
6295
+ /**
6296
+ * Token for ACP checkout flow
6297
+ */
6298
+ checkout_token?: string;
6299
+ /**
6300
+ * Product details for checkout
6301
+ */
6302
+ product?: {};
6303
+ };
6304
+ /**
6305
+ * Suggested follow-up actions
6306
+ */
6307
+ follow_up?: {
6308
+ action?: 'save_for_later' | 'set_reminder' | 'subscribe_updates' | 'none';
6309
+ /**
6310
+ * Data for follow-up action
6311
+ */
6312
+ data?: {};
6313
+ };
6314
+ errors?: Error[];
6315
+ ext?: ExtensionObject;
6316
+ }
6317
+ /**
6318
+ * Standard error structure for task-specific errors and warnings
6319
+ */
6320
+ /**
6321
+ * Request payload for get_adcp_capabilities task. Protocol-level capability discovery that works across all AdCP protocols.
6322
+ */
6323
+ export interface GetAdCPCapabilitiesRequest {
6324
+ /**
6325
+ * Specific protocols to query capabilities for. If omitted, returns capabilities for all supported protocols.
6326
+ */
6327
+ protocols?: ('media_buy' | 'signals' | 'sponsored_intelligence')[];
6328
+ context?: ContextObject;
6329
+ ext?: ExtensionObject;
6330
+ }
6331
+ /**
6332
+ * 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.
6333
+ */
6334
+ /**
6335
+ * 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.
6336
+ */
6337
+ export interface GetAdCPCapabilitiesResponse {
6338
+ /**
6339
+ * Core AdCP protocol information
6340
+ */
6341
+ adcp: {
6342
+ /**
6343
+ * AdCP major versions supported by this seller. Major versions indicate breaking changes.
6344
+ */
6345
+ major_versions: number[];
6346
+ };
6347
+ /**
6348
+ * Which AdCP domain protocols this seller supports
6349
+ */
6350
+ supported_protocols: ('media_buy' | 'signals' | 'governance' | 'sponsored_intelligence')[];
6351
+ /**
6352
+ * Media-buy protocol capabilities. Only present if media_buy is in supported_protocols.
6353
+ */
6354
+ media_buy?: {
6355
+ features?: MediaBuyFeatures;
6356
+ /**
6357
+ * Technical execution capabilities for media buying
6358
+ */
6359
+ execution?: {
6360
+ /**
6361
+ * Agentic ad exchange (AXE) integrations supported. URLs are canonical identifiers for exchanges this seller can execute through.
6362
+ */
6363
+ axe_integrations?: string[];
6364
+ /**
6365
+ * Creative specification support
6366
+ */
6367
+ creative_specs?: {
6368
+ /**
6369
+ * VAST versions supported for video creatives
6370
+ */
6371
+ vast_versions?: string[];
6372
+ /**
6373
+ * MRAID versions supported for rich media mobile creatives
6374
+ */
6375
+ mraid_versions?: string[];
6376
+ /**
6377
+ * VPAID support for interactive video ads
6378
+ */
6379
+ vpaid?: boolean;
6380
+ /**
6381
+ * SIMID support for interactive video ads
6382
+ */
6383
+ simid?: boolean;
6384
+ };
6385
+ /**
6386
+ * Targeting capabilities. If declared true/supported, buyer can use these targeting parameters and seller MUST honor them.
6387
+ */
6388
+ targeting?: {
6389
+ /**
6390
+ * Supports country-level geo targeting using ISO 3166-1 alpha-2 codes (e.g., 'US', 'GB', 'DE')
6391
+ */
6392
+ geo_countries?: boolean;
6393
+ /**
6394
+ * Supports region/state-level geo targeting using ISO 3166-2 subdivision codes (e.g., 'US-NY', 'GB-SCT', 'DE-BY')
6395
+ */
6396
+ geo_regions?: boolean;
6397
+ /**
6398
+ * Metro area targeting support. Specifies which classification systems are supported.
6399
+ */
6400
+ geo_metros?: {
6401
+ /**
6402
+ * Supports Nielsen DMA codes (US market, e.g., '501' for NYC)
6403
+ */
6404
+ nielsen_dma?: boolean;
6405
+ /**
6406
+ * Supports UK ITL Level 1 regions
6407
+ */
6408
+ uk_itl1?: boolean;
6409
+ /**
6410
+ * Supports UK ITL Level 2 regions
6411
+ */
6412
+ uk_itl2?: boolean;
6413
+ /**
6414
+ * Supports Eurostat NUTS Level 2 regions (EU)
6415
+ */
6416
+ eurostat_nuts2?: boolean;
6417
+ };
6418
+ /**
6419
+ * Postal area targeting support. Specifies which postal code systems are supported. System names encode country and precision.
6420
+ */
6421
+ geo_postal_areas?: {
6422
+ /**
6423
+ * US 5-digit ZIP codes (e.g., '10001')
6424
+ */
6425
+ us_zip?: boolean;
6426
+ /**
6427
+ * US 9-digit ZIP+4 codes (e.g., '10001-1234')
6428
+ */
6429
+ us_zip_plus_four?: boolean;
6430
+ /**
6431
+ * UK postcode district / outward code (e.g., 'SW1', 'EC1')
6432
+ */
6433
+ gb_outward?: boolean;
6434
+ /**
6435
+ * UK full postcode (e.g., 'SW1A 1AA')
6436
+ */
6437
+ gb_full?: boolean;
6438
+ /**
6439
+ * Canadian Forward Sortation Area (e.g., 'K1A')
6440
+ */
6441
+ ca_fsa?: boolean;
6442
+ /**
6443
+ * Canadian full postal code (e.g., 'K1A 0B1')
6444
+ */
6445
+ ca_full?: boolean;
6446
+ /**
6447
+ * German Postleitzahl, 5 digits (e.g., '10115')
6448
+ */
6449
+ de_plz?: boolean;
6450
+ /**
6451
+ * French code postal, 5 digits (e.g., '75001')
6452
+ */
6453
+ fr_code_postal?: boolean;
6454
+ /**
6455
+ * Australian postcode, 4 digits (e.g., '2000')
6456
+ */
6457
+ au_postcode?: boolean;
6458
+ };
6459
+ };
6460
+ };
6461
+ /**
6462
+ * Information about the seller's media inventory portfolio
6463
+ */
6464
+ portfolio?: {
6465
+ /**
6466
+ * Publisher domains this seller is authorized to represent. Buyers should fetch each publisher's adagents.json for property definitions.
6467
+ */
6468
+ publisher_domains: string[];
6469
+ /**
6470
+ * Primary advertising channels in this portfolio
6471
+ */
6472
+ primary_channels?: MediaChannel[];
6473
+ /**
6474
+ * Primary countries (ISO 3166-1 alpha-2) where inventory is concentrated
6475
+ */
6476
+ primary_countries?: string[];
6477
+ /**
6478
+ * Markdown-formatted description of the inventory portfolio
6479
+ */
6480
+ description?: string;
6481
+ /**
6482
+ * Advertising content policies, restrictions, and guidelines
6483
+ */
6484
+ advertising_policies?: string;
6485
+ };
6486
+ };
6487
+ /**
6488
+ * Signals protocol capabilities. Only present if signals is in supported_protocols. Reserved for future use.
6489
+ */
6490
+ signals?: {
6491
+ /**
6492
+ * Optional signals features supported
6493
+ */
6494
+ features?: {
6495
+ [k: string]: boolean | undefined;
6496
+ };
6497
+ };
6498
+ /**
6499
+ * Governance protocol capabilities. Only present if governance is in supported_protocols. Governance agents provide property data like compliance scores, brand safety ratings, and sustainability metrics.
6500
+ */
6501
+ governance?: {
6502
+ /**
6503
+ * Property features this governance agent can evaluate. Each feature describes a score, rating, or certification the agent can provide for properties.
6504
+ */
6505
+ property_features?: {
6506
+ /**
6507
+ * Unique identifier for this feature (e.g., 'consent_quality', 'coppa_certified', 'carbon_score')
6508
+ */
6509
+ feature_id: string;
6510
+ /**
6511
+ * Data type: 'binary' for yes/no, 'quantitative' for numeric scores, 'categorical' for enum values
6512
+ */
6513
+ type: 'binary' | 'quantitative' | 'categorical';
6514
+ /**
6515
+ * For quantitative features, the valid range
6516
+ */
6517
+ range?: {
6518
+ /**
6519
+ * Minimum value
6520
+ */
6521
+ min: number;
6522
+ /**
6523
+ * Maximum value
6524
+ */
6525
+ max: number;
6526
+ };
6527
+ /**
6528
+ * For categorical features, the valid values
6529
+ */
6530
+ categories?: string[];
6531
+ /**
6532
+ * Human-readable description of what this feature measures
6533
+ */
6534
+ description?: string;
6535
+ /**
6536
+ * URL to documentation explaining how this feature is calculated or measured. Helps buyers understand and compare methodologies across vendors.
6537
+ */
6538
+ methodology_url?: string;
6539
+ }[];
6540
+ };
6541
+ /**
6542
+ * Sponsored Intelligence protocol capabilities. Only present if sponsored_intelligence is in supported_protocols. SI agents handle conversational brand experiences.
6543
+ */
6544
+ sponsored_intelligence?: {
6545
+ /**
6546
+ * SI agent endpoint configuration
6547
+ */
6548
+ endpoint: {
6549
+ /**
6550
+ * Available protocol transports. Hosts select based on their capabilities.
6551
+ */
6552
+ transports: {
6553
+ /**
6554
+ * Protocol transport type
6555
+ */
6556
+ type: 'mcp' | 'a2a';
6557
+ /**
6558
+ * Agent endpoint URL for this transport
6559
+ */
6560
+ url: string;
6561
+ }[];
6562
+ /**
6563
+ * Preferred transport when host supports multiple
6564
+ */
6565
+ preferred?: 'mcp' | 'a2a';
6566
+ };
6567
+ capabilities: SICapabilities;
6568
+ /**
6569
+ * URL to brand manifest with colors, fonts, logos, tone
6570
+ */
6571
+ brand_manifest_url?: string;
6572
+ };
6573
+ /**
6574
+ * Extension namespaces this agent supports. Buyers can expect meaningful data in ext.{namespace} fields on responses from this agent. Extension schemas are published in the AdCP extension registry.
6575
+ */
6576
+ extensions_supported?: string[];
6577
+ /**
6578
+ * ISO 8601 timestamp of when capabilities were last updated. Buyers can use this for cache invalidation.
6579
+ */
6580
+ last_updated?: string;
6581
+ /**
6582
+ * Task-specific errors and warnings
6583
+ */
6584
+ errors?: Error[];
6585
+ context?: ContextObject;
6586
+ ext?: ExtensionObject;
6587
+ }
6588
+ /**
6589
+ * Optional media-buy protocol features. Used in capability declarations (seller declares support) and product filters (buyer requires support). If a seller declares a feature as true, they MUST honor requests using that feature.
6590
+ */
3970
6591
  //# sourceMappingURL=tools.generated.d.ts.map