@adcp/client 3.7.0 → 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 +507 -239
  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 +7246 -2278
  60. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  61. package/dist/lib/types/schemas.generated.js +1376 -460
  62. package/dist/lib/types/schemas.generated.js.map +1 -1
  63. package/dist/lib/types/tools.generated.d.ts +3202 -551
  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,19 +15,32 @@ 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;
43
+ property_list?: PropertyListReference;
31
44
  context?: ContextObject;
32
45
  ext?: ExtensionObject;
33
46
  }
@@ -39,6 +52,10 @@ export interface BrandManifest {
39
52
  * Primary brand URL for context and asset discovery. Creative agents can infer brand information from this URL.
40
53
  */
41
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;
42
59
  /**
43
60
  * Brand or business name
44
61
  */
@@ -110,6 +127,44 @@ export interface BrandManifest {
110
127
  * Brand voice and messaging tone (e.g., 'professional', 'casual', 'humorous', 'trustworthy', 'innovative')
111
128
  */
112
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
+ };
113
168
  /**
114
169
  * Brand tagline or slogan
115
170
  */
@@ -163,9 +218,9 @@ export interface BrandManifest {
163
218
  * Additional asset-specific metadata
164
219
  */
165
220
  metadata?: {
166
- [k: string]: unknown;
221
+ [k: string]: unknown | undefined;
167
222
  };
168
- [k: string]: unknown;
223
+ [k: string]: unknown | undefined;
169
224
  }[];
170
225
  /**
171
226
  * Product catalog information for e-commerce advertisers. Enables SKU-level creative generation and product selection.
@@ -176,9 +231,9 @@ export interface BrandManifest {
176
231
  */
177
232
  feed_url: string;
178
233
  /**
179
- * 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.
180
235
  */
181
- feed_format?: 'google_merchant_center' | 'facebook_catalog' | 'custom';
236
+ feed_format?: 'google_merchant_center' | 'facebook_catalog' | 'openai_product_feed' | 'custom';
182
237
  /**
183
238
  * Product categories available in the catalog (for filtering)
184
239
  */
@@ -191,7 +246,24 @@ export interface BrandManifest {
191
246
  * How frequently the product catalog is updated
192
247
  */
193
248
  update_frequency?: 'realtime' | 'hourly' | 'daily' | 'weekly';
194
- [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;
195
267
  };
196
268
  /**
197
269
  * Legal disclaimers or required text that must appear in creatives
@@ -248,7 +320,7 @@ export interface BrandManifest {
248
320
  */
249
321
  version?: string;
250
322
  };
251
- [k: string]: unknown;
323
+ [k: string]: unknown | undefined;
252
324
  }
253
325
  /**
254
326
  * Structured filters for product discovery
@@ -256,7 +328,7 @@ export interface BrandManifest {
256
328
  export interface ProductFilters {
257
329
  delivery_type?: DeliveryType;
258
330
  /**
259
- * 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.
260
332
  */
261
333
  is_fixed_price?: boolean;
262
334
  /**
@@ -287,17 +359,46 @@ export interface ProductFilters {
287
359
  * Budget range to filter appropriate products
288
360
  */
289
361
  budget_range?: {
290
- [k: string]: unknown;
362
+ [k: string]: unknown | undefined;
291
363
  };
292
364
  /**
293
- * 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.
294
366
  */
295
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
+ }[];
296
382
  /**
297
383
  * Filter by advertising channels (e.g., ['display', 'video', 'dooh'])
298
384
  */
299
- channels?: AdvertisingChannels[];
300
- [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;
301
402
  }
302
403
  /**
303
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.
@@ -323,19 +424,54 @@ export interface FormatID {
323
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.
324
425
  */
325
426
  duration_ms?: number;
326
- [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;
446
+ }
447
+ /**
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.
449
+ */
450
+ export interface PropertyListReference {
451
+ /**
452
+ * URL of the agent managing the property list
453
+ */
454
+ agent_url: string;
455
+ /**
456
+ * Identifier for the property list within the agent
457
+ */
458
+ list_id: string;
459
+ /**
460
+ * JWT or other authorization token for accessing the list. Optional if the list is public or caller has implicit access.
461
+ */
462
+ auth_token?: string;
327
463
  }
328
464
  /**
329
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.
330
466
  */
331
467
  export interface ContextObject {
332
- [k: string]: unknown;
468
+ [k: string]: unknown | undefined;
333
469
  }
334
470
  /**
335
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.
336
472
  */
337
473
  export interface ExtensionObject {
338
- [k: string]: unknown;
474
+ [k: string]: unknown | undefined;
339
475
  }
340
476
  /**
341
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.
@@ -349,7 +485,7 @@ export type PublisherPropertySelector = {
349
485
  * Discriminator indicating all properties from this publisher are included
350
486
  */
351
487
  selection_type: 'all';
352
- [k: string]: unknown;
488
+ [k: string]: unknown | undefined;
353
489
  } | {
354
490
  /**
355
491
  * Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')
@@ -365,7 +501,7 @@ export type PublisherPropertySelector = {
365
501
  * @minItems 1
366
502
  */
367
503
  property_ids: [PropertyID, ...PropertyID[]];
368
- [k: string]: unknown;
504
+ [k: string]: unknown | undefined;
369
505
  } | {
370
506
  /**
371
507
  * Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')
@@ -381,7 +517,7 @@ export type PublisherPropertySelector = {
381
517
  * @minItems 1
382
518
  */
383
519
  property_tags: [PropertyTag, ...PropertyTag[]];
384
- [k: string]: unknown;
520
+ [k: string]: unknown | undefined;
385
521
  };
386
522
  /**
387
523
  * Identifier for a publisher property. Must be lowercase alphanumeric with underscores only.
@@ -394,7 +530,7 @@ export type PropertyTag = string;
394
530
  /**
395
531
  * Type of inventory delivery
396
532
  */
397
- export type PricingOption = CPMFixedRatePricingOption | CPMAuctionPricingOption | VCPMFixedRatePricingOption | VCPMAuctionPricingOption | CPCPricingOption | CPCVPricingOption | CPVPricingOption | CPPPricingOption | FlatRatePricingOption;
533
+ export type PricingOption = CPMPricingOption | VCPMPricingOption | CPCPricingOption | CPCVPricingOption | CPVPricingOption | CPPPricingOption | FlatRatePricingOption;
398
534
  /**
399
535
  * Available frequencies for delivery reports and metrics updates
400
536
  */
@@ -419,10 +555,18 @@ export interface GetProductsResponse {
419
555
  * Array of matching products
420
556
  */
421
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[];
422
562
  /**
423
563
  * Task-specific errors and warnings (e.g., product filtering issues)
424
564
  */
425
565
  errors?: Error[];
566
+ /**
567
+ * [AdCP 3.0] Indicates whether property_list filtering was applied. True if the agent filtered products based on the provided property_list. Absent or false if property_list was not provided or not supported by this agent.
568
+ */
569
+ property_list_applied?: boolean;
426
570
  context?: ContextObject;
427
571
  ext?: ExtensionObject;
428
572
  }
@@ -506,9 +650,9 @@ export interface Product {
506
650
  * Asset manifest for rendering the card, structure defined by the format
507
651
  */
508
652
  manifest: {
509
- [k: string]: unknown;
653
+ [k: string]: unknown | undefined;
510
654
  };
511
- [k: string]: unknown;
655
+ [k: string]: unknown | undefined;
512
656
  };
513
657
  /**
514
658
  * Optional detailed card with carousel and full specifications. Provides rich product presentation similar to media kit pages.
@@ -519,12 +663,12 @@ export interface Product {
519
663
  * Asset manifest for rendering the detailed card, structure defined by the format
520
664
  */
521
665
  manifest: {
522
- [k: string]: unknown;
666
+ [k: string]: unknown | undefined;
523
667
  };
524
- [k: string]: unknown;
668
+ [k: string]: unknown | undefined;
525
669
  };
526
670
  ext?: ExtensionObject;
527
- [k: string]: unknown;
671
+ [k: string]: unknown | undefined;
528
672
  }
529
673
  /**
530
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.
@@ -548,66 +692,36 @@ export interface Placement {
548
692
  * @minItems 1
549
693
  */
550
694
  format_ids?: [FormatID, ...FormatID[]];
551
- [k: string]: unknown;
695
+ [k: string]: unknown | undefined;
552
696
  }
553
697
  /**
554
- * 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.
555
699
  */
