@adcp/client 3.21.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.
@@ -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
- buyer_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.
@@ -829,7 +794,6 @@ export interface CPMPricingOption {
829
794
  * Minimum spend requirement per package using this pricing option, in the specified currency
830
795
  */
831
796
  min_spend_per_package?: number;
832
- [k: string]: unknown | undefined;
833
797
  }
834
798
  /**
835
799
  * Optional pricing guidance for auction-based bidding
@@ -851,7 +815,6 @@ export interface PriceGuidance {
851
815
  * 90th percentile of recent winning bids
852
816
  */
853
817
  p90?: number;
854
- [k: string]: unknown | undefined;
855
818
  }
856
819
  /**
857
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.
@@ -886,7 +849,6 @@ export interface VCPMPricingOption {
886
849
  * Minimum spend requirement per package using this pricing option, in the specified currency
887
850
  */
888
851
  min_spend_per_package?: number;
889
- [k: string]: unknown | undefined;
890
852
  }
891
853
  /**
892
854
  * Optional pricing guidance for auction-based bidding
@@ -921,7 +883,6 @@ export interface CPCPricingOption {
921
883
  * Minimum spend requirement per package using this pricing option, in the specified currency
922
884
  */
923
885
  min_spend_per_package?: number;
924
- [k: string]: unknown | undefined;
925
886
  }
926
887
  /**
927
888
  * Optional pricing guidance for auction-based bidding
@@ -956,7 +917,6 @@ export interface CPCVPricingOption {
956
917
  * Minimum spend requirement per package using this pricing option, in the specified currency
957
918
  */
958
919
  min_spend_per_package?: number;
959
- [k: string]: unknown | undefined;
960
920
  }
961
921
  /**
962
922
  * Optional pricing guidance for auction-based bidding
@@ -996,15 +956,12 @@ export interface CPVPricingOption {
996
956
  * Seconds of viewing required
997
957
  */
998
958
  duration_seconds: number;
999
- [k: string]: unknown | undefined;
1000
959
  };
1001
- [k: string]: unknown | undefined;
1002
960
  };
1003
961
  /**
1004
962
  * Minimum spend requirement per package using this pricing option, in the specified currency
1005
963
  */
1006
964
  min_spend_per_package?: number;
1007
- [k: string]: unknown | undefined;
1008
965
  }
1009
966
  /**
1010
967
  * Optional pricing guidance for auction-based bidding
@@ -1044,13 +1001,11 @@ export interface CPPPricingOption {
1044
1001
  * Minimum GRPs/TRPs required
1045
1002
  */
1046
1003
  min_points?: number;
1047
- [k: string]: unknown | undefined;
1048
1004
  };
1049
1005
  /**
1050
1006
  * Minimum spend requirement per package using this pricing option, in the specified currency
1051
1007
  */
1052
1008
  min_spend_per_package?: number;
1053
- [k: string]: unknown | undefined;
1054
1009
  }
1055
1010
  /**
1056
1011
  * Optional pricing guidance for auction-based bidding
@@ -1088,7 +1043,6 @@ export interface CPAPricingOption {
1088
1043
  * Minimum spend requirement per package using this pricing option, in the specified currency
1089
1044
  */
1090
1045
  min_spend_per_package?: number;
1091
- [k: string]: unknown | undefined;
1092
1046
  }
1093
1047
  /**
1094
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.
@@ -1147,13 +1101,11 @@ export interface FlatRatePricingOption {
1147
1101
  * Specific daypart for time-based pricing
1148
1102
  */
1149
1103
  daypart?: string;
1150
- [k: string]: unknown | undefined;
1151
1104
  };
1152
1105
  /**
1153
1106
  * Minimum spend requirement per package using this pricing option, in the specified currency
1154
1107
  */
1155
1108
  min_spend_per_package?: number;
1156
- [k: string]: unknown | undefined;
1157
1109
  }
1158
1110
  /**
1159
1111
  * Optional pricing guidance for auction-based bidding
@@ -1196,13 +1148,11 @@ export interface TimeBasedPricingOption {
1196
1148
  * Maximum booking duration in time_units. Must be >= min_duration when both are present.
1197
1149
  */
1198
1150
  max_duration?: number;
1199
- [k: string]: unknown | undefined;
1200
1151
  };
1201
1152
  /**
1202
1153
  * Minimum spend requirement per package using this pricing option, in the specified currency
1203
1154
  */
1204
1155
  min_spend_per_package?: number;
1205
- [k: string]: unknown | undefined;
1206
1156
  }
1207
1157
  /**
1208
1158
  * Optional pricing guidance for auction-based bidding
@@ -1210,10 +1160,8 @@ export interface TimeBasedPricingOption {
1210
1160
  export interface DeliveryForecast {
1211
1161
  /**
1212
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.
1213
- *
1214
- * @minItems 1
1215
1163
  */
1216
- points: [ForecastPoint, ...ForecastPoint[]];
1164
+ points: ForecastPoint[];
1217
1165
  forecast_range_unit?: ForecastRangeUnit;
1218
1166
  method: ForecastMethod;
1219
1167
  /**
@@ -1235,7 +1183,6 @@ export interface DeliveryForecast {
1235
1183
  */
1236
1184
  valid_until?: string;
1237
1185
  ext?: ExtensionObject;
1238
- [k: string]: unknown | undefined;
1239
1186
  }
1240
1187
  /**
1241
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.
@@ -1251,7 +1198,6 @@ export interface ForecastPoint {
1251
1198
  metrics: {
1252
1199
  [k: string]: ForecastRange | undefined;
1253
1200
  };
1254
- [k: string]: unknown | undefined;
1255
1201
  }
1256
1202
  /**
1257
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.
@@ -1269,7 +1215,6 @@ export interface ForecastRange {
1269
1215
  * Optimistic (high-end) forecast value
1270
1216
  */
1271
1217
  high?: number;
1272
- [k: string]: unknown | undefined;
1273
1218
  }
1274
1219
  /**
1275
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.
@@ -1291,7 +1236,6 @@ export interface Measurement {
1291
1236
  * Reporting frequency and format
1292
1237
  */
1293
1238
  reporting: string;
1294
- [k: string]: unknown | undefined;
1295
1239
  }
1296
1240
  /**
1297
1241
  * Reporting capabilities available for a product
@@ -1299,10 +1243,8 @@ export interface Measurement {
1299
1243
  export interface ReportingCapabilities {
1300
1244
  /**
1301
1245
  * Supported reporting frequency options
1302
- *
1303
- * @minItems 1
1304
1246
  */
1305
- available_reporting_frequencies: [ReportingFrequency, ...ReportingFrequency[]];
1247
+ available_reporting_frequencies: ReportingFrequency[];
1306
1248
  /**
1307
1249
  * Expected delay in minutes before reporting data becomes available (e.g., 240 for 4-hour delay)
1308
1250
  */
@@ -1327,7 +1269,6 @@ export interface ReportingCapabilities {
1327
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.
1328
1270
  */
1329
1271
  date_range_support: 'date_range' | 'lifetime_only';
1330
- [k: string]: unknown | undefined;
1331
1272
  }
1332
1273
  /**
1333
1274
  * Creative requirements and restrictions for a product
@@ -1339,7 +1280,6 @@ export interface CreativePolicy {
1339
1280
  * Whether creative templates are provided
1340
1281
  */
1341
1282
  templates_available: boolean;
1342
- [k: string]: unknown | undefined;
1343
1283
  }
1344
1284
  /**
1345
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.
@@ -1359,10 +1299,8 @@ export interface Proposal {
1359
1299
  description?: string;
1360
1300
  /**
1361
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.
1362
- *
1363
- * @minItems 1
1364
1302
  */
1365
- allocations: [ProductAllocation, ...ProductAllocation[]];
1303
+ allocations: ProductAllocation[];
1366
1304
  /**
1367
1305
  * When this proposal expires and can no longer be executed. After expiration, referenced products or pricing may no longer be available.
1368
1306
  */
@@ -1387,7 +1325,6 @@ export interface Proposal {
1387
1325
  * ISO 4217 currency code
1388
1326
  */
1389
1327
  currency?: string;
1390
- [k: string]: unknown | undefined;
1391
1328
  };
