@adcp/client 3.21.0 → 3.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/lib/agents/index.generated.d.ts +9 -1
  2. package/dist/lib/agents/index.generated.d.ts.map +1 -1
  3. package/dist/lib/agents/index.generated.js +12 -0
  4. package/dist/lib/agents/index.generated.js.map +1 -1
  5. package/dist/lib/index.d.ts +1 -1
  6. package/dist/lib/index.d.ts.map +1 -1
  7. package/dist/lib/index.js.map +1 -1
  8. package/dist/lib/protocols/a2a.d.ts +1 -1
  9. package/dist/lib/protocols/a2a.d.ts.map +1 -1
  10. package/dist/lib/protocols/a2a.js +3 -2
  11. package/dist/lib/protocols/a2a.js.map +1 -1
  12. package/dist/lib/protocols/index.d.ts +2 -2
  13. package/dist/lib/protocols/index.d.ts.map +1 -1
  14. package/dist/lib/protocols/index.js +6 -6
  15. package/dist/lib/protocols/index.js.map +1 -1
  16. package/dist/lib/protocols/mcp.d.ts +4 -1
  17. package/dist/lib/protocols/mcp.d.ts.map +1 -1
  18. package/dist/lib/protocols/mcp.js +24 -25
  19. package/dist/lib/protocols/mcp.js.map +1 -1
  20. package/dist/lib/registry/index.d.ts +57 -0
  21. package/dist/lib/registry/index.d.ts.map +1 -1
  22. package/dist/lib/registry/index.js +34 -0
  23. package/dist/lib/registry/index.js.map +1 -1
  24. package/dist/lib/registry/types.generated.d.ts +159 -0
  25. package/dist/lib/registry/types.generated.d.ts.map +1 -1
  26. package/dist/lib/registry/types.generated.js +1 -1
  27. package/dist/lib/types/adcp.d.ts +14 -0
  28. package/dist/lib/types/adcp.d.ts.map +1 -1
  29. package/dist/lib/types/core.generated.d.ts +153 -308
  30. package/dist/lib/types/core.generated.d.ts.map +1 -1
  31. package/dist/lib/types/core.generated.js +1 -1
  32. package/dist/lib/types/schemas.generated.d.ts +6326 -3761
  33. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  34. package/dist/lib/types/schemas.generated.js +473 -410
  35. package/dist/lib/types/schemas.generated.js.map +1 -1
  36. package/dist/lib/types/tools.generated.d.ts +531 -690
  37. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  38. package/dist/lib/types/tools.generated.js +3 -0
  39. package/dist/lib/types/tools.generated.js.map +1 -1
  40. package/package.json +2 -2
@@ -1,3 +1,36 @@
1
+ /**
2
+ * Request parameters for discovering available advertising products
3
+ */
4
+ export type GetProductsRequest = {
5
+ /**
6
+ * Declares buyer intent for this request. 'brief': publisher curates product recommendations from the provided brief. 'wholesale': buyer requests raw inventory to apply their own audiences — brief must not be provided. When buying_mode is 'wholesale', publishers return only products that support buyer-directed targeting and omit proposals.
7
+ */
8
+ buying_mode: 'brief' | 'wholesale';
9
+ /**
10
+ * Natural language description of campaign requirements. Required when buying_mode is 'brief'. Must not be provided when buying_mode is 'wholesale'.
11
+ */
12
+ brief?: string;
13
+ brand?: BrandReference;
14
+ catalog?: Catalog;
15
+ /**
16
+ * Account ID for product lookup. Required when the seller declares account.required_for_products = true in capabilities. Returns products with pricing specific to this account's rate card.
17
+ */
18
+ account_id?: string;
19
+ /**
20
+ * Buyer's campaign reference label. Groups related discovery and buy operations under a single campaign for CRM and ad server correlation (e.g., 'NovaDrink_Meals_Q2').
21
+ */
22
+ buyer_campaign_ref?: string;
23
+ filters?: ProductFilters;
24
+ property_list?: PropertyListReference;
25
+ pagination?: PaginationRequest;
26
+ context?: ContextObject;
27
+ ext?: ExtensionObject;
28
+ } & ({
29
+ buying_mode: 'brief';
30
+ } | {
31
+ buying_mode: 'wholesale';
32
+ brief?: never;
33
+ });
1
34
  /**
2
35
  * Brand identifier within the house portfolio. Optional for single-brand domains.
3
36
  */
@@ -55,7 +88,6 @@ export type SignalTargeting = {
55
88
  * Whether to include (true) or exclude (false) users matching this signal
56
89
  */
57
90
  value: boolean;
58
- [k: string]: unknown | undefined;
59
91
  } | {
60
92
  signal_id: SignalID;
61
93
  /**
@@ -64,11 +96,8 @@ export type SignalTargeting = {
64
96
  value_type: 'categorical';
65
97
  /**
66
98
  * Values to target. Users with any of these values will be included.
67
- *
68
- * @minItems 1
69
99
  */
70
- values: [string, ...string[]];
71
- [k: string]: unknown | undefined;
100
+ values: string[];
72
101
  } | {
73
102
  signal_id: SignalID;
74
103
  /**
@@ -83,7 +112,6 @@ export type SignalTargeting = {
83
112
  * Maximum value (inclusive). Omit for no maximum. Must be >= min_value when both are provided. Should be <= signal's range.max if defined.
84
113
  */
85
114
  max_value?: number;
86
- [k: string]: unknown | undefined;
87
115
  };
88
116
  /**
89
117
  * The signal to target
@@ -101,7 +129,6 @@ export type SignalID = {
101
129
  * Signal identifier within the data provider's catalog (e.g., 'likely_tesla_buyers', 'income_100k_plus')
102
130
  */
103
131
  id: string;
104
- [k: string]: unknown | undefined;
105
132
  } | {
106
133
  /**
107
134
  * Discriminator indicating this signal is native to the agent (not from a data provider catalog)
@@ -115,35 +142,10 @@ export type SignalID = {
115
142
  * Signal identifier within the agent's signal set (e.g., 'custom_auto_intenders')
116
143
  */
117
144
  id: string;
118
- [k: string]: unknown | undefined;
119
145
  };
120
146
  /**
121
147
  * The signal to target
122
148
  */
