@adcp/client 3.20.0 → 3.22.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 (36) hide show
  1. package/dist/lib/agents/index.generated.d.ts +17 -1
  2. package/dist/lib/agents/index.generated.d.ts.map +1 -1
  3. package/dist/lib/agents/index.generated.js +24 -0
  4. package/dist/lib/agents/index.generated.js.map +1 -1
  5. package/dist/lib/core/AgentClient.d.ts +6 -1
  6. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  7. package/dist/lib/core/AgentClient.js +13 -0
  8. package/dist/lib/core/AgentClient.js.map +1 -1
  9. package/dist/lib/core/AsyncHandler.d.ts +2 -1
  10. package/dist/lib/core/AsyncHandler.d.ts.map +1 -1
  11. package/dist/lib/core/AsyncHandler.js +3 -0
  12. package/dist/lib/core/AsyncHandler.js.map +1 -1
  13. package/dist/lib/core/SingleAgentClient.d.ts +9 -1
  14. package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
  15. package/dist/lib/core/SingleAgentClient.js +12 -0
  16. package/dist/lib/core/SingleAgentClient.js.map +1 -1
  17. package/dist/lib/index.d.ts +1 -1
  18. package/dist/lib/index.d.ts.map +1 -1
  19. package/dist/lib/index.js.map +1 -1
  20. package/dist/lib/registry/index.d.ts +57 -0
  21. package/dist/lib/registry/index.d.ts.map +1 -1
  22. package/dist/lib/registry/index.js +34 -0
  23. package/dist/lib/registry/index.js.map +1 -1
  24. package/dist/lib/registry/types.generated.d.ts +159 -0
  25. package/dist/lib/registry/types.generated.d.ts.map +1 -1
  26. package/dist/lib/registry/types.generated.js +1 -1
  27. package/dist/lib/types/core.generated.d.ts +159 -311
  28. package/dist/lib/types/core.generated.d.ts.map +1 -1
  29. package/dist/lib/types/core.generated.js +1 -1
  30. package/dist/lib/types/schemas.generated.d.ts +6032 -3347
  31. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  32. package/dist/lib/types/schemas.generated.js +533 -397
  33. package/dist/lib/types/schemas.generated.js.map +1 -1
  34. package/dist/lib/types/tools.generated.d.ts +764 -691
  35. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  36. package/package.json +2 -2
@@ -1,3 +1,36 @@
1
+ /**
2
+ * Request parameters for discovering available advertising products
3
+ */
4
+ export type GetProductsRequest = {
5
+ /**
6
+ * Declares buyer intent for this request. 'brief': publisher curates product recommendations from the provided brief. 'wholesale': buyer requests raw inventory to apply their own audiences — brief must not be provided. When buying_mode is 'wholesale', publishers return only products that support buyer-directed targeting and omit proposals.
7
+ */
8
+ buying_mode: 'brief' | 'wholesale';
9
+ /**
10
+ * Natural language description of campaign requirements. Required when buying_mode is 'brief'. Must not be provided when buying_mode is 'wholesale'.
11
+ */
12
+ brief?: string;
13
+ brand?: BrandReference;
14
+ catalog?: Catalog;
15
+ /**
16
+ * Account ID for product lookup. Required when the seller declares account.required_for_products = true in capabilities. Returns products with pricing specific to this account's rate card.
17
+ */
18
+ account_id?: string;
19
+ /**
20
+ * Buyer's campaign reference label. Groups related discovery and buy operations under a single campaign for CRM and ad server correlation (e.g., 'NovaDrink_Meals_Q2').
21
+ */
22
+ buyer_campaign_ref?: string;
23
+ filters?: ProductFilters;
24
+ property_list?: PropertyListReference;
25
+ pagination?: PaginationRequest;
26
+ context?: ContextObject;
27
+ ext?: ExtensionObject;
28
+ } & ({
29
+ buying_mode: 'brief';
30
+ } | {
31
+ buying_mode: 'wholesale';
32
+ brief?: never;
33
+ });
1
34
  /**
2
35
  * Brand identifier within the house portfolio. Optional for single-brand domains.
3
36
  */
@@ -55,7 +88,6 @@ export type SignalTargeting = {
55
88
  * Whether to include (true) or exclude (false) users matching this signal
56
89
  */
57
90
  value: boolean;
58
- [k: string]: unknown | undefined;
59
91
  } | {
60
92
  signal_id: SignalID;
61
93
  /**
@@ -64,11 +96,8 @@ export type SignalTargeting = {
64
96
  value_type: 'categorical';
65
97
  /**
66
98
  * Values to target. Users with any of these values will be included.
67
- *
68
- * @minItems 1
69
99
  */
70
- values: [string, ...string[]];
71
- [k: string]: unknown | undefined;
100
+ values: string[];
72
101
  } | {
73
102
  signal_id: SignalID;
74
103
  /**
@@ -83,7 +112,6 @@ export type SignalTargeting = {
83
112
  * Maximum value (inclusive). Omit for no maximum. Must be >= min_value when both are provided. Should be <= signal's range.max if defined.
84
113
  */
85
114
  max_value?: number;
86
- [k: string]: unknown | undefined;
87
115
  };
88
116
  /**
89
117
  * The signal to target
@@ -101,7 +129,6 @@ export type SignalID = {
101
129
  * Signal identifier within the data provider's catalog (e.g., 'likely_tesla_buyers', 'income_100k_plus')
102
130
  */
103
131
  id: string;
104
- [k: string]: unknown | undefined;
105
132
  } | {
106
133
  /**
107
134
  * Discriminator indicating this signal is native to the agent (not from a data provider catalog)
@@ -115,35 +142,10 @@ export type SignalID = {
115
142
  * Signal identifier within the agent's signal set (e.g., 'custom_auto_intenders')
116
143
  */
117
144
  id: string;
118
- [k: string]: unknown | undefined;
119
145
  };
120
146
  /**
121
147
  * The signal to target
122
148
  */
123
- export interface GetProductsRequest {
124
- /**
125
- * Natural language description of campaign requirements.
126
- */
127
- brief?: string;
128
- brand?: BrandReference;
129
- catalog?: Catalog;
130
- /**
131
- * Account ID for product lookup. Required when the seller declares account.required_for_products = true in capabilities. Returns products with pricing specific to this account's rate card.
132
- */
133
- account_id?: string;
134
- /**
135
- * Buyer's campaign reference label. Groups related discovery and buy operations under a single campaign for CRM and ad server correlation (e.g., 'NovaDrink_Meals_Q2').
136
- */
137
- campaign_ref?: string;
138
- filters?: ProductFilters;
139
- property_list?: PropertyListReference;
140
- pagination?: PaginationRequest;
141
- context?: ContextObject;
142
- ext?: ExtensionObject;
143
- }
144
- /**
145
- * Brand reference for product discovery context. Resolved to full brand identity at execution time.
146
- */
147
149
  export interface BrandReference {
148
150
  /**
149
151
  * Domain where /.well-known/brand.json is hosted, or the brand's operating domain
@@ -172,28 +174,20 @@ export interface Catalog {
172
174
  update_frequency?: UpdateFrequency;
173
175
  /**
174
176
  * Inline catalog data. The item schema depends on the catalog type: Offering objects for 'offering', StoreItem for 'store', HotelItem for 'hotel', FlightItem for 'flight', JobItem for 'job', VehicleItem for 'vehicle', RealEstateItem for 'real_estate', EducationItem for 'education', DestinationItem for 'destination', AppItem for 'app', or freeform objects for 'product', 'inventory', and 'promotion'. Mutually exclusive with url — provide one or the other, not both. Implementations should validate items against the type-specific schema.
175
- *
176
- * @minItems 1
177
177
  */
178
- items?: [{}, ...{}[]];
178
+ items?: {}[];
179
179
  /**
180
180
  * Filter catalog to specific item IDs. For offering-type catalogs, these are offering_id values. For product-type catalogs, these are SKU identifiers.
181
- *
182
- * @minItems 1
183
181
  */
184
- ids?: [string, ...string[]];
182
+ ids?: string[];
185
183
  /**
186
184
  * Filter product-type catalogs by GTIN identifiers for cross-retailer catalog matching. Accepts standard GTIN formats (GTIN-8, UPC-A/GTIN-12, EAN-13/GTIN-13, GTIN-14). Only applicable when type is 'product'.
187
- *
188
- * @minItems 1
189
185
  */
190
- gtins?: [string, ...string[]];
186
+ gtins?: string[];
191
187
  /**
192
188
  * Filter catalog to items with these tags. Tags are matched using OR logic — items matching any tag are included.
193
- *
194
- * @minItems 1
195
189
  */
196
- tags?: [string, ...string[]];
190
+ tags?: string[];
197
191
  /**
198
192
  * Filter catalog to items in this category (e.g., 'beverages/soft-drinks', 'chef-positions').
199
193
  */
@@ -204,12 +198,68 @@ export interface Catalog {
204
198
  query?: string;
205
199
  /**
206
200
  * Event types that represent conversions for items in this catalog. Declares what events the platform should attribute to catalog items — e.g., a job catalog converts via submit_application, a product catalog via purchase. The event's content_ids field carries the item IDs that connect back to catalog items. Use content_id_type to declare what identifier type content_ids values represent.
207
- *
208
- * @minItems 1
209
201
  */
210
- conversion_events?: [EventType, ...EventType[]];
202
+ conversion_events?: EventType[];
211
203
  content_id_type?: ContentIDType;
212
- [k: string]: unknown | undefined;
204
+ /**
205
+ * Declarative normalization rules for external feeds. Maps non-standard feed field names, date formats, price encodings, and image URLs to the AdCP catalog item schema. Applied during sync_catalogs ingestion. Supports field renames, named transforms (date, divide, boolean, split), static literal injection, and assignment of image URLs to typed asset pools.
206
+ */
207
+ feed_field_mappings?: CatalogFieldMapping[];
208
+ }
209
+ /**
210
+ * Declares how a field in an external feed maps to the AdCP catalog item schema. Used in sync_catalogs feed_field_mappings to normalize non-AdCP feeds (Google Merchant Center, LinkedIn Jobs XML, hotel XML, etc.) to the standard catalog item schema without requiring the buyer to preprocess every feed. Multiple mappings can assemble a nested object via dot notation (e.g., separate mappings for price.amount and price.currency).
211
+ */
212
+ export interface CatalogFieldMapping {
213
+ /**
214
+ * Field name in the external feed record. Omit when injecting a static literal value (use the value property instead).
215
+ */
216
+ feed_field?: string;
217
+ /**
218
+ * Target field on the catalog item schema, using dot notation for nested fields (e.g., 'name', 'price.amount', 'location.city'). Mutually exclusive with asset_group_id.
219
+ */
220
+ catalog_field?: string;
221
+ /**
222
+ * Places the feed field value (a URL) into a typed asset pool on the catalog item's assets array. The value is wrapped as an image or video asset in a group with this ID. Use standard group IDs: 'images_landscape', 'images_vertical', 'images_square', 'logo', 'video'. Mutually exclusive with catalog_field.
223
+ */
224
+ asset_group_id?: string;
225
+ /**
226
+ * Static literal value to inject into catalog_field for every item, regardless of what the feed contains. Mutually exclusive with feed_field. Useful for fields the feed omits (e.g., currency when price is always USD, or a constant category value).
227
+ */
228
+ value?: {
229
+ [k: string]: unknown | undefined;
230
+ };
231
+ /**
232
+ * Named transform to apply to the feed field value before writing to the catalog schema. See transform-specific parameters (format, timezone, by, separator).
233
+ */
234
+ transform?: 'date' | 'divide' | 'boolean' | 'split';
235
+ /**
236
+ * For transform 'date': the input date format string (e.g., 'YYYYMMDD', 'MM/DD/YYYY', 'DD-MM-YYYY'). Output is always ISO 8601 (e.g., '2025-03-01'). Uses Unicode date pattern tokens.
237
+ */
238
+ format?: string;
239
+ /**
240
+ * For transform 'date': the timezone of the input value. IANA timezone identifier (e.g., 'UTC', 'America/New_York', 'Europe/Amsterdam'). Defaults to UTC when omitted.
241
+ */
242
+ timezone?: string;
243
+ /**
244
+ * For transform 'divide': the divisor to apply (e.g., 100 to convert integer cents to decimal dollars).
245
+ */
246
+ by?: number;
247
+ /**
248
+ * For transform 'split': the separator character or string to split on. Defaults to ','.
249
+ */
250
+ separator?: string;
251
+ /**
252
+ * Fallback value to use when feed_field is absent, null, or empty. Applied after any transform would have been applied. Allows optional feed fields to have a guaranteed baseline value.
253
+ */
254
+ default?: {
255
+ [k: string]: unknown | undefined;
256
+ };
257
+ ext?: ExtensionObject;
258
+ }
259
+ /**
260
+ * 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.
261
+ */
262
+ export interface ExtensionObject {
213
263
  }
214
264
  /**
215
265
  * Structured filters for product discovery
@@ -222,16 +272,12 @@ export interface ProductFilters {
222
272
  is_fixed_price?: boolean;
223
273
  /**
224
274
  * Filter by format types
225
- *
226
- * @minItems 1
227
275
  */
228
- format_types?: [FormatCategory, ...FormatCategory[]];
276
+ format_types?: FormatCategory[];
229
277
  /**
230
278
  * Filter by specific format IDs
231
- *
232
- * @minItems 1
233
279
  */
234
- format_ids?: [FormatID, ...FormatID[]];
280
+ format_ids?: FormatID[];
235
281
  /**
236
282
  * Only return products accepting IAB standard formats
237
283
  */
@@ -256,78 +302,45 @@ export interface ProductFilters {
256
302
  };
257
303
  /**
258
304
  * Filter by country coverage using ISO 3166-1 alpha-2 codes (e.g., ['US', 'CA', 'GB']). Works for all inventory types.
259
- *
260
- * @minItems 1
261
305
  */
262
- countries?: [string, ...string[]];
306
+ countries?: string[];
263
307
  /**
264
308
  * 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.
265
- *
266
- * @minItems 1
267
309
  */
268
- regions?: [string, ...string[]];
310
+ regions?: string[];
269
311
  /**
270
312
  * 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.
271
- *
272
- * @minItems 1
273
313
  */
274
- metros?: [
275
- {
276
- system: MetroAreaSystem;
277
- /**
278
- * Metro code within the system (e.g., '501' for NYC DMA)
279
- */
280
- code: string;
281
- },
282
- ...{
283
- system: MetroAreaSystem;
284
- /**
285
- * Metro code within the system (e.g., '501' for NYC DMA)
286
- */
287
- code: string;
288
- }[]
289
- ];
314
+ metros?: {
315
+ system: MetroAreaSystem;
316
+ /**
317
+ * Metro code within the system (e.g., '501' for NYC DMA)
318
+ */
319
+ code: string;
320
+ }[];
290
321
  /**
291
322
  * Filter by advertising channels (e.g., ['display', 'ctv', 'dooh'])
292
- *
293
- * @minItems 1
294
323
  */
295
- channels?: [MediaChannel, ...MediaChannel[]];
324
+ channels?: MediaChannel[];
296
325
  /**
297
326
  * Filter to products executable through specific agentic ad exchanges. URLs are canonical identifiers.
298
- *
299
- * @minItems 1
300
327
  */
301
- required_axe_integrations?: [string, ...string[]];
328
+ required_axe_integrations?: string[];
302
329
  required_features?: MediaBuyFeatures;
303
330
  /**
304
331
  * 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.
305
- *
306
- * @minItems 1
307
332
  */
308
- required_geo_targeting?: [
309
- {
310
- level: GeographicTargetingLevel;
311
- /**
312
- * 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.
313
- */
314
- system?: string;
315
- },
316
- ...{
317
- level: GeographicTargetingLevel;
318
- /**
319
- * 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.
320
- */
321
- system?: string;
322
- }[]
323
- ];
333
+ required_geo_targeting?: {
334
+ level: GeographicTargetingLevel;
335
+ /**
336
+ * 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.
337
+ */
338
+ system?: string;
339
+ }[];
324
340
  /**
325
341
  * Filter to products supporting specific signals from data provider catalogs. Products must have the requested signals in their data_provider_signals and signal_targeting_allowed must be true (or all signals requested).
326
- *
327
- * @minItems 1
328
342
  */
329
- signal_targeting?: [SignalTargeting, ...SignalTargeting[]];
330
- [k: string]: unknown | undefined;
343
+ signal_targeting?: SignalTargeting[];
331
344
  }