1392
1329
  /**
1393
1330
  * Explanation of how this proposal aligns with the campaign brief
@@ -1395,7 +1332,6 @@ export interface Proposal {
1395
1332
  brief_alignment?: string;
1396
1333
  forecast?: DeliveryForecast;
1397
1334
  ext?: ExtensionObject;
1398
- [k: string]: unknown | undefined;
1399
1335
  }
1400
1336
  /**
1401
1337
  * A budget allocation for a specific product within a proposal. Percentages across all allocations in a proposal should sum to 100.
@@ -1427,13 +1363,10 @@ export interface ProductAllocation {
1427
1363
  tags?: string[];
1428
1364
  /**
1429
1365
  * Recommended time windows for this allocation in spot-plan proposals.
1430
- *
1431
- * @minItems 1
1432
1366
  */
1433
- daypart_targets?: [DaypartTarget, ...DaypartTarget[]];
1367
+ daypart_targets?: DaypartTarget[];
1434
1368
  forecast?: DeliveryForecast;
1435
1369
  ext?: ExtensionObject;
1436
- [k: string]: unknown | undefined;
1437
1370
  }
1438
1371
  /**
1439
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.
@@ -1441,10 +1374,8 @@ export interface ProductAllocation {
1441
1374
  export interface DaypartTarget {
1442
1375
  /**
1443
1376
  * Days of week this window applies to. Use multiple days for compact targeting (e.g., monday-friday in one object).
1444
- *
1445
- * @minItems 1
1446
1377
  */
1447
- days: [DayOfWeek, ...DayOfWeek[]];
1378
+ days: DayOfWeek[];
1448
1379
  /**
1449
1380
  * Start hour (inclusive), 0-23 in 24-hour format. 0 = midnight, 6 = 6:00am, 18 = 6:00pm.
1450
1381
  */
@@ -1485,10 +1416,7 @@ export interface Error {
1485
1416
  /**
1486
1417
  * Additional task-specific error details
1487
1418
  */
1488
- details?: {
1489
- [k: string]: unknown | undefined;
1490
- };
1491
- [k: string]: unknown | undefined;
1419
+ details?: {};
1492
1420
  }
1493
1421
  /**
1494
1422
  * Standard cursor-based pagination metadata for list responses
@@ -1583,6 +1511,25 @@ export type UniversalMacro = 'MEDIA_BUY_ID' | 'PACKAGE_ID' | 'CREATIVE_ID' | 'CA
1583
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.
1584
1512
  */
1585
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
+ };
1586
1533
  /**
1587
1534
  * Standard delivery and performance metrics available for reporting
1588
1535
  */
@@ -1648,21 +1595,12 @@ export interface Format {
1648
1595
  accepts_parameters?: FormatIDParameter[];
1649
1596
  /**
1650
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.
1651
- *
1652
- * @minItems 1
1653
- */
1654
- renders?: [
1655
- ({
1656
- [k: string]: unknown | undefined;
1657
- } | {
1658
- parameters_from_format_id: true;
1659
- }),
1660
- ...({
1661
- [k: string]: unknown | undefined;
1662
- } | {
1663
- parameters_from_format_id: true;
1664
- })[]
1665
- ];
1598
+ */
1599
+ renders?: ({
1600
+ [k: string]: unknown | undefined;
1601
+ } | {
1602
+ parameters_from_format_id: true;
1603
+ })[];
1666
1604
  /**
1667
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.
1668
1606
  */
@@ -1699,9 +1637,7 @@ export interface Format {
1699
1637
  /**
1700
1638
  * Delivery method specifications (e.g., hosted, VAST, third-party tags)
1701
1639
  */
1702
- delivery?: {
1703
- [k: string]: unknown | undefined;
1704
- };
1640
+ delivery?: {};
1705
1641
  /**
1706
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.
1707
1643
  */
@@ -1722,10 +1658,7 @@ export interface Format {
1722
1658
  /**
1723
1659
  * Asset manifest for rendering the card, structure defined by the format
1724
1660
  */
1725
- manifest: {
1726
- [k: string]: unknown | undefined;
1727
- };
1728
- [k: string]: unknown | undefined;
1661
+ manifest: {};
1729
1662
  };
1730
1663
  /**
1731
1664
  * Accessibility posture of this format. Declares the WCAG conformance level that creatives produced by this format will meet.
@@ -1745,24 +1678,16 @@ export interface Format {
1745
1678
  /**
1746
1679
  * Asset manifest for rendering the detailed card, structure defined by the format
1747
1680
  */
1748
- manifest: {
1749
- [k: string]: unknown | undefined;
1750
- };
1751
- [k: string]: unknown | undefined;
1681
+ manifest: {};
1752
1682
  };
1753
1683
  /**
1754
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.
1755
- *
1756
- * @minItems 1
1757
1685
  */
1758
- catalog_requirements?: [CatalogRequirements, ...CatalogRequirements[]];
1686
+ catalog_requirements?: CatalogRequirements[];
1759
1687
  /**
1760
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.
1761
- *
1762
- * @minItems 1
1763
1689
  */
1764
- reported_metrics?: [AvailableMetric, ...AvailableMetric[]];
1765
- [k: string]: unknown | undefined;
1690
+ reported_metrics?: AvailableMetric[];
1766
1691
  }
1767
1692
  /**
1768
1693
  * Structured format identifier with agent URL and format name
@@ -1784,6 +1709,65 @@ export interface BaseIndividualAsset {
1784
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.
1785
1710
  */
1786
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
+ };
1787
1771
  }
1788
1772
  export interface BaseGroupAsset {
1789
1773
  /**
@@ -1798,6 +1782,10 @@ export interface BaseGroupAsset {
1798
1782
  * Whether this asset is required within each repetition of the group
1799
1783
  */
1800
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[];
1801
1789
  }
1802
1790
  /**
1803
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.
@@ -1814,23 +1802,20 @@ export interface CatalogRequirements {
1814
1802
  min_items?: number;
1815
1803
  /**
1816
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).
1817
- *
1818
- * @minItems 1
1819
1805
  */
1820
- required_fields?: [string, ...string[]];
1806
+ required_fields?: string[];
1821
1807
  /**
1822
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.
1823
- *
1824
- * @minItems 1
1825
1809
  */
1826
- feed_formats?: [FeedFormat, ...FeedFormat[]];
1810
+ feed_formats?: FeedFormat[];
1827
1811
  /**
1828
- * 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.
1829
- *
1830
- * @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.
1831
1813
  */
1832
- offering_asset_constraints?: [OfferingAssetConstraint, ...OfferingAssetConstraint[]];
1833
- [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[];
1834
1819
  }
1835
1820
  /**
1836
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.
@@ -1855,7 +1840,6 @@ export interface OfferingAssetConstraint {
1855
1840
  max_count?: number;
1856
1841
  asset_requirements?: AssetRequirements;
1857
1842
  ext?: ExtensionObject;
1858
- [k: string]: unknown | undefined;
1859
1843
  }
1860
1844
  /**
1861
1845
  * Requirements for image creative assets. These define the technical constraints for image files.
@@ -1901,7 +1885,6 @@ export interface ImageAssetRequirements {
1901
1885
  * Maximum animation duration in milliseconds (if animation_allowed is true)
1902
1886
  */
1903
1887
  max_animation_duration_ms?: number;
1904
- [k: string]: unknown | undefined;
1905
1888
  }
1906
1889
  /**
1907
1890
  * Requirements for video creative assets. These define the technical constraints for video files.
@@ -1963,7 +1946,6 @@ export interface VideoAssetRequirements {
1963
1946
  * Whether the video must include an audio track
1964
1947
  */
1965
1948
  audio_required?: boolean;
1966
- [k: string]: unknown | undefined;
1967
1949
  }
1968
1950
  /**
1969
1951
  * Requirements for audio creative assets.
@@ -2001,7 +1983,6 @@ export interface AudioAssetRequirements {
2001
1983
  * Maximum audio bitrate in kilobits per second
2002
1984
  */
2003
1985
  max_bitrate_kbps?: number;
2004
- [k: string]: unknown | undefined;
2005
1986
  }
2006
1987
  /**
2007
1988
  * Requirements for text creative assets such as headlines, body copy, and CTAs.
@@ -2031,7 +2012,6 @@ export interface TextAssetRequirements {
2031
2012
  * List of prohibited words or phrases
2032
2013
  */