123
- export interface GetProductsRequest {
124
- /**
125
- * Natural language description of campaign requirements.
126
- */
127
- brief?: string;
128
- brand?: BrandReference;
129
- catalog?: Catalog;
130
- /**
131
- * Account ID for product lookup. Required when the seller declares account.required_for_products = true in capabilities. Returns products with pricing specific to this account's rate card.
132
- */
133
- account_id?: string;
134
- /**
135
- * Buyer's campaign reference label. Groups related discovery and buy operations under a single campaign for CRM and ad server correlation (e.g., 'NovaDrink_Meals_Q2').
136
- */
137
- 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
@@ -2383,6 +2381,7 @@ export interface CreateMediaBuyRequest {
2383
2381
  * Campaign end date/time in ISO 8601 format
2384
2382
  */
2385
2383
  end_time: string;
2384
+ push_notification_config?: PushNotificationConfig;
2386
2385
  reporting_webhook?: ReportingWebhook;
2387
2386
  /**
2388
2387
  * Optional webhook configuration for content artifact delivery. Used by governance agents to validate content adjacency. Seller pushes artifacts to this endpoint; orchestrator forwards to governance agent for validation.
@@ -2441,10 +2440,8 @@ export interface PackageRequest {
2441
2440
  product_id: string;
2442
2441
  /**
2443
2442
  * 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
2443
  */
2447
- format_ids?: [FormatID, ...FormatID[]];
2444
+ format_ids?: FormatID[];
2448
2445
  /**
2449
2446
  * Budget allocation for this package in the media buy's currency
2450
2447
  */
@@ -2471,19 +2468,15 @@ export interface PackageRequest {
2471
2468
  targeting_overlay?: TargetingOverlay;
2472
2469
  /**
2473
2470
  * Assign existing library creatives to this package with optional weights and placement targeting
2474
- *
2475
- * @minItems 1
2476
2471
  */
2477
- creative_assignments?: [CreativeAssignment, ...CreativeAssignment[]];
2472
+ creative_assignments?: CreativeAssignment[];
2478
2473
  /**
2479
2474
  * Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.
2480
2475
  *
2481
- * @minItems 1
2482
2476
  * @maxItems 100
2483
2477
  */
2484
- creatives?: [CreativeAsset, ...CreativeAsset[]];
2478
+ creatives?: CreativeAsset[];
2485
2479
  ext?: ExtensionObject;
2486
- [k: string]: unknown | undefined;
2487
2480
  }
2488
2481
  /**
2489
2482
  * 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 +2507,7 @@ export interface OptimizationGoal {
2514
2507
  * View-through attribution window (e.g. '1d', '7d')
2515
2508
  */
2516
2509
  view_through?: string;
2517
- [k: string]: unknown | undefined;
2518
2510
  };
2519
- [k: string]: unknown | undefined;
2520
2511
  }
2521
2512
  /**
2522
2513
  * 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 +2515,64 @@ export interface OptimizationGoal {
2524
2515
  export interface TargetingOverlay {
2525
2516
  /**
2526
2517
  * Restrict delivery to specific countries. ISO 3166-1 alpha-2 codes (e.g., 'US', 'GB', 'DE').
2527
- *
2528
- * @minItems 1
2529
2518
  */
2530
- geo_countries?: [string, ...string[]];
2519
+ geo_countries?: string[];
2531
2520
  /**
2532
2521
  * Exclude specific countries from delivery. ISO 3166-1 alpha-2 codes (e.g., 'US', 'GB', 'DE').
2533
- *
2534
- * @minItems 1
2535
2522
  */
2536
- geo_countries_exclude?: [string, ...string[]];
2523
+ geo_countries_exclude?: string[];
2537
2524
  /**
2538
2525
  * Restrict delivery to specific regions/states. ISO 3166-2 subdivision codes (e.g., 'US-CA', 'GB-SCT').
2539
- *
2540
- * @minItems 1
2541
2526
  */
2542
- geo_regions?: [string, ...string[]];
2527
+ geo_regions?: string[];
2543
2528
  /**
2544
2529
  * Exclude specific regions/states from delivery. ISO 3166-2 subdivision codes (e.g., 'US-CA', 'GB-SCT').
2545
- *
2546
- * @minItems 1
2547
2530
  */
2548
- geo_regions_exclude?: [string, ...string[]];
2531
+ geo_regions_exclude?: string[];
2549
2532
  /**
2550
2533
  * 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
2534
  */
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
- ];
2535
+ geo_metros?: {
2536
+ system: MetroAreaSystem;
2537
+ /**
2538
+ * Metro codes within the system (e.g., ['501', '602'] for Nielsen DMAs)
2539
+ */
2540
+ values: string[];
2541
+ }[];
2574
2542
  /**
2575
2543
  * 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
2544
  */
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
- ];
2545
+ geo_metros_exclude?: {
2546
+ system: MetroAreaSystem;
2547
+ /**
2548
+ * Metro codes to exclude within the system (e.g., ['501', '602'] for Nielsen DMAs)
2549
+ */
2550
+ values: string[];
2551
+ }[];
2599
2552
  /**
2600
2553
  * 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
2554
  */
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
- ];
2555
+ geo_postal_areas?: {
2556
+ system: PostalCodeSystem;
2557
+ /**
2558
+ * Postal codes within the system (e.g., ['10001', '10002'] for us_zip)
2559
+ */
2560
+ values: string[];
2561
+ }[];
2624
2562
  /**
2625
2563
  * 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
2564
  */
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
- ];
2565
+ geo_postal_areas_exclude?: {
2566
+ system: PostalCodeSystem;
2567
+ /**
2568
+ * Postal codes to exclude within the system (e.g., ['10001', '10002'] for us_zip)
2569
+ */
2570
+ values: string[];
2571
+ }[];
2649
2572
  /**
2650
2573
  * Restrict delivery to specific time windows. Each entry specifies days of week and an hour range.
2651
- *
2652
- * @minItems 1
2653
2574
  */
2654
- daypart_targets?: [DaypartTarget, ...DaypartTarget[]];
2575
+ daypart_targets?: DaypartTarget[];
2655
2576
  /**
2656
2577
  * AXE segment ID to include for targeting
2657
2578
  */
@@ -2662,16 +2583,12 @@ export interface TargetingOverlay {
2662
2583
  axe_exclude_segment?: string;
2663
2584
  /**
2664
2585
  * 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
2586
  */
2668
- audience_include?: [string, ...string[]];
2587
+ audience_include?: string[];
2669
2588
  /**
2670
2589
  * 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
2590
  */
2674
- audience_exclude?: [string, ...string[]];
2591
+ audience_exclude?: string[];
2675
2592
  frequency_cap?: FrequencyCap;
2676
2593
  property_list?: PropertyListReference;
2677
2594
  /**
@@ -2688,69 +2605,34 @@ export interface TargetingOverlay {
2688
2605
  verification_required?: boolean;
2689
2606
  /**
2690
2607
  * Accepted verification methods. If omitted, any method the platform supports is acceptable.
2691
- *
2692
- * @minItems 1
2693
2608
  */
2694
- accepted_methods?: [AgeVerificationMethod, ...AgeVerificationMethod[]];
2609
+ accepted_methods?: AgeVerificationMethod[];
2695
2610
  };
2696
2611
  /**
2697
2612
  * 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
2613
  */
2701
- device_platform?: [DevicePlatform, ...DevicePlatform[]];
2614
+ device_platform?: DevicePlatform[];
2702
2615
  /**
2703
2616
  * 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
2617
  */
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
- ];
2618
+ store_catchments?: {
2619
+ /**
2620
+ * Synced store-type catalog ID from sync_catalogs.
2621
+ */
2622
+ catalog_id: string;
2623
+ /**
2624
+ * Filter to specific stores within the catalog. Omit to target all stores.
2625
+ */
2626
+ store_ids?: string[];
2627
+ /**
2628
+ * Catchment zone IDs to target (e.g., 'walk', 'drive'). Omit to target all catchment zones.
2629
+ */
2630
+ catchment_ids?: string[];
2631
+ }[];
2747
2632
  /**
2748
2633
  * Restrict to users with specific language preferences. ISO 639-1 codes (e.g., 'en', 'es', 'fr').
2749
- *
2750
- * @minItems 1
2751
2634
  */