332
345
  /**
333
346
  * 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.
@@ -353,7 +366,6 @@ export interface FormatID {
353
366
  * Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters.
354
367
  */
355
368
  duration_ms?: number;
356
- [k: string]: unknown | undefined;
357
369
  }
358
370
  /**
359
371
  * Filter to products from sellers supporting specific protocol features. Only features set to true are used for filtering.
@@ -423,13 +435,6 @@ export interface PaginationRequest {
423
435
  * 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.
424
436
  */
425
437
  export interface ContextObject {
426
- [k: string]: unknown | undefined;
427
- }
428
- /**
429
- * 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.
430
- */
431
- export interface ExtensionObject {
432
- [k: string]: unknown | undefined;
433
438
  }
434
439
  /**
435
440
  * 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.
@@ -443,7 +448,6 @@ export type PublisherPropertySelector = {
443
448
  * Discriminator indicating all properties from this publisher are included
444
449
  */
445
450
  selection_type: 'all';
446
- [k: string]: unknown | undefined;
447
451
  } | {
448
452
  /**
449
453
  * Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')
@@ -455,11 +459,8 @@ export type PublisherPropertySelector = {
455
459
  selection_type: 'by_id';
456
460
  /**
457
461
  * Specific property IDs from the publisher's adagents.json
458
- *
459
- * @minItems 1
460
462
  */
461
- property_ids: [PropertyID, ...PropertyID[]];
462
- [k: string]: unknown | undefined;
463
+ property_ids: PropertyID[];
463
464
  } | {
464
465
  /**
465
466
  * Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')
@@ -471,11 +472,8 @@ export type PublisherPropertySelector = {
471
472
  selection_type: 'by_tag';
472
473
  /**
473
474
  * Property tags from the publisher's adagents.json. Selector covers all properties with these tags
474
- *
475
- * @minItems 1
476
475
  */
477
- property_tags: [PropertyTag, ...PropertyTag[]];
478
- [k: string]: unknown | undefined;
476
+ property_tags: PropertyTag[];
479
477
  };
480
478
  /**
481
479
  * Identifier for a publisher property. Must be lowercase alphanumeric with underscores only.
@@ -533,7 +531,6 @@ export type DataProviderSignalSelector = {
533
531
  * Discriminator indicating all signals from this data provider are included
534
532
  */
535
533
  selection_type: 'all';
536
- [k: string]: unknown | undefined;
537
534
  } | {
538
535
  /**
539
536
  * Domain where data provider's adagents.json is hosted (e.g., 'polk.com')
@@ -545,11 +542,8 @@ export type DataProviderSignalSelector = {
545
542
  selection_type: 'by_id';
546
543
  /**
547
544
  * Specific signal IDs from the data provider's catalog
548
- *
549
- * @minItems 1
550
545
  */
551
- signal_ids: [string, ...string[]];
552
- [k: string]: unknown | undefined;
546
+ signal_ids: string[];
553
547
  } | {
554
548
  /**
555
549
  * Domain where data provider's adagents.json is hosted (e.g., 'polk.com')
@@ -561,11 +555,8 @@ export type DataProviderSignalSelector = {
561
555
  selection_type: 'by_tag';
562
556
  /**
563
557
  * Signal tags from the data provider's catalog. Selector covers all signals with these tags
564
- *
565
- * @minItems 1
566
558
  */
567
- signal_tags: [string, ...string[]];
568
- [k: string]: unknown | undefined;
559
+ signal_tags: string[];
569
560
  };
570
561
  /**
571
562
  * The type of catalog feed. Determines the item schema and how the platform resolves catalog items. Multiple catalog types can be synced to the same account and referenced together in creatives.
@@ -625,10 +616,8 @@ export interface Product {
625
616
  description: string;
626
617
  /**
627
618
  * Publisher properties covered by this product. Buyers fetch actual property definitions from each publisher's adagents.json and validate agent authorization. Selection patterns mirror the authorization patterns in adagents.json for consistency.
628
- *
629
- * @minItems 1
630
619
  */
631
- publisher_properties: [PublisherPropertySelector, ...PublisherPropertySelector[]];
620
+ publisher_properties: PublisherPropertySelector[];
632
621
  /**
633
622
  * Advertising channels this product is sold as. Products inherit from their properties' supported_channels but may narrow the scope. For example, a product covering YouTube properties might be sold as ['ctv'] even though those properties support ['olv', 'social', 'ctv'].
634
623
  */
@@ -639,17 +628,13 @@ export interface Product {
639
628
  format_ids: FormatID[];
640
629
  /**
641
630
  * Optional array of specific placements within this product. When provided, buyers can target specific placements when assigning creatives.
642
- *
643
- * @minItems 1
644
631
  */
645
- placements?: [Placement, ...Placement[]];
632
+ placements?: Placement[];
646
633
  delivery_type: DeliveryType;
647
634
  /**
648
635
  * Available pricing models for this product
649
- *
650
- * @minItems 1
651
636
  */
652
- pricing_options: [PricingOption, ...PricingOption[]];
637
+ pricing_options: PricingOption[];
653
638
  forecast?: DeliveryForecast;
654
639
  measurement?: Measurement;
655
640
  /**
@@ -685,34 +670,24 @@ export interface Product {
685
670
  signal_targeting_allowed?: boolean;
686
671
  /**
687
672
  * Catalog types this product supports for catalog-driven campaigns. A sponsored product listing declares ["product"], a job board declares ["job", "offering"]. Buyers match synced catalogs to products via this field.
688
- *
689
- * @minItems 1
690
673
  */
691
- catalog_types?: [CatalogType, ...CatalogType[]];
674
+ catalog_types?: CatalogType[];
692
675
  /**
693
676
  * Conversion tracking for this product. Presence indicates the product supports conversion-optimized delivery. Seller-level capabilities (supported event types, UID types, attribution windows) are declared in get_adcp_capabilities.
694
677
  */
695
678
  conversion_tracking?: {
696
679
  /**
697
680
  * Action sources relevant to this product (e.g. a retail media product might have 'in_store' and 'website', while a display product might only have 'website')
698
- *
699
- * @minItems 1
700
681
  */
701
- action_sources?: [ActionSource, ...ActionSource[]];
682
+ action_sources?: ActionSource[];
702
683
  /**
703
684
  * Optimization strategies this product supports when an optimization_goal is set on a package
704
- *
705
- * @minItems 1
706
685
  */
707
- supported_optimization_strategies?: [
708
- 'maximize_conversions' | 'target_cpa' | 'target_roas',
709
- ...('maximize_conversions' | 'target_cpa' | 'target_roas')[]
710
- ];
686
+ supported_optimization_strategies?: ('maximize_conversions' | 'target_cpa' | 'target_roas')[];
711
687
  /**
712
688
  * Whether the seller provides its own always-on measurement (e.g. Amazon sales attribution for Amazon advertisers). When true, sync_event_sources response will include seller-managed event sources with managed_by='seller'.
713
689
  */
714
690
  platform_managed?: boolean;
715
- [k: string]: unknown | undefined;
716
691
  };
717
692
  /**
718
693
  * When the buyer provides a catalog on get_products, indicates which catalog items are eligible for this product. Only present for products where catalog matching is relevant (e.g., sponsored product listings, job boards, hotel ads).
@@ -751,10 +726,7 @@ export interface Product {
751
726
  /**
752
727
  * Asset manifest for rendering the card, structure defined by the format
753
728
  */
754
- manifest: {
755
- [k: string]: unknown | undefined;
756
- };
757
- [k: string]: unknown | undefined;
729
+ manifest: {};
758
730
  };
759
731
  /**
760
732
  * Optional detailed card with carousel and full specifications. Provides rich product presentation similar to media kit pages.
@@ -764,13 +736,9 @@ export interface Product {
764
736
  /**
765
737
  * Asset manifest for rendering the detailed card, structure defined by the format
766
738
  */
767
- manifest: {
768
- [k: string]: unknown | undefined;
769
- };
770
- [k: string]: unknown | undefined;
739
+ manifest: {};
771
740
  };
772
741
  ext?: ExtensionObject;
773
- [k: string]: unknown | undefined;
774
742
  }
775
743
  /**
776
744
  * 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.
@@ -790,11 +758,8 @@ export interface Placement {
790
758
  description?: string;
791
759
  /**
792
760
  * Format IDs supported by this specific placement. Can include: (1) concrete format_ids (fixed dimensions), (2) template format_ids without parameters (accepts any dimensions/duration), or (3) parameterized format_ids (specific dimension/duration constraints).
793
- *
794
- * @minItems 1
795
761
  */
796
- format_ids?: [FormatID, ...FormatID[]];
797
- [k: string]: unknown | undefined;
762
+ format_ids?: FormatID[];
798
763
  }
799
764
  /**
800
765
  * Cost Per Mille (cost per 1,000 impressions) pricing. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
@@ -820,12 +785,15 @@ export interface CPMPricingOption {
820
785
  * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
821
786
  */
822
787
  floor_price?: number;
788
+ /**
789
+ * When true, bid_price is interpreted as the buyer's maximum willingness to pay (ceiling) rather than an exact price. Sellers may optimize actual clearing prices between floor_price and bid_price based on delivery pacing. When false or absent, bid_price (if provided) is the exact bid/price to honor.
790
+ */
791
+ max_bid?: boolean;
823
792
  price_guidance?: PriceGuidance;
824
793
  /**
825
794
  * Minimum spend requirement per package using this pricing option, in the specified currency
826
795
  */
827
796
  min_spend_per_package?: number;
828
- [k: string]: unknown | undefined;
829
797
  }
830
798
  /**
831
799
  * Optional pricing guidance for auction-based bidding
@@ -847,7 +815,6 @@ export interface PriceGuidance {
847
815
  * 90th percentile of recent winning bids
848
816
  */
849
817
  p90?: number;
850
- [k: string]: unknown | undefined;
851
818
  }
852
819
  /**
853
820
  * 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.
@@ -873,12 +840,15 @@ export interface VCPMPricingOption {
873
840
  * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
874
841
  */
875
842
  floor_price?: number;
843
+ /**
844
+ * When true, bid_price is interpreted as the buyer's maximum willingness to pay (ceiling) rather than an exact price. Sellers may optimize actual clearing prices between floor_price and bid_price based on delivery pacing. When false or absent, bid_price (if provided) is the exact bid/price to honor.
845
+ */
846
+ max_bid?: boolean;
876
847
  price_guidance?: PriceGuidance;
877
848
  /**
878
849
  * Minimum spend requirement per package using this pricing option, in the specified currency
879
850
  */
880
851
  min_spend_per_package?: number;
881
- [k: string]: unknown | undefined;
882
852
  }
883
853
  /**
884
854
  * Optional pricing guidance for auction-based bidding
@@ -904,12 +874,15 @@ export interface CPCPricingOption {
904
874
  * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
905
875
  */
906
876
  floor_price?: number;
877
+ /**
878
+ * When true, bid_price is interpreted as the buyer's maximum willingness to pay (ceiling) rather than an exact price. Sellers may optimize actual clearing prices between floor_price and bid_price based on delivery pacing. When false or absent, bid_price (if provided) is the exact bid/price to honor.
879
+ */
880
+ max_bid?: boolean;
907
881
  price_guidance?: PriceGuidance;
908
882
  /**
909
883
  * Minimum spend requirement per package using this pricing option, in the specified currency
910
884
  */
911
885
  min_spend_per_package?: number;
912
- [k: string]: unknown | undefined;
913
886
  }
914
887
  /**
915
888
  * Optional pricing guidance for auction-based bidding
@@ -935,12 +908,15 @@ export interface CPCVPricingOption {
935
908
  * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
936
909
  */
937
910
  floor_price?: number;
911
+ /**
912
+ * When true, bid_price is interpreted as the buyer's maximum willingness to pay (ceiling) rather than an exact price. Sellers may optimize actual clearing prices between floor_price and bid_price based on delivery pacing. When false or absent, bid_price (if provided) is the exact bid/price to honor.
913
+ */
914
+ max_bid?: boolean;
938
915
  price_guidance?: PriceGuidance;
939
916
  /**
940
917
  * Minimum spend requirement per package using this pricing option, in the specified currency
941
918
  */
942
919
  min_spend_per_package?: number;
943
- [k: string]: unknown | undefined;
944
920
  }
945
921
  /**
946
922
  * Optional pricing guidance for auction-based bidding
@@ -966,6 +942,10 @@ export interface CPVPricingOption {
966
942
  * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
967
943
  */
968
944
  floor_price?: number;
945
+ /**
946
+ * When true, bid_price is interpreted as the buyer's maximum willingness to pay (ceiling) rather than an exact price. Sellers may optimize actual clearing prices between floor_price and bid_price based on delivery pacing. When false or absent, bid_price (if provided) is the exact bid/price to honor.
947
+ */
948
+ max_bid?: boolean;
969
949
  price_guidance?: PriceGuidance;
970
950
  /**
971
951
  * CPV-specific parameters defining the view threshold
@@ -976,15 +956,12 @@ export interface CPVPricingOption {
976
956
  * Seconds of viewing required
977
957
  */
978
958
  duration_seconds: number;
979
- [k: string]: unknown | undefined;
980
959
  };
981
- [k: string]: unknown | undefined;
982
960
  };
983
961
  /**
984
962
  * Minimum spend requirement per package using this pricing option, in the specified currency
985
963
  */
986
964
  min_spend_per_package?: number;
987
- [k: string]: unknown | undefined;
988
965
  }
989
966
  /**
990
967
  * Optional pricing guidance for auction-based bidding
@@ -1024,13 +1001,11 @@ export interface CPPPricingOption {
1024
1001
  * Minimum GRPs/TRPs required
1025
1002
  */
1026
1003
  min_points?: number;
1027
- [k: string]: unknown | undefined;
1028
1004
  };
1029
1005
  /**
1030
1006
  * Minimum spend requirement per package using this pricing option, in the specified currency
1031
1007
  */
1032
1008
  min_spend_per_package?: number;
1033
- [k: string]: unknown | undefined;
1034
1009
  }
1035
1010
  /**
1036
1011
  * Optional pricing guidance for auction-based bidding
@@ -1068,7 +1043,6 @@ export interface CPAPricingOption {
1068
1043
  * Minimum spend requirement per package using this pricing option, in the specified currency
1069
1044
  */
1070
1045
  min_spend_per_package?: number;
1071
- [k: string]: unknown | undefined;
1072
1046
  }
1073
1047
  /**
1074
1048
  * 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.
@@ -1127,13 +1101,11 @@ export interface FlatRatePricingOption {
1127
1101
  * Specific daypart for time-based pricing
1128
1102
  */
1129
1103
  daypart?: string;
1130
- [k: string]: unknown | undefined;
1131
1104
  };
1132
1105
  /**
1133
1106
  * Minimum spend requirement per package using this pricing option, in the specified currency
1134
1107
  */
1135
1108
  min_spend_per_package?: number;
1136
- [k: string]: unknown | undefined;
1137
1109
  }
1138
1110
  /**
1139
1111
  * Optional pricing guidance for auction-based bidding
@@ -1176,13 +1148,11 @@ export interface TimeBasedPricingOption {
1176
1148
  * Maximum booking duration in time_units. Must be >= min_duration when both are present.
1177
1149
  */
1178
1150
  max_duration?: number;
1179
- [k: string]: unknown | undefined;
1180
1151
  };
1181
1152
  /**
1182
1153
  * Minimum spend requirement per package using this pricing option, in the specified currency
1183
1154
  */
1184
1155
  min_spend_per_package?: number;
1185
- [k: string]: unknown | undefined;
1186
1156
  }
1187
1157
  /**
1188
1158
  * Optional pricing guidance for auction-based bidding
@@ -1190,10 +1160,8 @@ export interface TimeBasedPricingOption {
1190
1160
  export interface DeliveryForecast {
1191
1161
  /**
1192
1162
  * Forecasted delivery at one or more budget levels. A single point is a standard forecast; multiple points ordered by ascending budget form a curve showing how metrics scale with spend. Each point pairs a budget with metric ranges.
1193
- *
1194
- * @minItems 1
1195
1163
  */
1196
- points: [ForecastPoint, ...ForecastPoint[]];
1164
+ points: ForecastPoint[];
1197
1165
  forecast_range_unit?: ForecastRangeUnit;