2033
2014
  prohibited_terms?: string[];
2034
- [k: string]: unknown | undefined;
2035
2015
  }
2036
2016
  /**
2037
2017
  * Requirements for markdown creative assets.
@@ -2041,7 +2021,6 @@ export interface MarkdownAssetRequirements {
2041
2021
  * Maximum character length
2042
2022
  */
2043
2023
  max_length?: number;
2044
- [k: string]: unknown | undefined;
2045
2024
  }
2046
2025
  /**
2047
2026
  * Requirements for HTML creative assets. These define the execution environment constraints that the HTML must be compatible with.
@@ -2063,7 +2042,6 @@ export interface HTMLAssetRequirements {
2063
2042
  * List of domains the HTML creative may reference for external resources. Only applicable when external_resources_allowed is true.
2064
2043
  */
2065
2044
  allowed_external_domains?: string[];
2066
- [k: string]: unknown | undefined;
2067
2045
  }
2068
2046
  /**
2069
2047
  * Requirements for CSS creative assets.
@@ -2073,7 +2051,6 @@ export interface CSSAssetRequirements {
2073
2051
  * Maximum file size in kilobytes
2074
2052
  */
2075
2053
  max_file_size_kb?: number;
2076
- [k: string]: unknown | undefined;
2077
2054
  }
2078
2055
  /**
2079
2056
  * Requirements for JavaScript creative assets. These define the execution environment constraints that the JavaScript must be compatible with.
@@ -2099,7 +2076,6 @@ export interface JavaScriptAssetRequirements {
2099
2076
  * List of domains the JavaScript may reference for external resources. Only applicable when external_resources_allowed is true.
2100
2077
  */
2101
2078
  allowed_external_domains?: string[];
2102
- [k: string]: unknown | undefined;
2103
2079
  }
2104
2080
  /**
2105
2081
  * Requirements for VAST (Video Ad Serving Template) creative assets.
@@ -2109,7 +2085,6 @@ export interface VASTAssetRequirements {
2109
2085
  * Required VAST version
2110
2086
  */
2111
2087
  vast_version?: '2.0' | '3.0' | '4.0' | '4.1' | '4.2';
2112
- [k: string]: unknown | undefined;
2113
2088
  }
2114
2089
  /**
2115
2090
  * Requirements for DAAST (Digital Audio Ad Serving Template) creative assets.
@@ -2119,7 +2094,6 @@ export interface DAASTAssetRequirements {
2119
2094
  * Required DAAST version. DAAST 1.0 is the current IAB standard.
2120
2095
  */
2121
2096
  daast_version?: '1.0';
2122
- [k: string]: unknown | undefined;
2123
2097
  }
2124
2098
  /**
2125
2099
  * Requirements for URL assets such as click-through URLs, tracking pixels, and landing pages.
@@ -2145,7 +2119,6 @@ export interface URLAssetRequirements {
2145
2119
  * Whether the URL supports macro substitution (e.g., ${CACHEBUSTER})
2146
2120
  */
2147
2121
  macro_support?: boolean;
2148
- [k: string]: unknown | undefined;
2149
2122
  }
2150
2123
  /**
2151
2124
  * Requirements for webhook creative assets.
@@ -2155,11 +2128,40 @@ export interface WebhookAssetRequirements {
2155
2128
  * Allowed HTTP methods
2156
2129
  */
2157
2130
  methods?: ('GET' | 'POST')[];
2158
- [k: string]: unknown | undefined;
2159
2131
  }
2160
2132
  /**
2161
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.
2162
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
+ */
2163
2165
  /**
2164
2166
  * Budget pacing strategy
2165
2167
  */
@@ -2213,7 +2215,6 @@ export type VASTAsset = {
2213
2215
  * URL to audio description track for visually impaired users
2214
2216
  */
2215
2217
  audio_description_url?: string;
2216
- [k: string]: unknown | undefined;
2217
2218
  } | {
2218
2219
  /**
2219
2220
  * Discriminator indicating VAST is delivered as inline XML content
@@ -2244,7 +2245,6 @@ export type VASTAsset = {
2244
2245
  * URL to audio description track for visually impaired users
2245
2246
  */
2246
2247
  audio_description_url?: string;
2247
- [k: string]: unknown | undefined;
2248
2248
  };
2249
2249
  /**
2250
2250
  * VAST specification version
@@ -2283,7 +2283,6 @@ export type DAASTAsset = {
2283
2283
  * URL to text transcript of the audio content
2284
2284
  */
2285
2285
  transcript_url?: string;
2286
- [k: string]: unknown | undefined;
2287
2286
  } | {
2288
2287
  /**
2289
2288
  * Discriminator indicating DAAST is delivered as inline XML content
@@ -2310,7 +2309,6 @@ export type DAASTAsset = {
2310
2309
  * URL to text transcript of the audio content
2311
2310
  */
2312
2311
  transcript_url?: string;
2313
- [k: string]: unknown | undefined;
2314
2312
  };
2315
2313
  /**
2316
2314
  * DAAST specification version
@@ -2441,10 +2439,8 @@ export interface PackageRequest {
2441
2439
  product_id: string;
2442
2440
  /**
2443
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.
2444
- *
2445
- * @minItems 1
2446
2442
  */
2447
- format_ids?: [FormatID, ...FormatID[]];
2443
+ format_ids?: FormatID[];
2448
2444
  /**
2449
2445
  * Budget allocation for this package in the media buy's currency
2450
2446
  */
@@ -2471,19 +2467,15 @@ export interface PackageRequest {
2471
2467
  targeting_overlay?: TargetingOverlay;
2472
2468
  /**
2473
2469
  * Assign existing library creatives to this package with optional weights and placement targeting
2474
- *
2475
- * @minItems 1
2476
2470
  */
2477
- creative_assignments?: [CreativeAssignment, ...CreativeAssignment[]];
2471
+ creative_assignments?: CreativeAssignment[];
2478
2472
  /**
2479
2473
  * Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.
2480
2474
  *
2481
- * @minItems 1
2482
2475
  * @maxItems 100
2483
2476
  */
2484
- creatives?: [CreativeAsset, ...CreativeAsset[]];
2477
+ creatives?: CreativeAsset[];
2485
2478
  ext?: ExtensionObject;
2486
- [k: string]: unknown | undefined;
2487
2479
  }
2488
2480
  /**
2489
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.
@@ -2514,9 +2506,7 @@ export interface OptimizationGoal {
2514
2506
  * View-through attribution window (e.g. '1d', '7d')
2515
2507
  */
2516
2508
  view_through?: string;
2517
- [k: string]: unknown | undefined;
2518
2509
  };
2519
- [k: string]: unknown | undefined;
2520
2510
  }
2521
2511
  /**
2522
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).
@@ -2524,134 +2514,64 @@ export interface OptimizationGoal {
2524
2514
  export interface TargetingOverlay {
2525
2515
  /**
2526
2516
  * Restrict delivery to specific countries. ISO 3166-1 alpha-2 codes (e.g., 'US', 'GB', 'DE').
2527
- *
2528
- * @minItems 1
2529
2517
  */
2530
- geo_countries?: [string, ...string[]];
2518
+ geo_countries?: string[];
2531
2519
  /**
2532
2520
  * Exclude specific countries from delivery. ISO 3166-1 alpha-2 codes (e.g., 'US', 'GB', 'DE').
2533
- *
2534
- * @minItems 1
2535
2521
  */
2536
- geo_countries_exclude?: [string, ...string[]];
2522
+ geo_countries_exclude?: string[];
2537
2523
  /**
2538
2524
  * Restrict delivery to specific regions/states. ISO 3166-2 subdivision codes (e.g., 'US-CA', 'GB-SCT').
2539
- *
2540
- * @minItems 1
2541
2525
  */
2542
- geo_regions?: [string, ...string[]];
2526
+ geo_regions?: string[];
2543
2527
  /**
2544
2528
  * Exclude specific regions/states from delivery. ISO 3166-2 subdivision codes (e.g., 'US-CA', 'GB-SCT').
2545
- *
2546
- * @minItems 1
2547
2529
  */
2548
- geo_regions_exclude?: [string, ...string[]];
2530
+ geo_regions_exclude?: string[];
2549
2531
  /**
2550
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.
2551
- *
2552
- * @minItems 1
2553
2533
  */