556
- export interface CPMFixedRatePricingOption {
700
+ export interface CPMPricingOption {
557
701
  /**
558
- * Unique identifier for this pricing option within the product (e.g., 'cpm_usd_guaranteed')
702
+ * Unique identifier for this pricing option within the product
559
703
  */
560
704
  pricing_option_id: string;
561
705
  /**
562
706
  * Cost per 1,000 impressions
563
707
  */
564
708
  pricing_model: 'cpm';
565
- /**
566
- * Fixed CPM rate (cost per 1,000 impressions)
567
- */
568
- rate: number;
569
709
  /**
570
710
  * ISO 4217 currency code
571
711
  */
572
712
  currency: string;
573
713
  /**
574
- * Whether this is a fixed rate (true) or auction-based (false)
575
- */
576
- is_fixed: true;
577
- /**
578
- * Minimum spend requirement per package using this pricing option, in the specified currency
579
- */
580
- min_spend_per_package?: number;
581
- [k: string]: unknown;
582
- }
583
- /**
584
- * Cost Per Mille (cost per 1,000 impressions) with auction-based pricing - common for programmatic/non-guaranteed inventory
585
- */
586
- export interface CPMAuctionPricingOption {
587
- /**
588
- * Unique identifier for this pricing option within the product (e.g., 'cpm_usd_auction')
589
- */
590
- pricing_option_id: string;
591
- /**
592
- * Cost per 1,000 impressions
593
- */
594
- pricing_model: 'cpm';
595
- /**
596
- * ISO 4217 currency code
714
+ * Fixed price per unit. If present, this is fixed pricing. If absent, auction-based.
597
715
  */
598
- currency: string;
716
+ fixed_price?: number;
599
717
  /**
600
- * 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.
601
719
  */
602
- is_fixed: false;
720
+ floor_price?: number;
603
721
  /**
604
- * Pricing guidance for auction-based CPM bidding
722
+ * Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.
605
723
  */
606
- price_guidance: {
607
- /**
608
- * Minimum bid price - publisher will reject bids under this value
609
- */
610
- floor: number;
724
+ price_guidance?: {
611
725
  /**
612
726
  * 25th percentile winning price
613
727
  */
@@ -629,66 +743,36 @@ export interface CPMAuctionPricingOption {
629
743
  * Minimum spend requirement per package using this pricing option, in the specified currency
630
744
  */
631
745
  min_spend_per_package?: number;
632
- [k: string]: unknown;
746
+ [k: string]: unknown | undefined;
633
747
  }
634
748
  /**
635
- * 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.
636
750
  */
637
- export interface VCPMFixedRatePricingOption {
751
+ export interface VCPMPricingOption {
638
752
  /**
639
- * Unique identifier for this pricing option within the product (e.g., 'vcpm_usd_guaranteed')
753
+ * Unique identifier for this pricing option within the product
640
754
  */
641
755
  pricing_option_id: string;
642
756
  /**
643
757
  * Cost per 1,000 viewable impressions (MRC standard)
644
758
  */
645
759
  pricing_model: 'vcpm';
646
- /**
647
- * Fixed vCPM rate (cost per 1,000 viewable impressions)
648
- */
649
- rate: number;
650
760
  /**
651
761
  * ISO 4217 currency code
652
762
  */
653
763
  currency: string;
654
764
  /**
655
- * Whether this is a fixed rate (true) or auction-based (false)
656
- */
657
- is_fixed: true;
658
- /**
659
- * Minimum spend requirement per package using this pricing option, in the specified currency
660
- */
661
- min_spend_per_package?: number;
662
- [k: string]: unknown;
663
- }
664
- /**
665
- * 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)
666
- */
667
- export interface VCPMAuctionPricingOption {
668
- /**
669
- * Unique identifier for this pricing option within the product (e.g., 'vcpm_usd_auction')
670
- */
671
- pricing_option_id: string;
672
- /**
673
- * Cost per 1,000 viewable impressions (MRC standard)
674
- */
675
- pricing_model: 'vcpm';
676
- /**
677
- * ISO 4217 currency code
765
+ * Fixed price per unit. If present, this is fixed pricing. If absent, auction-based.
678
766
  */
679
- currency: string;
767
+ fixed_price?: number;
680
768
  /**
681
- * 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.
682
770
  */
683
- is_fixed: false;
771
+ floor_price?: number;
684
772
  /**
685
- * Statistical guidance for auction pricing
773
+ * Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.
686
774
  */
687
- price_guidance: {
688
- /**
689
- * Minimum acceptable bid price
690
- */
691
- floor: number;
775
+ price_guidance?: {
692
776
  /**
693
777
  * 25th percentile of recent winning bids
694
778
  */
@@ -710,218 +794,323 @@ export interface VCPMAuctionPricingOption {
710
794
  * Minimum spend requirement per package using this pricing option, in the specified currency
711
795
  */
712
796
  min_spend_per_package?: number;
713
- [k: string]: unknown;
797
+ [k: string]: unknown | undefined;
714
798
  }
715
799
  /**
716
- * 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.
717
801
  */
718
802
  export interface CPCPricingOption {
719
803
  /**
720
- * Unique identifier for this pricing option within the product (e.g., 'cpc_usd_fixed')
804
+ * Unique identifier for this pricing option within the product
721
805
  */
722
806
  pricing_option_id: string;
723
807
  /**
724
808
  * Cost per click
725
809
  */
726
810
  pricing_model: 'cpc';
727
- /**
728
- * Fixed CPC rate (cost per click)
729
- */
730
- rate: number;
731
811
  /**
732
812
  * ISO 4217 currency code
733
813
  */
734
814
  currency: string;
735
815
  /**
736
- * 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.
737
817
  */
738
- is_fixed: true;
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.
825
+ */
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
+ };
739
844
  /**
740
845
  * Minimum spend requirement per package using this pricing option, in the specified currency
741
846
  */
742
847
  min_spend_per_package?: number;
743
- [k: string]: unknown;
848
+ [k: string]: unknown | undefined;
744
849
  }
745
850
  /**
746
- * 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.
747
852
  */
748
853
  export interface CPCVPricingOption {
749
854
  /**
750
- * Unique identifier for this pricing option within the product (e.g., 'cpcv_usd_guaranteed')
855
+ * Unique identifier for this pricing option within the product
751
856
  */
752
857
  pricing_option_id: string;
753
858
  /**
754
859
  * Cost per completed view (100% completion)
755
860
  */
756
861
  pricing_model: 'cpcv';
757
- /**
758
- * Fixed CPCV rate (cost per 100% completion)
759
- */
760
- rate: number;
761
862
  /**
762
863
  * ISO 4217 currency code
763
864
  */
764
865
  currency: string;
765
866
  /**
766
- * 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.
767
876
  */
768
- 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
+ };
769
895
  /**
770
896
  * Minimum spend requirement per package using this pricing option, in the specified currency
771
897
  */
772
898
  min_spend_per_package?: number;
773
- [k: string]: unknown;
899
+ [k: string]: unknown | undefined;
774
900
  }
775
901
  /**
776
- * 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.
777
903
  */
778
904
  export interface CPVPricingOption {
779
905
  /**
780
- * Unique identifier for this pricing option within the product (e.g., 'cpv_usd_50pct')
906
+ * Unique identifier for this pricing option within the product
781
907
  */
782
908
  pricing_option_id: string;
783
909
  /**
784
910
  * Cost per view at threshold
785
911
  */
786
912
  pricing_model: 'cpv';
787
- /**
788
- * Fixed CPV rate (cost per view)
789
- */
790
- rate: number;
791
913
  /**
792
914
  * ISO 4217 currency code
793
915
  */
794
916
  currency: string;
795
917
  /**
796
- * 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.
797
923
  */
798
- 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
+ };
799
946
  /**
800
947
  * CPV-specific parameters defining the view threshold
801
948
  */
802
949
  parameters: {
803
950
  view_threshold: number | {
804
951
  /**
805
- * Seconds of viewing required (e.g., 30 for YouTube-style '30 seconds = view')
952
+ * Seconds of viewing required
806
953
  */
807
954
  duration_seconds: number;
808
- [k: string]: unknown;
955
+ [k: string]: unknown | undefined;
809
956
  };
810
- [k: string]: unknown;
957
+ [k: string]: unknown | undefined;
811
958
  };
812
959
  /**
813
960
  * Minimum spend requirement per package using this pricing option, in the specified currency
814
961
  */
815
962
  min_spend_per_package?: number;
816
- [k: string]: unknown;
963
+ [k: string]: unknown | undefined;
817
964
  }
818
965
  /**
819
- * 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.
820
967
  */
821
968
  export interface CPPPricingOption {
822
969
  /**
823
- * 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
824
971
  */
825
972
  pricing_option_id: string;
826
973
  /**
827
974
  * Cost per Gross Rating Point
828
975
  */
829
976
  pricing_model: 'cpp';
830
- /**
831
- * Fixed CPP rate (cost per rating point)
832
- */
833
- rate: number;
834
977
  /**
835
978
  * ISO 4217 currency code
836
979
  */
837
980
  currency: string;
838
981
  /**
839
- * 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.
840
991
  */
841
- 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
+ };
842
1010
  /**
843
- * CPP-specific parameters for demographic targeting and GRP requirements
1011
+ * CPP-specific parameters for demographic targeting
844
1012
  */
845
1013
  parameters: {
846
1014
  /**
847
- * 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.)
848
1016
  */
849
1017
  demographic: string;
850
1018
  /**
851
- * Minimum GRPs/TRPs required for this pricing option
1019
+ * Minimum GRPs/TRPs required
852
1020
  */
853
1021
  min_points?: number;
854
- [k: string]: unknown;
1022
+ [k: string]: unknown | undefined;
855
1023
  };
856
1024
  /**
857
1025
  * Minimum spend requirement per package using this pricing option, in the specified currency
858
1026
  */
859
1027
  min_spend_per_package?: number;
860
- [k: string]: unknown;
1028
+ [k: string]: unknown | undefined;
861
1029
  }
862
1030
  /**
863
- * 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.
864
1032
  */
865
1033
  export interface FlatRatePricingOption {
866
1034
  /**
867
- * 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
868
1036
  */
869
1037
  pricing_option_id: string;
870
1038
  /**
871
1039
  * Fixed cost regardless of delivery volume
872
1040
  */
873
1041
  pricing_model: 'flat_rate';
874
- /**
875
- * Flat rate cost
876
- */
877
- rate: number;
878
1042
  /**
879
1043
  * ISO 4217 currency code
880
1044
  */
881
1045
  currency: string;
882
1046
  /**
883
- * 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.
1048
+ */
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.
884
1056
  */
885
- is_fixed: true;
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
+ };
886
1075
  /**
887
1076
  * Flat rate parameters for DOOH and time-based campaigns
888
1077
  */
889
1078
  parameters?: {
890
1079
  /**
891
- * Duration in hours for time-based flat rate pricing (DOOH)
1080
+ * Duration in hours for time-based pricing
892
1081
  */
893
1082
  duration_hours?: number;
894
1083
  /**
895
- * Guaranteed share of voice as percentage (DOOH, 0-100)
1084
+ * Guaranteed share of voice (0-100)
896
1085
  */
897
1086
  sov_percentage?: number;
898
1087
  /**
899
- * Duration of ad loop rotation in seconds (DOOH)
1088
+ * Duration of ad loop rotation in seconds
900
1089
  */
901
1090
  loop_duration_seconds?: number;
902
1091
  /**
903
- * Minimum number of times ad plays per hour (DOOH frequency guarantee)
1092
+ * Minimum plays per hour
904
1093
  */
905
1094
  min_plays_per_hour?: number;
906
1095
  /**
907
- * Named venue package identifier for DOOH (e.g., 'times_square_network', 'airport_terminals')
1096
+ * Named venue package identifier
908
1097
  */
909
1098
  venue_package?: string;
910
1099
  /**
911
- * Estimated impressions for this flat rate option (informational, commonly used with SOV or time-based DOOH)
1100
+ * Estimated impressions (informational)
912
1101
  */
913
1102
  estimated_impressions?: number;
914
1103
  /**
915
- * Specific daypart for time-based pricing (e.g., 'morning_commute', 'evening_prime', 'overnight')
1104
+ * Specific daypart for time-based pricing
916
1105
  */
917
1106
  daypart?: string;
918
- [k: string]: unknown;
1107
+ [k: string]: unknown | undefined;
919
1108
  };
920
1109
  /**
921
1110
  * Minimum spend requirement per package using this pricing option, in the specified currency
922
1111
  */
923
1112
  min_spend_per_package?: number;
924
- [k: string]: unknown;
1113
+ [k: string]: unknown | undefined;
925
1114
  }
926
1115
  /**
927
1116
  * Measurement capabilities included with a product
@@ -943,7 +1132,7 @@ export interface Measurement {
943
1132
  * Reporting frequency and format
944
1133
  */
945
1134
  reporting: string;
946
- [k: string]: unknown;
1135
+ [k: string]: unknown | undefined;
947
1136
  }
948
1137
  /**
949
1138
  * Reporting capabilities available for a product
@@ -971,7 +1160,7 @@ export interface ReportingCapabilities {
971
1160
  * Metrics available in reporting. Impressions and spend are always implicitly included.
972
1161
  */
973
1162
  available_metrics: AvailableMetric[];
974
- [k: string]: unknown;
1163
+ [k: string]: unknown | undefined;
975
1164
  }
976
1165
  /**
977
1166
  * Creative requirements and restrictions for a product
@@ -983,7 +1172,7 @@ export interface CreativePolicy {
983
1172
  * Whether creative templates are provided
984
1173
  */
985
1174
  templates_available: boolean;
986
- [k: string]: unknown;
1175
+ [k: string]: unknown | undefined;
987
1176
  }