2752
- language?: [string, ...string[]];
2753
- [k: string]: unknown | undefined;
2635
+ language?: string[];
2754
2636
  }
2755
2637
  /**
2756
2638
  * 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 +2642,6 @@ export interface FrequencyCap {
2760
2642
  * Minutes to suppress after impression
2761
2643
  */
2762
2644
  suppress_minutes: number;
2763
- [k: string]: unknown | undefined;
2764
2645
  }
2765
2646
  /**
2766
2647
  * 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 +2657,8 @@ export interface CreativeAssignment {
2776
2657
  weight?: number;
2777
2658
  /**
2778
2659
  * 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
2660
  */
2782
- placement_ids?: [string, ...string[]];
2783
- [k: string]: unknown | undefined;
2661
+ placement_ids?: string[];
2784
2662
  }
2785
2663
  /**
2786
2664
  * Creative asset for upload to library - supports static assets, generative formats, and third-party snippets
@@ -2797,15 +2675,17 @@ export interface CreativeAsset {
2797
2675
  format_id: FormatID;
2798
2676
  /**
2799
2677
  * 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
2678
  */
2803
- catalogs?: [Catalog, ...Catalog[]];
2679
+ catalogs?: Catalog[];
2804
2680
  /**
2805
2681
  * Assets required by the format, keyed by asset_role
2806
2682
  */
2807
2683
  assets: {
2808
- [k: string]: unknown | undefined;
2684
+ /**
2685
+ * This interface was referenced by `undefined`'s JSON-Schema definition
2686
+ * via the `patternProperty` "^[a-zA-Z0-9_-]+$".
2687
+ */
2688
+ [k: string]: ImageAsset | VideoAsset | AudioAsset | TextAsset | HTMLAsset | CSSAsset | JavaScriptAsset | VASTAsset | DAASTAsset | URLAsset;
2809
2689
  };
2810
2690
  /**
2811
2691
  * Preview contexts for generative formats - defines what scenarios to generate previews for
@@ -2825,7 +2705,6 @@ export interface CreativeAsset {
2825
2705
  * Natural language description of the context for AI-generated content
2826
2706
  */
2827
2707
  context_description?: string;
2828
- [k: string]: unknown | undefined;
2829
2708
  }[];
2830
2709
  /**
2831
2710
  * User-defined tags for organization and searchability
@@ -2838,11 +2717,8 @@ export interface CreativeAsset {
2838
2717
  weight?: number;
2839
2718
  /**
2840
2719
  * 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
2720
  */
2844
- placement_ids?: [string, ...string[]];
2845
- [k: string]: unknown | undefined;
2721
+ placement_ids?: string[];
2846
2722
  }
2847
2723
  /**
2848
2724
  * 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 +2744,6 @@ export interface ImageAsset {
2868
2744
  * Alternative text for accessibility
2869
2745
  */
2870
2746
  alt_text?: string;
2871
- [k: string]: unknown | undefined;
2872
2747
  }
2873
2748
  /**
2874
2749
  * Video asset with URL and technical specifications including audio track properties
@@ -2990,7 +2865,6 @@ export interface VideoAsset {
2990
2865
  * URL to audio description track for visually impaired users
2991
2866
  */
2992
2867
  audio_description_url?: string;
2993
- [k: string]: unknown | undefined;
2994
2868
  }
2995
2869
  /**
2996
2870
  * Audio asset with URL and technical specifications
@@ -3044,7 +2918,6 @@ export interface AudioAsset {
3044
2918
  * URL to text transcript of the audio content
3045
2919
  */
3046
2920
  transcript_url?: string;
3047
- [k: string]: unknown | undefined;
3048
2921
  }
3049
2922
  /**
3050
2923
  * Text content asset
@@ -3058,7 +2931,6 @@ export interface TextAsset {
3058
2931
  * Language code (e.g., 'en', 'es', 'fr')
3059
2932
  */
3060
2933
  language?: string;
3061
- [k: string]: unknown | undefined;
3062
2934
  }
3063
2935
  /**
3064
2936
  * HTML content asset
@@ -3093,7 +2965,6 @@ export interface HTMLAsset {
3093
2965
  */
3094
2966
  screen_reader_tested?: boolean;
3095
2967
  };
3096
- [k: string]: unknown | undefined;
3097
2968
  }
3098
2969
  /**
3099
2970
  * CSS stylesheet asset
@@ -3107,7 +2978,6 @@ export interface CSSAsset {
3107
2978
  * CSS media query context (e.g., 'screen', 'print')
3108
2979
  */
3109
2980
  media?: string;
3110
- [k: string]: unknown | undefined;
3111
2981
  }
3112
2982
  /**
3113
2983
  * JavaScript code asset
@@ -3139,7 +3009,6 @@ export interface JavaScriptAsset {
3139
3009
  */
3140
3010
  screen_reader_tested?: boolean;
3141
3011
  };
3142
- [k: string]: unknown | undefined;
3143
3012
  }
3144
3013
  /**
3145
3014
  * URL reference asset
@@ -3154,10 +3023,37 @@ export interface URLAsset {
3154
3023
  * Description of what this URL points to
3155
3024
  */
3156
3025
  description?: string;
3157
- [k: string]: unknown | undefined;
3158
3026
  }
3159
3027
  /**
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.
3028
+ * Brand reference for this media buy. Resolved to full brand identity at execution time from brand.json or the registry.
3029
+ */
3030
+ export interface PushNotificationConfig {
3031
+ /**
3032
+ * Webhook endpoint URL for task status notifications
3033
+ */
3034
+ url: string;
3035
+ /**
3036
+ * Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.
3037
+ */
3038
+ token?: string;
3039
+ /**
3040
+ * Authentication configuration for webhook delivery (A2A-compatible)
3041
+ */
3042
+ authentication: {
3043
+ /**
3044
+ * Array of authentication schemes. Supported: ['Bearer'] for simple token auth, ['HMAC-SHA256'] for signature verification (recommended for production)
3045
+ *
3046
+ * @maxItems 1
3047
+ */
3048
+ schemes: [] | [AuthenticationScheme];
3049
+ /**
3050
+ * 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.
3051
+ */
3052
+ credentials: string;
3053
+ };
3054
+ }
3055
+ /**
3056
+ * Optional webhook configuration for automated reporting delivery
3161
3057
  */