2554
- geo_metros?: [
2555
- {
2556
- system: MetroAreaSystem;
2557
- /**
2558
- * Metro codes within the system (e.g., ['501', '602'] for Nielsen DMAs)
2559
- *
2560
- * @minItems 1
2561
- */
2562
- values: [string, ...string[]];
2563
- },
2564
- ...{
2565
- system: MetroAreaSystem;
2566
- /**
2567
- * Metro codes within the system (e.g., ['501', '602'] for Nielsen DMAs)
2568
- *
2569
- * @minItems 1
2570
- */
2571
- values: [string, ...string[]];
2572
- }[]
2573
- ];
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
+ }[];
2574
2541
  /**
2575
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.
2576
- *
2577
- * @minItems 1
2578
2543
  */
2579
- geo_metros_exclude?: [
2580
- {
2581
- system: MetroAreaSystem;
2582
- /**
2583
- * Metro codes to exclude within the system (e.g., ['501', '602'] for Nielsen DMAs)
2584
- *
2585
- * @minItems 1
2586
- */
2587
- values: [string, ...string[]];
2588
- },
2589
- ...{
2590
- system: MetroAreaSystem;
2591
- /**
2592
- * Metro codes to exclude within the system (e.g., ['501', '602'] for Nielsen DMAs)
2593
- *
2594
- * @minItems 1
2595
- */
2596
- values: [string, ...string[]];
2597
- }[]
2598
- ];
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
+ }[];
2599
2551
  /**
2600
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.
2601
- *
2602
- * @minItems 1
2603
2553
  */
2604
- geo_postal_areas?: [
2605
- {
2606
- system: PostalCodeSystem;
2607
- /**
2608
- * Postal codes within the system (e.g., ['10001', '10002'] for us_zip)
2609
- *
2610
- * @minItems 1
2611
- */
2612
- values: [string, ...string[]];
2613
- },
2614
- ...{
2615
- system: PostalCodeSystem;
2616
- /**
2617
- * Postal codes within the system (e.g., ['10001', '10002'] for us_zip)
2618
- *
2619
- * @minItems 1
2620
- */
2621
- values: [string, ...string[]];
2622
- }[]
2623
- ];
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
+ }[];
2624
2561
  /**
2625
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.
2626
- *
2627
- * @minItems 1
2628
2563
  */
2629
- geo_postal_areas_exclude?: [
2630
- {
2631
- system: PostalCodeSystem;
2632
- /**
2633
- * Postal codes to exclude within the system (e.g., ['10001', '10002'] for us_zip)
2634
- *
2635
- * @minItems 1
2636
- */
2637
- values: [string, ...string[]];
2638
- },
2639
- ...{
2640
- system: PostalCodeSystem;
2641
- /**
2642
- * Postal codes to exclude within the system (e.g., ['10001', '10002'] for us_zip)
2643
- *
2644
- * @minItems 1
2645
- */
2646
- values: [string, ...string[]];
2647
- }[]
2648
- ];
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
+ }[];
2649
2571
  /**
2650
2572
  * Restrict delivery to specific time windows. Each entry specifies days of week and an hour range.
2651
- *
2652
- * @minItems 1
2653
2573
  */
2654
- daypart_targets?: [DaypartTarget, ...DaypartTarget[]];
2574
+ daypart_targets?: DaypartTarget[];
2655
2575
  /**
2656
2576
  * AXE segment ID to include for targeting
2657
2577
  */
@@ -2662,16 +2582,12 @@ export interface TargetingOverlay {
2662
2582
  axe_exclude_segment?: string;
2663
2583
  /**
2664
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.
2665
- *
2666
- * @minItems 1
2667
2585
  */
2668
- audience_include?: [string, ...string[]];
2586
+ audience_include?: string[];
2669
2587
  /**
2670
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.
2671
- *
2672
- * @minItems 1
2673
2589
  */
2674
- audience_exclude?: [string, ...string[]];
2590
+ audience_exclude?: string[];
2675
2591
  frequency_cap?: FrequencyCap;
2676
2592
  property_list?: PropertyListReference;
2677
2593
  /**
@@ -2688,69 +2604,34 @@ export interface TargetingOverlay {
2688
2604
  verification_required?: boolean;
2689
2605
  /**
2690
2606
  * Accepted verification methods. If omitted, any method the platform supports is acceptable.
2691
- *
2692
- * @minItems 1
2693
2607
  */
2694
- accepted_methods?: [AgeVerificationMethod, ...AgeVerificationMethod[]];
2608
+ accepted_methods?: AgeVerificationMethod[];
2695
2609
  };
2696
2610
  /**
2697
2611
  * Restrict to specific platforms. Use for technical compatibility (app only works on iOS). Values from Sec-CH-UA-Platform standard, extended for CTV.
2698
- *
2699
- * @minItems 1
2700
2612
  */
2701
- device_platform?: [DevicePlatform, ...DevicePlatform[]];
2613
+ device_platform?: DevicePlatform[];
2702
2614
  /**
2703
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.
2704
- *
2705
- * @minItems 1
2706
2616
  */
2707
- store_catchments?: [
2708
- {
2709
- /**
2710
- * Synced store-type catalog ID from sync_catalogs.
2711
- */
2712
- catalog_id: string;
2713
- /**
2714
- * Filter to specific stores within the catalog. Omit to target all stores.
2715
- *
2716
- * @minItems 1
2717
- */
2718
- store_ids?: [string, ...string[]];
2719
- /**
2720
- * Catchment zone IDs to target (e.g., 'walk', 'drive'). Omit to target all catchment zones.
2721
- *
2722
- * @minItems 1
2723
- */
2724
- catchment_ids?: [string, ...string[]];
2725
- [k: string]: unknown | undefined;
2726
- },
2727
- ...{
2728
- /**
2729
- * Synced store-type catalog ID from sync_catalogs.
2730
- */
2731
- catalog_id: string;
2732
- /**
2733
- * Filter to specific stores within the catalog. Omit to target all stores.
2734
- *
2735
- * @minItems 1
2736
- */
2737
- store_ids?: [string, ...string[]];
2738
- /**
2739
- * Catchment zone IDs to target (e.g., 'walk', 'drive'). Omit to target all catchment zones.
2740
- *
2741
- * @minItems 1
2742
- */
2743
- catchment_ids?: [string, ...string[]];
2744
- [k: string]: unknown | undefined;
2745
- }[]
2746
- ];
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
+ }[];
2747
2631
  /**
2748
2632
  * Restrict to users with specific language preferences. ISO 639-1 codes (e.g., 'en', 'es', 'fr').
2749
- *
2750
- * @minItems 1
2751
2633
  */
2752
- language?: [string, ...string[]];
2753
- [k: string]: unknown | undefined;
2634
+ language?: string[];
2754
2635
  }
2755
2636
  /**
2756
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.
@@ -2760,7 +2641,6 @@ export interface FrequencyCap {
2760
2641
  * Minutes to suppress after impression
2761
2642
  */
2762
2643
  suppress_minutes: number;
2763
- [k: string]: unknown | undefined;
2764
2644
  }
2765
2645
  /**
2766
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.
@@ -2776,11 +2656,8 @@ export interface CreativeAssignment {
2776
2656
  weight?: number;
2777
2657
  /**
2778
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.
2779
- *
2780
- * @minItems 1
2781
2659
  */
2782
- placement_ids?: [string, ...string[]];
2783
- [k: string]: unknown | undefined;
2660
+ placement_ids?: string[];
2784
2661
  }
2785
2662
  /**
2786
2663
  * Creative asset for upload to library - supports static assets, generative formats, and third-party snippets
@@ -2797,15 +2674,17 @@ export interface CreativeAsset {
2797
2674
  format_id: FormatID;
2798
2675
  /**
2799
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.
2800
- *
2801
- * @minItems 1
2802
2677
  */
2803
- catalogs?: [Catalog, ...Catalog[]];
2678
+ catalogs?: Catalog[];
2804
2679
  /**
2805
2680
  * Assets required by the format, keyed by asset_role
2806
2681
  */