1198
1166
  method: ForecastMethod;
1199
1167
  /**
@@ -1215,7 +1183,6 @@ export interface DeliveryForecast {
1215
1183
  */
1216
1184
  valid_until?: string;
1217
1185
  ext?: ExtensionObject;
1218
- [k: string]: unknown | undefined;
1219
1186
  }
1220
1187
  /**
1221
1188
  * A forecast at a specific budget level. A single point represents a standard forecast; multiple points ordered by ascending budget form a curve showing how delivery metrics scale with spend.
@@ -1231,7 +1198,6 @@ export interface ForecastPoint {
1231
1198
  metrics: {
1232
1199
  [k: string]: ForecastRange | undefined;
1233
1200
  };
1234
- [k: string]: unknown | undefined;
1235
1201
  }
1236
1202
  /**
1237
1203
  * A forecast value with optional low/high bounds. The mid value represents the most likely outcome. When low and high are provided, they represent conservative and optimistic estimates respectively.
@@ -1249,7 +1215,6 @@ export interface ForecastRange {
1249
1215
  * Optimistic (high-end) forecast value
1250
1216
  */
1251
1217
  high?: number;
1252
- [k: string]: unknown | undefined;
1253
1218
  }
1254
1219
  /**
1255
1220
  * 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.
@@ -1271,7 +1236,6 @@ export interface Measurement {
1271
1236
  * Reporting frequency and format
1272
1237
  */
1273
1238
  reporting: string;
1274
- [k: string]: unknown | undefined;
1275
1239
  }
1276
1240
  /**
1277
1241
  * Reporting capabilities available for a product
@@ -1279,10 +1243,8 @@ export interface Measurement {
1279
1243
  export interface ReportingCapabilities {
1280
1244
  /**
1281
1245
  * Supported reporting frequency options
1282
- *
1283
- * @minItems 1
1284
1246
  */
1285
- available_reporting_frequencies: [ReportingFrequency, ...ReportingFrequency[]];
1247
+ available_reporting_frequencies: ReportingFrequency[];
1286
1248
  /**
1287
1249
  * Expected delay in minutes before reporting data becomes available (e.g., 240 for 4-hour delay)
1288
1250
  */
@@ -1307,7 +1269,6 @@ export interface ReportingCapabilities {
1307
1269
  * Whether delivery data can be filtered to arbitrary date ranges. 'date_range' means the platform supports start_date/end_date parameters. 'lifetime_only' means the platform returns campaign lifetime totals and date range parameters are not accepted.
1308
1270
  */
1309
1271
  date_range_support: 'date_range' | 'lifetime_only';
1310
- [k: string]: unknown | undefined;
1311
1272
  }
1312
1273
  /**
1313
1274
  * Creative requirements and restrictions for a product
@@ -1319,7 +1280,6 @@ export interface CreativePolicy {
1319
1280
  * Whether creative templates are provided
1320
1281
  */
1321
1282
  templates_available: boolean;
1322
- [k: string]: unknown | undefined;
1323
1283
  }
1324
1284
  /**
1325
1285
  * 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.
@@ -1339,10 +1299,8 @@ export interface Proposal {
1339
1299
  description?: string;
1340
1300
  /**
1341
1301
  * 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.
1342
- *
1343
- * @minItems 1
1344
1302
  */
1345
- allocations: [ProductAllocation, ...ProductAllocation[]];
1303
+ allocations: ProductAllocation[];
1346
1304
  /**
1347
1305
  * When this proposal expires and can no longer be executed. After expiration, referenced products or pricing may no longer be available.
1348
1306
  */
@@ -1367,7 +1325,6 @@ export interface Proposal {
1367
1325
  * ISO 4217 currency code
1368
1326
  */
1369
1327
  currency?: string;
1370
- [k: string]: unknown | undefined;
1371
1328
  };
1372
1329
  /**
1373
1330
  * Explanation of how this proposal aligns with the campaign brief
@@ -1375,7 +1332,6 @@ export interface Proposal {
1375
1332
  brief_alignment?: string;
1376
1333
  forecast?: DeliveryForecast;
1377
1334
  ext?: ExtensionObject;
1378
- [k: string]: unknown | undefined;
1379
1335
  }
1380
1336
  /**
1381
1337
  * A budget allocation for a specific product within a proposal. Percentages across all allocations in a proposal should sum to 100.
@@ -1407,13 +1363,10 @@ export interface ProductAllocation {
1407
1363
  tags?: string[];
1408
1364
  /**
1409
1365
  * Recommended time windows for this allocation in spot-plan proposals.
1410
- *
1411
- * @minItems 1
1412
1366
  */
1413
- daypart_targets?: [DaypartTarget, ...DaypartTarget[]];
1367
+ daypart_targets?: DaypartTarget[];
1414
1368
  forecast?: DeliveryForecast;
1415
1369
  ext?: ExtensionObject;
1416
- [k: string]: unknown | undefined;
1417
1370
  }
1418
1371
  /**
1419
1372
  * A time window for daypart targeting. Specifies days of week and an hour range. start_hour is inclusive, end_hour is exclusive (e.g., 6-10 = 6:00am to 10:00am). Follows the Google Ads AdScheduleInfo / DV360 DayPartTargeting pattern.
@@ -1421,10 +1374,8 @@ export interface ProductAllocation {
1421
1374
  export interface DaypartTarget {
1422
1375
  /**
1423
1376
  * Days of week this window applies to. Use multiple days for compact targeting (e.g., monday-friday in one object).
1424
- *
1425
- * @minItems 1
1426
1377
  */
1427
- days: [DayOfWeek, ...DayOfWeek[]];
1378
+ days: DayOfWeek[];
1428
1379
  /**
1429
1380
  * Start hour (inclusive), 0-23 in 24-hour format. 0 = midnight, 6 = 6:00am, 18 = 6:00pm.
1430
1381
  */
@@ -1465,10 +1416,7 @@ export interface Error {
1465
1416
  /**
1466
1417
  * Additional task-specific error details
1467
1418
  */
1468
- details?: {
1469
- [k: string]: unknown | undefined;
1470
- };
1471
- [k: string]: unknown | undefined;
1419
+ details?: {};
1472
1420
  }
1473
1421
  /**
1474
1422
  * Standard cursor-based pagination metadata for list responses
@@ -1563,6 +1511,25 @@ export type UniversalMacro = 'MEDIA_BUY_ID' | 'PACKAGE_ID' | 'CREATIVE_ID' | 'CA
1563
1511
  * WCAG conformance level that this format achieves. For format-rendered creatives, the format guarantees this level. For opaque creatives, the format requires assets that self-certify to this level.
1564
1512
  */
1565
1513
  export type AssetRequirements = ImageAssetRequirements | VideoAssetRequirements | AudioAssetRequirements | TextAssetRequirements | MarkdownAssetRequirements | HTMLAssetRequirements | CSSAssetRequirements | JavaScriptAssetRequirements | VASTAssetRequirements | DAASTAssetRequirements | URLAssetRequirements | WebhookAssetRequirements;
1514
+ /**
1515
+ * Maps a format template slot to a catalog item field or typed asset pool. The 'kind' field identifies the binding variant. All bindings are optional — agents can still infer mappings without them.
1516
+ */
1517
+ export type CatalogFieldBinding = ScalarBinding | AssetPoolBinding | {
1518
+ kind: 'catalog_group';
1519
+ /**
1520
+ * The asset_group_id of a repeatable_group in the format's assets array.
1521
+ */
1522
+ format_group_id: string;
1523
+ /**
1524
+ * Each repetition of the format's repeatable_group maps to one item from the catalog.
1525
+ */
1526
+ catalog_item: true;
1527
+ /**
1528
+ * Scalar and asset pool bindings that apply within each repetition of the group. Nested catalog_group bindings are not permitted.
1529
+ */
1530
+ per_item_bindings?: (ScalarBinding | AssetPoolBinding)[];
1531
+ ext?: ExtensionObject;
1532
+ };
1566
1533
  /**
1567
1534
  * Standard delivery and performance metrics available for reporting
1568
1535
  */
@@ -1628,21 +1595,12 @@ export interface Format {
1628
1595
  accepts_parameters?: FormatIDParameter[];
1629
1596
  /**
1630
1597
  * Specification of rendered pieces for this format. Most formats produce a single render. Companion ad formats (video + banner), adaptive formats, and multi-placement formats produce multiple renders. Each render specifies its role and dimensions.
1631
- *
1632
- * @minItems 1
1633
- */
1634
- renders?: [
1635
- ({
1636
- [k: string]: unknown | undefined;
1637
- } | {
1638
- parameters_from_format_id: true;
1639
- }),
1640
- ...({
1641
- [k: string]: unknown | undefined;
1642
- } | {
1643
- parameters_from_format_id: true;
1644
- })[]
1645
- ];
1598
+ */
1599
+ renders?: ({
1600
+ [k: string]: unknown | undefined;
1601
+ } | {
1602
+ parameters_from_format_id: true;
1603
+ })[];
1646
1604
  /**
1647
1605
  * 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.
1648
1606
  */
@@ -1679,9 +1637,7 @@ export interface Format {
1679
1637
  /**
1680
1638
  * Delivery method specifications (e.g., hosted, VAST, third-party tags)
1681
1639
  */
1682
- delivery?: {
1683
- [k: string]: unknown | undefined;
1684
- };
1640
+ delivery?: {};
1685
1641
  /**
1686
1642
  * List of universal macros supported by this format (e.g., MEDIA_BUY_ID, CACHEBUSTER, DEVICE_ID). Used for validation and developer tooling. See docs/creative/universal-macros.mdx for full documentation.
1687
1643
  */
@@ -1702,10 +1658,7 @@ export interface Format {
1702
1658
  /**
1703
1659
  * Asset manifest for rendering the card, structure defined by the format
1704
1660
  */
1705
- manifest: {
1706
- [k: string]: unknown | undefined;
1707
- };
1708
- [k: string]: unknown | undefined;
1661
+ manifest: {};
1709
1662
  };
1710
1663
  /**
1711
1664
  * Accessibility posture of this format. Declares the WCAG conformance level that creatives produced by this format will meet.
@@ -1725,24 +1678,16 @@ export interface Format {
1725
1678
  /**
1726
1679
  * Asset manifest for rendering the detailed card, structure defined by the format
1727
1680
  */
1728
- manifest: {
1729
- [k: string]: unknown | undefined;
1730
- };
1731
- [k: string]: unknown | undefined;
1681
+ manifest: {};
1732
1682
  };
1733
1683
  /**
1734
1684
  * Catalog feeds this format requires for rendering. Formats that display product listings, store locators, inventory availability, or promotional pricing declare what catalog types must be synced to the account. Buyers ensure the required catalogs are synced via sync_catalogs before submitting creatives in this format.
1735
- *
1736
- * @minItems 1
1737
1685
  */
1738
- catalog_requirements?: [CatalogRequirements, ...CatalogRequirements[]];
1686
+ catalog_requirements?: CatalogRequirements[];
1739
1687
  /**
1740
1688
  * Metrics this format can produce in delivery reporting. Buyers receive the intersection of format reported_metrics and product available_metrics. If omitted, the format defers entirely to product-level metric declarations.
1741
- *
1742
- * @minItems 1
1743
1689
  */
1744
- reported_metrics?: [AvailableMetric, ...AvailableMetric[]];
1745
- [k: string]: unknown | undefined;
1690
+ reported_metrics?: AvailableMetric[];
1746
1691
  }
1747
1692
  /**
1748
1693
  * Structured format identifier with agent URL and format name
@@ -1764,6 +1709,65 @@ export interface BaseIndividualAsset {
1764
1709
  * Whether this asset is required (true) or optional (false). Required assets must be provided for a valid creative. Optional assets enhance the creative but are not mandatory.
1765
1710
  */
1766
1711
  required: boolean;
1712
+ /**
1713
+ * Publisher-controlled elements rendered on top of buyer content at this asset's position (e.g., video player controls, publisher logos). Creative agents should avoid placing critical content (CTAs, logos, key copy) within overlay bounds.
1714
+ */
1715
+ overlays?: Overlay[];
1716
+ }
1717
+ /**
1718
+ * A publisher-controlled element that renders on top of buyer creative content within the ad placement. Creative agents should avoid placing critical content (CTAs, logos, key copy) within overlay bounds.
1719
+ */
1720
+ export interface Overlay {
1721
+ /**
1722
+ * Identifier for this overlay (e.g., 'play_pause', 'volume', 'publisher_logo', 'carousel_prev', 'carousel_next')
1723
+ */
1724
+ id: string;
1725
+ /**
1726
+ * Human-readable explanation of what this overlay is and how buyers should account for it
1727
+ */
1728
+ description?: string;
1729
+ /**
1730
+ * Optional visual reference for this overlay element. Useful for creative agents compositing previews and for buyers understanding what will appear over their content. Must include at least one of: url, light, or dark.
1731
+ */
1732
+ visual?: {
1733
+ /**
1734
+ * URL to a theme-neutral overlay graphic (SVG or PNG). Use when a single file works for all backgrounds, e.g. an SVG using CSS custom properties or currentColor.
1735
+ */
1736
+ url?: string;
1737
+ /**
1738
+ * URL to the overlay graphic for use on light/bright backgrounds (SVG or PNG)
1739
+ */
1740
+ light?: string;
1741
+ /**
1742
+ * URL to the overlay graphic for use on dark backgrounds (SVG or PNG)
1743
+ */
1744
+ dark?: string;
1745
+ };
1746
+ /**
1747
+ * Position and size of the overlay relative to the asset's own top-left corner. See 'unit' for coordinate interpretation.
1748
+ */
1749
+ bounds: {
1750
+ /**
1751
+ * Horizontal offset from the asset's left edge
1752
+ */
1753
+ x: number;
1754
+ /**
1755
+ * Vertical offset from the asset's top edge
1756
+ */
1757
+ y: number;
1758
+ /**
1759
+ * Width of the overlay
1760
+ */
1761
+ width: number;
1762
+ /**
1763
+ * Height of the overlay
1764
+ */
1765
+ height: number;
1766
+ /**
1767
+ * 'px' = absolute pixels from asset top-left. 'fraction' = proportional to asset dimensions (x/y: 0.0 = asset edge, 1.0 = opposite edge; width/height: 0.12 = 12% of asset dimension).
1768
+ */
1769
+ unit: 'px' | 'fraction';
1770
+ };
1767
1771
  }
1768
1772
  export interface BaseGroupAsset {
1769
1773
  /**
@@ -1778,6 +1782,10 @@ export interface BaseGroupAsset {
1778
1782
  * Whether this asset is required within each repetition of the group
1779
1783
  */
1780
1784
  required: boolean;
1785
+ /**
1786
+ * Publisher-controlled elements rendered on top of buyer content at this asset's position (e.g., carousel navigation arrows, slide indicators). Creative agents should avoid placing critical content within overlay bounds.
1787
+ */
1788
+ overlays?: Overlay[];
1781
1789
  }
1782
1790
  /**
1783
1791
  * 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.
@@ -1794,23 +1802,20 @@ export interface CatalogRequirements {
1794
1802
  min_items?: number;
1795
1803
  /**
1796
1804
  * Fields that must be present and non-empty on every item in the catalog. Field names are catalog-type-specific (e.g., 'title', 'price', 'image_url' for product catalogs; 'store_id', 'quantity' for inventory feeds).
1797
- *
1798
- * @minItems 1
1799
1805
  */
1800
- required_fields?: [string, ...string[]];
1806
+ required_fields?: string[];
1801
1807
  /**
1802
1808
  * Accepted feed formats for this catalog type. When specified, the synced catalog must use one of these formats. When omitted, any format is accepted.
1803
- *
1804
- * @minItems 1
1805
1809
  */
1806
- feed_formats?: [FeedFormat, ...FeedFormat[]];
1810
+ feed_formats?: FeedFormat[];
1807
1811
  /**
1808
- * Per-offering creative requirements. Only applicable when catalog_type is 'offering'. Declares what asset groups (headlines, images, videos) each offering must provide, along with count bounds and per-asset technical constraints.
1809
- *
1810
- * @minItems 1
1812
+ * Per-item creative asset requirements. Declares what asset groups (headlines, images, videos) each catalog item must provide in its assets array, along with count bounds and per-asset technical constraints. Applicable to 'offering' and all vertical catalog types (hotel, flight, job, etc.) whose items carry typed assets.
1811
1813
  */