988
1177
  /**
989
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.
@@ -1009,7 +1198,7 @@ export interface FormatID1 {
1009
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.
1010
1199
  */
1011
1200
  duration_ms?: number;
1012
- [k: string]: unknown;
1201
+ [k: string]: unknown | undefined;
1013
1202
  }
1014
1203
  /**
1015
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.
@@ -1035,43 +1224,129 @@ export interface FormatID2 {
1035
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.
1036
1225
  */
1037
1226
  duration_ms?: number;
1038
- [k: string]: unknown;
1227
+ [k: string]: unknown | undefined;
1039
1228
  }
1040
1229
  /**
1041
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.
1042
1231
  */
1043
- export interface Error {
1232
+ export interface Proposal {
1044
1233
  /**
1045
- * 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.
1046
1235
  */
1047
- code: string;
1236
+ proposal_id: string;
1048
1237
  /**
1049
- * Human-readable error message
1238
+ * Human-readable name for this media plan proposal
1050
1239
  */
1051
- message: string;
1240
+ name: string;
1052
1241
  /**
1053
- * Field path associated with the error (e.g., 'packages[0].targeting')
1242
+ * Explanation of the proposal strategy and what it achieves
1054
1243
  */
1055
- field?: string;
1244
+ description?: string;
1056
1245
  /**
1057
- * 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
1058
1249
  */
1059
- suggestion?: string;
1250
+ allocations: [ProductAllocation, ...ProductAllocation[]];
1060
1251
  /**
1061
- * 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.
1062
1253
  */
1063
- retry_after?: number;
1254
+ expires_at?: string;
1064
1255
  /**
1065
- * Additional task-specific error details
1256
+ * Optional budget guidance for this proposal
1066
1257
  */
1067
- details?: {
1068
- [k: string]: unknown;
1069
- };
1070
- [k: string]: unknown;
1071
- }
1072
- /**
1073
- * 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.
1074
- */
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;
1276
+ };
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;
1283
+ }
1284
+ /**
1285
+ * A budget allocation for a specific product within a proposal. Percentages across all allocations in a proposal should sum to 100.
1286
+ */
1287
+ export interface ProductAllocation {
1288
+ /**
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
+ */
1075
1350
  /**
1076
1351
  * Filter by format type (technical categories with distinct requirements)
1077
1352
  */
@@ -1123,14 +1398,6 @@ export type FormatIDParameter = 'dimensions' | 'duration';
1123
1398
  * Type of asset
1124
1399
  */
1125
1400
  export type AssetContentType1 = 'image' | 'video' | 'audio' | 'text' | 'markdown' | 'html' | 'css' | 'javascript' | 'vast' | 'daast' | 'promoted_offerings' | 'url' | 'webhook';
1126
- /**
1127
- * Type of asset
1128
- */
1129
- export type AssetContentType2 = 'image' | 'video' | 'audio' | 'text' | 'markdown' | 'html' | 'css' | 'javascript' | 'vast' | 'daast' | 'promoted_offerings' | 'url' | 'webhook';
1130
- /**
1131
- * Type of asset
1132
- */
1133
- export type AssetContentType3 = 'image' | 'video' | 'audio' | 'text' | 'markdown' | 'html' | 'css' | 'javascript' | 'vast' | 'daast' | 'promoted_offerings' | 'url' | 'webhook';
1134
1401
  /**
1135
1402
  * Capabilities supported by creative agents for format handling
1136
1403
  */
@@ -1180,10 +1447,6 @@ export interface Format {
1180
1447
  * Plain text explanation of what this format does and what assets it requires
1181
1448
  */
1182
1449
  description?: string;
1183
- /**
1184
- * 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.
1185
- */
1186
- preview_image?: string;
1187
1450
  /**
1188
1451
  * Optional URL to showcase page with examples and interactive demos of this format
1189
1452
  */
@@ -1200,86 +1463,16 @@ export interface Format {
1200
1463
  */
1201
1464
  renders?: [
1202
1465
  ({
1203
- [k: string]: unknown;
1466
+ [k: string]: unknown | undefined;
1204
1467
  } | {
1205
1468
  parameters_from_format_id: true;
1206
1469
  }),
1207
1470
  ...({
1208
- [k: string]: unknown;
1471
+ [k: string]: unknown | undefined;
1209
1472
  } | {
1210
1473
  parameters_from_format_id: true;
1211
1474
  })[]
1212
1475
  ];
1213
- /**
1214
- * @deprecated
1215
- * 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.
1216
- */
1217
- assets_required?: ({
1218
- /**
1219
- * Discriminator indicating this is an individual asset requirement
1220
- */
1221
- item_type: 'individual';
1222
- /**
1223
- * Unique identifier for this asset. Creative manifests MUST use this exact value as the key in the assets object.
1224
- */
1225
- asset_id: string;
1226
- asset_type: AssetContentType;
1227
- /**
1228
- * 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.
1229
- */
1230
- asset_role?: string;
1231
- /**
1232
- * Whether this asset is required
1233
- */
1234
- required?: boolean;
1235
- /**
1236
- * 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).
1237
- */
1238
- requirements?: {
1239
- [k: string]: unknown;
1240
- };
1241
- } | {
1242
- /**
1243
- * Discriminator indicating this is a repeatable asset group
1244
- */
1245
- item_type: 'repeatable_group';
1246
- /**
1247
- * Identifier for this asset group (e.g., 'product', 'slide', 'card')
1248
- */
1249
- asset_group_id: string;
1250
- /**
1251
- * Minimum number of repetitions required
1252
- */
1253
- min_count: number;
1254
- /**
1255
- * Maximum number of repetitions allowed
1256
- */
1257
- max_count: number;
1258
- /**
1259
- * Assets within each repetition of this group
1260
- */
1261
- assets: {
1262
- /**
1263
- * Identifier for this asset within the group
1264
- */
1265
- asset_id: string;
1266
- asset_type: AssetContentType1;
1267
- /**
1268
- * 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.
1269
- */
1270
- asset_role?: string;
1271
- /**
1272
- * Whether this asset is required in each repetition
1273
- */
1274
- required?: boolean;
1275
- /**
1276
- * 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).
1277
- */
1278
- requirements?: {
1279
- [k: string]: unknown;
1280
- };
1281
- }[];
1282
- })[];
1283
1476
  /**
1284
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.
1285
1478
  */
@@ -1292,7 +1485,7 @@ export interface Format {
1292
1485
  * Unique identifier for this asset. Creative manifests MUST use this exact value as the key in the assets object.
1293
1486
  */
1294
1487
  asset_id: string;
1295
- asset_type: AssetContentType2;
1488
+ asset_type: AssetContentType;
1296
1489
  /**
1297
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.
1298
1491
  */
@@ -1305,7 +1498,7 @@ export interface Format {
1305
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).
1306
1499
  */
1307
1500
  requirements?: {
1308
- [k: string]: unknown;
1501
+ [k: string]: unknown | undefined;
1309
1502
  };
1310
1503
  } | {
1311
1504
  /**
@@ -1336,7 +1529,7 @@ export interface Format {
1336
1529
  * Identifier for this asset within the group
1337
1530
  */
1338
1531
  asset_id: string;
1339
- asset_type: AssetContentType3;
1532
+ asset_type: AssetContentType1;
1340
1533
  /**
1341
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.
1342
1535
  */
@@ -1349,7 +1542,7 @@ export interface Format {
1349
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).
1350
1543
  */
1351
1544
  requirements?: {
1352
- [k: string]: unknown;
1545
+ [k: string]: unknown | undefined;
1353
1546
  };
1354
1547
  }[];
1355
1548
  })[];
@@ -1357,7 +1550,7 @@ export interface Format {
1357
1550
  * Delivery method specifications (e.g., hosted, VAST, third-party tags)
1358
1551
  */
1359
1552
  delivery?: {
1360
- [k: string]: unknown;
1553
+ [k: string]: unknown | undefined;
1361
1554
  };
1362
1555
  /**
1363
1556
  * List of universal macros supported by this format (e.g., MEDIA_BUY_ID, CACHEBUSTER, DEVICE_ID). Used for validation and developer tooling.
@@ -1376,9 +1569,9 @@ export interface Format {
1376
1569
  * Asset manifest for rendering the card, structure defined by the format
1377
1570
  */
1378
1571
  manifest: {
1379
- [k: string]: unknown;
1572
+ [k: string]: unknown | undefined;
1380
1573
  };
1381
- [k: string]: unknown;
1574
+ [k: string]: unknown | undefined;
1382
1575
  };
1383
1576
  /**
1384
1577
  * Optional detailed card with carousel and full specifications. Provides rich format documentation similar to ad spec pages.
@@ -1389,11 +1582,11 @@ export interface Format {
1389
1582
  * Asset manifest for rendering the detailed card, structure defined by the format
1390
1583
  */
1391
1584
  manifest: {
1392
- [k: string]: unknown;
1585
+ [k: string]: unknown | undefined;
1393
1586
  };
1394
- [k: string]: unknown;
1587
+ [k: string]: unknown | undefined;
1395
1588
  };