3162
3058
  export interface ReportingWebhook {
3163
3059
  /**
@@ -3175,10 +3071,9 @@ export interface ReportingWebhook {
3175
3071
  /**
3176
3072
  * Array of authentication schemes. Supported: ['Bearer'] for simple token auth, ['HMAC-SHA256'] for signature verification (recommended for production)
3177
3073
  *
3178
- * @minItems 1
3179
3074
  * @maxItems 1
3180
3075
  */
3181
- schemes: [AuthenticationScheme];
3076
+ schemes: [] | [AuthenticationScheme];
3182
3077
  /**
3183
3078
  * 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
3079
  */
@@ -3192,7 +3087,6 @@ export interface ReportingWebhook {
3192
3087
  * 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
3088
  */
3194
3089
  requested_metrics?: AvailableMetric[];
3195
- [k: string]: unknown | undefined;
3196
3090
  }
3197
3091
  /**
3198
3092
  * 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.
@@ -3288,12 +3182,28 @@ export interface Account {
3288
3182
  amount: number;
3289
3183
  currency: string;
3290
3184
  };
3185
+ /**
3186
+ * Present when status is 'pending_approval'. Contains next steps for completing account activation.
3187
+ */
3188
+ setup?: {
3189
+ /**
3190
+ * URL where the human can complete the required action (credit application, legal agreement, add funds).
3191
+ */
3192
+ url?: string;
3193
+ /**
3194
+ * Human-readable description of what's needed.
3195
+ */
3196
+ message: string;
3197
+ /**
3198
+ * When this setup link expires.
3199
+ */
3200
+ expires_at?: string;
3201
+ };
3291
3202
  /**
3292
3203
  * When true, this is a sandbox account. All requests using this account_id are treated as sandbox — no real platform calls, no real spend.
3293
3204
  */
3294
3205
  sandbox?: boolean;
3295
3206
  ext?: ExtensionObject;
3296
- [k: string]: unknown | undefined;
3297
3207
  }
3298
3208
  /**
3299
3209
  * 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 +3253,6 @@ export interface Package {
3343
3253
  */
3344
3254
  paused?: boolean;
3345
3255
  ext?: ExtensionObject;
3346
- [k: string]: unknown | undefined;
3347
3256
  }
3348
3257
  /**
3349
3258
  * 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).
@@ -3411,35 +3320,6 @@ export interface SyncCreativesRequest {
3411
3320
  /**
3412
3321
  * Creative asset for upload to library - supports static assets, generative formats, and third-party snippets
3413
3322
  */
3414
- export interface PushNotificationConfig {
3415
- /**
3416
- * Webhook endpoint URL for task status notifications
3417
- */
3418
- url: string;
3419
- /**
3420
- * Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.
3421
- */
3422
- token?: string;
3423
- /**
3424
- * Authentication configuration for webhook delivery (A2A-compatible)
3425
- */
3426
- authentication: {
3427
- /**
3428
- * Array of authentication schemes. Supported: ['Bearer'] for simple token auth, ['HMAC-SHA256'] for signature verification (recommended for production)
3429
- *
3430
- * @minItems 1
3431
- * @maxItems 1
3432
- */
3433
- schemes: [AuthenticationScheme];
3434
- /**
3435
- * 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
- */
3437
- credentials: string;
3438
- };
3439
- }
3440
- /**
3441
- * 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.
3442
- */
3443
3323
  /**
3444
3324
  * Response from creative sync operation. Returns either per-creative results (best-effort processing) OR operation-level errors (complete failure). This enforces atomic semantics at the operation level while allowing per-item failures within successful operations.
3445
3325
  */
@@ -3574,34 +3454,24 @@ export interface ListCreativesRequest {
3574
3454
  export interface CreativeFilters {
3575
3455
  /**
3576
3456
  * Filter creatives by owning accounts. Useful for agencies managing multiple client accounts.
3577
- *
3578
- * @minItems 1
3579
3457
  */
3580
- account_ids?: [string, ...string[]];
3458
+ account_ids?: string[];
3581
3459
  /**
3582
3460
  * Filter by creative format types (e.g., video, audio, display)
3583
- *
3584
- * @minItems 1
3585
3461
  */
3586
- formats?: [string, ...string[]];
3462
+ formats?: string[];
3587
3463
  /**
3588
3464
  * Filter by creative approval statuses
3589
- *
3590
- * @minItems 1
3591
3465
  */
3592
- statuses?: [CreativeStatus, ...CreativeStatus[]];
3466
+ statuses?: CreativeStatus[];
3593
3467
  /**
3594
3468
  * Filter by creative tags (all tags must match)
3595
- *
3596
- * @minItems 1
3597
3469
  */
3598
- tags?: [string, ...string[]];
3470
+ tags?: string[];
3599
3471
  /**
3600
3472
  * Filter by creative tags (any tag must match)
3601
- *
3602
- * @minItems 1
3603
3473
  */
3604
- tags_any?: [string, ...string[]];
3474
+ tags_any?: string[];
3605
3475
  /**
3606
3476
  * Filter by creative names containing this text (case-insensitive)
3607
3477
  */
@@ -3609,10 +3479,9 @@ export interface CreativeFilters {
3609
3479
  /**
3610
3480
  * Filter by specific creative IDs
3611
3481
  *
3612
- * @minItems 1
3613
3482
  * @maxItems 100
3614
3483
  */
3615
- creative_ids?: [string, ...string[]];
3484
+ creative_ids?: string[];
3616
3485
  /**
3617
3486
  * Filter creatives created after this date (ISO 8601)
3618
3487
  */
@@ -3631,22 +3500,16 @@ export interface CreativeFilters {
3631
3500
  updated_before?: string;
3632
3501
  /**
3633
3502
  * Filter creatives assigned to any of these packages
3634
- *
3635
- * @minItems 1
3636
3503
  */
3637
- assigned_to_packages?: [string, ...string[]];
3504
+ assigned_to_packages?: string[];
3638
3505
  /**
3639
3506
  * Filter creatives assigned to any of these media buys
3640
- *
3641
- * @minItems 1
3642
3507
  */
3643
- media_buy_ids?: [string, ...string[]];
3508
+ media_buy_ids?: string[];
3644
3509
  /**
3645
3510
  * Filter creatives assigned to media buys with any of these buyer references
3646
- *
3647
- * @minItems 1
3648
3511
  */
3649
- buyer_refs?: [string, ...string[]];
3512
+ buyer_refs?: string[];
3650
3513
  /**
3651
3514
  * Filter for unassigned creatives when true, assigned creatives when false
3652
3515
  */
@@ -3655,7 +3518,6 @@ export interface CreativeFilters {
3655
3518
  * Filter creatives that have performance data when true
3656
3519
  */
3657
3520
  has_performance_data?: boolean;
3658
- [k: string]: unknown | undefined;
3659
3521
  }
3660
3522
  /**
3661
3523
  * Standard cursor-based pagination parameters for list operations
@@ -3680,7 +3542,6 @@ export type SubAsset = {
3680
3542
  * URL for media assets (images, videos, etc.)
3681
3543
  */
3682
3544
  content_uri: string;
3683
- [k: string]: unknown | undefined;
3684
3545
  } | {
3685
3546
  /**
3686
3547
  * Discriminator indicating this is a text asset with content
@@ -3698,7 +3559,6 @@ export type SubAsset = {
3698
3559
  * Text content for text-based assets like headlines, body text, CTA text, etc.
3699
3560
  */
3700
3561
  content: string | string[];
3701
- [k: string]: unknown | undefined;
3702
3562
  };
3703
3563
  /**
3704
3564
  * Response from creative library query with filtered results, metadata, and optional enriched data
@@ -3948,12 +3808,10 @@ export type PackageUpdate = {
3948
3808
  /**
3949
3809
  * Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.
3950
3810
  *
3951
- * @minItems 1
3952
3811
  * @maxItems 100
3953
3812
  */
3954
- creatives?: [CreativeAsset, ...CreativeAsset[]];
3813
+ creatives?: CreativeAsset[];
3955
3814
  ext?: ExtensionObject;
3956
- [k: string]: unknown | undefined;
3957
3815
  } & {
3958
3816
  [k: string]: unknown | undefined;
3959
3817
  };
@@ -4485,7 +4343,6 @@ export interface AttributionWindow {
4485
4343
  */
4486
4344
  view_window_days?: number;
4487
4345
  model: AttributionModel;
4488
- [k: string]: unknown | undefined;
4489
4346
  }
4490
4347
  /**
4491
4348
  * Standard delivery metrics that can be reported at media buy, package, or creative level
@@ -4560,7 +4417,6 @@ export interface DeliveryMetrics {
4560
4417
  * Total monetary value of events of this type
4561
4418
  */
4562
4419
  value?: number;
4563
- [k: string]: unknown | undefined;
4564
4420
  }[];
4565
4421
  /**
4566
4422
  * Gross Rating Points delivered (for CPP)
@@ -4647,9 +4503,7 @@ export interface DeliveryMetrics {
4647
4503
  * Number of screens used at this venue
4648
4504
  */
4649
4505
  screens_used?: number;
4650
- [k: string]: unknown | undefined;
4651
4506
  }[];