2807
2682
  assets: {
2808
- [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;
2809
2688
  };
2810
2689
  /**
2811
2690
  * Preview contexts for generative formats - defines what scenarios to generate previews for
@@ -2825,7 +2704,6 @@ export interface CreativeAsset {
2825
2704
  * Natural language description of the context for AI-generated content
2826
2705
  */
2827
2706
  context_description?: string;
2828
- [k: string]: unknown | undefined;
2829
2707
  }[];
2830
2708
  /**
2831
2709
  * User-defined tags for organization and searchability
@@ -2838,11 +2716,8 @@ export interface CreativeAsset {
2838
2716
  weight?: number;
2839
2717
  /**
2840
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.
2841
- *
2842
- * @minItems 1
2843
2719
  */
2844
- placement_ids?: [string, ...string[]];
2845
- [k: string]: unknown | undefined;
2720
+ placement_ids?: string[];
2846
2721
  }
2847
2722
  /**
2848
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.
@@ -2868,7 +2743,6 @@ export interface ImageAsset {
2868
2743
  * Alternative text for accessibility
2869
2744
  */
2870
2745
  alt_text?: string;
2871
- [k: string]: unknown | undefined;
2872
2746
  }
2873
2747
  /**
2874
2748
  * Video asset with URL and technical specifications including audio track properties
@@ -2990,7 +2864,6 @@ export interface VideoAsset {
2990
2864
  * URL to audio description track for visually impaired users
2991
2865
  */
2992
2866
  audio_description_url?: string;
2993
- [k: string]: unknown | undefined;
2994
2867
  }
2995
2868
  /**
2996
2869
  * Audio asset with URL and technical specifications
@@ -3044,7 +2917,6 @@ export interface AudioAsset {
3044
2917
  * URL to text transcript of the audio content
3045
2918
  */
3046
2919
  transcript_url?: string;
3047
- [k: string]: unknown | undefined;
3048
2920
  }
3049
2921
  /**
3050
2922
  * Text content asset
@@ -3058,7 +2930,6 @@ export interface TextAsset {
3058
2930
  * Language code (e.g., 'en', 'es', 'fr')
3059
2931
  */
3060
2932
  language?: string;
3061
- [k: string]: unknown | undefined;
3062
2933
  }
3063
2934
  /**
3064
2935
  * HTML content asset
@@ -3093,7 +2964,6 @@ export interface HTMLAsset {
3093
2964
  */
3094
2965
  screen_reader_tested?: boolean;
3095
2966
  };
3096
- [k: string]: unknown | undefined;
3097
2967
  }
3098
2968
  /**
3099
2969
  * CSS stylesheet asset
@@ -3107,7 +2977,6 @@ export interface CSSAsset {
3107
2977
  * CSS media query context (e.g., 'screen', 'print')
3108
2978
  */
3109
2979
  media?: string;
3110
- [k: string]: unknown | undefined;
3111
2980
  }
3112
2981
  /**
3113
2982
  * JavaScript code asset
@@ -3139,7 +3008,6 @@ export interface JavaScriptAsset {
3139
3008
  */
3140
3009
  screen_reader_tested?: boolean;
3141
3010
  };
3142
- [k: string]: unknown | undefined;
3143
3011
  }
3144
3012
  /**
3145
3013
  * URL reference asset
@@ -3154,10 +3022,9 @@ export interface URLAsset {
3154
3022
  * Description of what this URL points to
3155
3023
  */
3156
3024
  description?: string;
3157
- [k: string]: unknown | undefined;
3158
3025
  }
3159
3026
  /**
3160
- * 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.
3161
3028
  */
3162
3029
  export interface ReportingWebhook {
3163
3030
  /**
@@ -3175,10 +3042,9 @@ export interface ReportingWebhook {
3175
3042
  /**
3176
3043
  * Array of authentication schemes. Supported: ['Bearer'] for simple token auth, ['HMAC-SHA256'] for signature verification (recommended for production)
3177
3044
  *
3178
- * @minItems 1
3179
3045
  * @maxItems 1
3180
3046
  */
3181
- schemes: [AuthenticationScheme];
3047
+ schemes: [] | [AuthenticationScheme];
3182
3048
  /**
3183
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.
3184
3050
  */
@@ -3192,7 +3058,6 @@ export interface ReportingWebhook {
3192
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.
3193
3059
  */
3194
3060
  requested_metrics?: AvailableMetric[];
3195
- [k: string]: unknown | undefined;
3196
3061
  }
3197
3062
  /**
3198
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.
@@ -3293,7 +3158,6 @@ export interface Account {
3293
3158
  */
3294
3159
  sandbox?: boolean;
3295
3160
  ext?: ExtensionObject;
3296
- [k: string]: unknown | undefined;
3297
3161
  }
3298
3162
  /**
3299
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.
@@ -3343,7 +3207,6 @@ export interface Package {
3343
3207
  */
3344
3208
  paused?: boolean;
3345
3209
  ext?: ExtensionObject;
3346
- [k: string]: unknown | undefined;
3347
3210
  }
3348
3211
  /**
3349
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).
@@ -3427,10 +3290,9 @@ export interface PushNotificationConfig {
3427
3290
  /**
3428
3291
  * Array of authentication schemes. Supported: ['Bearer'] for simple token auth, ['HMAC-SHA256'] for signature verification (recommended for production)
3429
3292
  *
3430
- * @minItems 1
3431
3293
  * @maxItems 1
3432
3294
  */
3433
- schemes: [AuthenticationScheme];
3295
+ schemes: [] | [AuthenticationScheme];
3434
3296
  /**
3435
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.
3436
3298
  */
@@ -3574,34 +3436,24 @@ export interface ListCreativesRequest {
3574
3436
  export interface CreativeFilters {
3575
3437
  /**
3576
3438
  * Filter creatives by owning accounts. Useful for agencies managing multiple client accounts.
3577
- *
3578
- * @minItems 1
3579
3439
  */
3580
- account_ids?: [string, ...string[]];
3440
+ account_ids?: string[];
3581
3441
  /**
3582
3442
  * Filter by creative format types (e.g., video, audio, display)
3583
- *
3584
- * @minItems 1
3585
3443
  */
3586
- formats?: [string, ...string[]];
3444
+ formats?: string[];
3587
3445
  /**
3588
3446
  * Filter by creative approval statuses
3589
- *
3590
- * @minItems 1
3591
3447
  */
3592
- statuses?: [CreativeStatus, ...CreativeStatus[]];
3448
+ statuses?: CreativeStatus[];
3593
3449
  /**
3594
3450
  * Filter by creative tags (all tags must match)
3595
- *
3596
- * @minItems 1
3597
3451
  */
3598
- tags?: [string, ...string[]];
3452
+ tags?: string[];
3599
3453
  /**
3600
3454
  * Filter by creative tags (any tag must match)
3601
- *
3602
- * @minItems 1
3603
3455
  */
3604
- tags_any?: [string, ...string[]];
3456
+ tags_any?: string[];
3605
3457
  /**
3606
3458
  * Filter by creative names containing this text (case-insensitive)
3607
3459
  */
@@ -3609,10 +3461,9 @@ export interface CreativeFilters {
3609
3461
  /**
3610
3462
  * Filter by specific creative IDs
3611
3463
  *
3612
- * @minItems 1
3613
3464
  * @maxItems 100
3614
3465
  */
3615
- creative_ids?: [string, ...string[]];
3466
+ creative_ids?: string[];
3616
3467
  /**
3617
3468
  * Filter creatives created after this date (ISO 8601)
3618
3469
  */
@@ -3631,22 +3482,16 @@ export interface CreativeFilters {
3631
3482
  updated_before?: string;
3632
3483
  /**
3633
3484
  * Filter creatives assigned to any of these packages
3634
- *
3635
- * @minItems 1
3636
3485
  */
3637
- assigned_to_packages?: [string, ...string[]];
3486
+ assigned_to_packages?: string[];
3638
3487
  /**
3639
3488
  * Filter creatives assigned to any of these media buys
3640
- *
3641
- * @minItems 1
3642
3489
  */
3643
- media_buy_ids?: [string, ...string[]];
3490
+ media_buy_ids?: string[];
3644
3491
  /**
3645
3492
  * Filter creatives assigned to media buys with any of these buyer references
3646
- *
3647
- * @minItems 1
3648
3493
  */
3649
- buyer_refs?: [string, ...string[]];
3494
+ buyer_refs?: string[];
3650
3495
  /**
3651
3496
  * Filter for unassigned creatives when true, assigned creatives when false
3652
3497
  */
@@ -3655,7 +3500,6 @@ export interface CreativeFilters {
3655
3500
  * Filter creatives that have performance data when true
3656
3501
  */
3657
3502
  has_performance_data?: boolean;
3658
- [k: string]: unknown | undefined;
3659
3503
  }
3660
3504
  /**
3661
3505
  * Standard cursor-based pagination parameters for list operations
@@ -3680,7 +3524,6 @@ export type SubAsset = {
3680
3524
  * URL for media assets (images, videos, etc.)
3681
3525
  */
3682
3526
  content_uri: string;
3683
- [k: string]: unknown | undefined;
3684
3527
  } | {
3685
3528
  /**
3686
3529
  * Discriminator indicating this is a text asset with content
@@ -3698,7 +3541,6 @@ export type SubAsset = {
3698
3541
  * Text content for text-based assets like headlines, body text, CTA text, etc.
3699
3542
  */
3700
3543
  content: string | string[];
3701
- [k: string]: unknown | undefined;
3702
3544
  };
3703
3545
  /**
3704
3546
  * Response from creative library query with filtered results, metadata, and optional enriched data
@@ -3948,12 +3790,10 @@ export type PackageUpdate = {
3948
3790
  /**
3949
3791
  * Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.
3950
3792
  *
3951
- * @minItems 1
3952
3793
  * @maxItems 100
3953
3794
  */
3954
- creatives?: [CreativeAsset, ...CreativeAsset[]];
3795
+ creatives?: CreativeAsset[];
3955
3796
  ext?: ExtensionObject;
3956
- [k: string]: unknown | undefined;
3957
3797
  } & {
3958
3798
  [k: string]: unknown | undefined;
3959
3799
  };
@@ -4485,7 +4325,6 @@ export interface AttributionWindow {
4485
4325
  */
4486
4326
  view_window_days?: number;
4487
4327
  model: AttributionModel;
4488
- [k: string]: unknown | undefined;
4489
4328
  }
4490
4329
  /**
4491
4330
  * Standard delivery metrics that can be reported at media buy, package, or creative level
@@ -4560,7 +4399,6 @@ export interface DeliveryMetrics {
4560
4399
  * Total monetary value of events of this type
4561
4400
  */
4562
4401
  value?: number;
4563
- [k: string]: unknown | undefined;
4564
4402
  }[];
4565
4403
  /**
4566
4404
  * Gross Rating Points delivered (for CPP)
@@ -4647,9 +4485,7 @@ export interface DeliveryMetrics {
4647
4485
  * Number of screens used at this venue
4648
4486
  */
4649
4487
  screens_used?: number;
4650
- [k: string]: unknown | undefined;
4651
4488
  }[];