1396
- [k: string]: unknown;
1589
+ [k: string]: unknown | undefined;
1397
1590
  }
1398
1591
  /**
1399
1592
  * Structured format identifier with agent URL and format name
@@ -1419,7 +1612,7 @@ export interface FormatID3 {
1419
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.
1420
1613
  */
1421
1614
  duration_ms?: number;
1422
- [k: string]: unknown;
1615
+ [k: string]: unknown | undefined;
1423
1616
  }
1424
1617
  /**
1425
1618
  * Standard error structure for task-specific errors and warnings
@@ -1428,6 +1621,10 @@ export interface FormatID3 {
1428
1621
  * Budget pacing strategy
1429
1622
  */
1430
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';
1431
1628
  /**
1432
1629
  * JavaScript module type
1433
1630
  */
@@ -1457,7 +1654,7 @@ export type VASTAsset = {
1457
1654
  * Tracking events supported by this VAST tag
1458
1655
  */
1459
1656
  tracking_events?: VASTTrackingEvent[];
1460
- [k: string]: unknown;
1657
+ [k: string]: unknown | undefined;
1461
1658
  } | {
1462
1659
  /**
1463
1660
  * Discriminator indicating VAST is delivered as inline XML content
@@ -1480,7 +1677,7 @@ export type VASTAsset = {
1480
1677
  * Tracking events supported by this VAST tag
1481
1678
  */
1482
1679
  tracking_events?: VASTTrackingEvent[];
1483
- [k: string]: unknown;
1680
+ [k: string]: unknown | undefined;
1484
1681
  };
1485
1682
  /**
1486
1683
  * VAST specification version
@@ -1519,7 +1716,7 @@ export type DAASTAsset = {
1519
1716
  * Whether companion display ads are included
1520
1717
  */
1521
1718
  companion_ads?: boolean;
1522
- [k: string]: unknown;
1719
+ [k: string]: unknown | undefined;
1523
1720
  } | {
1524
1721
  /**
1525
1722
  * Discriminator indicating DAAST is delivered as inline XML content
@@ -1542,7 +1739,7 @@ export type DAASTAsset = {
1542
1739
  * Whether companion display ads are included
1543
1740
  */
1544
1741
  companion_ads?: boolean;
1545
- [k: string]: unknown;
1742
+ [k: string]: unknown | undefined;
1546
1743
  };
1547
1744
  /**
1548
1745
  * DAAST specification version
@@ -1560,6 +1757,10 @@ export type DAASTVersion1 = '1.0' | '1.1';
1560
1757
  * Brand information manifest containing assets, themes, and guidelines. Can be provided inline or as a URL reference to a hosted manifest.
1561
1758
  */
1562
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';
1563
1764
  /**
1564
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.
1565
1766
  */
@@ -1573,7 +1774,7 @@ export type StartTiming = 'asap' | string;
1573
1774
  */
1574
1775
  export type AuthenticationScheme = 'Bearer' | 'HMAC-SHA256';
1575
1776
  /**
1576
- * Request parameters for creating a media buy
1777
+ * Standard delivery and performance metrics available for reporting
1577
1778
  */