1812
- offering_asset_constraints?: [OfferingAssetConstraint, ...OfferingAssetConstraint[]];
1813
- [k: string]: unknown | undefined;
1814
+ offering_asset_constraints?: OfferingAssetConstraint[];
1815
+ /**
1816
+ * Explicit mappings from format template slots to catalog item fields or typed asset pools. Optional — creative agents can infer mappings without them, but bindings make the relationship self-describing and enable validation. Covers scalar fields (asset_id → catalog_field), asset pools (asset_id → asset_group_id on the catalog item), and repeatable groups that iterate over catalog items.
1817
+ */
1818
+ field_bindings?: CatalogFieldBinding[];
1814
1819
  }
1815
1820
  /**
1816
1821
  * Declares per-group creative requirements that each offering must satisfy. Allows formats to specify what asset groups (headlines, images, videos) offerings must provide, along with count and per-asset technical constraints.
@@ -1835,7 +1840,6 @@ export interface OfferingAssetConstraint {
1835
1840
  max_count?: number;
1836
1841
  asset_requirements?: AssetRequirements;
1837
1842
  ext?: ExtensionObject;
1838
- [k: string]: unknown | undefined;
1839
1843
  }
1840
1844
  /**
1841
1845
  * Requirements for image creative assets. These define the technical constraints for image files.
@@ -1881,7 +1885,6 @@ export interface ImageAssetRequirements {
1881
1885
  * Maximum animation duration in milliseconds (if animation_allowed is true)
1882
1886
  */
1883
1887
  max_animation_duration_ms?: number;
1884
- [k: string]: unknown | undefined;
1885
1888
  }
1886
1889
  /**
1887
1890
  * Requirements for video creative assets. These define the technical constraints for video files.
@@ -1943,7 +1946,6 @@ export interface VideoAssetRequirements {
1943
1946
  * Whether the video must include an audio track
1944
1947
  */
1945
1948
  audio_required?: boolean;
1946
- [k: string]: unknown | undefined;
1947
1949
  }
1948
1950
  /**
1949
1951
  * Requirements for audio creative assets.
@@ -1981,7 +1983,6 @@ export interface AudioAssetRequirements {
1981
1983
  * Maximum audio bitrate in kilobits per second
1982
1984
  */
1983
1985
  max_bitrate_kbps?: number;
1984
- [k: string]: unknown | undefined;
1985
1986
  }
1986
1987
  /**
1987
1988
  * Requirements for text creative assets such as headlines, body copy, and CTAs.
@@ -2011,7 +2012,6 @@ export interface TextAssetRequirements {
2011
2012
  * List of prohibited words or phrases
2012
2013
  */
2013
2014
  prohibited_terms?: string[];
2014
- [k: string]: unknown | undefined;
2015
2015
  }
2016
2016
  /**
2017
2017
  * Requirements for markdown creative assets.
@@ -2021,7 +2021,6 @@ export interface MarkdownAssetRequirements {
2021
2021
  * Maximum character length
2022
2022
  */
2023
2023
  max_length?: number;
2024
- [k: string]: unknown | undefined;
2025
2024
  }
2026
2025
  /**
2027
2026
  * Requirements for HTML creative assets. These define the execution environment constraints that the HTML must be compatible with.
@@ -2043,7 +2042,6 @@ export interface HTMLAssetRequirements {
2043
2042
  * List of domains the HTML creative may reference for external resources. Only applicable when external_resources_allowed is true.
2044
2043
  */
2045
2044
  allowed_external_domains?: string[];
2046
- [k: string]: unknown | undefined;
2047
2045
  }
2048
2046
  /**
2049
2047
  * Requirements for CSS creative assets.
@@ -2053,7 +2051,6 @@ export interface CSSAssetRequirements {
2053
2051
  * Maximum file size in kilobytes
2054
2052
  */
2055
2053
  max_file_size_kb?: number;
2056
- [k: string]: unknown | undefined;
2057
2054
  }
2058
2055
  /**
2059
2056
  * Requirements for JavaScript creative assets. These define the execution environment constraints that the JavaScript must be compatible with.
@@ -2079,7 +2076,6 @@ export interface JavaScriptAssetRequirements {
2079
2076
  * List of domains the JavaScript may reference for external resources. Only applicable when external_resources_allowed is true.
2080
2077
  */
2081
2078
  allowed_external_domains?: string[];
2082
- [k: string]: unknown | undefined;
2083
2079
  }
2084
2080
  /**
2085
2081
  * Requirements for VAST (Video Ad Serving Template) creative assets.
@@ -2089,7 +2085,6 @@ export interface VASTAssetRequirements {
2089
2085
  * Required VAST version
2090
2086
  */
2091
2087
  vast_version?: '2.0' | '3.0' | '4.0' | '4.1' | '4.2';
2092
- [k: string]: unknown | undefined;
2093
2088
  }
2094
2089
  /**
2095
2090
  * Requirements for DAAST (Digital Audio Ad Serving Template) creative assets.
@@ -2099,7 +2094,6 @@ export interface DAASTAssetRequirements {
2099
2094
  * Required DAAST version. DAAST 1.0 is the current IAB standard.
2100
2095
  */
2101
2096
  daast_version?: '1.0';
2102
- [k: string]: unknown | undefined;
2103
2097
  }
2104
2098
  /**
2105
2099
  * Requirements for URL assets such as click-through URLs, tracking pixels, and landing pages.
@@ -2125,7 +2119,6 @@ export interface URLAssetRequirements {
2125
2119
  * Whether the URL supports macro substitution (e.g., ${CACHEBUSTER})
2126
2120
  */
2127
2121
  macro_support?: boolean;
2128
- [k: string]: unknown | undefined;
2129
2122
  }
2130
2123
  /**
2131
2124
  * Requirements for webhook creative assets.
@@ -2135,11 +2128,40 @@ export interface WebhookAssetRequirements {
2135
2128
  * Allowed HTTP methods
2136
2129
  */
2137
2130
  methods?: ('GET' | 'POST')[];
2138
- [k: string]: unknown | undefined;
2139
2131
  }
2140
2132
  /**
2141
2133
  * 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.
2142
2134
  */
2135
+ export interface ScalarBinding {
2136
+ kind: 'scalar';
2137
+ /**
2138
+ * The asset_id from the format's assets array. Identifies which individual template slot this binding applies to.
2139
+ */
2140
+ asset_id: string;
2141
+ /**
2142
+ * Dot-notation path to the field on the catalog item (e.g., 'name', 'price.amount', 'location.city').
2143
+ */
2144
+ catalog_field: string;
2145
+ ext?: ExtensionObject;
2146
+ }
2147
+ /**
2148
+ * Maps an individual format asset to a typed asset pool on the catalog item (e.g., images_landscape, images_vertical, logo). The format slot receives the first item in the pool.
2149
+ */
2150
+ export interface AssetPoolBinding {
2151
+ kind: 'asset_pool';
2152
+ /**
2153
+ * The asset_id from the format's assets array. Identifies which individual template slot this binding applies to.
2154
+ */
2155
+ asset_id: string;
2156
+ /**
2157
+ * The asset_group_id on the catalog item's assets array to pull from (e.g., 'images_landscape', 'images_vertical', 'logo').
2158
+ */
2159
+ asset_group_id: string;
2160
+ ext?: ExtensionObject;
2161
+ }
2162
+ /**
2163
+ * Standard error structure for task-specific errors and warnings
2164
+ */
2143
2165
  /**
2144
2166
  * Budget pacing strategy
2145
2167
  */
@@ -2193,7 +2215,6 @@ export type VASTAsset = {
2193
2215
  * URL to audio description track for visually impaired users
2194
2216
  */
2195
2217
  audio_description_url?: string;
2196
- [k: string]: unknown | undefined;
2197
2218
  } | {
2198
2219
  /**
2199
2220
  * Discriminator indicating VAST is delivered as inline XML content
@@ -2224,7 +2245,6 @@ export type VASTAsset = {
2224
2245
  * URL to audio description track for visually impaired users
2225
2246
  */
2226
2247
  audio_description_url?: string;
2227
- [k: string]: unknown | undefined;
2228
2248
  };
2229
2249
  /**
2230
2250
  * VAST specification version
@@ -2263,7 +2283,6 @@ export type DAASTAsset = {
2263
2283
  * URL to text transcript of the audio content
2264
2284
  */
2265
2285
  transcript_url?: string;
2266
- [k: string]: unknown | undefined;
2267
2286
  } | {
2268
2287
  /**
2269
2288
  * Discriminator indicating DAAST is delivered as inline XML content
@@ -2290,7 +2309,6 @@ export type DAASTAsset = {
2290
2309
  * URL to text transcript of the audio content
2291
2310
  */
2292
2311
  transcript_url?: string;
2293
- [k: string]: unknown | undefined;
2294
2312
  };
2295
2313
  /**
2296
2314
  * DAAST specification version
@@ -2327,7 +2345,7 @@ export interface CreateMediaBuyRequest {
2327
2345
  /**
2328
2346
  * Buyer's campaign reference label. Groups related discovery and buy operations under a single campaign for CRM and ad server correlation (e.g., 'NovaDrink_Meals_Q2').
2329
2347
  */
2330
- campaign_ref?: string;
2348
+ buyer_campaign_ref?: string;
2331
2349
  /**
2332
2350
  * Account to bill for this media buy. Required when the agent has access to multiple accounts; when omitted, the seller uses the agent's sole account. The seller maps the agent's brand + operator to an account during sync_accounts; the agent passes that account_id here.
2333
2351
  */
@@ -2421,10 +2439,8 @@ export interface PackageRequest {
2421
2439
  product_id: string;
2422
2440
  /**
2423
2441
  * Array of format IDs that will be used for this package - must be supported by the product. If omitted, defaults to all formats supported by the product.
2424
- *
2425
- * @minItems 1
2426
2442
  */
2427
- format_ids?: [FormatID, ...FormatID[]];
2443
+ format_ids?: FormatID[];
2428
2444
  /**
2429
2445
  * Budget allocation for this package in the media buy's currency
2430
2446
  */
@@ -2435,7 +2451,7 @@ export interface PackageRequest {
2435
2451
  */
2436
2452
  pricing_option_id: string;
2437
2453
  /**
2438
- * Bid price for auction-based CPM pricing (required if using cpm-auction-option)
2454
+ * Bid price for auction-based pricing options. This is the exact bid/price to honor unless selected pricing_option has max_bid=true, in which case bid_price is the buyer's maximum willingness to pay (ceiling).
2439
2455
  */
2440
2456
  bid_price?: number;
2441
2457
  /**
@@ -2451,19 +2467,15 @@ export interface PackageRequest {
2451
2467
  targeting_overlay?: TargetingOverlay;
2452
2468
  /**
2453
2469
  * Assign existing library creatives to this package with optional weights and placement targeting
2454
- *
2455
- * @minItems 1
2456
2470
  */
2457
- creative_assignments?: [CreativeAssignment, ...CreativeAssignment[]];
2471
+ creative_assignments?: CreativeAssignment[];
2458
2472
  /**
2459
2473
  * Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.
2460
2474
  *
2461
- * @minItems 1
2462
2475
  * @maxItems 100
2463
2476
  */
2464
- creatives?: [CreativeAsset, ...CreativeAsset[]];
2477
+ creatives?: CreativeAsset[];
2465
2478
  ext?: ExtensionObject;
2466
- [k: string]: unknown | undefined;
2467
2479
  }
2468
2480
  /**
2469
2481
  * 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.
@@ -2494,9 +2506,7 @@ export interface OptimizationGoal {
2494
2506
  * View-through attribution window (e.g. '1d', '7d')
2495
2507
  */
2496
2508
  view_through?: string;
2497
- [k: string]: unknown | undefined;
2498
2509
  };
2499
- [k: string]: unknown | undefined;
2500
2510
  }
2501
2511
  /**
2502
2512
  * Optional restriction overlays for media buys. Most targeting should be expressed in the brief and handled by the publisher. These fields are for functional restrictions: geographic (RCT testing, regulatory compliance), age verification (alcohol, gambling), device platform (app compatibility), and language (localization).
@@ -2504,134 +2514,64 @@ export interface OptimizationGoal {
2504
2514
  export interface TargetingOverlay {
2505
2515
  /**
2506
2516
  * Restrict delivery to specific countries. ISO 3166-1 alpha-2 codes (e.g., 'US', 'GB', 'DE').
2507
- *
2508
- * @minItems 1
2509
2517
  */
2510
- geo_countries?: [string, ...string[]];
2518
+ geo_countries?: string[];
2511
2519
  /**
2512
2520
  * Exclude specific countries from delivery. ISO 3166-1 alpha-2 codes (e.g., 'US', 'GB', 'DE').
2513
- *
2514
- * @minItems 1
2515
2521
  */
2516
- geo_countries_exclude?: [string, ...string[]];
2522
+ geo_countries_exclude?: string[];
2517
2523
  /**
2518
2524
  * Restrict delivery to specific regions/states. ISO 3166-2 subdivision codes (e.g., 'US-CA', 'GB-SCT').
2519
- *
2520
- * @minItems 1
2521
2525
  */
2522
- geo_regions?: [string, ...string[]];
2526
+ geo_regions?: string[];
2523
2527
  /**
2524
2528
  * Exclude specific regions/states from delivery. ISO 3166-2 subdivision codes (e.g., 'US-CA', 'GB-SCT').
2525
- *
2526
- * @minItems 1
2527
2529
  */
2528
- geo_regions_exclude?: [string, ...string[]];
2530
+ geo_regions_exclude?: string[];
2529
2531
  /**
2530
2532
  * Restrict delivery to specific metro areas. Each entry specifies the classification system and target values. Seller must declare supported systems in get_adcp_capabilities.
2531
- *
2532
- * @minItems 1
2533
2533
  */
2534
- geo_metros?: [
2535
- {
2536
- system: MetroAreaSystem;
2537
- /**
2538
- * Metro codes within the system (e.g., ['501', '602'] for Nielsen DMAs)
2539
- *
2540
- * @minItems 1
2541
- */
2542
- values: [string, ...string[]];
2543
- },
2544
- ...{
2545
- system: MetroAreaSystem;
2546
- /**
2547
- * Metro codes within the system (e.g., ['501', '602'] for Nielsen DMAs)
2548
- *
2549
- * @minItems 1
2550
- */
2551
- values: [string, ...string[]];
2552
- }[]
2553
- ];
2534
+ geo_metros?: {
2535
+ system: MetroAreaSystem;
2536
+ /**
2537
+ * Metro codes within the system (e.g., ['501', '602'] for Nielsen DMAs)
2538
+ */
2539
+ values: string[];
2540
+ }[];
2554
2541
  /**
2555
2542
  * Exclude specific metro areas from delivery. Each entry specifies the classification system and excluded values. Seller must declare supported systems in get_adcp_capabilities.
2556
- *
2557
- * @minItems 1
2558
2543
  */
2559
- geo_metros_exclude?: [
2560
- {
2561
- system: MetroAreaSystem;
2562
- /**
2563
- * Metro codes to exclude within the system (e.g., ['501', '602'] for Nielsen DMAs)
2564
- *
2565
- * @minItems 1
2566
- */
2567
- values: [string, ...string[]];
2568
- },
2569
- ...{
2570
- system: MetroAreaSystem;
2571
- /**
2572
- * Metro codes to exclude within the system (e.g., ['501', '602'] for Nielsen DMAs)
2573
- *
2574
- * @minItems 1
2575
- */
2576
- values: [string, ...string[]];
2577
- }[]
2578
- ];
2544
+ geo_metros_exclude?: {
2545
+ system: MetroAreaSystem;
2546
+ /**
2547
+ * Metro codes to exclude within the system (e.g., ['501', '602'] for Nielsen DMAs)
2548
+ */
2549
+ values: string[];
2550
+ }[];
2579
2551
  /**
2580
2552
  * Restrict delivery to specific postal areas. Each entry specifies the postal system and target values. Seller must declare supported systems in get_adcp_capabilities.
2581
- *
2582
- * @minItems 1
2583
2553
  */