4652
- [k: string]: unknown | undefined;
4653
4489
  };
4654
4490
  /**
4655
4491
  * Viewability metrics. Viewable rate should be calculated as viewable_impressions / measurable_impressions (not total impressions), since some environments cannot measure viewability.
@@ -4671,7 +4507,6 @@ export interface DeliveryMetrics {
4671
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.
4672
4508
  */
4673
4509
  standard?: 'mrc' | 'groupm';
4674
- [k: string]: unknown | undefined;
4675
4510
  };
4676
4511
  /**
4677
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).
@@ -4698,9 +4533,7 @@ export interface DeliveryMetrics {
4698
4533
  * Total monetary value of conversions from this action source
4699
4534
  */
4700
4535
  value?: number;
4701
- [k: string]: unknown | undefined;
4702
4536
  }[];
4703
- [k: string]: unknown | undefined;
4704
4537
  }
4705
4538
  /**
4706
4539
  * Standard error structure for task-specific errors and warnings
@@ -4920,27 +4753,14 @@ export type UserMatch = {
4920
4753
  } & {
4921
4754
  /**
4922
4755
  * Universal ID values for user matching
4923
- *
4924
- * @minItems 1
4925
4756
  */
4926
- uids?: [
4927
- {
4928
- type: UIDType;
4929
- /**
4930
- * Universal ID value
4931
- */
4932
- value: string;
4933
- [k: string]: unknown | undefined;
4934
- },
4935
- ...{
4936
- type: UIDType;
4937
- /**
4938
- * Universal ID value
4939
- */
4940
- value: string;
4941
- [k: string]: unknown | undefined;
4942
- }[]
4943
- ];
4757
+ uids?: {
4758
+ type: UIDType;
4759
+ /**
4760
+ * Universal ID value
4761
+ */
4762
+ value: string;
4763
+ }[];
4944
4764
  /**
4945
4765
  * SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.
4946
4766
  */
@@ -4966,7 +4786,6 @@ export type UserMatch = {
4966
4786
  */
4967
4787
  client_user_agent?: string;
4968
4788
  ext?: ExtensionObject;
4969
- [k: string]: unknown | undefined;
4970
4789
  };
4971
4790
  /**
4972
4791
  * Universal ID type
@@ -5018,7 +4837,6 @@ export interface Event {
5018
4837
  */
5019
4838
  custom_event_name?: string;
5020
4839
  ext?: ExtensionObject;
5021
- [k: string]: unknown | undefined;
5022
4840
  }
5023
4841
  /**
5024
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.
@@ -5080,10 +4898,8 @@ export interface EventCustomData {
5080
4898
  * Brand name of this item
5081
4899
  */
5082
4900
  brand?: string;
5083
- [k: string]: unknown | undefined;
5084
4901
  }[];
5085
4902
  ext?: ExtensionObject;
5086
- [k: string]: unknown | undefined;
5087
4903
  }
5088
4904
  /**
5089
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.
@@ -5166,29 +4982,15 @@ export type AudienceMember = {
5166
4982
  hashed_phone?: string;
5167
4983
  /**
5168
4984
  * Universal ID values (MAIDs, RampID, UID2, etc.) for user matching.
5169
- *
5170
- * @minItems 1
5171
4985
  */
5172
- uids?: [
5173
- {
5174
- type: UIDType;
5175
- /**
5176
- * Universal ID value
5177
- */
5178
- value: string;
5179
- [k: string]: unknown | undefined;
5180
- },
5181
- ...{
5182
- type: UIDType;
5183
- /**
5184
- * Universal ID value
5185
- */
5186
- value: string;
5187
- [k: string]: unknown | undefined;
5188
- }[]
5189
- ];
4986
+ uids?: {
4987
+ type: UIDType;
4988
+ /**
4989
+ * Universal ID value
4990
+ */
4991
+ value: string;
4992
+ }[];
5190
4993
  ext?: ExtensionObject;
5191
- [k: string]: unknown | undefined;
5192
4994
  };
5193
4995
  /**
5194
4996
  * Universal ID type
@@ -5487,20 +5289,21 @@ export interface CreativeManifest {
5487
5289
  format_id: FormatID;
5488
5290
  /**
5489
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.
5490
- *
5491
- * @minItems 1
5492
5292
  */
5493
- catalogs?: [Catalog, ...Catalog[]];
5293
+ catalogs?: Catalog[];
5494
5294
  /**
5495
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.
5496
5296
  *
5497
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.
5498
5298
  */
5499
5299
  assets: {
5500
- [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;
5501
5305
  };
5502
5306
  ext?: ExtensionObject;
5503
- [k: string]: unknown | undefined;
5504
5307
  }
5505
5308
  /**
5506
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'}).
@@ -5538,7 +5341,6 @@ export interface WebhookAsset {
5538
5341
  */
5539
5342
  api_key_header?: string;
5540
5343
  };
5541
- [k: string]: unknown | undefined;
5542
5344
  }
5543
5345
  /**
5544
5346
  * CSS stylesheet asset
@@ -5584,13 +5386,11 @@ export interface CreativeBrief {
5584
5386
  * Key messages to communicate in priority order
5585
5387
  */
5586
5388
  key_messages?: string[];
5587
- [k: string]: unknown | undefined;
5588
5389
  };
5589
5390
  /**
5590
5391
  * Visual and strategic reference materials such as mood boards, product shots, example creatives, and strategy documents
5591
5392
  */
5592
5393
  reference_assets?: ReferenceAsset[];
5593
- [k: string]: unknown | undefined;
5594
5394
  }