1578
1779
  export interface CreateMediaBuyRequest {
1579
1780
  /**
@@ -1581,9 +1782,26 @@ export interface CreateMediaBuyRequest {
1581
1782
  */
1582
1783
  buyer_ref: string;
1583
1784
  /**
1584
- * 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.
1786
+ */
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.
1585
1803
  */
1586
- packages: PackageRequest[];
1804
+ packages?: PackageRequest[];
1587
1805
  brand_manifest: BrandManifestReference1;
1588
1806
  /**
1589
1807
  * Purchase order number for tracking
@@ -1594,12 +1812,13 @@ export interface CreateMediaBuyRequest {
1594
1812
  * Campaign end date/time in ISO 8601 format
1595
1813
  */
1596
1814
  end_time: string;
1815
+ reporting_webhook?: ReportingWebhook;
1597
1816
  /**
1598
- * 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.
1599
1818
  */
1600
- reporting_webhook?: {
1819
+ artifact_webhook?: {
1601
1820
  /**
1602
- * Webhook endpoint URL for reporting notifications
1821
+ * Webhook endpoint URL for artifact delivery
1603
1822
  */
1604
1823
  url: string;
1605
1824
  /**
@@ -1622,13 +1841,17 @@ export interface CreateMediaBuyRequest {
1622
1841
  credentials: string;
1623
1842
  };
1624
1843
  /**
1625
- * 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'.
1626
1849
  */
1627
- reporting_frequency: 'hourly' | 'daily' | 'monthly';
1850
+ batch_frequency?: 'hourly' | 'daily';
1628
1851
  /**
1629
- * 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
1630
1853
  */
1631
- requested_metrics?: ('impressions' | 'spend' | 'clicks' | 'ctr' | 'video_completions' | 'completion_rate' | 'conversions' | 'viewability' | 'engagement_rate')[];
1854
+ sampling_rate?: number;
1632
1855
  };
1633
1856
  context?: ContextObject;
1634
1857
  ext?: ExtensionObject;
@@ -1664,40 +1887,64 @@ export interface PackageRequest {
1664
1887
  * Bid price for auction-based CPM pricing (required if using cpm-auction-option)
1665
1888
  */
1666
1889
  bid_price?: number;
1890
+ /**
1891
+ * Impression goal for this package
1892
+ */
1893
+ impressions?: number;
1894
+ /**
1895
+ * Whether this package should be created in a paused state. Paused packages do not deliver impressions. Defaults to false.
1896
+ */
1897
+ paused?: boolean;
1667
1898
  targeting_overlay?: TargetingOverlay;
1668
1899
  /**
1669
- * 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
1670
1901
  */
1671
- creative_ids?: string[];
1902
+ creative_assignments?: CreativeAssignment[];
1672
1903
  /**
1673
- * 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.
1674
1905
  *
1675
1906
  * @maxItems 100
1676
1907
  */
1677
1908
  creatives?: CreativeAsset[];
1678
1909
  ext?: ExtensionObject;
1679
- [k: string]: unknown;
1910
+ [k: string]: unknown | undefined;
1680
1911
  }
1681
1912
  /**
1682
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.
1683
1914
  */
1684
1915
  export interface TargetingOverlay {
1685
1916
  /**
1686
- * 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').
1687
1918
  */
1688
- geo_country_any_of?: string[];
1919
+ geo_countries?: string[];
1689
1920
  /**
1690
- * 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').
1691
1922
  */
1692
- geo_region_any_of?: string[];
1923
+ geo_regions?: string[];
1693
1924
  /**
1694
- * 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.
1695
1926
  */
1696
- 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
+ }[];
1697
1936
  /**
1698
- * 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.
1699
1938
  */
1700
- 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
+ }[];
1701
1948
  /**
1702
1949
  * AXE segment ID to include for targeting
1703
1950
  */
@@ -1707,7 +1954,7 @@ export interface TargetingOverlay {
1707
1954
  */
1708
1955
  axe_exclude_segment?: string;
1709
1956
  frequency_cap?: FrequencyCap;
1710
- [k: string]: unknown;
1957
+ [k: string]: unknown | undefined;
1711
1958
  }
1712
1959
  /**
1713
1960
  * Frequency capping settings for package-level application
@@ -1717,7 +1964,27 @@ export interface FrequencyCap {
1717
1964
  * Minutes to suppress after impression
1718
1965
  */
1719
1966
  suppress_minutes: number;
1720
- [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;
1721
1988
  }
1722
1989
  /**
1723
1990
  * Creative asset for upload to library - supports static assets, generative formats, and third-party snippets
@@ -1736,7 +2003,7 @@ export interface CreativeAsset {
1736
2003
  * Assets required by the format, keyed by asset_role
1737
2004
  */
1738
2005
  assets: {
1739
- [k: string]: unknown;
2006
+ [k: string]: unknown | undefined;
1740
2007
  };
1741
2008
  /**
1742
2009
  * Preview contexts for generative formats - defines what scenarios to generate previews for
@@ -1750,22 +2017,19 @@ export interface CreativeAsset {
1750
2017
  * Macro values to apply for this preview
1751
2018
  */
1752
2019
  macros?: {
1753
- [k: string]: string;
2020
+ [k: string]: string | undefined;
1754
2021
  };
1755
2022
  /**
1756
2023
  * Natural language description of the context for AI-generated content
1757
2024
  */
1758
2025
  context_description?: string;
1759
- [k: string]: unknown;
2026
+ [k: string]: unknown | undefined;
1760
2027
  }[];
1761
2028
  /**
1762
2029
  * User-defined tags for organization and searchability
1763
2030
  */
1764
2031
  tags?: string[];
1765
- /**
1766
- * For generative creatives: set to true to approve and finalize, false to request regeneration with updated assets/message. Omit for non-generative creatives.
1767
- */
1768
- approved?: boolean;
2032
+ status?: CreativeStatus;
1769
2033
  /**
1770
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.
1771
2035
  */
@@ -1776,7 +2040,7 @@ export interface CreativeAsset {
1776
2040
  * @minItems 1
1777
2041
  */
1778
2042
  placement_ids?: [string, ...string[]];
1779
- [k: string]: unknown;
2043
+ [k: string]: unknown | undefined;
1780
2044
  }
1781
2045
  /**
1782
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.
@@ -1802,7 +2066,7 @@ export interface ImageAsset {
1802
2066
  * Alternative text for accessibility
1803
2067
  */
1804
2068
  alt_text?: string;
1805
- [k: string]: unknown;
2069
+ [k: string]: unknown | undefined;
1806
2070
  }
1807
2071
  /**
1808
2072
  * Video asset with URL and specifications
@@ -1832,7 +2096,7 @@ export interface VideoAsset {
1832
2096
  * Video bitrate in kilobits per second
1833
2097
  */
1834
2098
  bitrate_kbps?: number;
1835
- [k: string]: unknown;
2099
+ [k: string]: unknown | undefined;
1836
2100
  }
1837
2101
  /**
1838
2102
  * Audio asset with URL and specifications
@@ -1854,7 +2118,7 @@ export interface AudioAsset {
1854
2118
  * Audio bitrate in kilobits per second
1855
2119
  */
1856
2120
  bitrate_kbps?: number;
1857
- [k: string]: unknown;
2121
+ [k: string]: unknown | undefined;
1858
2122
  }
1859
2123
  /**
1860
2124
  * Text content asset
@@ -1868,7 +2132,7 @@ export interface TextAsset {
1868
2132
  * Language code (e.g., 'en', 'es', 'fr')
1869
2133
  */
1870
2134
  language?: string;
1871
- [k: string]: unknown;
2135
+ [k: string]: unknown | undefined;
1872
2136
  }
1873
2137
  /**
1874
2138
  * HTML content asset
@@ -1882,7 +2146,7 @@ export interface HTMLAsset {
1882
2146
  * HTML version (e.g., 'HTML5')
1883
2147
  */
1884
2148
  version?: string;
1885
- [k: string]: unknown;
2149
+ [k: string]: unknown | undefined;
1886
2150
  }
1887
2151
  /**
1888
2152
  * CSS stylesheet asset
@@ -1896,7 +2160,7 @@ export interface CSSAsset {
1896
2160
  * CSS media query context (e.g., 'screen', 'print')
1897
2161
  */
1898
2162
  media?: string;
1899
- [k: string]: unknown;
2163
+ [k: string]: unknown | undefined;
1900
2164
  }
1901
2165
  /**
1902
2166
  * JavaScript code asset
@@ -1907,34 +2171,22 @@ export interface JavaScriptAsset {
1907
2171
  */
1908
2172
  content: string;
1909
2173
  module_type?: JavaScriptModuleType;
1910
- [k: string]: unknown;
2174
+ [k: string]: unknown | undefined;
1911
2175
  }
1912
2176
  /**
1913
- * 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.
1914
2178
  */