2584
- geo_postal_areas?: [
2585
- {
2586
- system: PostalCodeSystem;
2587
- /**
2588
- * Postal codes within the system (e.g., ['10001', '10002'] for us_zip)
2589
- *
2590
- * @minItems 1
2591
- */
2592
- values: [string, ...string[]];
2593
- },
2594
- ...{
2595
- system: PostalCodeSystem;
2596
- /**
2597
- * Postal codes within the system (e.g., ['10001', '10002'] for us_zip)
2598
- *
2599
- * @minItems 1
2600
- */
2601
- values: [string, ...string[]];
2602
- }[]
2603
- ];
2554
+ geo_postal_areas?: {
2555
+ system: PostalCodeSystem;
2556
+ /**
2557
+ * Postal codes within the system (e.g., ['10001', '10002'] for us_zip)
2558
+ */
2559
+ values: string[];
2560
+ }[];
2604
2561
  /**
2605
2562
  * Exclude specific postal areas from delivery. Each entry specifies the postal system and excluded values. Seller must declare supported systems in get_adcp_capabilities.
2606
- *
2607
- * @minItems 1
2608
2563
  */
2609
- geo_postal_areas_exclude?: [
2610
- {
2611
- system: PostalCodeSystem;
2612
- /**
2613
- * Postal codes to exclude within the system (e.g., ['10001', '10002'] for us_zip)
2614
- *
2615
- * @minItems 1
2616
- */
2617
- values: [string, ...string[]];
2618
- },
2619
- ...{
2620
- system: PostalCodeSystem;
2621
- /**
2622
- * Postal codes to exclude within the system (e.g., ['10001', '10002'] for us_zip)
2623
- *
2624
- * @minItems 1
2625
- */
2626
- values: [string, ...string[]];
2627
- }[]
2628
- ];
2564
+ geo_postal_areas_exclude?: {
2565
+ system: PostalCodeSystem;
2566
+ /**
2567
+ * Postal codes to exclude within the system (e.g., ['10001', '10002'] for us_zip)
2568
+ */
2569
+ values: string[];
2570
+ }[];
2629
2571
  /**
2630
2572
  * Restrict delivery to specific time windows. Each entry specifies days of week and an hour range.
2631
- *
2632
- * @minItems 1
2633
2573
  */
2634
- daypart_targets?: [DaypartTarget, ...DaypartTarget[]];
2574
+ daypart_targets?: DaypartTarget[];
2635
2575
  /**
2636
2576
  * AXE segment ID to include for targeting
2637
2577
  */
@@ -2642,16 +2582,12 @@ export interface TargetingOverlay {
2642
2582
  axe_exclude_segment?: string;
2643
2583
  /**
2644
2584
  * Restrict delivery to members of these first-party CRM audiences. Only users present in the uploaded lists are eligible. References audience_id values from sync_audiences on the same seller account — audience IDs are not portable across sellers. Not for lookalike expansion — express that intent in the campaign brief. Seller must declare support in get_adcp_capabilities.
2645
- *
2646
- * @minItems 1
2647
2585
  */
2648
- audience_include?: [string, ...string[]];
2586
+ audience_include?: string[];
2649
2587
  /**
2650
2588
  * Suppress delivery to members of these first-party CRM audiences. Matched users are excluded regardless of other targeting. References audience_id values from sync_audiences on the same seller account — audience IDs are not portable across sellers. Seller must declare support in get_adcp_capabilities.
2651
- *
2652
- * @minItems 1
2653
2589
  */
2654
- audience_exclude?: [string, ...string[]];
2590
+ audience_exclude?: string[];
2655
2591
  frequency_cap?: FrequencyCap;
2656
2592
  property_list?: PropertyListReference;
2657
2593
  /**
@@ -2668,69 +2604,34 @@ export interface TargetingOverlay {
2668
2604
  verification_required?: boolean;
2669
2605
  /**
2670
2606
  * Accepted verification methods. If omitted, any method the platform supports is acceptable.
2671
- *
2672
- * @minItems 1
2673
2607
  */
2674
- accepted_methods?: [AgeVerificationMethod, ...AgeVerificationMethod[]];
2608
+ accepted_methods?: AgeVerificationMethod[];
2675
2609
  };
2676
2610
  /**
2677
2611
  * Restrict to specific platforms. Use for technical compatibility (app only works on iOS). Values from Sec-CH-UA-Platform standard, extended for CTV.
2678
- *
2679
- * @minItems 1
2680
2612
  */
2681
- device_platform?: [DevicePlatform, ...DevicePlatform[]];
2613
+ device_platform?: DevicePlatform[];
2682
2614
  /**
2683
2615
  * Target users within store catchment areas from a synced store catalog. Each entry references a store-type catalog and optionally narrows to specific stores or catchment zones.
2684
- *
2685
- * @minItems 1
2686
2616
  */
2687
- store_catchments?: [
2688
- {
2689
- /**
2690
- * Synced store-type catalog ID from sync_catalogs.
2691
- */
2692
- catalog_id: string;
2693
- /**
2694
- * Filter to specific stores within the catalog. Omit to target all stores.
2695
- *
2696
- * @minItems 1
2697
- */
2698
- store_ids?: [string, ...string[]];
2699
- /**
2700
- * Catchment zone IDs to target (e.g., 'walk', 'drive'). Omit to target all catchment zones.
2701
- *
2702
- * @minItems 1
2703
- */
2704
- catchment_ids?: [string, ...string[]];
2705
- [k: string]: unknown | undefined;
2706
- },
2707
- ...{
2708
- /**
2709
- * Synced store-type catalog ID from sync_catalogs.
2710
- */
2711
- catalog_id: string;
2712
- /**
2713
- * Filter to specific stores within the catalog. Omit to target all stores.
2714
- *
2715
- * @minItems 1
2716
- */
2717
- store_ids?: [string, ...string[]];
2718
- /**
2719
- * Catchment zone IDs to target (e.g., 'walk', 'drive'). Omit to target all catchment zones.
2720
- *
2721
- * @minItems 1
2722
- */
2723
- catchment_ids?: [string, ...string[]];
2724
- [k: string]: unknown | undefined;
2725
- }[]
2726
- ];
2617
+ store_catchments?: {
2618
+ /**
2619
+ * Synced store-type catalog ID from sync_catalogs.
2620
+ */
2621
+ catalog_id: string;
2622
+ /**
2623
+ * Filter to specific stores within the catalog. Omit to target all stores.
2624
+ */
2625
+ store_ids?: string[];
2626
+ /**
2627
+ * Catchment zone IDs to target (e.g., 'walk', 'drive'). Omit to target all catchment zones.
2628
+ */
2629
+ catchment_ids?: string[];
2630
+ }[];
2727
2631
  /**
2728
2632
  * Restrict to users with specific language preferences. ISO 639-1 codes (e.g., 'en', 'es', 'fr').
2729
- *
2730
- * @minItems 1
2731
2633
  */
2732
- language?: [string, ...string[]];
2733
- [k: string]: unknown | undefined;
2634
+ language?: string[];
2734
2635
  }
2735
2636
  /**
2736
2637
  * A time window for daypart targeting. Specifies days of week and an hour range. start_hour is inclusive, end_hour is exclusive (e.g., 6-10 = 6:00am to 10:00am). Follows the Google Ads AdScheduleInfo / DV360 DayPartTargeting pattern.
@@ -2740,7 +2641,6 @@ export interface FrequencyCap {
2740
2641
  * Minutes to suppress after impression
2741
2642
  */
2742
2643
  suppress_minutes: number;
2743
- [k: string]: unknown | undefined;
2744
2644
  }
2745
2645
  /**
2746
2646
  * Reference to a property list for targeting specific properties within this product. The package runs on the intersection of the product's publisher_properties and this list. Sellers SHOULD return a validation error if the product has property_targeting_allowed: false.
@@ -2756,11 +2656,8 @@ export interface CreativeAssignment {
2756
2656
  weight?: number;
2757
2657
  /**
2758
2658
  * 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.
2759
- *
2760
- * @minItems 1
2761
2659
  */
2762
- placement_ids?: [string, ...string[]];
2763
- [k: string]: unknown | undefined;
2660
+ placement_ids?: string[];
2764
2661
  }
2765
2662
  /**
2766
2663
  * Creative asset for upload to library - supports static assets, generative formats, and third-party snippets
@@ -2777,15 +2674,17 @@ export interface CreativeAsset {
2777
2674
  format_id: FormatID;
2778
2675
  /**
2779
2676
  * Catalogs this creative renders. Each entry satisfies one of the format's catalog_requirements, matched by type. Each catalog can be inline (with items), a reference to a synced catalog (by catalog_id), or a URL to an external feed.
2780
- *
2781
- * @minItems 1
2782
2677
  */
2783
- catalogs?: [Catalog, ...Catalog[]];
2678
+ catalogs?: Catalog[];
2784
2679
  /**
2785
2680
  * Assets required by the format, keyed by asset_role
2786
2681
  */
2787
2682
  assets: {
2788
- [k: string]: unknown | undefined;
2683
+ /**
2684
+ * This interface was referenced by `undefined`'s JSON-Schema definition
2685
+ * via the `patternProperty` "^[a-zA-Z0-9_-]+$".
2686
+ */
2687
+ [k: string]: ImageAsset | VideoAsset | AudioAsset | TextAsset | HTMLAsset | CSSAsset | JavaScriptAsset | VASTAsset | DAASTAsset | URLAsset;
2789
2688
  };
2790
2689
  /**
2791
2690
  * Preview contexts for generative formats - defines what scenarios to generate previews for
@@ -2805,7 +2704,6 @@ export interface CreativeAsset {
2805
2704
  * Natural language description of the context for AI-generated content
2806
2705
  */
2807
2706
  context_description?: string;
2808
- [k: string]: unknown | undefined;
2809
2707
  }[];
2810
2708
  /**
2811
2709
  * User-defined tags for organization and searchability
@@ -2818,11 +2716,8 @@ export interface CreativeAsset {
2818
2716
  weight?: number;
2819
2717
  /**
2820
2718
  * Optional array of placement IDs where this creative should run when uploading via create_media_buy or update_media_buy. References placement_id values from the product's placements array. If omitted, creative runs on all placements. Only used during upload to media buy - not stored in creative library.
2821
- *
2822
- * @minItems 1
2823
2719
  */
2824
- placement_ids?: [string, ...string[]];
2825
- [k: string]: unknown | undefined;
2720
+ placement_ids?: string[];
2826
2721
  }
2827
2722
  /**
2828
2723
  * 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.
@@ -2848,7 +2743,6 @@ export interface ImageAsset {
2848
2743
  * Alternative text for accessibility
2849
2744
  */
2850
2745
  alt_text?: string;
2851
- [k: string]: unknown | undefined;
2852
2746
  }
2853
2747
  /**
2854
2748
  * Video asset with URL and technical specifications including audio track properties
@@ -2970,7 +2864,6 @@ export interface VideoAsset {
2970
2864
  * URL to audio description track for visually impaired users
2971
2865
  */
2972
2866
  audio_description_url?: string;
2973
- [k: string]: unknown | undefined;
2974
2867
  }
2975
2868
  /**
2976
2869
  * Audio asset with URL and technical specifications
@@ -3024,7 +2917,6 @@ export interface AudioAsset {
3024
2917
  * URL to text transcript of the audio content
3025
2918
  */
3026
2919
  transcript_url?: string;
3027
- [k: string]: unknown | undefined;
3028
2920
  }
3029
2921
  /**
3030
2922
  * Text content asset
@@ -3038,7 +2930,6 @@ export interface TextAsset {
3038
2930
  * Language code (e.g., 'en', 'es', 'fr')
3039
2931
  */
3040
2932
  language?: string;
3041
- [k: string]: unknown | undefined;
3042
2933
  }
3043
2934
  /**
3044
2935
  * HTML content asset
@@ -3073,7 +2964,6 @@ export interface HTMLAsset {
3073
2964
  */
3074
2965
  screen_reader_tested?: boolean;
3075
2966
  };
3076
- [k: string]: unknown | undefined;
3077
2967
  }
3078
2968
  /**
3079
2969
  * CSS stylesheet asset
@@ -3087,7 +2977,6 @@ export interface CSSAsset {
3087
2977
  * CSS media query context (e.g., 'screen', 'print')
3088
2978
  */
3089
2979
  media?: string;
3090
- [k: string]: unknown | undefined;
3091
2980
  }
3092
2981
  /**
3093
2982
  * JavaScript code asset
@@ -3119,7 +3008,6 @@ export interface JavaScriptAsset {
3119
3008
  */
3120
3009
  screen_reader_tested?: boolean;
3121
3010
  };
3122
- [k: string]: unknown | undefined;
3123
3011
  }
3124
3012
  /**
3125
3013
  * URL reference asset
@@ -3134,10 +3022,9 @@ export interface URLAsset {
3134
3022
  * Description of what this URL points to
3135
3023
  */
3136
3024
  description?: string;
3137
- [k: string]: unknown | undefined;
3138
3025
  }
3139
3026
  /**
3140
- * 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.
3027
+ * Brand reference for this media buy. Resolved to full brand identity at execution time from brand.json or the registry.
3141
3028
  */
3142
3029
  export interface ReportingWebhook {
3143
3030
  /**
@@ -3155,10 +3042,9 @@ export interface ReportingWebhook {
3155
3042
  /**
3156
3043
  * Array of authentication schemes. Supported: ['Bearer'] for simple token auth, ['HMAC-SHA256'] for signature verification (recommended for production)
3157
3044
  *
3158
- * @minItems 1
3159
3045
  * @maxItems 1
3160
3046
  */
3161
- schemes: [AuthenticationScheme];
3047
+ schemes: [] | [AuthenticationScheme];
3162
3048
  /**
3163
3049
  * 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.
3164
3050
  */
@@ -3172,7 +3058,6 @@ export interface ReportingWebhook {
3172
3058
  * Optional list of metrics to include in webhook notifications. If omitted, all available metrics are included. Must be subset of product's available_metrics.
3173
3059
  */
3174
3060
  requested_metrics?: AvailableMetric[];
3175
- [k: string]: unknown | undefined;
3176
3061
  }
3177
3062
  /**
3178
3063
  * 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.
@@ -3196,7 +3081,7 @@ export interface CreateMediaBuySuccess {
3196
3081
  /**
3197
3082
  * Buyer's campaign reference label, echoed from the request
3198
3083
  */
3199
- campaign_ref?: string;
3084
+ buyer_campaign_ref?: string;
3200
3085
  account?: Account;
3201
3086
  /**
3202
3087
  * ISO 8601 timestamp for creative upload deadline
@@ -3273,7 +3158,6 @@ export interface Account {
3273
3158
  */
3274
3159
  sandbox?: boolean;
3275
3160
  ext?: ExtensionObject;
3276
- [k: string]: unknown | undefined;
3277
3161
  }
3278
3162
  /**
3279
3163
  * 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.
@@ -3301,7 +3185,7 @@ export interface Package {
3301
3185
  */
3302
3186
  pricing_option_id?: string;
3303
3187
  /**
3304
- * Bid price for auction-based CPM pricing (present if using cpm-auction-option)
3188
+ * Bid price for auction-based pricing. This is the exact bid/price to honor unless the selected pricing option has max_bid=true, in which case bid_price is the buyer's maximum willingness to pay (ceiling).
3305
3189
  */
3306
3190
  bid_price?: number;
3307
3191
  /**
@@ -3323,7 +3207,6 @@ export interface Package {
3323
3207
  */
3324
3208
  paused?: boolean;
3325
3209
  ext?: ExtensionObject;
3326
- [k: string]: unknown | undefined;
3327
3210
  }
3328
3211
  /**
3329
3212
  * Optional restriction overlays for media buys. Most targeting should be expressed in the brief and handled by the publisher. These fields are for functional restrictions: geographic (RCT testing, regulatory compliance), age verification (alcohol, gambling), device platform (app compatibility), and language (localization).
@@ -3407,10 +3290,9 @@ export interface PushNotificationConfig {
3407
3290
  /**
3408
3291
  * Array of authentication schemes. Supported: ['Bearer'] for simple token auth, ['HMAC-SHA256'] for signature verification (recommended for production)
3409
3292
  *
3410
- * @minItems 1
3411
3293
  * @maxItems 1
3412
3294
  */
3413
- schemes: [AuthenticationScheme];
3295
+ schemes: [] | [AuthenticationScheme];
3414
3296
  /**
3415
3297
  * 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.
3416
3298
  */