5595
5395
  /**
5596
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.
@@ -5608,7 +5408,6 @@ export interface ReferenceAsset {
5608
5408
  * Human-readable description of the asset and how it should inform creative generation
5609
5409
  */
5610
5410
  description?: string;
5611
- [k: string]: unknown | undefined;
5612
5411
  }
5613
5412
  /**
5614
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.
@@ -5748,20 +5547,21 @@ export interface CreativeManifest1 {
5748
5547
  format_id: FormatID;
5749
5548
  /**
5750
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.
5751
- *
5752
- * @minItems 1
5753
5550
  */
5754
- catalogs?: [Catalog, ...Catalog[]];
5551
+ catalogs?: Catalog[];
5755
5552
  /**
5756
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.
5757
5554
  *
5758
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.
5759
5556
  */
5760
5557
  assets: {
5761
- [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;
5762
5563
  };
5763
5564
  ext?: ExtensionObject;
5764
- [k: string]: unknown | undefined;
5765
5565
  }
5766
5566
  /**
5767
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.
@@ -5815,7 +5615,6 @@ export type PreviewRender = {
5815
5615
  */
5816
5616
  csp_policy?: string;
5817
5617
  };
5818
- [k: string]: unknown | undefined;
5819
5618
  } | {
5820
5619
  /**
5821
5620
  * Unique identifier for this rendered piece within the variant
@@ -5861,7 +5660,6 @@ export type PreviewRender = {
5861
5660
  */
5862
5661
  csp_policy?: string;
5863
5662
  };
5864
- [k: string]: unknown | undefined;
5865
5663
  } | {
5866
5664
  /**
5867
5665
  * Unique identifier for this rendered piece within the variant
@@ -5911,7 +5709,6 @@ export type PreviewRender = {
5911
5709
  */
5912
5710
  csp_policy?: string;
5913
5711
  };
5914
- [k: string]: unknown | undefined;
5915
5712
  };
5916
5713
  /**
5917
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.
@@ -6106,7 +5903,6 @@ export type CreativeVariant = DeliveryMetrics & {
6106
5903
  artifact_id: string;
6107
5904
  };
6108
5905
  ext?: ExtensionObject;
6109
- [k: string]: unknown | undefined;
6110
5906
  };
6111
5907
  };
6112
5908
  /**
@@ -6266,7 +6062,6 @@ export type Destination = {
6266
6062
  * Optional account identifier on the platform
6267
6063
  */
6268
6064
  account?: string;
6269
- [k: string]: unknown | undefined;
6270
6065
  } | {
6271
6066
  /**
6272
6067
  * Discriminator indicating this is an agent URL-based deployment
@@ -6280,7 +6075,6 @@ export type Destination = {
6280
6075
  * Optional account identifier on the agent
6281
6076
  */
6282
6077
  account?: string;
6283
- [k: string]: unknown | undefined;
6284
6078
  };
6285
6079
  /**
6286
6080
  * Types of signal catalogs available for audience targeting
@@ -6292,16 +6086,12 @@ export type SignalCatalogType = 'marketplace' | 'custom' | 'owned';
6292
6086
  export interface SignalFilters {
6293
6087
  /**
6294
6088
  * Filter by catalog type
6295
- *
6296
- * @minItems 1
6297
6089
  */
6298
- catalog_types?: [SignalCatalogType, ...SignalCatalogType[]];
6090
+ catalog_types?: SignalCatalogType[];
6299
6091
  /**
6300
6092
  * Filter by specific data providers
6301
- *
6302
- * @minItems 1
6303
6093
  */
6304
- data_providers?: [string, ...string[]];
6094
+ data_providers?: string[];
6305
6095
  /**
6306
6096
  * Maximum CPM price filter
6307
6097
  */
@@ -6310,7 +6100,6 @@ export interface SignalFilters {
6310
6100
  * Minimum coverage requirement
6311
6101
  */
6312
6102
  min_coverage_percentage?: number;
6313
- [k: string]: unknown | undefined;
6314
6103
  }
6315
6104
  /**
6316
6105
  * Standard cursor-based pagination parameters for list operations
@@ -6348,7 +6137,6 @@ export type Deployment = {
6348
6137
  * Timestamp when activation completed (if is_live=true)
6349
6138
  */
6350
6139
  deployed_at?: string;
6351
- [k: string]: unknown | undefined;
6352
6140
  } | {
6353
6141
  /**
6354
6142
  * Discriminator indicating this is an agent URL-based deployment
@@ -6375,7 +6163,6 @@ export type Deployment = {
6375
6163
  * Timestamp when activation completed (if is_live=true)
6376
6164
  */
6377
6165
  deployed_at?: string;
6378
- [k: string]: unknown | undefined;
6379
6166
  };
6380
6167
  /**
6381
6168
  * The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.
@@ -6389,7 +6176,6 @@ export type ActivationKey = {
6389
6176
  * The platform-specific segment identifier to use in campaign targeting
6390
6177
  */
6391
6178
  segment_id: string;
6392
- [k: string]: unknown | undefined;
6393
6179
  } | {
6394
6180
  /**
6395
6181
  * Key-value pair based targeting
@@ -6403,7 +6189,6 @@ export type ActivationKey = {
6403
6189
  * The targeting parameter value
6404
6190
  */
6405
6191
  value: string;
6406
- [k: string]: unknown | undefined;
6407
6192
  };
6408
6193
  /**
6409
6194
  * The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.
@@ -6563,10 +6348,8 @@ export interface PublisherTagsSource {
6563
6348
  publisher_domain: string;
6564
6349
  /**
6565
6350
  * Property tags from the publisher's adagents.json. Selects all properties with these tags.
6566
- *
6567
- * @minItems 1
6568
6351
  */
6569
- tags: [PropertyTag, ...PropertyTag[]];
6352
+ tags: PropertyTag[];
6570
6353
  }
6571
6354
  /**
6572
6355
  * Select specific properties from a publisher by ID
@@ -6582,10 +6365,8 @@ export interface PublisherPropertyIDsSource {
6582
6365
  publisher_domain: string;
6583
6366
  /**
6584
6367
  * Specific property IDs from the publisher's adagents.json
6585
- *
6586
- * @minItems 1
6587
6368
  */
6588
- property_ids: [PropertyID, ...PropertyID[]];
6369
+ property_ids: PropertyID[];
6589
6370
  }
6590
6371
  /**
6591
6372
  * Select properties by direct identifiers (domains, app IDs, etc.) without publisher context
@@ -6597,10 +6378,8 @@ export interface DirectIdentifiersSource {
6597
6378
  selection_type: 'identifiers';
6598
6379
  /**
6599
6380
  * Direct property identifiers (domains, app IDs, etc.)
6600
- *
6601
- * @minItems 1
6602
6381
  */
6603
- identifiers: [Identifier, ...Identifier[]];
6382
+ identifiers: Identifier[];
6604
6383
  }
6605
6384
  /**
6606
6385
  * A property identifier with type and value. Used to identify properties across platforms (domains, app store IDs, etc.).
@@ -6608,34 +6387,24 @@ export interface DirectIdentifiersSource {
6608
6387
  export interface PropertyListFilters {
6609
6388
  /**
6610
6389
  * Property must have feature data for ALL listed countries (ISO codes). Required.
6611
- *
6612
- * @minItems 1
6613
6390
  */
6614
- countries_all: [string, ...string[]];
6391
+ countries_all: string[];
6615
6392
  /**
6616
6393
  * Property must support ANY of the listed channels. Required.
6617
- *
6618
- * @minItems 1
6619
6394
  */
6620
- channels_any: [MediaChannel, ...MediaChannel[]];
6395
+ channels_any: MediaChannel[];
6621
6396
  /**
6622
6397
  * Filter to these property types
6623
- *
6624
- * @minItems 1
6625
6398
  */
6626
- property_types?: [PropertyType, ...PropertyType[]];
6399
+ property_types?: PropertyType[];
6627
6400
  /**
6628
6401
  * Feature-based requirements. Property must pass ALL requirements (AND logic).
6629
- *
6630
- * @minItems 1
6631
6402
  */
6632
- feature_requirements?: [FeatureRequirement, ...FeatureRequirement[]];
6403
+ feature_requirements?: FeatureRequirement[];
6633
6404
  /**
6634
6405
  * Identifiers to always exclude from results
6635
- *
6636
- * @minItems 1
6637
6406
  */