4652
- [k: string]: unknown | undefined;
4653
4507
  };
4654
4508
  /**
4655
4509
  * Viewability metrics. Viewable rate should be calculated as viewable_impressions / measurable_impressions (not total impressions), since some environments cannot measure viewability.
@@ -4671,7 +4525,6 @@ export interface DeliveryMetrics {
4671
4525
  * 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
4526
  */
4673
4527
  standard?: 'mrc' | 'groupm';
4674
- [k: string]: unknown | undefined;
4675
4528
  };
4676
4529
  /**
4677
4530
  * 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 +4551,7 @@ export interface DeliveryMetrics {
4698
4551
  * Total monetary value of conversions from this action source
4699
4552
  */
4700
4553
  value?: number;
4701
- [k: string]: unknown | undefined;
4702
4554
  }[];
4703
- [k: string]: unknown | undefined;
4704
4555
  }
4705
4556
  /**
4706
4557
  * Standard error structure for task-specific errors and warnings
@@ -4920,27 +4771,14 @@ export type UserMatch = {
4920
4771
  } & {
4921
4772
  /**
4922
4773
  * Universal ID values for user matching
4923
- *
4924
- * @minItems 1
4925
4774
  */
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
- ];
4775
+ uids?: {
4776
+ type: UIDType;
4777
+ /**
4778
+ * Universal ID value
4779
+ */
4780
+ value: string;
4781
+ }[];
4944
4782
  /**
4945
4783
  * SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.
4946
4784
  */
@@ -4966,7 +4804,6 @@ export type UserMatch = {
4966
4804
  */
4967
4805
  client_user_agent?: string;
4968
4806
  ext?: ExtensionObject;
4969
- [k: string]: unknown | undefined;
4970
4807
  };
4971
4808
  /**
4972
4809
  * Universal ID type
@@ -5018,7 +4855,6 @@ export interface Event {
5018
4855
  */
5019
4856
  custom_event_name?: string;
5020
4857
  ext?: ExtensionObject;
5021
- [k: string]: unknown | undefined;
5022
4858
  }
5023
4859
  /**
5024
4860
  * 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 +4916,8 @@ export interface EventCustomData {
5080
4916
  * Brand name of this item
5081
4917
  */
5082
4918
  brand?: string;
5083
- [k: string]: unknown | undefined;
5084
4919
  }[];
5085
4920
  ext?: ExtensionObject;
5086
- [k: string]: unknown | undefined;
5087
4921
  }
5088
4922
  /**
5089
4923
  * 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 +5000,15 @@ export type AudienceMember = {
5166
5000
  hashed_phone?: string;
5167
5001
  /**
5168
5002
  * Universal ID values (MAIDs, RampID, UID2, etc.) for user matching.
5169
- *
5170
- * @minItems 1
5171
5003
  */
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
- ];
5004
+ uids?: {
5005
+ type: UIDType;
5006
+ /**
5007
+ * Universal ID value
5008
+ */
5009
+ value: string;
5010
+ }[];
5190
5011
  ext?: ExtensionObject;
5191
- [k: string]: unknown | undefined;
5192
5012
  };
5193
5013
  /**
5194
5014
  * Universal ID type
@@ -5487,20 +5307,21 @@ export interface CreativeManifest {
5487
5307
  format_id: FormatID;
5488
5308
  /**
5489
5309
  * 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
5310
  */
5493
- catalogs?: [Catalog, ...Catalog[]];
5311
+ catalogs?: Catalog[];
5494
5312
  /**
5495
5313
  * 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
5314
  *
5497
5315
  * 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
5316
  */
5499
5317
  assets: {
5500
- [k: string]: unknown | undefined;
5318
+ /**
5319
+ * This interface was referenced by `undefined`'s JSON-Schema definition
5320
+ * via the `patternProperty` "^[a-z0-9_]+$".
5321
+ */
5322
+ [k: string]: ImageAsset | VideoAsset | AudioAsset | VASTAsset | TextAsset | URLAsset | HTMLAsset | JavaScriptAsset | WebhookAsset | CSSAsset | DAASTAsset;
5501
5323
  };
5502
5324
  ext?: ExtensionObject;
5503
- [k: string]: unknown | undefined;
5504
5325
  }
5505
5326
  /**
5506
5327
  * 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 +5359,6 @@ export interface WebhookAsset {
5538
5359
  */
5539
5360
  api_key_header?: string;
5540
5361
  };
5541
- [k: string]: unknown | undefined;
5542
5362
  }
5543
5363
  /**
5544
5364
  * CSS stylesheet asset
@@ -5584,13 +5404,11 @@ export interface CreativeBrief {
5584
5404
  * Key messages to communicate in priority order
5585
5405
  */
5586
5406
  key_messages?: string[];
5587
- [k: string]: unknown | undefined;
5588
5407
  };
5589
5408
  /**
5590
5409
  * Visual and strategic reference materials such as mood boards, product shots, example creatives, and strategy documents
5591
5410
  */
5592
5411
  reference_assets?: ReferenceAsset[];
5593
- [k: string]: unknown | undefined;
5594
5412
  }