@@ -3554,34 +3436,24 @@ export interface ListCreativesRequest {
3554
3436
  export interface CreativeFilters {
3555
3437
  /**
3556
3438
  * Filter creatives by owning accounts. Useful for agencies managing multiple client accounts.
3557
- *
3558
- * @minItems 1
3559
3439
  */
3560
- account_ids?: [string, ...string[]];
3440
+ account_ids?: string[];
3561
3441
  /**
3562
3442
  * Filter by creative format types (e.g., video, audio, display)
3563
- *
3564
- * @minItems 1
3565
3443
  */
3566
- formats?: [string, ...string[]];
3444
+ formats?: string[];
3567
3445
  /**
3568
3446
  * Filter by creative approval statuses
3569
- *
3570
- * @minItems 1
3571
3447
  */
3572
- statuses?: [CreativeStatus, ...CreativeStatus[]];
3448
+ statuses?: CreativeStatus[];
3573
3449
  /**
3574
3450
  * Filter by creative tags (all tags must match)
3575
- *
3576
- * @minItems 1
3577
3451
  */
3578
- tags?: [string, ...string[]];
3452
+ tags?: string[];
3579
3453
  /**
3580
3454
  * Filter by creative tags (any tag must match)
3581
- *
3582
- * @minItems 1
3583
3455
  */
3584
- tags_any?: [string, ...string[]];
3456
+ tags_any?: string[];
3585
3457
  /**
3586
3458
  * Filter by creative names containing this text (case-insensitive)
3587
3459
  */
@@ -3589,10 +3461,9 @@ export interface CreativeFilters {
3589
3461
  /**
3590
3462
  * Filter by specific creative IDs
3591
3463
  *
3592
- * @minItems 1
3593
3464
  * @maxItems 100
3594
3465
  */
3595
- creative_ids?: [string, ...string[]];
3466
+ creative_ids?: string[];
3596
3467
  /**
3597
3468
  * Filter creatives created after this date (ISO 8601)
3598
3469
  */
@@ -3611,22 +3482,16 @@ export interface CreativeFilters {
3611
3482
  updated_before?: string;
3612
3483
  /**
3613
3484
  * Filter creatives assigned to any of these packages
3614
- *
3615
- * @minItems 1
3616
3485
  */
3617
- assigned_to_packages?: [string, ...string[]];
3486
+ assigned_to_packages?: string[];
3618
3487
  /**
3619
3488
  * Filter creatives assigned to any of these media buys
3620
- *
3621
- * @minItems 1
3622
3489
  */
3623
- media_buy_ids?: [string, ...string[]];
3490
+ media_buy_ids?: string[];
3624
3491
  /**
3625
3492
  * Filter creatives assigned to media buys with any of these buyer references
3626
- *
3627
- * @minItems 1
3628
3493
  */
3629
- buyer_refs?: [string, ...string[]];
3494
+ buyer_refs?: string[];
3630
3495
  /**
3631
3496
  * Filter for unassigned creatives when true, assigned creatives when false
3632
3497
  */
@@ -3635,7 +3500,6 @@ export interface CreativeFilters {
3635
3500
  * Filter creatives that have performance data when true
3636
3501
  */
3637
3502
  has_performance_data?: boolean;
3638
- [k: string]: unknown | undefined;
3639
3503
  }
3640
3504
  /**
3641
3505
  * Standard cursor-based pagination parameters for list operations
@@ -3660,7 +3524,6 @@ export type SubAsset = {
3660
3524
  * URL for media assets (images, videos, etc.)
3661
3525
  */
3662
3526
  content_uri: string;
3663
- [k: string]: unknown | undefined;
3664
3527
  } | {
3665
3528
  /**
3666
3529
  * Discriminator indicating this is a text asset with content
@@ -3678,7 +3541,6 @@ export type SubAsset = {
3678
3541
  * Text content for text-based assets like headlines, body text, CTA text, etc.
3679
3542
  */
3680
3543
  content: string | string[];
3681
- [k: string]: unknown | undefined;
3682
3544
  };
3683
3545
  /**
3684
3546
  * Response from creative library query with filtered results, metadata, and optional enriched data
@@ -3907,7 +3769,7 @@ export type PackageUpdate = {
3907
3769
  budget?: number;
3908
3770
  pacing?: Pacing;
3909
3771
  /**
3910
- * Updated bid price for auction-based pricing options (only applies when pricing_option is auction-based)
3772
+ * Updated bid price for auction-based pricing options. This is the exact bid/price to honor unless selected pricing_option has max_bid=true, in which case bid_price is the buyer's maximum willingness to pay (ceiling).
3911
3773
  */
3912
3774
  bid_price?: number;
3913
3775
  /**
@@ -3928,12 +3790,10 @@ export type PackageUpdate = {
3928
3790
  /**
3929
3791
  * Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.
3930
3792
  *
3931
- * @minItems 1
3932
3793
  * @maxItems 100
3933
3794
  */
3934
- creatives?: [CreativeAsset, ...CreativeAsset[]];
3795
+ creatives?: CreativeAsset[];
3935
3796
  ext?: ExtensionObject;
3936
- [k: string]: unknown | undefined;
3937
3797
  } & {
3938
3798
  [k: string]: unknown | undefined;
3939
3799
  };
@@ -3961,9 +3821,224 @@ export interface UpdateMediaBuySuccess {
3961
3821
  */
3962
3822
  implementation_date?: string | null;
3963
3823
  /**
3964
- * Array of packages that were modified with complete state information
3824
+ * Array of packages that were modified with complete state information
3825
+ */
3826
+ affected_packages?: Package[];
3827
+ /**
3828
+ * When true, this response contains simulated data from sandbox mode.
3829
+ */
3830
+ sandbox?: boolean;
3831
+ context?: ContextObject;
3832
+ ext?: ExtensionObject;
3833
+ }
3834
+ /**
3835
+ * A specific product within a media buy (line item)
3836
+ */
3837
+ export interface UpdateMediaBuyError {
3838
+ /**
3839
+ * Array of errors explaining why the operation failed
3840
+ */
3841
+ errors: Error[];
3842
+ context?: ContextObject;
3843
+ ext?: ExtensionObject;
3844
+ }
3845
+ /**
3846
+ * Standard error structure for task-specific errors and warnings
3847
+ */
3848
+ /**
3849
+ * Status of a media buy
3850
+ */
3851
+ export type MediaBuyStatus = 'pending_activation' | 'active' | 'paused' | 'completed';
3852
+ /**
3853
+ * Request parameters for retrieving media buy status, creative approval state, and optional delivery snapshots
3854
+ */
3855
+ export interface GetMediaBuysRequest {
3856
+ /**
3857
+ * Filter to a specific account. When omitted, returns media buys across all accessible accounts. Optional if the agent has a single account.
3858
+ */
3859
+ account_id?: string;
3860
+ /**
3861
+ * Array of publisher media buy IDs to retrieve. When omitted along with buyer_refs, returns a paginated set of accessible media buys matching status_filter.
3862
+ */
3863
+ media_buy_ids?: string[];
3864
+ /**
3865
+ * Array of buyer reference IDs to retrieve
3866
+ */
3867
+ buyer_refs?: string[];
3868
+ /**
3869
+ * Filter by status. Can be a single status or array of statuses. Defaults to ["active"] only when media_buy_ids and buyer_refs are both omitted. When media_buy_ids or buyer_refs are provided, no implicit status filter is applied.
3870
+ */
3871
+ status_filter?: MediaBuyStatus | MediaBuyStatus[];
3872
+ /**
3873
+ * When true, include a near-real-time delivery snapshot for each package. Snapshots reflect the latest available entity-level stats from the platform (e.g., updated every ~15 minutes on GAM, ~1 hour on batch-only platforms). The staleness_seconds field on each snapshot indicates data freshness. If a snapshot cannot be returned, package.snapshot_unavailable_reason explains why. Defaults to false.
3874
+ */
3875
+ include_snapshot?: boolean;
3876
+ pagination?: PaginationRequest;
3877
+ context?: ContextObject;
3878
+ ext?: ExtensionObject;
3879
+ }
3880
+ /**
3881
+ * Cursor-based pagination controls. Strongly recommended when querying broad scopes (for example, all active media buys in an account).
3882
+ */
3883
+ /**
3884
+ * Status of a media buy
3885
+ */
3886
+ export type CreativeApprovalStatus = 'pending_review' | 'approved' | 'rejected';
3887
+ /**
3888
+ * Response payload for get_media_buys task. Returns media buy configuration, creative approval state, and optional delivery snapshots.
3889
+ */
3890
+ export interface GetMediaBuysResponse {
3891
+ /**
3892
+ * Array of media buys with status, creative approval state, and optional delivery snapshots
3893
+ */
3894
+ media_buys: {
3895
+ /**
3896
+ * Publisher's unique identifier for the media buy
3897
+ */
3898
+ media_buy_id: string;
3899
+ /**
3900
+ * Buyer's reference identifier for this media buy
3901
+ */
3902
+ buyer_ref?: string;
3903
+ /**
3904
+ * Buyer campaign reference label sourced from create_media_buy.buyer_campaign_ref. Groups related operations under a single campaign; may be absent when not provided at creation time.
3905
+ */
3906
+ buyer_campaign_ref?: string;
3907
+ account?: Account;
3908
+ status: MediaBuyStatus;
3909
+ /**
3910
+ * ISO 4217 currency code (e.g., USD, EUR, GBP) for monetary values at this media buy level. total_budget is always denominated in this currency. Package-level fields may override with package.currency.
3911
+ */
3912
+ currency: string;
3913
+ /**
3914
+ * Total budget amount across all packages, denominated in media_buy.currency
3915
+ */
3916
+ total_budget: number;
3917
+ /**
3918
+ * ISO 8601 timestamp for creative upload deadline
3919
+ */
3920
+ creative_deadline?: string;
3921
+ /**
3922
+ * Creation timestamp
3923
+ */
3924
+ created_at?: string;
3925
+ /**
3926
+ * Last update timestamp
3927
+ */
3928
+ updated_at?: string;
3929
+ /**
3930
+ * Packages within this media buy, augmented with creative approval status and optional delivery snapshots
3931
+ */
3932
+ packages: {
3933
+ /**
3934
+ * Publisher's package identifier
3935
+ */
3936
+ package_id: string;
3937
+ /**
3938
+ * Buyer's reference identifier for this package
3939
+ */
3940
+ buyer_ref?: string;
3941
+ /**
3942
+ * Product identifier this package is purchased from
3943
+ */
3944
+ product_id?: string;
3945
+ /**
3946
+ * Package budget amount, denominated in package.currency when present, otherwise media_buy.currency
3947
+ */
3948
+ budget?: number;
3949
+ /**
3950
+ * ISO 4217 currency code for monetary values at this package level (budget, bid_price, snapshot.spend). When absent, inherit media_buy.currency.
3951
+ */
3952
+ currency?: string;
3953
+ /**
3954
+ * Current bid price for auction-based packages. Denominated in package.currency when present, otherwise media_buy.currency. Relevant for automated price optimization loops.
3955
+ */
3956
+ bid_price?: number;
3957
+ /**
3958
+ * Goal impression count for impression-based packages
3959
+ */
3960
+ impressions?: number;
3961
+ /**
3962
+ * ISO 8601 flight start time for this package. Use to determine whether the package is within its scheduled flight before interpreting delivery status.
3963
+ */
3964
+ start_time?: string;
3965
+ /**
3966
+ * ISO 8601 flight end time for this package
3967
+ */
3968
+ end_time?: string;
3969
+ /**
3970
+ * Whether this package is currently paused by the buyer
3971
+ */
3972
+ paused?: boolean;
3973
+ /**
3974
+ * Approval status for each creative assigned to this package. Absent when no creatives have been assigned.
3975
+ */
3976
+ creative_approvals?: {
3977
+ /**
3978
+ * Creative identifier
3979
+ */
3980
+ creative_id: string;
3981
+ approval_status: CreativeApprovalStatus;
3982
+ /**
3983
+ * Human-readable explanation of why the creative was rejected. Present only when approval_status is 'rejected'.
3984
+ */
3985
+ rejection_reason?: string;
3986
+ }[];
3987
+ /**
3988
+ * Format IDs from the original create_media_buy format_ids_to_provide that have not yet been uploaded via sync_creatives. When empty or absent, all required formats have been provided.
3989
+ */
3990
+ format_ids_pending?: FormatID[];
3991
+ /**
3992
+ * Machine-readable reason the snapshot is omitted. Present only when include_snapshot was true and snapshot is unavailable for this package.
3993
+ */
3994
+ snapshot_unavailable_reason?: 'SNAPSHOT_UNSUPPORTED' | 'SNAPSHOT_TEMPORARILY_UNAVAILABLE' | 'SNAPSHOT_PERMISSION_DENIED';
3995
+ /**
3996
+ * Near-real-time delivery snapshot for this package. Only present when include_snapshot was true in the request. Represents the latest available entity-level stats from the platform — not billing-grade data.
3997
+ */
3998
+ snapshot?: {
3999
+ /**
4000
+ * ISO 8601 timestamp when this snapshot was captured by the platform
4001
+ */
4002
+ as_of: string;
4003
+ /**
4004
+ * Maximum age of this data in seconds. For example, 900 means the data may be up to 15 minutes old. Use this to interpret zero delivery: a value of 900 means zero impressions is likely real; a value of 14400 means reporting may still be catching up.
4005
+ */
4006
+ staleness_seconds: number;
4007
+ /**
4008
+ * Total impressions delivered since package start
4009
+ */
4010
+ impressions: number;
4011
+ /**
4012
+ * Total spend since package start, denominated in snapshot.currency when present, otherwise package.currency or media_buy.currency
4013
+ */
4014
+ spend: number;
4015
+ /**
4016
+ * ISO 4217 currency code for spend in this snapshot. Optional when unchanged from package.currency or media_buy.currency.
4017
+ */
4018
+ currency?: string;
4019
+ /**
4020
+ * Total clicks since package start (when available)
4021
+ */
4022
+ clicks?: number;
4023
+ /**
4024
+ * Current delivery pace relative to expected (1.0 = on track, <1.0 = behind, >1.0 = ahead). Absent when pacing cannot be determined.
4025
+ */
4026
+ pacing_index?: number;
4027
+ /**
4028
+ * Operational delivery state of this package. 'not_delivering' means the package is within its scheduled flight but has delivered zero impressions for at least one full staleness cycle — the signal for automated price adjustments or buyer alerts. Implementers must not return 'not_delivering' until at least staleness_seconds have elapsed since package activation.
4029
+ */
4030
+ delivery_status?: 'delivering' | 'not_delivering' | 'completed' | 'budget_exhausted' | 'flight_ended' | 'goal_met';
4031
+ ext?: ExtensionObject;
4032
+ };
4033
+ ext?: ExtensionObject;
4034
+ }[];
4035
+ ext?: ExtensionObject;
4036
+ }[];
4037
+ /**
4038
+ * Task-specific errors (e.g., media buy not found)
3965
4039
  */
3966
- affected_packages?: Package[];
4040
+ errors?: Error[];
4041
+ pagination?: PaginationResponse;
3967
4042
  /**
3968
4043
  * When true, this response contains simulated data from sandbox mode.
3969
4044
  */
@@ -3972,25 +4047,7 @@ export interface UpdateMediaBuySuccess {
3972
4047
  ext?: ExtensionObject;
3973
4048
  }
3974
4049
  /**
3975
- * A specific product within a media buy (line item)
3976
- */
3977
- export interface UpdateMediaBuyError {
3978
- /**
3979
- * Array of errors explaining why the operation failed
3980
- */
3981
- errors: Error[];
3982
- context?: ContextObject;
3983
- ext?: ExtensionObject;
3984
- }
3985
- /**
3986
- * Standard error structure for task-specific errors and warnings
3987
- */
3988
- /**
3989
- * Status of a media buy
3990
- */
3991
- export type MediaBuyStatus = 'pending_activation' | 'active' | 'paused' | 'completed';
3992
- /**
3993
- * Request parameters for retrieving comprehensive delivery metrics
4050
+ * Account billed for this media buy
3994
4051
  */
3995
4052
  export interface GetMediaBuyDeliveryRequest {
3996
4053
  /**
@@ -4131,13 +4188,13 @@ export interface GetMediaBuyDeliveryResponse {
4131
4188
  */
4132
4189
  buyer_ref?: string;
4133
4190
  /**
4134
- * Buyer's campaign reference label. Groups related operations under a single campaign for CRM and ad server correlation.
4191
+ * Buyer's campaign reference label from create_media_buy.buyer_campaign_ref. Groups related operations under a single campaign for CRM and ad server correlation; may be absent when not provided at creation time.
4135
4192
  */
4136
- campaign_ref?: string;
4193
+ buyer_campaign_ref?: string;
4137
4194
  /**
4138
- * Current media buy status. In webhook context, reporting_delayed indicates data temporarily unavailable.
4195
+ * Current media buy status. Lifecycle states use the same taxonomy as media-buy-status (`pending_activation`, `active`, `paused`, `completed`). In webhook context, reporting_delayed indicates data temporarily unavailable. `pending` is accepted as a legacy alias for pending_activation.
4139
4196
  */
4140
- status: 'pending' | 'active' | 'paused' | 'completed' | 'failed' | 'reporting_delayed';
4197
+ status: 'pending_activation' | 'pending' | 'active' | 'paused' | 'completed' | 'failed' | 'reporting_delayed';
4141
4198
  /**
4142
4199
  * When delayed data is expected to be available (only present when status is reporting_delayed)
4143
4200
  */
@@ -4268,7 +4325,6 @@ export interface AttributionWindow {
4268
4325
  */
4269
4326
  view_window_days?: number;
4270
4327
  model: AttributionModel;
4271
- [k: string]: unknown | undefined;
4272
4328
  }
4273
4329
  /**
4274
4330
  * Standard delivery metrics that can be reported at media buy, package, or creative level
@@ -4343,7 +4399,6 @@ export interface DeliveryMetrics {
4343
4399
  * Total monetary value of events of this type
4344
4400
  */
4345
4401
  value?: number;
4346
- [k: string]: unknown | undefined;
4347
4402
  }[];
4348
4403
  /**
4349
4404
  * Gross Rating Points delivered (for CPP)
@@ -4430,9 +4485,7 @@ export interface DeliveryMetrics {
4430
4485
  * Number of screens used at this venue
4431
4486
  */
4432
4487
  screens_used?: number;
4433
- [k: string]: unknown | undefined;
4434
4488
  }[];
4435
- [k: string]: unknown | undefined;
4436
4489
  };
4437
4490
  /**
4438
4491
  * Viewability metrics. Viewable rate should be calculated as viewable_impressions / measurable_impressions (not total impressions), since some environments cannot measure viewability.
@@ -4454,7 +4507,6 @@ export interface DeliveryMetrics {
4454
4507
  * Viewability measurement standard. 'mrc': 50% of pixels in view for 1 second (display) or 2 seconds (video), per MRC/IAB guidelines. 'groupm': 100% of pixels in view for the same durations. These are materially different thresholds and should not be compared across standards.
4455
4508
  */
4456
4509
  standard?: 'mrc' | 'groupm';
4457
- [k: string]: unknown | undefined;
4458
4510
  };