6638
- exclude_identifiers?: [Identifier, ...Identifier[]];
6407
+ exclude_identifiers?: Identifier[];
6639
6408
  }
6640
6409
  /**
6641
6410
  * A feature-based requirement for property filtering. Use min_value/max_value for quantitative features, allowed_values for binary/categorical features.
@@ -6655,10 +6424,8 @@ export interface FeatureRequirement {
6655
6424
  max_value?: number;
6656
6425
  /**
6657
6426
  * Values that pass the requirement (for binary/categorical features)
6658
- *
6659
- * @minItems 1
6660
6427
  */
6661
- allowed_values?: [unknown, ...unknown[]];
6428
+ allowed_values?: unknown[];
6662
6429
  /**
6663
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).
6664
6431
  */
@@ -6963,9 +6730,7 @@ export type AssetAccess = {
6963
6730
  /**
6964
6731
  * Service account credentials
6965
6732
  */
6966
- credentials?: {
6967
- [k: string]: unknown | undefined;
6968
- };
6733
+ credentials?: {};
6969
6734
  } | {
6970
6735
  method: 'signed_url';
6971
6736
  };
@@ -6983,22 +6748,16 @@ export interface ContentStandards {
6983
6748
  name?: string;
6984
6749
  /**
6985
6750
  * ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).
6986
- *
6987
- * @minItems 1
6988
6751
  */
6989
- countries_all?: [string, ...string[]];
6752
+ countries_all?: string[];
6990
6753
  /**
6991
6754
  * Advertising channels. Standards apply to ANY of the listed channels (OR logic).
6992
- *
6993
- * @minItems 1
6994
6755
  */
6995
- channels_any?: [MediaChannel, ...MediaChannel[]];
6756
+ channels_any?: MediaChannel[];
6996
6757
  /**
6997
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.
6998
- *
6999
- * @minItems 1
7000
6759
  */
7001
- languages_any?: [string, ...string[]];
6760
+ languages_any?: string[];
7002
6761
  /**
7003
6762
  * Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments.
7004
6763
  */
@@ -7150,20 +6909,15 @@ export interface Artifact {
7150
6909
  /**
7151
6910
  * Open Graph protocol metadata
7152
6911
  */
7153
- open_graph?: {
7154
- [k: string]: unknown | undefined;
7155
- };
6912
+ open_graph?: {};
7156
6913
  /**
7157
6914
  * Twitter Card metadata
7158
6915
  */
7159
- twitter_card?: {
7160
- [k: string]: unknown | undefined;
7161
- };
6916
+ twitter_card?: {};
7162
6917
  /**
7163
6918
  * JSON-LD structured data (schema.org)
7164
6919
  */
7165
6920
  json_ld?: {}[];
7166
- [k: string]: unknown | undefined;
7167
6921
  };
7168
6922
  /**
7169
6923
  * Platform-specific identifiers for this artifact
@@ -7189,9 +6943,7 @@ export interface Artifact {
7189
6943
  * RSS feed URL
7190
6944
  */
7191
6945
  rss_url?: string;
7192
- [k: string]: unknown | undefined;
7193
6946
  };
7194
- [k: string]: unknown | undefined;
7195
6947
  }
7196
6948
  /**
7197
6949
  * Identifier for the property where this artifact appears
@@ -7856,9 +7608,7 @@ export interface CreativeFeatureResult {
7856
7608
  /**
7857
7609
  * Additional vendor-specific details about this evaluation
7858
7610
  */
7859
- details?: {
7860
- [k: string]: unknown | undefined;
7861
- };
7611
+ details?: {};
7862
7612
  ext?: ExtensionObject;
7863
7613
  }
7864
7614
  /**
@@ -8056,7 +7806,6 @@ export interface SIIdentity {
8056
7806
  * Version of policy acknowledged
8057
7807
  */
8058
7808
  brand_policy_version?: string;
8059
- [k: string]: unknown | undefined;
8060
7809
  };
8061
7810
  /**
8062
7811
  * User data (only present if consent_granted is true)
@@ -8087,15 +7836,12 @@ export interface SIIdentity {
8087
7836
  state?: string;
8088
7837
  postal_code?: string;
8089
7838
  country?: string;
8090
- [k: string]: unknown | undefined;
8091
7839
  };
8092
- [k: string]: unknown | undefined;
8093
7840
  };
8094
7841
  /**
8095
7842
  * Session ID for anonymous users (when consent_granted is false)
8096
7843
  */
8097
7844
  anonymous_session_id?: string;
8098
- [k: string]: unknown | undefined;
8099
7845
  }
8100
7846
  /**
8101
7847
  * What capabilities the host supports
@@ -8121,7 +7867,6 @@ export interface SICapabilities {
8121
7867
  * Brand voice identifier
8122
7868
  */
8123
7869
  voice_id?: string;
8124
- [k: string]: unknown | undefined;
8125
7870
  };
8126
7871
  /**
8127
7872
  * Brand video content playback
@@ -8135,7 +7880,6 @@ export interface SICapabilities {
8135
7880
  * Maximum video duration
8136
7881
  */
8137
7882
  max_duration_seconds?: number;
8138
- [k: string]: unknown | undefined;
8139
7883
  };
8140
7884
  /**
8141
7885
  * Animated video presence with brand avatar
@@ -8149,9 +7893,7 @@ export interface SICapabilities {
8149
7893
  * Brand avatar identifier
8150
7894
  */
8151
7895
  avatar_id?: string;
8152
- [k: string]: unknown | undefined;
8153
7896
  };
8154
- [k: string]: unknown | undefined;
8155
7897
  };
8156
7898
  /**
8157
7899
  * Visual components supported
@@ -8164,10 +7906,7 @@ export interface SICapabilities {
8164
7906
  /**
8165
7907
  * Platform-specific extensions (chatgpt_apps_sdk, maps, forms, etc.)
8166
7908
  */
8167
- extensions?: {
8168
- [k: string]: unknown | undefined;
8169
- };
8170
- [k: string]: unknown | undefined;
7909
+ extensions?: {};
8171
7910
  };
8172
7911
  /**
8173
7912
  * Commerce capabilities
@@ -8177,7 +7916,6 @@ export interface SICapabilities {
8177
7916
  * Supports ACP (Agentic Commerce Protocol) checkout handoff
8178
7917
  */
8179
7918
  acp_checkout?: boolean;
8180
- [k: string]: unknown | undefined;
8181
7919
  };
8182
7920
  /**
8183
7921
  * A2UI (Agent-to-UI) capabilities
@@ -8191,13 +7929,11 @@ export interface SICapabilities {
8191
7929
  * Supported A2UI component catalogs (e.g., 'si-standard', 'standard')
8192
7930
  */
8193
7931
  catalogs?: string[];
8194
- [k: string]: unknown | undefined;
8195
7932
  };
8196
7933
  /**
8197
7934
  * Supports MCP Apps for rendering A2UI surfaces in iframes
8198
7935
  */
8199
7936
  mcp_apps?: boolean;
8200
- [k: string]: unknown | undefined;
8201
7937
  }
8202
7938
  /**
8203
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.
@@ -8215,10 +7951,7 @@ export type SIUIElement = {
8215
7951
  /**
8216
7952
  * Component-specific data
8217
7953
  */
8218
- data?: {
8219
- [k: string]: unknown | undefined;
8220
- };
8221
- [k: string]: unknown | undefined;
7954
+ data?: {};
8222
7955
  };
8223
7956
  /**
8224
7957
  * Brand agent's response to session initiation
@@ -8382,10 +8115,7 @@ export interface A2UISurface {
8382
8115
  /**
8383
8116
  * Application data that components can bind to
8384
8117
  */
8385
- dataModel?: {
8386
- [k: string]: unknown | undefined;
8387
- };
8388
- [k: string]: unknown | undefined;
8118
+ dataModel?: {};
8389
8119
  }
8390
8120
  /**
8391
8121
  * A component in an A2UI surface
@@ -8408,7 +8138,6 @@ export interface A2UIComponent {
8408
8138
  */
8409
8139
  [k: string]: {} | undefined;
8410
8140
  };
8411
- [k: string]: unknown | undefined;
8412
8141
  }
8413
8142
  /**
8414
8143
  * Standard error structure for task-specific errors and warnings