5595
5413
  /**
5596
5414
  * 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 +5426,6 @@ export interface ReferenceAsset {
5608
5426
  * Human-readable description of the asset and how it should inform creative generation
5609
5427
  */
5610
5428
  description?: string;
5611
- [k: string]: unknown | undefined;
5612
5429
  }
5613
5430
  /**
5614
5431
  * 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 +5565,21 @@ export interface CreativeManifest1 {
5748
5565
  format_id: FormatID;
5749
5566
  /**
5750
5567
  * 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
5568
  */
5754
- catalogs?: [Catalog, ...Catalog[]];
5569
+ catalogs?: Catalog[];
5755
5570
  /**
5756
5571
  * 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
5572
  *
5758
5573
  * 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
5574
  */
5760
5575
  assets: {
5761
- [k: string]: unknown | undefined;
5576
+ /**
5577
+ * This interface was referenced by `undefined`'s JSON-Schema definition
5578
+ * via the `patternProperty` "^[a-z0-9_]+$".
5579
+ */
5580
+ [k: string]: ImageAsset | VideoAsset | AudioAsset | VASTAsset | TextAsset | URLAsset | HTMLAsset | JavaScriptAsset | WebhookAsset | CSSAsset | DAASTAsset;
5762
5581
  };
5763
5582
  ext?: ExtensionObject;
5764
- [k: string]: unknown | undefined;
5765
5583
  }
5766
5584
  /**
5767
5585
  * 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 +5633,6 @@ export type PreviewRender = {
5815
5633
  */
5816
5634
  csp_policy?: string;
5817
5635
  };
5818
- [k: string]: unknown | undefined;
5819
5636
  } | {
5820
5637
  /**
5821
5638
  * Unique identifier for this rendered piece within the variant
@@ -5861,7 +5678,6 @@ export type PreviewRender = {
5861
5678
  */
5862
5679
  csp_policy?: string;
5863
5680
  };
5864
- [k: string]: unknown | undefined;
5865
5681
  } | {
5866
5682
  /**
5867
5683
  * Unique identifier for this rendered piece within the variant
@@ -5911,7 +5727,6 @@ export type PreviewRender = {
5911
5727
  */
5912
5728
  csp_policy?: string;
5913
5729
  };
5914
- [k: string]: unknown | undefined;
5915
5730
  };
5916
5731
  /**
5917
5732
  * 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 +5921,6 @@ export type CreativeVariant = DeliveryMetrics & {
6106
5921
  artifact_id: string;
6107
5922
  };
6108
5923
  ext?: ExtensionObject;
6109
- [k: string]: unknown | undefined;
6110
5924
  };
6111
5925
  };
6112
5926
  /**
@@ -6266,7 +6080,6 @@ export type Destination = {
6266
6080
  * Optional account identifier on the platform
6267
6081
  */
6268
6082
  account?: string;
6269
- [k: string]: unknown | undefined;
6270
6083
  } | {
6271
6084
  /**
6272
6085
  * Discriminator indicating this is an agent URL-based deployment
@@ -6280,7 +6093,6 @@ export type Destination = {
6280
6093
  * Optional account identifier on the agent
6281
6094
  */
6282
6095
  account?: string;
6283
- [k: string]: unknown | undefined;
6284
6096
  };
6285
6097
  /**
6286
6098
  * Types of signal catalogs available for audience targeting
@@ -6292,16 +6104,12 @@ export type SignalCatalogType = 'marketplace' | 'custom' | 'owned';
6292
6104
  export interface SignalFilters {
6293
6105
  /**
6294
6106
  * Filter by catalog type
6295
- *
6296
- * @minItems 1
6297
6107
  */
6298
- catalog_types?: [SignalCatalogType, ...SignalCatalogType[]];
6108
+ catalog_types?: SignalCatalogType[];
6299
6109
  /**
6300
6110
  * Filter by specific data providers
6301
- *
6302
- * @minItems 1
6303
6111
  */
6304
- data_providers?: [string, ...string[]];
6112
+ data_providers?: string[];
6305
6113
  /**
6306
6114
  * Maximum CPM price filter
6307
6115
  */
@@ -6310,7 +6118,6 @@ export interface SignalFilters {
6310
6118
  * Minimum coverage requirement
6311
6119
  */
6312
6120
  min_coverage_percentage?: number;
6313
- [k: string]: unknown | undefined;
6314
6121
  }
6315
6122
  /**
6316
6123
  * Standard cursor-based pagination parameters for list operations
@@ -6348,7 +6155,6 @@ export type Deployment = {
6348
6155
  * Timestamp when activation completed (if is_live=true)
6349
6156
  */
6350
6157
  deployed_at?: string;
6351
- [k: string]: unknown | undefined;
6352
6158
  } | {
6353
6159
  /**
6354
6160
  * Discriminator indicating this is an agent URL-based deployment
@@ -6375,7 +6181,6 @@ export type Deployment = {
6375
6181
  * Timestamp when activation completed (if is_live=true)
6376
6182
  */
6377
6183
  deployed_at?: string;
6378
- [k: string]: unknown | undefined;
6379
6184
  };
6380
6185
  /**
6381
6186
  * The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.
@@ -6389,7 +6194,6 @@ export type ActivationKey = {
6389
6194
  * The platform-specific segment identifier to use in campaign targeting
6390
6195
  */
6391
6196
  segment_id: string;
6392
- [k: string]: unknown | undefined;
6393
6197
  } | {
6394
6198
  /**
6395
6199
  * Key-value pair based targeting
@@ -6403,7 +6207,6 @@ export type ActivationKey = {
6403
6207
  * The targeting parameter value
6404
6208
  */
6405
6209
  value: string;
6406
- [k: string]: unknown | undefined;
6407
6210
  };
6408
6211
  /**
6409
6212
  * The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.
@@ -6563,10 +6366,8 @@ export interface PublisherTagsSource {
6563
6366
  publisher_domain: string;
6564
6367
  /**
6565
6368
  * Property tags from the publisher's adagents.json. Selects all properties with these tags.
6566
- *
6567
- * @minItems 1
6568
6369
  */
6569
- tags: [PropertyTag, ...PropertyTag[]];
6370
+ tags: PropertyTag[];
6570
6371
  }
6571
6372
  /**
6572
6373
  * Select specific properties from a publisher by ID
@@ -6582,10 +6383,8 @@ export interface PublisherPropertyIDsSource {
6582
6383
  publisher_domain: string;
6583
6384
  /**
6584
6385
  * Specific property IDs from the publisher's adagents.json
6585
- *
6586
- * @minItems 1
6587
6386
  */
6588
- property_ids: [PropertyID, ...PropertyID[]];
6387
+ property_ids: PropertyID[];
6589
6388
  }
6590
6389
  /**
6591
6390
  * Select properties by direct identifiers (domains, app IDs, etc.) without publisher context
@@ -6597,10 +6396,8 @@ export interface DirectIdentifiersSource {
6597
6396
  selection_type: 'identifiers';
6598
6397
  /**
6599
6398
  * Direct property identifiers (domains, app IDs, etc.)
6600
- *
6601
- * @minItems 1
6602
6399
  */