4459
4511
  /**
4460
4512
  * Platform-specific engagement rate (0.0 to 1.0). Definition varies by platform (e.g., likes+comments+shares/impressions on social, interactions/impressions on rich media).
@@ -4481,9 +4533,7 @@ export interface DeliveryMetrics {
4481
4533
  * Total monetary value of conversions from this action source
4482
4534
  */
4483
4535
  value?: number;
4484
- [k: string]: unknown | undefined;
4485
4536
  }[];
4486
- [k: string]: unknown | undefined;
4487
4537
  }
4488
4538
  /**
4489
4539
  * Standard error structure for task-specific errors and warnings
@@ -4703,27 +4753,14 @@ export type UserMatch = {
4703
4753
  } & {
4704
4754
  /**
4705
4755
  * Universal ID values for user matching
4706
- *
4707
- * @minItems 1
4708
4756
  */
4709
- uids?: [
4710
- {
4711
- type: UIDType;
4712
- /**
4713
- * Universal ID value
4714
- */
4715
- value: string;
4716
- [k: string]: unknown | undefined;
4717
- },
4718
- ...{
4719
- type: UIDType;
4720
- /**
4721
- * Universal ID value
4722
- */
4723
- value: string;
4724
- [k: string]: unknown | undefined;
4725
- }[]
4726
- ];
4757
+ uids?: {
4758
+ type: UIDType;
4759
+ /**
4760
+ * Universal ID value
4761
+ */
4762
+ value: string;
4763
+ }[];
4727
4764
  /**
4728
4765
  * SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.
4729
4766
  */
@@ -4749,7 +4786,6 @@ export type UserMatch = {
4749
4786
  */
4750
4787
  client_user_agent?: string;
4751
4788
  ext?: ExtensionObject;
4752
- [k: string]: unknown | undefined;
4753
4789
  };
4754
4790
  /**
4755
4791
  * Universal ID type
@@ -4801,7 +4837,6 @@ export interface Event {
4801
4837
  */
4802
4838
  custom_event_name?: string;
4803
4839
  ext?: ExtensionObject;
4804
- [k: string]: unknown | undefined;
4805
4840
  }
4806
4841
  /**
4807
4842
  * 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.
@@ -4863,10 +4898,8 @@ export interface EventCustomData {
4863
4898
  * Brand name of this item
4864
4899
  */
4865
4900
  brand?: string;
4866
- [k: string]: unknown | undefined;
4867
4901
  }[];
4868
4902
  ext?: ExtensionObject;
4869
- [k: string]: unknown | undefined;
4870
4903
  }
4871
4904
  /**
4872
4905
  * 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.
@@ -4949,29 +4982,15 @@ export type AudienceMember = {
4949
4982
  hashed_phone?: string;
4950
4983
  /**
4951
4984
  * Universal ID values (MAIDs, RampID, UID2, etc.) for user matching.
4952
- *
4953
- * @minItems 1
4954
4985
  */
4955
- uids?: [
4956
- {
4957
- type: UIDType;
4958
- /**
4959
- * Universal ID value
4960
- */
4961
- value: string;
4962
- [k: string]: unknown | undefined;
4963
- },
4964
- ...{
4965
- type: UIDType;
4966
- /**
4967
- * Universal ID value
4968
- */
4969
- value: string;
4970
- [k: string]: unknown | undefined;
4971
- }[]
4972
- ];
4986
+ uids?: {
4987
+ type: UIDType;
4988
+ /**
4989
+ * Universal ID value
4990
+ */
4991
+ value: string;
4992
+ }[];
4973
4993
  ext?: ExtensionObject;
4974
- [k: string]: unknown | undefined;
4975
4994
  };
4976
4995
  /**
4977
4996
  * Universal ID type
@@ -5270,20 +5289,21 @@ export interface CreativeManifest {
5270
5289
  format_id: FormatID;
5271
5290
  /**
5272
5291
  * Catalogs this creative renders. Each entry satisfies one of the format's catalog_requirements, matched by type. Tells the creative what data to display — product listings for a carousel, job vacancies for a recruitment ad, store locations for a locator. This is a data reference, not a campaign expansion directive; campaign structure and budget allocation are handled by create_media_buy packages. Each catalog can be inline (with items), a reference to a synced catalog (by catalog_id), or a URL to an external feed.
5273
- *
5274
- * @minItems 1
5275
5292
  */
5276
- catalogs?: [Catalog, ...Catalog[]];
5293
+ catalogs?: Catalog[];
5277
5294
  /**
5278
5295
  * Map of asset IDs to actual asset content. Each key MUST match an asset_id from the format's assets array (e.g., 'banner_image', 'clickthrough_url', 'video_file', 'vast_tag'). The asset_id is the technical identifier used to match assets to format requirements.
5279
5296
  *
5280
5297
  * IMPORTANT: Full validation requires format context. The format defines what type each asset_id should be. Standalone schema validation only checks structural conformance — each asset must match at least one valid asset type schema.
5281
5298
  */
5282
5299
  assets: {
5283
- [k: string]: unknown | undefined;
5300
+ /**
5301
+ * This interface was referenced by `undefined`'s JSON-Schema definition
5302
+ * via the `patternProperty` "^[a-z0-9_]+$".
5303
+ */
5304
+ [k: string]: ImageAsset | VideoAsset | AudioAsset | VASTAsset | TextAsset | URLAsset | HTMLAsset | JavaScriptAsset | WebhookAsset | CSSAsset | DAASTAsset;
5284
5305
  };
5285
5306
  ext?: ExtensionObject;
5286
- [k: string]: unknown | undefined;
5287
5307
  }
5288
5308
  /**
5289
5309
  * 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'}).
@@ -5321,7 +5341,6 @@ export interface WebhookAsset {
5321
5341
  */
5322
5342
  api_key_header?: string;
5323
5343
  };
5324
- [k: string]: unknown | undefined;
5325
5344
  }
5326
5345
  /**
5327
5346
  * CSS stylesheet asset
@@ -5367,13 +5386,11 @@ export interface CreativeBrief {
5367
5386
  * Key messages to communicate in priority order
5368
5387
  */
5369
5388
  key_messages?: string[];
5370
- [k: string]: unknown | undefined;
5371
5389
  };
5372
5390
  /**
5373
5391
  * Visual and strategic reference materials such as mood boards, product shots, example creatives, and strategy documents
5374
5392
  */
5375
5393
  reference_assets?: ReferenceAsset[];
5376
- [k: string]: unknown | undefined;
5377
5394
  }
5378
5395
  /**
5379
5396
  * A reference asset that provides creative context. Carries visual materials (mood boards, product shots, example creatives) with semantic roles that tell creative agents how to use them.
@@ -5391,7 +5408,6 @@ export interface ReferenceAsset {
5391
5408
  * Human-readable description of the asset and how it should inform creative generation
5392
5409
  */
5393
5410
  description?: string;
5394
- [k: string]: unknown | undefined;
5395
5411
  }
5396
5412
  /**
5397
5413
  * 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.
@@ -5531,20 +5547,21 @@ export interface CreativeManifest1 {
5531
5547
  format_id: FormatID;
5532
5548
  /**
5533
5549
  * Catalogs this creative renders. Each entry satisfies one of the format's catalog_requirements, matched by type. Tells the creative what data to display — product listings for a carousel, job vacancies for a recruitment ad, store locations for a locator. This is a data reference, not a campaign expansion directive; campaign structure and budget allocation are handled by create_media_buy packages. Each catalog can be inline (with items), a reference to a synced catalog (by catalog_id), or a URL to an external feed.
5534
- *
5535
- * @minItems 1
5536
5550
  */
5537
- catalogs?: [Catalog, ...Catalog[]];
5551
+ catalogs?: Catalog[];
5538
5552
  /**
5539
5553
  * Map of asset IDs to actual asset content. Each key MUST match an asset_id from the format's assets array (e.g., 'banner_image', 'clickthrough_url', 'video_file', 'vast_tag'). The asset_id is the technical identifier used to match assets to format requirements.
5540
5554
  *
5541
5555
  * IMPORTANT: Full validation requires format context. The format defines what type each asset_id should be. Standalone schema validation only checks structural conformance — each asset must match at least one valid asset type schema.
5542
5556
  */
5543
5557
  assets: {
5544
- [k: string]: unknown | undefined;
5558
+ /**
5559
+ * This interface was referenced by `undefined`'s JSON-Schema definition
5560
+ * via the `patternProperty` "^[a-z0-9_]+$".
5561
+ */
5562
+ [k: string]: ImageAsset | VideoAsset | AudioAsset | VASTAsset | TextAsset | URLAsset | HTMLAsset | JavaScriptAsset | WebhookAsset | CSSAsset | DAASTAsset;
5545
5563
  };
5546
5564
  ext?: ExtensionObject;
5547
- [k: string]: unknown | undefined;
5548
5565
  }
5549
5566
  /**
5550
5567
  * Response containing preview links for one or more creatives. Format matches the request: single preview response for single requests, batch results for batch requests.
@@ -5598,7 +5615,6 @@ export type PreviewRender = {
5598
5615
  */
5599
5616
  csp_policy?: string;
5600
5617
  };
5601
- [k: string]: unknown | undefined;
5602
5618
  } | {
5603
5619
  /**
5604
5620
  * Unique identifier for this rendered piece within the variant
@@ -5644,7 +5660,6 @@ export type PreviewRender = {
5644
5660
  */
5645
5661
  csp_policy?: string;
5646
5662
  };
5647
- [k: string]: unknown | undefined;
5648
5663
  } | {
5649
5664
  /**
5650
5665
  * Unique identifier for this rendered piece within the variant
@@ -5694,7 +5709,6 @@ export type PreviewRender = {
5694
5709
  */
5695
5710
  csp_policy?: string;
5696
5711
  };
5697
- [k: string]: unknown | undefined;
5698
5712
  };
5699
5713
  /**
5700
5714
  * Catalog type. Structural types: 'offering' (AdCP Offering objects), 'product' (ecommerce entries), 'inventory' (stock per location), 'store' (physical locations), 'promotion' (deals and pricing). Vertical types: 'hotel', 'flight', 'job', 'vehicle', 'real_estate', 'education', 'destination', 'app' — each with an industry-specific item schema.
@@ -5889,7 +5903,6 @@ export type CreativeVariant = DeliveryMetrics & {
5889
5903
  artifact_id: string;
5890
5904
  };
5891
5905
  ext?: ExtensionObject;
5892
- [k: string]: unknown | undefined;
5893
5906
  };
5894
5907
  };
5895
5908
  /**
@@ -6049,7 +6062,6 @@ export type Destination = {
6049
6062
  * Optional account identifier on the platform
6050
6063
  */
6051
6064
  account?: string;
6052
- [k: string]: unknown | undefined;
6053
6065
  } | {
6054
6066
  /**
6055
6067
  * Discriminator indicating this is an agent URL-based deployment
@@ -6063,7 +6075,6 @@ export type Destination = {
6063
6075
  * Optional account identifier on the agent
6064
6076
  */
6065
6077
  account?: string;
6066
- [k: string]: unknown | undefined;
6067
6078
  };
6068
6079
  /**
6069
6080
  * Types of signal catalogs available for audience targeting
@@ -6075,16 +6086,12 @@ export type SignalCatalogType = 'marketplace' | 'custom' | 'owned';
6075
6086
  export interface SignalFilters {
6076
6087
  /**
6077
6088
  * Filter by catalog type
6078
- *
6079
- * @minItems 1
6080
6089
  */
6081
- catalog_types?: [SignalCatalogType, ...SignalCatalogType[]];
6090
+ catalog_types?: SignalCatalogType[];
6082
6091
  /**
6083
6092
  * Filter by specific data providers
6084
- *
6085
- * @minItems 1
6086
6093
  */
6087
- data_providers?: [string, ...string[]];
6094
+ data_providers?: string[];
6088
6095
  /**
6089
6096
  * Maximum CPM price filter
6090
6097
  */
@@ -6093,7 +6100,6 @@ export interface SignalFilters {
6093
6100
  * Minimum coverage requirement
6094
6101
  */
6095
6102
  min_coverage_percentage?: number;
6096
- [k: string]: unknown | undefined;
6097
6103
  }
6098
6104
  /**
6099
6105
  * Standard cursor-based pagination parameters for list operations
@@ -6131,7 +6137,6 @@ export type Deployment = {
6131
6137
  * Timestamp when activation completed (if is_live=true)
6132
6138
  */
6133
6139
  deployed_at?: string;
6134
- [k: string]: unknown | undefined;
6135
6140
  } | {
6136
6141
  /**
6137
6142
  * Discriminator indicating this is an agent URL-based deployment
@@ -6158,7 +6163,6 @@ export type Deployment = {
6158
6163
  * Timestamp when activation completed (if is_live=true)
6159
6164
  */
6160
6165
  deployed_at?: string;
6161
- [k: string]: unknown | undefined;
6162
6166
  };
6163
6167
  /**
6164
6168
  * The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.
@@ -6172,7 +6176,6 @@ export type ActivationKey = {
6172
6176
  * The platform-specific segment identifier to use in campaign targeting
6173
6177
  */
6174
6178
  segment_id: string;
6175
- [k: string]: unknown | undefined;
6176
6179
  } | {
6177
6180
  /**
6178
6181
  * Key-value pair based targeting
@@ -6186,7 +6189,6 @@ export type ActivationKey = {
6186
6189
  * The targeting parameter value
6187
6190
  */
6188
6191
  value: string;
6189
- [k: string]: unknown | undefined;
6190
6192
  };
6191
6193
  /**
6192
6194
  * The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.
@@ -6346,10 +6348,8 @@ export interface PublisherTagsSource {
6346
6348
  publisher_domain: string;
6347
6349
  /**
6348
6350
  * Property tags from the publisher's adagents.json. Selects all properties with these tags.
6349
- *
6350
- * @minItems 1
6351
6351
  */