1915
2179
  export interface PromotedOfferings {
1916
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;
1917
2185
  product_selectors?: PromotedProducts;
1918
2186
  /**
1919
- * 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.
1920
2188
  */
1921
- offerings?: {
1922
- /**
1923
- * Offering name (e.g., 'Winter Sale', 'New Product Launch')
1924
- */
1925
- name: string;
1926
- /**
1927
- * Description of what's being offered
1928
- */
1929
- description?: string;
1930
- /**
1931
- * Assets specific to this offering
1932
- */
1933
- assets?: {
1934
- [k: string]: unknown;
1935
- }[];
1936
- [k: string]: unknown;
1937
- }[];
2189
+ offerings?: Offering[];
1938
2190
  /**
1939
2191
  * Selectors to choose specific assets from the brand manifest
1940
2192
  */
@@ -1951,9 +2203,9 @@ export interface PromotedOfferings {
1951
2203
  * Exclude assets with these tags
1952
2204
  */
1953
2205
  exclude_tags?: string[];
1954
- [k: string]: unknown;
2206
+ [k: string]: unknown | undefined;
1955
2207
  };
1956
- [k: string]: unknown;
2208
+ [k: string]: unknown | undefined;
1957
2209
  }
1958
2210
  /**
1959
2211
  * Inline brand manifest object
@@ -1975,124 +2227,199 @@ export interface PromotedProducts {
1975
2227
  * Natural language query to select products from the brand manifest (e.g., 'all Kraft Heinz pasta sauces', 'organic products under $20')
1976
2228
  */
1977
2229
  manifest_query?: string;
1978
- [k: string]: unknown;
2230
+ [k: string]: unknown | undefined;
1979
2231
  }
1980
2232
  /**
1981
- * URL reference asset
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).
1982
2234
  */