6603
- identifiers: [Identifier, ...Identifier[]];
6400
+ identifiers: Identifier[];
6604
6401
  }
6605
6402
  /**
6606
6403
  * A property identifier with type and value. Used to identify properties across platforms (domains, app store IDs, etc.).
@@ -6608,34 +6405,24 @@ export interface DirectIdentifiersSource {
6608
6405
  export interface PropertyListFilters {
6609
6406
  /**
6610
6407
  * Property must have feature data for ALL listed countries (ISO codes). Required.
6611
- *
6612
- * @minItems 1
6613
6408
  */
6614
- countries_all: [string, ...string[]];
6409
+ countries_all: string[];
6615
6410
  /**
6616
6411
  * Property must support ANY of the listed channels. Required.
6617
- *
6618
- * @minItems 1
6619
6412
  */
6620
- channels_any: [MediaChannel, ...MediaChannel[]];
6413
+ channels_any: MediaChannel[];
6621
6414
  /**
6622
6415
  * Filter to these property types
6623
- *
6624
- * @minItems 1
6625
6416
  */
6626
- property_types?: [PropertyType, ...PropertyType[]];
6417
+ property_types?: PropertyType[];
6627
6418
  /**
6628
6419
  * Feature-based requirements. Property must pass ALL requirements (AND logic).
6629
- *
6630
- * @minItems 1
6631
6420
  */
6632
- feature_requirements?: [FeatureRequirement, ...FeatureRequirement[]];
6421
+ feature_requirements?: FeatureRequirement[];
6633
6422
  /**
6634
6423
  * Identifiers to always exclude from results
6635
- *
6636
- * @minItems 1
6637
6424
  */
6638
- exclude_identifiers?: [Identifier, ...Identifier[]];
6425
+ exclude_identifiers?: Identifier[];
6639
6426
  }
6640
6427
  /**
6641
6428
  * A feature-based requirement for property filtering. Use min_value/max_value for quantitative features, allowed_values for binary/categorical features.
@@ -6655,10 +6442,8 @@ export interface FeatureRequirement {
6655
6442
  max_value?: number;
6656
6443
  /**
6657
6444
  * Values that pass the requirement (for binary/categorical features)
6658
- *
6659
- * @minItems 1
6660
6445
  */
6661
- allowed_values?: [unknown, ...unknown[]];
6446
+ allowed_values?: unknown[];
6662
6447
  /**
6663
6448
  * 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
6449
  */
@@ -6963,9 +6748,7 @@ export type AssetAccess = {
6963
6748
  /**
6964
6749
  * Service account credentials
6965
6750
  */
6966
- credentials?: {
6967
- [k: string]: unknown | undefined;
6968
- };
6751
+ credentials?: {};
6969
6752
  } | {
6970
6753
  method: 'signed_url';
6971
6754
  };
@@ -6983,22 +6766,16 @@ export interface ContentStandards {
6983
6766
  name?: string;
6984
6767
  /**
6985
6768
  * ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).
6986
- *
6987
- * @minItems 1
6988
6769
  */
6989
- countries_all?: [string, ...string[]];
6770
+ countries_all?: string[];
6990
6771
  /**
6991
6772
  * Advertising channels. Standards apply to ANY of the listed channels (OR logic).
6992
- *
6993
- * @minItems 1
6994
6773
  */
6995
- channels_any?: [MediaChannel, ...MediaChannel[]];
6774
+ channels_any?: MediaChannel[];
6996
6775
  /**
6997
6776
  * 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
6777
  */
7001
- languages_any?: [string, ...string[]];
6778
+ languages_any?: string[];
7002
6779
  /**
7003
6780
  * Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments.
7004
6781
  */
@@ -7150,20 +6927,15 @@ export interface Artifact {
7150
6927
  /**
7151
6928
  * Open Graph protocol metadata
7152
6929
  */
7153
- open_graph?: {
7154
- [k: string]: unknown | undefined;
7155
- };
6930
+ open_graph?: {};
7156
6931
  /**
7157
6932
  * Twitter Card metadata
7158
6933
  */
7159
- twitter_card?: {
7160
- [k: string]: unknown | undefined;
7161
- };
6934
+ twitter_card?: {};
7162
6935
  /**
7163
6936
  * JSON-LD structured data (schema.org)
7164
6937
  */
7165
6938
  json_ld?: {}[];
7166
- [k: string]: unknown | undefined;
7167
6939
  };
7168
6940
  /**
7169
6941
  * Platform-specific identifiers for this artifact
@@ -7189,9 +6961,7 @@ export interface Artifact {
7189
6961
  * RSS feed URL
7190
6962
  */
7191
6963
  rss_url?: string;
7192
- [k: string]: unknown | undefined;
7193
6964
  };
7194
- [k: string]: unknown | undefined;
7195
6965
  }
7196
6966
  /**
7197
6967
  * Identifier for the property where this artifact appears
@@ -7856,9 +7626,7 @@ export interface CreativeFeatureResult {
7856
7626
  /**
7857
7627
  * Additional vendor-specific details about this evaluation
7858
7628
  */
7859
- details?: {
7860
- [k: string]: unknown | undefined;
7861
- };
7629
+ details?: {};
7862
7630
  ext?: ExtensionObject;
7863
7631
  }
7864
7632
  /**
@@ -8056,7 +7824,6 @@ export interface SIIdentity {
8056
7824
  * Version of policy acknowledged
8057
7825
  */
8058
7826
  brand_policy_version?: string;
8059
- [k: string]: unknown | undefined;
8060
7827
  };
8061
7828
  /**
8062
7829
  * User data (only present if consent_granted is true)
@@ -8087,15 +7854,12 @@ export interface SIIdentity {
8087
7854
  state?: string;
8088
7855
  postal_code?: string;
8089
7856
  country?: string;
8090
- [k: string]: unknown | undefined;
8091
7857
  };
8092
- [k: string]: unknown | undefined;
8093
7858
  };
8094
7859
  /**
8095
7860
  * Session ID for anonymous users (when consent_granted is false)
8096
7861
  */
8097
7862
  anonymous_session_id?: string;
8098
- [k: string]: unknown | undefined;
8099
7863
  }
8100
7864
  /**
8101
7865
  * What capabilities the host supports
@@ -8121,7 +7885,6 @@ export interface SICapabilities {
8121
7885
  * Brand voice identifier
8122
7886
  */
8123
7887
  voice_id?: string;
8124
- [k: string]: unknown | undefined;
8125
7888
  };
8126
7889
  /**
8127
7890
  * Brand video content playback
@@ -8135,7 +7898,6 @@ export interface SICapabilities {
8135
7898
  * Maximum video duration
8136
7899
  */
8137
7900
  max_duration_seconds?: number;
8138
- [k: string]: unknown | undefined;
8139
7901
  };
8140
7902
  /**
8141
7903
  * Animated video presence with brand avatar
@@ -8149,9 +7911,7 @@ export interface SICapabilities {
8149
7911
  * Brand avatar identifier
8150
7912
  */