6352
- tags: [PropertyTag, ...PropertyTag[]];
6352
+ tags: PropertyTag[];
6353
6353
  }
6354
6354
  /**
6355
6355
  * Select specific properties from a publisher by ID
@@ -6365,10 +6365,8 @@ export interface PublisherPropertyIDsSource {
6365
6365
  publisher_domain: string;
6366
6366
  /**
6367
6367
  * Specific property IDs from the publisher's adagents.json
6368
- *
6369
- * @minItems 1
6370
6368
  */
6371
- property_ids: [PropertyID, ...PropertyID[]];
6369
+ property_ids: PropertyID[];
6372
6370
  }
6373
6371
  /**
6374
6372
  * Select properties by direct identifiers (domains, app IDs, etc.) without publisher context
@@ -6380,10 +6378,8 @@ export interface DirectIdentifiersSource {
6380
6378
  selection_type: 'identifiers';
6381
6379
  /**
6382
6380
  * Direct property identifiers (domains, app IDs, etc.)
6383
- *
6384
- * @minItems 1
6385
6381
  */
6386
- identifiers: [Identifier, ...Identifier[]];
6382
+ identifiers: Identifier[];
6387
6383
  }
6388
6384
  /**
6389
6385
  * A property identifier with type and value. Used to identify properties across platforms (domains, app store IDs, etc.).
@@ -6391,34 +6387,24 @@ export interface DirectIdentifiersSource {
6391
6387
  export interface PropertyListFilters {
6392
6388
  /**
6393
6389
  * Property must have feature data for ALL listed countries (ISO codes). Required.
6394
- *
6395
- * @minItems 1
6396
6390
  */
6397
- countries_all: [string, ...string[]];
6391
+ countries_all: string[];
6398
6392
  /**
6399
6393
  * Property must support ANY of the listed channels. Required.
6400
- *
6401
- * @minItems 1
6402
6394
  */
6403
- channels_any: [MediaChannel, ...MediaChannel[]];
6395
+ channels_any: MediaChannel[];
6404
6396
  /**
6405
6397
  * Filter to these property types
6406
- *
6407
- * @minItems 1
6408
6398
  */
6409
- property_types?: [PropertyType, ...PropertyType[]];
6399
+ property_types?: PropertyType[];
6410
6400
  /**
6411
6401
  * Feature-based requirements. Property must pass ALL requirements (AND logic).
6412
- *
6413
- * @minItems 1
6414
6402
  */
6415
- feature_requirements?: [FeatureRequirement, ...FeatureRequirement[]];
6403
+ feature_requirements?: FeatureRequirement[];
6416
6404
  /**
6417
6405
  * Identifiers to always exclude from results
6418
- *
6419
- * @minItems 1
6420
6406
  */
6421
- exclude_identifiers?: [Identifier, ...Identifier[]];
6407
+ exclude_identifiers?: Identifier[];
6422
6408
  }
6423
6409
  /**
6424
6410
  * A feature-based requirement for property filtering. Use min_value/max_value for quantitative features, allowed_values for binary/categorical features.
@@ -6438,10 +6424,8 @@ export interface FeatureRequirement {
6438
6424
  max_value?: number;
6439
6425
  /**
6440
6426
  * Values that pass the requirement (for binary/categorical features)
6441
- *
6442
- * @minItems 1
6443
6427
  */
6444
- allowed_values?: [unknown, ...unknown[]];
6428
+ allowed_values?: unknown[];
6445
6429
  /**
6446
6430
  * 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).
6447
6431
  */
@@ -6746,9 +6730,7 @@ export type AssetAccess = {
6746
6730
  /**
6747
6731
  * Service account credentials
6748
6732
  */
6749
- credentials?: {
6750
- [k: string]: unknown | undefined;
6751
- };
6733
+ credentials?: {};
6752
6734
  } | {
6753
6735
  method: 'signed_url';
6754
6736
  };
@@ -6766,22 +6748,16 @@ export interface ContentStandards {
6766
6748
  name?: string;
6767
6749
  /**
6768
6750
  * ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).
6769
- *
6770
- * @minItems 1
6771
6751
  */
6772
- countries_all?: [string, ...string[]];
6752
+ countries_all?: string[];
6773
6753
  /**
6774
6754
  * Advertising channels. Standards apply to ANY of the listed channels (OR logic).
6775
- *
6776
- * @minItems 1
6777
6755
  */
6778
- channels_any?: [MediaChannel, ...MediaChannel[]];
6756
+ channels_any?: MediaChannel[];
6779
6757
  /**
6780
6758
  * 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.
6781
- *
6782
- * @minItems 1
6783
6759
  */
6784
- languages_any?: [string, ...string[]];
6760
+ languages_any?: string[];
6785
6761
  /**
6786
6762
  * Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments.
6787
6763
  */
@@ -6933,20 +6909,15 @@ export interface Artifact {
6933
6909
  /**
6934
6910
  * Open Graph protocol metadata
6935
6911
  */
6936
- open_graph?: {
6937
- [k: string]: unknown | undefined;
6938
- };
6912
+ open_graph?: {};
6939
6913
  /**
6940
6914
  * Twitter Card metadata
6941
6915
  */
6942
- twitter_card?: {
6943
- [k: string]: unknown | undefined;
6944
- };
6916
+ twitter_card?: {};
6945
6917
  /**
6946
6918
  * JSON-LD structured data (schema.org)
6947
6919
  */
6948
6920
  json_ld?: {}[];
6949
- [k: string]: unknown | undefined;
6950
6921
  };
6951
6922
  /**
6952
6923
  * Platform-specific identifiers for this artifact
@@ -6972,9 +6943,7 @@ export interface Artifact {
6972
6943
  * RSS feed URL
6973
6944
  */
6974
6945
  rss_url?: string;
6975
- [k: string]: unknown | undefined;
6976
6946
  };
6977
- [k: string]: unknown | undefined;
6978
6947
  }
6979
6948
  /**
6980
6949
  * Identifier for the property where this artifact appears
@@ -7558,6 +7527,93 @@ export type GetMediaBuyArtifactsResponse = {
7558
7527
  /**
7559
7528
  * Type of identifier
7560
7529
  */
7530
+ /**
7531
+ * Catalog type. Structural types: 'offering' (AdCP Offering objects), 'product' (ecommerce entries), 'inventory' (stock per location), 'store' (physical locations), 'promotion' (deals and pricing). Vertical types: 'hotel', 'flight', 'job', 'vehicle', 'real_estate', 'education', 'destination', 'app' — each with an industry-specific item schema.
7532
+ */
7533
+ export interface GetCreativeFeaturesRequest {
7534
+ creative_manifest: CreativeManifest;
7535
+ /**
7536
+ * Optional filter to specific features. If omitted, returns all available features.
7537
+ */
7538
+ feature_ids?: string[];
7539
+ context?: ContextObject;
7540
+ ext?: ExtensionObject;
7541
+ }
7542
+ /**
7543
+ * The creative manifest to evaluate. Contains format_id and assets.
7544
+ */
7545
+ /**
7546
+ * Response payload for get_creative_features task. Returns feature values for the evaluated creative.
7547
+ */
7548
+ export type GetCreativeFeaturesResponse = {
7549
+ /**
7550
+ * Feature values for the evaluated creative
7551
+ */
7552
+ results: CreativeFeatureResult[];
7553
+ /**
7554
+ * URL to the vendor's full assessment report. The vendor controls what information is disclosed and access control.
7555
+ */
7556
+ detail_url?: string;
7557
+ /**
7558
+ * Field must not be present in success response
7559
+ */
7560
+ errors?: {
7561
+ [k: string]: unknown | undefined;
7562
+ };
7563
+ context?: ContextObject;
7564
+ ext?: ExtensionObject;
7565
+ } | {
7566
+ errors: Error[];
7567
+ /**
7568
+ * Field must not be present in error response
7569
+ */
7570
+ results?: {
7571
+ [k: string]: unknown | undefined;
7572
+ };
7573
+ context?: ContextObject;
7574
+ ext?: ExtensionObject;
7575
+ };
7576
+ /**
7577
+ * A single feature evaluation result for a creative. Uses the same value structure as property-feature-value (value, confidence, expires_at, etc.).
7578
+ */
7579
+ export interface CreativeFeatureResult {
7580
+ /**
7581
+ * The feature that was evaluated (e.g., 'auto_redirect', 'brand_consistency', 'iab_casinos_gambling')
7582
+ */
7583
+ feature_id: string;
7584
+ /**
7585
+ * The feature value. Type depends on feature definition: boolean for binary, number for quantitative, string for categorical.
7586
+ */
7587
+ value: boolean | number | string;
7588
+ /**
7589
+ * Unit of measurement for quantitative values (e.g., 'percentage', 'score')
7590
+ */
7591
+ unit?: string;
7592
+ /**
7593
+ * Confidence score for this value (0-1)
7594
+ */
7595
+ confidence?: number;
7596
+ /**
7597
+ * When this feature was evaluated
7598
+ */
7599
+ measured_at?: string;
7600
+ /**
7601
+ * When this evaluation expires and should be refreshed
7602
+ */
7603
+ expires_at?: string;
7604
+ /**
7605
+ * Version of the methodology used to evaluate this feature
7606
+ */
7607
+ methodology_version?: string;
7608
+ /**
7609
+ * Additional vendor-specific details about this evaluation
7610
+ */
7611
+ details?: {};
7612
+ ext?: ExtensionObject;
7613
+ }
7614
+ /**
7615
+ * 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.
7616
+ */
7561
7617
  /**
7562
7618
  * Get offering details and availability before session handoff. Returns offering information, availability status, and optionally matching products based on context.
7563
7619
  */
@@ -7750,7 +7806,6 @@ export interface SIIdentity {
7750
7806
  * Version of policy acknowledged
7751
7807
  */
7752
7808
  brand_policy_version?: string;
7753
- [k: string]: unknown | undefined;
7754
7809
  };
7755
7810
  /**
7756
7811
  * User data (only present if consent_granted is true)
@@ -7781,15 +7836,12 @@ export interface SIIdentity {
7781
7836
  state?: string;
7782
7837
  postal_code?: string;
7783
7838
  country?: string;
7784
- [k: string]: unknown | undefined;
7785
7839
  };
7786
- [k: string]: unknown | undefined;
7787
7840
  };
7788
7841
  /**
7789
7842
  * Session ID for anonymous users (when consent_granted is false)
7790
7843
  */
7791
7844
  anonymous_session_id?: string;
7792
- [k: string]: unknown | undefined;
7793
7845
  }
7794
7846
  /**
7795
7847
  * What capabilities the host supports
@@ -7815,7 +7867,6 @@ export interface SICapabilities {
7815
7867
  * Brand voice identifier
7816
7868
  */
7817
7869
  voice_id?: string;
7818
- [k: string]: unknown | undefined;
7819
7870
  };
7820
7871
  /**
7821
7872
  * Brand video content playback
@@ -7829,7 +7880,6 @@ export interface SICapabilities {
7829
7880
  * Maximum video duration
7830
7881
  */
7831
7882
  max_duration_seconds?: number;
7832
- [k: string]: unknown | undefined;
7833
7883
  };
7834
7884
  /**
7835
7885
  * Animated video presence with brand avatar
@@ -7843,9 +7893,7 @@ export interface SICapabilities {
7843
7893
  * Brand avatar identifier
7844
7894
  */
7845
7895
  avatar_id?: string;
7846
- [k: string]: unknown | undefined;
7847
7896
  };
7848
- [k: string]: unknown | undefined;
7849
7897
  };
7850
7898
  /**
7851
7899
  * Visual components supported
@@ -7858,10 +7906,7 @@ export interface SICapabilities {
7858
7906
  /**
7859
7907
  * Platform-specific extensions (chatgpt_apps_sdk, maps, forms, etc.)
7860
7908
  */
7861
- extensions?: {
7862
- [k: string]: unknown | undefined;
7863
- };
7864
- [k: string]: unknown | undefined;
7909
+ extensions?: {};
7865
7910
  };
7866
7911
  /**
7867
7912
  * Commerce capabilities
@@ -7871,7 +7916,6 @@ export interface SICapabilities {
7871
7916
  * Supports ACP (Agentic Commerce Protocol) checkout handoff
7872
7917
  */
7873
7918
  acp_checkout?: boolean;
7874
- [k: string]: unknown | undefined;
7875
7919
  };
7876
7920
  /**
7877
7921
  * A2UI (Agent-to-UI) capabilities
@@ -7885,13 +7929,11 @@ export interface SICapabilities {
7885
7929
  * Supported A2UI component catalogs (e.g., 'si-standard', 'standard')
7886
7930
  */
7887
7931
  catalogs?: string[];
7888
- [k: string]: unknown | undefined;
7889
7932
  };
7890
7933
  /**
7891
7934
  * Supports MCP Apps for rendering A2UI surfaces in iframes
7892
7935
  */
7893
7936
  mcp_apps?: boolean;
7894
- [k: string]: unknown | undefined;
7895
7937
  }
7896
7938
  /**
7897
7939
  * 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.
@@ -7909,10 +7951,7 @@ export type SIUIElement = {
7909
7951
  /**
7910
7952
  * Component-specific data
7911
7953
  */
7912
- data?: {
7913
- [k: string]: unknown | undefined;
7914
- };
7915
- [k: string]: unknown | undefined;
7954
+ data?: {};
7916
7955
  };
7917
7956
  /**
7918
7957
  * Brand agent's response to session initiation
@@ -8076,10 +8115,7 @@ export interface A2UISurface {
8076
8115
  /**
8077
8116
  * Application data that components can bind to
8078
8117
  */
8079
- dataModel?: {
8080
- [k: string]: unknown | undefined;
8081
- };
8082
- [k: string]: unknown | undefined;
8118
+ dataModel?: {};
8083
8119
  }
8084
8120
  /**
8085
8121
  * A component in an A2UI surface
@@ -8102,7 +8138,6 @@ export interface A2UIComponent {
8102
8138
  */
8103
8139
  [k: string]: {} | undefined;
8104
8140
  };
8105
- [k: string]: unknown | undefined;
8106
8141
  }
8107
8142
  /**
8108
8143
  * Standard error structure for task-specific errors and warnings
@@ -8492,7 +8527,7 @@ export interface GetAdCPCapabilitiesResponse {
8492
8527
  };
8493
8528
  };
8494
8529
  /**
8495
- * 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.
8530
+ * Governance protocol capabilities. Only present if governance is in supported_protocols. Governance agents provide property and creative data like compliance scores, brand safety ratings, sustainability metrics, and creative quality assessments.
8496
8531
  */
8497
8532
  governance?: {
8498
8533
  /**
@@ -8533,6 +8568,44 @@ export interface GetAdCPCapabilitiesResponse {
8533
8568
  */
8534
8569
  methodology_url?: string;
8535
8570
  }[];
8571
+ /**
8572
+ * Creative features this governance agent can evaluate. Each feature describes a score, rating, or assessment the agent can provide for creatives (e.g., security scanning, creative quality, content categorization).
8573
+ */
8574
+ creative_features?: {
8575
+ /**
8576
+ * Unique identifier for this feature (e.g., 'auto_redirect', 'brand_consistency', 'iab_casinos_gambling')
8577
+ */
8578
+ feature_id: string;
8579
+ /**
8580
+ * Data type: 'binary' for yes/no, 'quantitative' for numeric scores, 'categorical' for enum values
8581
+ */
8582
+ type: 'binary' | 'quantitative' | 'categorical';
8583
+ /**
8584
+ * For quantitative features, the valid range
8585
+ */
8586
+ range?: {
8587
+ /**
8588
+ * Minimum value
8589
+ */
8590
+ min: number;
8591
+ /**
8592
+ * Maximum value
8593
+ */
8594
+ max: number;
8595
+ };
8596
+ /**
8597
+ * For categorical features, the valid values
8598
+ */
8599
+ categories?: string[];
8600
+ /**
8601
+ * Human-readable description of what this feature measures
8602
+ */
8603
+ description?: string;
8604
+ /**
8605
+ * URL to documentation explaining how this feature is calculated or measured.
8606
+ */
8607
+ methodology_url?: string;
8608
+ }[];
8536
8609
  };
8537
8610
  /**
8538
8611
  * Sponsored Intelligence protocol capabilities. Only present if sponsored_intelligence is in supported_protocols. SI agents handle conversational brand experiences.