1983
- export interface URLAsset {
2235
+ export interface Offering {
1984
2236
  /**
1985
- * URL reference
2237
+ * Unique identifier for this offering. Used by hosts to reference specific offerings in si_get_offering calls.
1986
2238
  */
1987
- url: string;
1988
- url_type?: URLAssetType;
2239
+ offering_id: string;
1989
2240
  /**
1990
- * Description of what this URL points to
2241
+ * Human-readable offering name (e.g., 'Winter Sale', 'Free Trial', 'Enterprise Platform')
1991
2242
  */
1992
- description?: string;
1993
- [k: string]: unknown;
1994
- }
1995
- /**
1996
- * 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.
1997
- */
1998
- /**
1999
- * 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.
2000
- */
2001
- export type CreateMediaBuyResponse = CreateMediaBuySuccess | CreateMediaBuyError;
2002
- /**
2003
- * Budget pacing strategy
2004
- */
2005
- export interface CreateMediaBuySuccess {
2243
+ name: string;
2006
2244
  /**
2007
- * Publisher's unique identifier for the created media buy
2245
+ * Description of what's being offered
2008
2246
  */
2009
- media_buy_id: string;
2247
+ description?: string;
2010
2248
  /**
2011
- * Buyer's reference identifier for this media buy
2249
+ * Short promotional tagline for the offering
2012
2250
  */
2013
- buyer_ref: string;
2251
+ tagline?: string;
2014
2252
  /**
2015
- * ISO 8601 timestamp for creative upload deadline
2253
+ * When the offering becomes available. If not specified, offering is immediately available.
2016
2254
  */
2017
- creative_deadline?: string;
2255
+ valid_from?: string;
2018
2256
  /**
2019
- * Array of created packages with complete state information
2257
+ * When the offering expires. If not specified, offering has no expiration.
2020
2258
  */
2021
- packages: Package[];
2022
- context?: ContextObject;
2023
- ext?: ExtensionObject;
2024
- }
2025
- /**
2026
- * A specific product within a media buy (line item)
2027
- */
2028
- export interface Package {
2259
+ valid_to?: string;
2029
2260
  /**
2030
- * Publisher's unique identifier for the package
2261
+ * URL for checkout/purchase flow when the brand doesn't support agentic checkout.
2031
2262
  */
2032
- package_id: string;
2263
+ checkout_url?: string;
2033
2264
  /**
2034
- * Buyer's reference identifier for this package
2265
+ * Landing page URL for this offering.
2035
2266
  */
2036
- buyer_ref?: string;
2267
+ landing_url?: string;
2037
2268
  /**
2038
- * ID of the product this package is based on
2269
+ * Assets specific to this offering (images, videos, copy)
2039
2270
  */
2040
- product_id?: string;
2271
+ assets?: {
2272
+ [k: string]: unknown | undefined;
2273
+ }[];
2041
2274
  /**
2042
- * Budget allocation for this package in the currency specified by the pricing option
2275
+ * Reference to a creative portfolio for this offering. Portfolios contain organized creative assets across formats, enabling consistent ad delivery for this specific offering.
2043
2276
  */
2044
- budget?: number;
2045
- pacing?: Pacing;
2277
+ portfolio_ref?: string;
2046
2278
  /**
2047
- * ID of the selected pricing option from the product's pricing_options array
2279
+ * Keywords for matching this offering to user intent. Hosts use these for retrieval/relevance scoring.
2048
2280
  */
2049
- pricing_option_id?: string;
2281
+ keywords?: string[];
2050
2282
  /**
2051
- * Bid price for auction-based CPM pricing (present if using cpm-auction-option)
2283
+ * Categories this offering belongs to (e.g., 'measurement', 'identity', 'programmatic')
2052
2284
  */
2053
- bid_price?: number;
2054
- /**
2055
- * Impression goal for this package
2285
+ categories?: string[];
2286
+ ext?: ExtensionObject;
2287
+ [k: string]: unknown | undefined;
2288
+ }
2289
+ /**
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.
2291
+ */
2292
+ export interface URLAsset {
2293
+ /**
2294
+ * URL reference
2056
2295
  */
2057
- impressions?: number;
2058
- targeting_overlay?: TargetingOverlay;
2296
+ url: string;
2297
+ url_type?: URLAssetType;
2059
2298
  /**
2060
- * Creative assets assigned to this package
2299
+ * Description of what this URL points to
2061
2300
  */
2062
- creative_assignments?: CreativeAssignment[];
2301
+ description?: string;
2302
+ [k: string]: unknown | undefined;
2303
+ }
2304
+ /**
2305
+ * Optional webhook configuration for automated reporting delivery
2306
+ */
2307
+ export interface ReportingWebhook {
2063
2308
  /**
2064
- * Format IDs that creative assets will be provided for this package
2309
+ * Webhook endpoint URL for reporting notifications
2065
2310
  */
2066
- format_ids_to_provide?: FormatID[];
2311
+ url: string;
2067
2312
  /**
2068
- * Whether this package is paused by the buyer. Paused packages do not deliver impressions. Defaults to false.
2313
+ * Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.
2069
2314
  */
2070
- paused?: boolean;
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.
2344
+ */
2345
+ /**
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.
2347
+ */
2348
+ export type CreateMediaBuyResponse = CreateMediaBuySuccess | CreateMediaBuyError;
2349
+ /**
2350
+ * Budget pacing strategy
2351
+ */
2352
+ export interface CreateMediaBuySuccess {
2353
+ /**
2354
+ * Publisher's unique identifier for the created media buy
2355
+ */
2356
+ media_buy_id: string;
2357
+ /**
2358
+ * Buyer's reference identifier for this media buy
2359
+ */
2360
+ buyer_ref: string;
2361
+ /**
2362
+ * ISO 8601 timestamp for creative upload deadline
2363
+ */
2364
+ creative_deadline?: string;
2365
+ /**
2366
+ * Array of created packages with complete state information
2367
+ */
2368
+ packages: Package[];
2369
+ context?: ContextObject;
2071
2370
  ext?: ExtensionObject;
2072
- [k: string]: unknown;
2073
2371
  }
2074
2372
  /**
2075
- * 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).
2373
+ * A specific product within a media buy (line item)
2076
2374
  */
2077
- export interface CreativeAssignment {
2375
+ export interface Package {
2078
2376
  /**
2079
- * Unique identifier for the creative
2377
+ * Publisher's unique identifier for the package
2080
2378
  */
2081
- creative_id: string;
2379
+ package_id: string;
2082
2380
  /**
2083
- * Delivery weight for this creative
2381
+ * Buyer's reference identifier for this package
2084
2382
  */
2085
- weight?: number;
2383
+ buyer_ref?: string;
2086
2384
  /**
2087
- * 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.
2088
- *
2089
- * @minItems 1
2385
+ * ID of the product this package is based on
2090
2386
  */
2091
- placement_ids?: [string, ...string[]];
2092
- [k: string]: unknown;
2387
+ product_id?: string;
2388
+ /**
2389
+ * Budget allocation for this package in the currency specified by the pricing option
2390
+ */
2391
+ budget?: number;
2392
+ pacing?: Pacing;
2393
+ /**
2394
+ * ID of the selected pricing option from the product's pricing_options array
2395
+ */
2396
+ pricing_option_id?: string;
2397
+ /**
2398
+ * Bid price for auction-based CPM pricing (present if using cpm-auction-option)
2399
+ */
2400
+ bid_price?: number;
2401
+ /**
2402
+ * Impression goal for this package
2403
+ */
2404
+ impressions?: number;
2405
+ targeting_overlay?: TargetingOverlay;
2406
+ /**
2407
+ * Creative assets assigned to this package
2408
+ */
2409
+ creative_assignments?: CreativeAssignment[];
2410
+ /**
2411
+ * Format IDs that creative assets will be provided for this package
2412
+ */
2413
+ format_ids_to_provide?: FormatID[];
2414
+ /**
2415
+ * Whether this package is paused by the buyer. Paused packages do not deliver impressions. Defaults to false.
2416
+ */
2417
+ paused?: boolean;
2418
+ ext?: ExtensionObject;
2419
+ [k: string]: unknown | undefined;
2093
2420
  }
2094
2421
  /**
2095
- * 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.
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).
2096
2423
  */
2097
2424
  export interface CreateMediaBuyError {
2098
2425
  /**
@@ -2265,17 +2592,9 @@ export interface SyncCreativesError {
2265
2592
  /**
2266
2593
  * Standard error structure for task-specific errors and warnings
2267
2594
  */
2268
- /**
2269
- * Filter by creative approval status
2270
- */
2271
- export type CreativeStatus = 'processing' | 'approved' | 'rejected' | 'pending_review';
2272
2595
  /**
2273
2596
  * Status of a creative asset
2274
2597
  */
2275
- export type CreativeStatus1 = 'processing' | 'approved' | 'rejected' | 'pending_review';
2276
- /**
2277
- * Field to sort by
2278
- */
2279
2598
  export type CreativeSortField = 'created_date' | 'updated_date' | 'name' | 'status' | 'assignment_count' | 'performance_score';
2280
2599
  /**
2281
2600
  * Sort direction
@@ -2326,22 +2645,17 @@ export interface ListCreativesRequest {
2326
2645
  ext?: ExtensionObject;
2327
2646
  }
2328
2647
  /**
2329
- * 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.
2330
2649
  */
2331
2650
  export interface CreativeFilters {
2332
2651
  /**
2333
- * Filter by creative format type (e.g., video, audio, display)
2334
- */
2335
- format?: string;
2336
- /**
2337
- * Filter by multiple creative format types
2652
+ * Filter by creative format types (e.g., video, audio, display)
2338
2653
  */
2339
2654
  formats?: string[];
2340
- status?: CreativeStatus;
2341
2655
  /**
2342
- * Filter by multiple creative statuses
2656
+ * Filter by creative approval statuses
2343
2657
  */
2344
- statuses?: CreativeStatus1[];
2658
+ statuses?: CreativeStatus[];
2345
2659
  /**
2346
2660
  * Filter by creative tags (all tags must match)
2347
2661
  */
@@ -2376,10 +2690,6 @@ export interface CreativeFilters {
2376
2690
  * Filter creatives last updated before this date (ISO 8601)
2377
2691
  */
2378
2692
  updated_before?: string;
2379
- /**
2380
- * Filter creatives assigned to this specific package
2381
- */
2382
- assigned_to_package?: string;
2383
2693
  /**
2384
2694
  * Filter creatives assigned to any of these packages
2385
2695
  */
@@ -2400,7 +2710,7 @@ export interface CreativeFilters {
2400
2710
  * Filter creatives that have performance data when true
2401
2711
  */
2402
2712
  has_performance_data?: boolean;
2403
- [k: string]: unknown;
2713
+ [k: string]: unknown | undefined;
2404
2714
  }
2405
2715
  /**
2406
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.
@@ -2425,7 +2735,7 @@ export type SubAsset = {
2425
2735
  * URL for media assets (images, videos, etc.)
2426
2736
  */
2427
2737
  content_uri: string;
2428
- [k: string]: unknown;
2738
+ [k: string]: unknown | undefined;
2429
2739
  } | {
2430
2740
  /**
2431
2741
  * Discriminator indicating this is a text asset with content
@@ -2443,7 +2753,7 @@ export type SubAsset = {
2443
2753
  * Text content for text-based assets like headlines, body text, CTA text, etc.
2444
2754
  */
2445
2755
  content: string | string[];
2446
- [k: string]: unknown;
2756
+ [k: string]: unknown | undefined;
2447
2757
  };
2448
2758
  /**
2449
2759
  * Response from creative library query with filtered results, metadata, and optional enriched data
@@ -2551,17 +2861,13 @@ export interface ListCreativesResponse {
2551
2861
  */
2552
2862
  package_id: string;
2553
2863
  /**
2554
- * Human-readable package name
2864
+ * Buyer's reference identifier for this package
2555
2865
  */
2556
- package_name?: string;
2866
+ buyer_ref?: string;
2557
2867
  /**
2558
2868
  * When this assignment was created
2559
2869
  */
2560
2870
  assigned_date: string;
2561
- /**
2562
- * Status of this specific assignment
2563
- */
2564
- status: 'active' | 'paused' | 'ended';
2565
2871
  }[];
2566
2872
  };
2567
2873
  /**
@@ -2614,6 +2920,10 @@ export interface ListCreativesResponse {
2614
2920
  * Breakdown of creatives by status
2615
2921
  */
2616
2922
  status_summary?: {
2923
+ /**
2924
+ * Number of creatives being processed
2925
+ */
2926
+ processing?: number;
2617
2927
  /**
2618
2928
  * Number of approved creatives
2619
2929
  */
@@ -2640,11 +2950,7 @@ export interface ListCreativesResponse {
2640
2950
  /**
2641
2951
  * Request parameters for updating campaign and package settings
2642
2952
  */
2643
- export type UpdateMediaBuyRequest = UpdateMediaBuyRequest1;
2644
- /**
2645
- * Campaign start timing: 'asap' or ISO 8601 date-time
2646
- */
2647
- export interface UpdateMediaBuyRequest1 {
2953
+ export type UpdateMediaBuyRequest = {
2648
2954
  /**
2649
2955
  * Publisher's ID of the media buy to update
2650
2956
  */
@@ -2665,17 +2971,61 @@ export interface UpdateMediaBuyRequest1 {
2665
2971
  /**
2666
2972
  * Package-specific updates
2667
2973
  */
2668
- packages?: ({
2669
- [k: string]: unknown;
2670
- } | {
2671
- [k: string]: unknown;
2672
- })[];
2974
+ packages?: PackageUpdate[];
2975
+ reporting_webhook?: ReportingWebhook;
2673
2976
  push_notification_config?: PushNotificationConfig;
2674
2977
  context?: ContextObject;
2675
2978
  ext?: ExtensionObject;
2676
- }
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
+ };
2677
3027
  /**
2678
- * 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
2679
3029
  */
2680
3030
  /**
2681
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.
@@ -3041,63 +3391,11 @@ export interface DeliveryMetrics {
3041
3391
  * Number of screens used at this venue
3042
3392
  */
3043
3393
  screens_used?: number;
3044
- [k: string]: unknown;
3394
+ [k: string]: unknown | undefined;
3045
3395
  }[];
3046
- [k: string]: unknown;
3396
+ [k: string]: unknown | undefined;
3047
3397
  };
3048
- [k: string]: unknown;
3049
- }
3050
- /**
3051
- * Standard error structure for task-specific errors and warnings
3052
- */
3053
- /**
3054
- * Request parameters for discovering which publishers this agent is authorized to represent
3055
- */
3056
- export interface ListAuthorizedPropertiesRequest {
3057
- /**
3058
- * Filter to specific publisher domains (optional). If omitted, returns all publishers this agent represents.
3059
- */
3060
- publisher_domains?: string[];
3061
- context?: ContextObject;
3062
- ext?: ExtensionObject;
3063
- }
3064
- /**
3065
- * 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.
3066
- */
3067
- /**
3068
- * Standard advertising channels supported by AdCP
3069
- */
3070
- export interface ListAuthorizedPropertiesResponse {
3071
- /**
3072
- * 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.
3073
- */
3074
- publisher_domains: string[];
3075
- /**
3076
- * Primary advertising channels represented in this property portfolio. Helps buying agents quickly filter relevance.
3077
- */
3078
- primary_channels?: AdvertisingChannels[];
3079
- /**
3080
- * Primary countries (ISO 3166-1 alpha-2 codes) where properties are concentrated. Helps buying agents quickly filter relevance.
3081
- */
3082
- primary_countries?: string[];
3083
- /**
3084
- * Markdown-formatted description of the property portfolio, including inventory types, audience characteristics, and special features.
3085
- */
3086
- portfolio_description?: string;
3087
- /**
3088
- * 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.
3089
- */
3090
- advertising_policies?: string;
3091
- /**
3092
- * 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.
3093
- */
3094
- last_updated?: string;
3095
- /**
3096
- * Task-specific errors and warnings (e.g., property availability issues)
3097
- */
3098
- errors?: Error[];
3099
- context?: ContextObject;
3100
- ext?: ExtensionObject;
3398
+ [k: string]: unknown | undefined;
3101
3399
  }
3102
3400
  /**
3103
3401
  * Standard error structure for task-specific errors and warnings
@@ -3105,16 +3403,7 @@ export interface ListAuthorizedPropertiesResponse {
3105
3403
  /**
3106
3404
  * Request payload for provide_performance_feedback task
3107
3405
  */
3108
- export type ProvidePerformanceFeedbackRequest = ProvidePerformanceFeedbackRequest1;
3109
- /**
3110
- * The business metric being measured
3111
- */
3112
- export type MetricType = 'overall_performance' | 'conversion_rate' | 'brand_lift' | 'click_through_rate' | 'completion_rate' | 'viewability' | 'brand_safety' | 'cost_efficiency';
3113
- /**
3114
- * Source of the performance data
3115
- */
3116
- export type FeedbackSource = 'buyer_attribution' | 'third_party_measurement' | 'platform_analytics' | 'verification_partner';
3117
- export interface ProvidePerformanceFeedbackRequest1 {
3406
+ export type ProvidePerformanceFeedbackRequest = {
3118
3407
  /**
3119
3408
  * Publisher's media buy identifier
3120
3409
  */
@@ -3152,7 +3441,17 @@ export interface ProvidePerformanceFeedbackRequest1 {
3152
3441
  feedback_source?: FeedbackSource;
3153
3442
  context?: ContextObject;
3154
3443
  ext?: ExtensionObject;
3155
- }
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';
3156
3455
  /**
3157
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.
3158
3457
  */
@@ -3225,10 +3524,10 @@ export interface CreativeManifest {
3225
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.
3226
3525
  */
3227
3526
  assets: {
3228
- [k: string]: unknown;
3527
+ [k: string]: unknown | undefined;
3229
3528
  };
3230
3529
  ext?: ExtensionObject;
3231
- [k: string]: unknown;
3530
+ [k: string]: unknown | undefined;
3232
3531
  }
3233
3532
  /**
3234
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'}).
@@ -3266,7 +3565,7 @@ export interface WebhookAsset {
3266
3565
  */
3267
3566
  api_key_header?: string;
3268
3567
  };
3269
- [k: string]: unknown;
3568
+ [k: string]: unknown | undefined;
3270
3569
  }
3271
3570
  /**
3272
3571
  * CSS stylesheet asset
@@ -3319,7 +3618,7 @@ export type PreviewCreativeRequest = {
3319
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.
3320
3619
  */
3321
3620
  macros?: {
3322
- [k: string]: string;
3621
+ [k: string]: string | undefined;
3323
3622
  };
3324
3623
  /**
3325
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')
@@ -3358,7 +3657,7 @@ export type PreviewCreativeRequest = {
3358
3657
  * Macro values to use for this preview
3359
3658
  */
3360
3659
  macros?: {
3361
- [k: string]: string;
3660
+ [k: string]: string | undefined;
3362
3661
  };
3363
3662
  /**
3364
3663
  * Natural language description of the context for AI-generated content
@@ -3402,10 +3701,10 @@ export interface CreativeManifest1 {
3402
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.
3403
3702
  */
3404
3703
  assets: {
3405
- [k: string]: unknown;
3704
+ [k: string]: unknown | undefined;
3406
3705
  };
3407
3706
  ext?: ExtensionObject;
3408
- [k: string]: unknown;
3707
+ [k: string]: unknown | undefined;
3409
3708
  }
3410
3709
  /**
3411
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.
@@ -3459,7 +3758,7 @@ export type PreviewRender = {
3459
3758
  */
3460
3759
  csp_policy?: string;
3461
3760
  };
3462
- [k: string]: unknown;
3761
+ [k: string]: unknown | undefined;
3463
3762
  } | {
3464
3763
  /**
3465
3764
  * Unique identifier for this rendered piece within the variant
@@ -3505,7 +3804,7 @@ export type PreviewRender = {
3505
3804
  */
3506
3805
  csp_policy?: string;
3507
3806
  };
3508
- [k: string]: unknown;
3807
+ [k: string]: unknown | undefined;
3509
3808
  } | {
3510
3809
  /**
3511
3810
  * Unique identifier for this rendered piece within the variant
@@ -3555,7 +3854,7 @@ export type PreviewRender = {
3555
3854
  */
3556
3855
  csp_policy?: string;
3557
3856
  };