8151
7913
  avatar_id?: string;
8152
- [k: string]: unknown | undefined;
8153
7914
  };
8154
- [k: string]: unknown | undefined;
8155
7915
  };
8156
7916
  /**
8157
7917
  * Visual components supported
@@ -8164,10 +7924,7 @@ export interface SICapabilities {
8164
7924
  /**
8165
7925
  * Platform-specific extensions (chatgpt_apps_sdk, maps, forms, etc.)
8166
7926
  */
8167
- extensions?: {
8168
- [k: string]: unknown | undefined;
8169
- };
8170
- [k: string]: unknown | undefined;
7927
+ extensions?: {};
8171
7928
  };
8172
7929
  /**
8173
7930
  * Commerce capabilities
@@ -8177,7 +7934,6 @@ export interface SICapabilities {
8177
7934
  * Supports ACP (Agentic Commerce Protocol) checkout handoff
8178
7935
  */
8179
7936
  acp_checkout?: boolean;
8180
- [k: string]: unknown | undefined;
8181
7937
  };
8182
7938
  /**
8183
7939
  * A2UI (Agent-to-UI) capabilities
@@ -8191,13 +7947,11 @@ export interface SICapabilities {
8191
7947
  * Supported A2UI component catalogs (e.g., 'si-standard', 'standard')
8192
7948
  */
8193
7949
  catalogs?: string[];
8194
- [k: string]: unknown | undefined;
8195
7950
  };
8196
7951
  /**
8197
7952
  * Supports MCP Apps for rendering A2UI surfaces in iframes
8198
7953
  */
8199
7954
  mcp_apps?: boolean;
8200
- [k: string]: unknown | undefined;
8201
7955
  }
8202
7956
  /**
8203
7957
  * 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 +7969,7 @@ export type SIUIElement = {
8215
7969
  /**
8216
7970
  * Component-specific data
8217
7971
  */
8218
- data?: {
8219
- [k: string]: unknown | undefined;
8220
- };
8221
- [k: string]: unknown | undefined;
7972
+ data?: {};
8222
7973
  };
8223
7974
  /**
8224
7975
  * Brand agent's response to session initiation
@@ -8382,10 +8133,7 @@ export interface A2UISurface {
8382
8133
  /**
8383
8134
  * Application data that components can bind to
8384
8135
  */
8385
- dataModel?: {
8386
- [k: string]: unknown | undefined;
8387
- };
8388
- [k: string]: unknown | undefined;
8136
+ dataModel?: {};
8389
8137
  }
8390
8138
  /**
8391
8139
  * A component in an A2UI surface
@@ -8408,7 +8156,6 @@ export interface A2UIComponent {
8408
8156
  */
8409
8157
  [k: string]: {} | undefined;
8410
8158
  };
8411
- [k: string]: unknown | undefined;
8412
8159
  }
8413
8160
  /**
8414
8161
  * Standard error structure for task-specific errors and warnings
@@ -9129,4 +8876,98 @@ export interface SyncAccountsError {
9129
8876
  context?: ContextObject;
9130
8877
  ext?: ExtensionObject;
9131
8878
  }
8879
+ /**
8880
+ * Reports how a vendor's service was consumed after campaign delivery. Used by orchestrators (DSPs, storefronts) to inform vendor agents (signals, governance, creative) what was used so the vendor can track earned revenue and verify billing. Records can span multiple accounts, operators, and campaigns in a single request.
8881
+ */
8882
+ export interface ReportUsageRequest {
8883
+ /**
8884
+ * The time range covered by this usage report. Applies to all records in the request.
8885
+ */
8886
+ reporting_period: {
8887
+ /**
8888
+ * Start of the reporting period (inclusive), in UTC.
8889
+ */
8890
+ start: string;
8891
+ /**
8892
+ * End of the reporting period (inclusive), in UTC.
8893
+ */
8894
+ end: string;
8895
+ };
8896
+ /**
8897
+ * One or more usage records. Each record is self-contained: it carries its own account_id, operator_id, and buyer_campaign_ref, allowing a single request to span multiple accounts, operators, and campaigns.
8898
+ */
8899
+ usage: {
8900
+ /**
8901
+ * The account with this vendor agent for this record, obtained from sync_accounts.
8902
+ */
8903
+ account_id: string;
8904
+ /**
8905
+ * The operator on whose behalf this usage is reported. Identifies the billing party — the entity that owes the vendor for this consumption.
8906
+ */
8907
+ operator_id: string;
8908
+ /**
8909
+ * The buyer's campaign reference (e.g., a media_buy_id). Used to group records by campaign.
8910
+ */
8911
+ buyer_campaign_ref?: string;
8912
+ /**
8913
+ * The type of vendor service consumed.
8914
+ */
8915
+ kind: 'signal' | 'content_standards' | 'creative';
8916
+ /**
8917
+ * Amount owed to the vendor for this record, denominated in currency.
8918
+ */
8919
+ vendor_cost: number;
8920
+ /**
8921
+ * ISO 4217 currency code.
8922
+ */
8923
+ currency: string;
8924
+ /**
8925
+ * Impressions delivered using this vendor service. Required when kind is 'signal'.
8926
+ */
8927
+ impressions?: number;
8928
+ /**
8929
+ * Media spend in currency for the period. Required when a percent_of_media pricing model was used, so the vendor can verify the applied rate.
8930
+ */
8931
+ media_spend?: number;
8932
+ /**
8933
+ * Signal identifier from get_signals. Required when kind is 'signal'.
8934
+ */
8935
+ signal_agent_segment_id?: string;
8936
+ /**
8937
+ * Pricing option identifier from the original get_signals response. The vendor uses this to verify the correct rate was applied. Required when kind is 'signal'.
8938
+ */
8939
+ pricing_option_id?: string;
8940
+ /**
8941
+ * Content standards configuration identifier. Required when kind is 'content_standards'.
8942
+ */
8943
+ standards_id?: string;
8944
+ }[];
8945
+ context?: ContextObject;
8946
+ ext?: ExtensionObject;
8947
+ }
8948
+ /**
8949
+ * 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.
8950
+ */
8951
+ /**
8952
+ * Response from report_usage. Partial acceptance is valid — records that pass validation are stored even when others fail.
8953
+ */
8954
+ export interface ReportUsageResponse {
8955
+ /**
8956
+ * Number of usage records successfully stored.
8957
+ */
8958
+ accepted: number;
8959
+ /**
8960
+ * Validation errors for individual records. The field property identifies which record failed (e.g., 'usage[1].pricing_option_id').
8961
+ */
8962
+ errors?: Error[];
8963
+ /**
8964
+ * When true, the account is a sandbox account and no billing occurred.
8965
+ */
8966
+ sandbox?: boolean;
8967
+ context?: ContextObject;
8968
+ ext?: ExtensionObject;
8969
+ }
8970
+ /**
8971
+ * Standard error structure for task-specific errors and warnings
8972
+ */
9132
8973
  //# sourceMappingURL=tools.generated.d.ts.map