3558
- [k: string]: unknown;
3857
+ [k: string]: unknown | undefined;
3559
3858
  };
3560
3859
  /**
3561
3860
  * Single preview response - each preview URL returns an HTML page that can be embedded in an iframe
@@ -3589,7 +3888,7 @@ export interface PreviewCreativeSingleResponse {
3589
3888
  * Macro values applied to this variant
3590
3889
  */
3591
3890
  macros?: {
3592
- [k: string]: string;
3891
+ [k: string]: string | undefined;
3593
3892
  };
3594
3893
  /**
3595
3894
  * Context description applied to this variant
@@ -3645,7 +3944,7 @@ export type Destination = {
3645
3944
  * Optional account identifier on the platform
3646
3945
  */
3647
3946
  account?: string;
3648
- [k: string]: unknown;
3947
+ [k: string]: unknown | undefined;
3649
3948
  } | {
3650
3949
  /**
3651
3950
  * Discriminator indicating this is an agent URL-based deployment
@@ -3659,7 +3958,7 @@ export type Destination = {
3659
3958
  * Optional account identifier on the agent
3660
3959
  */
3661
3960
  account?: string;
3662
- [k: string]: unknown;
3961
+ [k: string]: unknown | undefined;
3663
3962
  };
3664
3963
  /**
3665
3964
  * Types of signal catalogs available for audience targeting
@@ -3714,7 +4013,7 @@ export interface SignalFilters {
3714
4013
  * Minimum coverage requirement
3715
4014
  */
3716
4015
  min_coverage_percentage?: number;
3717
- [k: string]: unknown;
4016
+ [k: string]: unknown | undefined;
3718
4017
  }
3719
4018
  /**
3720
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.
@@ -3748,7 +4047,7 @@ export type Deployment = {
3748
4047
  * Timestamp when activation completed (if is_live=true)
3749
4048
  */
3750
4049
  deployed_at?: string;
3751
- [k: string]: unknown;
4050
+ [k: string]: unknown | undefined;
3752
4051
  } | {
3753
4052
  /**
3754
4053
  * Discriminator indicating this is an agent URL-based deployment
@@ -3775,7 +4074,7 @@ export type Deployment = {
3775
4074
  * Timestamp when activation completed (if is_live=true)
3776
4075
  */
3777
4076
  deployed_at?: string;
3778
- [k: string]: unknown;
4077
+ [k: string]: unknown | undefined;
3779
4078
  };
3780
4079
  /**
3781
4080
  * The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.
@@ -3789,7 +4088,7 @@ export type ActivationKey = {
3789
4088
  * The platform-specific segment identifier to use in campaign targeting
3790
4089
  */
3791
4090
  segment_id: string;
3792
- [k: string]: unknown;
4091
+ [k: string]: unknown | undefined;
3793
4092
  } | {
3794
4093
  /**
3795
4094
  * Key-value pair based targeting
@@ -3803,7 +4102,7 @@ export type ActivationKey = {
3803
4102
  * The targeting parameter value
3804
4103
  */
3805
4104
  value: string;
3806
- [k: string]: unknown;
4105
+ [k: string]: unknown | undefined;
3807
4106
  };
3808
4107
  /**
3809
4108
  * The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.
@@ -3817,7 +4116,7 @@ export type ActivationKey1 = {
3817
4116
  * The platform-specific segment identifier to use in campaign targeting
3818
4117
  */
3819
4118
  segment_id: string;
3820
- [k: string]: unknown;
4119
+ [k: string]: unknown | undefined;
3821
4120
  } | {
3822
4121
  /**
3823
4122
  * Key-value pair based targeting
@@ -3831,7 +4130,7 @@ export type ActivationKey1 = {
3831
4130
  * The targeting parameter value
3832
4131
  */
3833
4132
  value: string;
3834
- [k: string]: unknown;
4133
+ [k: string]: unknown | undefined;
3835
4134
  };
3836
4135
  /**
3837
4136
  * Response payload for get_signals task
@@ -3937,4 +4236,2356 @@ export interface ActivateSignalError {
3937
4236
  /**
3938
4237
  * Standard error structure for task-specific errors and warnings
3939
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
+ */
3940
6591
  //# sourceMappingURL=tools.generated.d.ts.map