@adcp/client 3.11.1 → 3.12.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 (54) hide show
  1. package/bin/adcp.js +32 -1
  2. package/dist/lib/adapters/property-list-adapter.d.ts.map +1 -1
  3. package/dist/lib/adapters/property-list-adapter.js +10 -5
  4. package/dist/lib/adapters/property-list-adapter.js.map +1 -1
  5. package/dist/lib/agents/index.generated.d.ts +33 -1
  6. package/dist/lib/agents/index.generated.d.ts.map +1 -1
  7. package/dist/lib/agents/index.generated.js +48 -0
  8. package/dist/lib/agents/index.generated.js.map +1 -1
  9. package/dist/lib/auth/index.d.ts +4 -0
  10. package/dist/lib/auth/index.d.ts.map +1 -1
  11. package/dist/lib/auth/index.js +5 -0
  12. package/dist/lib/auth/index.js.map +1 -1
  13. package/dist/lib/index.d.ts +4 -2
  14. package/dist/lib/index.d.ts.map +1 -1
  15. package/dist/lib/index.js +14 -3
  16. package/dist/lib/index.js.map +1 -1
  17. package/dist/lib/testing/scenarios/creative.js +11 -1
  18. package/dist/lib/testing/scenarios/creative.js.map +1 -1
  19. package/dist/lib/testing/types.d.ts +12 -0
  20. package/dist/lib/testing/types.d.ts.map +1 -1
  21. package/dist/lib/types/adcp.d.ts +1 -0
  22. package/dist/lib/types/adcp.d.ts.map +1 -1
  23. package/dist/lib/types/core.generated.d.ts +605 -45
  24. package/dist/lib/types/core.generated.d.ts.map +1 -1
  25. package/dist/lib/types/core.generated.js +1 -1
  26. package/dist/lib/types/schemas.generated.d.ts +4455 -1920
  27. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  28. package/dist/lib/types/schemas.generated.js +725 -156
  29. package/dist/lib/types/schemas.generated.js.map +1 -1
  30. package/dist/lib/types/tools.generated.d.ts +2384 -454
  31. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  32. package/dist/lib/types/tools.generated.js +0 -3
  33. package/dist/lib/types/tools.generated.js.map +1 -1
  34. package/dist/lib/utils/capabilities.d.ts +4 -0
  35. package/dist/lib/utils/capabilities.d.ts.map +1 -1
  36. package/dist/lib/utils/capabilities.js +6 -1
  37. package/dist/lib/utils/capabilities.js.map +1 -1
  38. package/dist/lib/utils/index.d.ts +2 -1
  39. package/dist/lib/utils/index.d.ts.map +1 -1
  40. package/dist/lib/utils/index.js +6 -1
  41. package/dist/lib/utils/index.js.map +1 -1
  42. package/dist/lib/utils/pagination.d.ts +31 -0
  43. package/dist/lib/utils/pagination.d.ts.map +1 -0
  44. package/dist/lib/utils/pagination.js +51 -0
  45. package/dist/lib/utils/pagination.js.map +1 -0
  46. package/dist/lib/utils/pricing-adapter.d.ts +4 -0
  47. package/dist/lib/utils/pricing-adapter.d.ts.map +1 -1
  48. package/dist/lib/utils/pricing-adapter.js +7 -0
  49. package/dist/lib/utils/pricing-adapter.js.map +1 -1
  50. package/dist/lib/version.d.ts +3 -3
  51. package/dist/lib/version.d.ts.map +1 -1
  52. package/dist/lib/version.js +3 -3
  53. package/dist/lib/version.js.map +1 -1
  54. package/package.json +1 -1
@@ -11,7 +11,7 @@ export type AssetContentType = 'image' | 'video' | 'audio' | 'text' | 'markdown'
11
11
  */
12
12
  export type DeliveryType = 'guaranteed' | 'non_guaranteed';
13
13
  /**
14
- * High-level categories for creative formats based on media type and delivery channel. Describes WHERE and HOW a creative displays, not what content it contains.
14
+ * DEPRECATED: High-level categories for creative formats. These categories are lossy abstractions that don't scale well to emerging ad formats. Use the assets array in Format objects to understand creative requirements instead - it provides precise information about what asset types are needed (video, image, text, etc.).
15
15
  */
16
16
  export type FormatCategory = 'audio' | 'video' | 'display' | 'native' | 'dooh' | 'rich_media' | 'universal';
17
17
  /**
@@ -26,6 +26,145 @@ export type MediaChannel = 'display' | 'olv' | 'social' | 'search' | 'ctv' | 'li
26
26
  * Geographic targeting level (country, region, metro, postal_area)
27
27
  */
28
28
  export type GeographicTargetingLevel = 'country' | 'region' | 'metro' | 'postal_area';
29
+ /**
30
+ * Targeting constraint for a specific signal. Uses value_type as discriminator to determine the targeting expression format.
31
+ */
32
+ export type SignalTargeting = {
33
+ signal_id: SignalID;
34
+ /**
35
+ * Discriminator for binary signals
36
+ */
37
+ value_type: 'binary';
38
+ /**
39
+ * Whether to include (true) or exclude (false) users matching this signal
40
+ */
41
+ value: boolean;
42
+ [k: string]: unknown | undefined;
43
+ } | {
44
+ signal_id: SignalID1;
45
+ /**
46
+ * Discriminator for categorical signals
47
+ */
48
+ value_type: 'categorical';
49
+ /**
50
+ * Values to target. Users with any of these values will be included.
51
+ *
52
+ * @minItems 1
53
+ */
54
+ values: [string, ...string[]];
55
+ [k: string]: unknown | undefined;
56
+ } | {
57
+ signal_id: SignalID2;
58
+ /**
59
+ * Discriminator for numeric signals
60
+ */
61
+ value_type: 'numeric';
62
+ /**
63
+ * Minimum value (inclusive). Omit for no minimum. Must be <= max_value when both are provided. Should be >= signal's range.min if defined.
64
+ */
65
+ min_value?: number;
66
+ /**
67
+ * Maximum value (inclusive). Omit for no maximum. Must be >= min_value when both are provided. Should be <= signal's range.max if defined.
68
+ */
69
+ max_value?: number;
70
+ [k: string]: unknown | undefined;
71
+ };
72
+ /**
73
+ * The signal to target
74
+ */
75
+ export type SignalID = {
76
+ /**
77
+ * Discriminator indicating this signal is from a data provider's published catalog
78
+ */
79
+ source: 'catalog';
80
+ /**
81
+ * Domain of the data provider that owns this signal (e.g., 'polk.com', 'experian.com'). The signal definition is published at this domain's /.well-known/adagents.json
82
+ */
83
+ data_provider_domain: string;
84
+ /**
85
+ * Signal identifier within the data provider's catalog (e.g., 'likely_tesla_buyers', 'income_100k_plus')
86
+ */
87
+ id: string;
88
+ [k: string]: unknown | undefined;
89
+ } | {
90
+ /**
91
+ * Discriminator indicating this signal is native to the agent (not from a data provider catalog)
92
+ */
93
+ source: 'agent';
94
+ /**
95
+ * URL of the signals agent that provides this signal (e.g., 'https://liveramp.com/.well-known/adcp/signals')
96
+ */
97
+ agent_url: string;
98
+ /**
99
+ * Signal identifier within the agent's signal set (e.g., 'custom_auto_intenders')
100
+ */
101
+ id: string;
102
+ [k: string]: unknown | undefined;
103
+ };
104
+ /**
105
+ * The signal to target
106
+ */
107
+ export type SignalID1 = {
108
+ /**
109
+ * Discriminator indicating this signal is from a data provider's published catalog
110
+ */
111
+ source: 'catalog';
112
+ /**
113
+ * Domain of the data provider that owns this signal (e.g., 'polk.com', 'experian.com'). The signal definition is published at this domain's /.well-known/adagents.json
114
+ */
115
+ data_provider_domain: string;
116
+ /**
117
+ * Signal identifier within the data provider's catalog (e.g., 'likely_tesla_buyers', 'income_100k_plus')
118
+ */
119
+ id: string;
120
+ [k: string]: unknown | undefined;
121
+ } | {
122
+ /**
123
+ * Discriminator indicating this signal is native to the agent (not from a data provider catalog)
124
+ */
125
+ source: 'agent';
126
+ /**
127
+ * URL of the signals agent that provides this signal (e.g., 'https://liveramp.com/.well-known/adcp/signals')
128
+ */
129
+ agent_url: string;
130
+ /**
131
+ * Signal identifier within the agent's signal set (e.g., 'custom_auto_intenders')
132
+ */
133
+ id: string;
134
+ [k: string]: unknown | undefined;
135
+ };
136
+ /**
137
+ * The signal to target
138
+ */
139
+ export type SignalID2 = {
140
+ /**
141
+ * Discriminator indicating this signal is from a data provider's published catalog
142
+ */
143
+ source: 'catalog';
144
+ /**
145
+ * Domain of the data provider that owns this signal (e.g., 'polk.com', 'experian.com'). The signal definition is published at this domain's /.well-known/adagents.json
146
+ */
147
+ data_provider_domain: string;
148
+ /**
149
+ * Signal identifier within the data provider's catalog (e.g., 'likely_tesla_buyers', 'income_100k_plus')
150
+ */
151
+ id: string;
152
+ [k: string]: unknown | undefined;
153
+ } | {
154
+ /**
155
+ * Discriminator indicating this signal is native to the agent (not from a data provider catalog)
156
+ */
157
+ source: 'agent';
158
+ /**
159
+ * URL of the signals agent that provides this signal (e.g., 'https://liveramp.com/.well-known/adcp/signals')
160
+ */
161
+ agent_url: string;
162
+ /**
163
+ * Signal identifier within the agent's signal set (e.g., 'custom_auto_intenders')
164
+ */
165
+ id: string;
166
+ [k: string]: unknown | undefined;
167
+ };
29
168
  /**
30
169
  * Request parameters for discovering available advertising products
31
170
  */
@@ -39,12 +178,14 @@ export interface GetProductsRequest {
39
178
  */
40
179
  proposal_id?: string;
41
180
  brand_manifest?: BrandManifestReference;
181
+ product_selectors?: PromotedProducts;
42
182
  /**
43
- * Account context for product lookup. When provided, returns products with pricing specific to this account's rate card. Optional if the agent has a single account.
183
+ * 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.
44
184
  */
45
185
  account_id?: string;
46
186
  filters?: ProductFilters;
47
187
  property_list?: PropertyListReference;
188
+ pagination?: PaginationRequest;
48
189
  context?: ContextObject;
49
190
  ext?: ExtensionObject;
50
191
  }
@@ -65,7 +206,7 @@ export interface BrandManifest {
65
206
  */
66
207
  name: string;
67
208
  /**
68
- * Brand logo assets with semantic tags for different use cases
209
+ * Brand logo assets with structured fields for orientation, background compatibility, and variant type. Use the orientation, background, and variant enum fields for reliable filtering by creative agents.
69
210
  */
70
211
  logos?: {
71
212
  /**
@@ -73,9 +214,25 @@ export interface BrandManifest {
73
214
  */
74
215
  url: string;
75
216
  /**
76
- * Semantic tags describing the logo variant (e.g., 'dark', 'light', 'square', 'horizontal', 'icon')
217
+ * Logo aspect ratio orientation. square: ~1:1, horizontal: wide, vertical: tall, stacked: vertically arranged elements
218
+ */
219
+ orientation?: 'square' | 'horizontal' | 'vertical' | 'stacked';
220
+ /**
221
+ * Background compatibility. dark-bg: use on dark backgrounds, light-bg: use on light backgrounds, transparent-bg: has transparent background
222
+ */
223
+ background?: 'dark-bg' | 'light-bg' | 'transparent-bg';
224
+ /**
225
+ * Logo variant type. primary: main logo, secondary: alternative, icon: symbol only, wordmark: text only, full-lockup: complete logo
226
+ */
227
+ variant?: 'primary' | 'secondary' | 'icon' | 'wordmark' | 'full-lockup';
228
+ /**
229
+ * Additional semantic tags for custom categorization beyond the standard orientation, background, and variant fields.
77
230
  */
78
231
  tags?: string[];
232
+ /**
233
+ * Human-readable description of when to use this logo variant (e.g., 'Primary logo for use on light backgrounds', 'Icon-only variant for small formats')
234
+ */
235
+ usage?: string;
79
236
  /**
80
237
  * Logo width in pixels
81
238
  */
@@ -86,29 +243,29 @@ export interface BrandManifest {
86
243
  height?: number;
87
244
  }[];
88
245
  /**
89
- * Brand color palette
246
+ * Brand color palette. Each role accepts a single hex color or an array of hex colors for brands with multiple values per role.
90
247
  */
91
248
  colors?: {
92
249
  /**
93
- * Primary brand color (hex format)
250
+ * Primary brand color(s)
94
251
  */
95
- primary?: string;
252
+ primary?: string | [string, ...string[]];
96
253
  /**
97
- * Secondary brand color (hex format)
254
+ * Secondary brand color(s)
98
255
  */
99
- secondary?: string;
256
+ secondary?: string | [string, ...string[]];
100
257
  /**
101
- * Accent color (hex format)
258
+ * Accent color(s)
102
259
  */
103
- accent?: string;
260
+ accent?: string | [string, ...string[]];
104
261
  /**
105
- * Background color (hex format)
262
+ * Background color(s)
106
263
  */
107
- background?: string;
264
+ background?: string | [string, ...string[]];
108
265
  /**
109
- * Text color (hex format)
266
+ * Text color(s)
110
267
  */
111
- text?: string;
268
+ text?: string | [string, ...string[]];
112
269
  };
113
270
  /**
114
271
  * Brand typography guidelines
@@ -128,9 +285,26 @@ export interface BrandManifest {
128
285
  font_urls?: string[];
129
286
  };
130
287
  /**
131
- * Brand voice and messaging tone (e.g., 'professional', 'casual', 'humorous', 'trustworthy', 'innovative')
288
+ * Brand voice and messaging tone guidelines for creative agents.
132
289
  */
133
- tone?: string;
290
+ tone?: string | {
291
+ /**
292
+ * High-level voice descriptor (e.g., 'warm and inviting', 'professional and trustworthy')
293
+ */
294
+ voice?: string;
295
+ /**
296
+ * Personality traits that characterize the brand voice
297
+ */
298
+ attributes?: string[];
299
+ /**
300
+ * Specific guidance for copy generation - what TO do
301
+ */
302
+ dos?: string[];
303
+ /**
304
+ * Guardrails to avoid brand violations - what NOT to do
305
+ */
306
+ donts?: string[];
307
+ };
134
308
  /**
135
309
  * Brand voice configuration for audio/conversational experiences
136
310
  */
@@ -326,6 +500,32 @@ export interface BrandManifest {
326
500
  };
327
501
  [k: string]: unknown | undefined;
328
502
  }
503
+ /**
504
+ * Selectors to filter the brand manifest product catalog for product discovery. When provided, sellers should only return advertising products where the selected catalog items have matches. Uses the same selection methods as promoted-offerings.
505
+ */
506
+ export interface PromotedProducts {
507
+ /**
508
+ * GTIN product identifiers for cross-retailer catalog matching. Accepts standard GTIN formats (GTIN-8, UPC-A/GTIN-12, EAN-13/GTIN-13, GTIN-14).
509
+ */
510
+ manifest_gtins?: string[];
511
+ /**
512
+ * Direct product SKU references from the brand manifest product catalog
513
+ */
514
+ manifest_skus?: string[];
515
+ /**
516
+ * Select products by tags from the brand manifest product catalog (e.g., 'organic', 'sauces', 'holiday')
517
+ */
518
+ manifest_tags?: string[];
519
+ /**
520
+ * Select products from a specific category in the brand manifest product catalog (e.g., 'beverages/soft-drinks', 'food/sauces')
521
+ */
522
+ manifest_category?: string;
523
+ /**
524
+ * Natural language query to select products from the brand manifest (e.g., 'all Kraft Heinz pasta sauces', 'organic products under $20')
525
+ */
526
+ manifest_query?: string;
527
+ [k: string]: unknown | undefined;
528
+ }
329
529
  /**
330
530
  * Structured filters for product discovery
331
531
  */
@@ -337,12 +537,16 @@ export interface ProductFilters {
337
537
  is_fixed_price?: boolean;
338
538
  /**
339
539
  * Filter by format types
540
+ *
541
+ * @minItems 1
340
542
  */
341
- format_types?: FormatCategory[];
543
+ format_types?: [FormatCategory, ...FormatCategory[]];
342
544
  /**
343
545
  * Filter by specific format IDs
546
+ *
547
+ * @minItems 1
344
548
  */
345
- format_ids?: FormatID[];
549
+ format_ids?: [FormatID, ...FormatID[]];
346
550
  /**
347
551
  * Only return products accepting IAB standard formats
348
552
  */
@@ -367,41 +571,77 @@ export interface ProductFilters {
367
571
  };
368
572
  /**
369
573
  * Filter by country coverage using ISO 3166-1 alpha-2 codes (e.g., ['US', 'CA', 'GB']). Works for all inventory types.
574
+ *
575
+ * @minItems 1
370
576
  */
371
- countries?: string[];
577
+ countries?: [string, ...string[]];
372
578
  /**
373
579
  * 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.
580
+ *
581
+ * @minItems 1
374
582
  */
375
- regions?: string[];
583
+ regions?: [string, ...string[]];
376
584
  /**
377
585
  * 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.
586
+ *
587
+ * @minItems 1
378
588
  */
379
- metros?: {
380
- system: MetroAreaSystem;
381
- /**
382
- * Metro code within the system (e.g., '501' for NYC DMA)
383
- */
384
- code: string;
385
- }[];
589
+ metros?: [
590
+ {
591
+ system: MetroAreaSystem;
592
+ /**
593
+ * Metro code within the system (e.g., '501' for NYC DMA)
594
+ */
595
+ code: string;
596
+ },
597
+ ...{
598
+ system: MetroAreaSystem;
599
+ /**
600
+ * Metro code within the system (e.g., '501' for NYC DMA)
601
+ */
602
+ code: string;
603
+ }[]
604
+ ];
386
605
  /**
387
- * Filter by advertising channels (e.g., ['display', 'video', 'dooh'])
606
+ * Filter by advertising channels (e.g., ['display', 'ctv', 'dooh'])
607
+ *
608
+ * @minItems 1
388
609
  */
389
- channels?: MediaChannel[];
610
+ channels?: [MediaChannel, ...MediaChannel[]];
390
611
  /**
391
612
  * Filter to products executable through specific agentic ad exchanges. URLs are canonical identifiers.
613
+ *
614
+ * @minItems 1
392
615
  */
393
- required_axe_integrations?: string[];
616
+ required_axe_integrations?: [string, ...string[]];
394
617
  required_features?: MediaBuyFeatures;
395
618
  /**
396
619
  * 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.
620
+ *
621
+ * @minItems 1
397
622
  */
398
- required_geo_targeting?: {
399
- level: GeographicTargetingLevel;
400
- /**
401
- * 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.
402
- */
403
- system?: string;
404
- }[];
623
+ required_geo_targeting?: [
624
+ {
625
+ level: GeographicTargetingLevel;
626
+ /**
627
+ * 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.
628
+ */
629
+ system?: string;
630
+ },
631
+ ...{
632
+ level: GeographicTargetingLevel;
633
+ /**
634
+ * 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.
635
+ */
636
+ system?: string;
637
+ }[]
638
+ ];
639
+ /**
640
+ * 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).
641
+ *
642
+ * @minItems 1
643
+ */
644
+ signal_targeting?: [SignalTargeting, ...SignalTargeting[]];
405
645
  [k: string]: unknown | undefined;
406
646
  }
407
647
  /**
@@ -446,6 +686,10 @@ export interface MediaBuyFeatures {
446
686
  * Full support for content_standards configuration including sampling rates and category filtering
447
687
  */
448
688
  content_standards?: boolean;
689
+ /**
690
+ * Supports sync_event_sources and log_event tasks for conversion event tracking
691
+ */
692
+ conversion_tracking?: boolean;
449
693
  [k: string]: boolean | undefined;
450
694
  }
451
695
  /**
@@ -465,6 +709,19 @@ export interface PropertyListReference {
465
709
  */
466
710
  auth_token?: string;
467
711
  }
712
+ /**
713
+ * Standard cursor-based pagination parameters for list operations
714
+ */
715
+ export interface PaginationRequest {
716
+ /**
717
+ * Maximum number of items to return per page
718
+ */
719
+ max_results?: number;
720
+ /**
721
+ * Opaque cursor from a previous response to fetch the next page
722
+ */
723
+ cursor?: string;
724
+ }
468
725
  /**
469
726
  * 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.
470
727
  */
@@ -532,9 +789,13 @@ export type PropertyID = string;
532
789
  */
533
790
  export type PropertyTag = string;
534
791
  /**
535
- * Type of inventory delivery
792
+ * Standardized advertising media channels describing how buyers allocate budget. Channels are planning abstractions, not technical substrates. See the Media Channel Taxonomy specification for detailed definitions.
793
+ */
794
+ export type PricingOption = CPMPricingOption | VCPMPricingOption | CPCPricingOption | CPCVPricingOption | CPVPricingOption | CPPPricingOption | CPAPricingOption | FlatRatePricingOption | TimeBasedPricingOption;
795
+ /**
796
+ * Standard marketing event types for event logging, aligned with IAB ECAPI
536
797
  */
537
- export type PricingOption = CPMPricingOption | VCPMPricingOption | CPCPricingOption | CPCVPricingOption | CPVPricingOption | CPPPricingOption | FlatRatePricingOption;
798
+ export type EventType = 'page_view' | 'view_content' | 'select_content' | 'select_item' | 'search' | 'share' | 'add_to_cart' | 'remove_from_cart' | 'viewed_cart' | 'add_to_wishlist' | 'initiate_checkout' | 'add_payment_info' | 'purchase' | 'refund' | 'lead' | 'qualify_lead' | 'close_convert_lead' | 'disqualify_lead' | 'complete_registration' | 'subscribe' | 'start_trial' | 'app_install' | 'app_launch' | 'contact' | 'schedule' | 'donate' | 'submit_application' | 'custom';
538
799
  /**
539
800
  * Available frequencies for delivery reports and metrics updates
540
801
  */
@@ -542,7 +803,7 @@ export type ReportingFrequency = 'hourly' | 'daily' | 'monthly';
542
803
  /**
543
804
  * Standard delivery and performance metrics available for reporting
544
805
  */
545
- export type AvailableMetric = 'impressions' | 'spend' | 'clicks' | 'ctr' | 'video_completions' | 'completion_rate' | 'conversions' | 'viewability' | 'engagement_rate';
806
+ export type AvailableMetric = 'impressions' | 'spend' | 'clicks' | 'ctr' | 'video_completions' | 'completion_rate' | 'conversions' | 'conversion_value' | 'roas' | 'cost_per_acquisition' | 'new_to_brand_rate' | 'viewability' | 'engagement_rate' | 'views' | 'completed_views' | 'leads' | 'reach' | 'frequency' | 'grps' | 'quartile_data' | 'dooh_metrics' | 'cost_per_click';
546
807
  /**
547
808
  * Co-branding requirement
548
809
  */
@@ -551,6 +812,56 @@ export type CoBrandingRequirement = 'required' | 'optional' | 'none';
551
812
  * Landing page requirements
552
813
  */
553
814
  export type LandingPageRequirement = 'any' | 'retailer_site_only' | 'must_include_retailer';
815
+ /**
816
+ * Selects signals from a data provider's adagents.json catalog. Used for product definitions and agent authorization. Supports three selection patterns: all signals, specific IDs, or by tags.
817
+ */
818
+ export type DataProviderSignalSelector = {
819
+ /**
820
+ * Domain where data provider's adagents.json is hosted (e.g., 'polk.com')
821
+ */
822
+ data_provider_domain: string;
823
+ /**
824
+ * Discriminator indicating all signals from this data provider are included
825
+ */
826
+ selection_type: 'all';
827
+ [k: string]: unknown | undefined;
828
+ } | {
829
+ /**
830
+ * Domain where data provider's adagents.json is hosted (e.g., 'polk.com')
831
+ */
832
+ data_provider_domain: string;
833
+ /**
834
+ * Discriminator indicating selection by specific signal IDs
835
+ */
836
+ selection_type: 'by_id';
837
+ /**
838
+ * Specific signal IDs from the data provider's catalog
839
+ *
840
+ * @minItems 1
841
+ */
842
+ signal_ids: [string, ...string[]];
843
+ [k: string]: unknown | undefined;
844
+ } | {
845
+ /**
846
+ * Domain where data provider's adagents.json is hosted (e.g., 'polk.com')
847
+ */
848
+ data_provider_domain: string;
849
+ /**
850
+ * Discriminator indicating selection by signal tags
851
+ */
852
+ selection_type: 'by_tag';
853
+ /**
854
+ * Signal tags from the data provider's catalog. Selector covers all signals with these tags
855
+ *
856
+ * @minItems 1
857
+ */
858
+ signal_tags: [string, ...string[]];
859
+ [k: string]: unknown | undefined;
860
+ };
861
+ /**
862
+ * Where the conversion event originated
863
+ */
864
+ export type ActionSource = 'website' | 'app' | 'offline' | 'phone_call' | 'chat' | 'email' | 'in_store' | 'system_generated' | 'other';
554
865
  /**
555
866
  * Response payload for get_products task
556
867
  */
@@ -571,6 +882,11 @@ export interface GetProductsResponse {
571
882
  * [AdCP 3.0] Indicates whether property_list filtering was applied. True if the agent filtered products based on the provided property_list. Absent or false if property_list was not provided or not supported by this agent.
572
883
  */
573
884
  property_list_applied?: boolean;
885
+ /**
886
+ * Indicates whether product_selectors filtering was applied. True if the seller filtered results based on the provided product_selectors. Absent or false if product_selectors was not provided or not supported by this agent.
887
+ */
888
+ product_selectors_applied?: boolean;
889
+ pagination?: PaginationResponse;
574
890
  context?: ContextObject;
575
891
  ext?: ExtensionObject;
576
892
  }
@@ -596,6 +912,10 @@ export interface Product {
596
912
  * @minItems 1
597
913
  */
598
914
  publisher_properties: [PublisherPropertySelector, ...PublisherPropertySelector[]];
915
+ /**
916
+ * 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'].
917
+ */
918
+ channels?: MediaChannel[];
599
919
  /**
600
920
  * Array of supported creative format IDs - structured format_id objects with agent_url and id
601
921
  */
@@ -641,6 +961,39 @@ export interface Product {
641
961
  * Whether buyers can filter this product to a subset of its publisher_properties. When false (default), the product is 'all or nothing' - buyers must accept all properties or the product is excluded from property_list filtering results.
642
962
  */
643
963
  property_targeting_allowed?: boolean;
964
+ /**
965
+ * Data provider signals available for this product. Buyers fetch signal definitions from each data provider's adagents.json and can verify agent authorization.
966
+ */
967
+ data_provider_signals?: DataProviderSignalSelector[];
968
+ /**
969
+ * Whether buyers can filter this product to a subset of its data_provider_signals. When false (default), the product includes all listed signals as a bundle. When true, buyers can target specific signals.
970
+ */
971
+ signal_targeting_allowed?: boolean;
972
+ /**
973
+ * 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.
974
+ */
975
+ conversion_tracking?: {
976
+ /**
977
+ * 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')
978
+ *
979
+ * @minItems 1
980
+ */
981
+ action_sources?: [ActionSource, ...ActionSource[]];
982
+ /**
983
+ * Optimization strategies this product supports when an optimization_goal is set on a package
984
+ *
985
+ * @minItems 1
986
+ */
987
+ supported_optimization_strategies?: [
988
+ 'maximize_conversions' | 'target_cpa' | 'target_roas',
989
+ ...('maximize_conversions' | 'target_cpa' | 'target_roas')[]
990
+ ];
991
+ /**
992
+ * 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'.
993
+ */
994
+ platform_managed?: boolean;
995
+ [k: string]: unknown | undefined;
996
+ };
644
997
  /**
645
998
  * Explanation of why this product matches the brief (only included when brief is provided)
646
999
  */
@@ -1048,32 +1401,70 @@ export interface PriceGuidance5 {
1048
1401
  [k: string]: unknown | undefined;
1049
1402
  }
1050
1403
  /**
1051
- * 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.
1404
+ * Cost Per Acquisition pricing. Advertiser pays a fixed price when a specified conversion event occurs. The event_type field declares which event triggers billing (e.g., purchase, lead, app_install).
1052
1405
  */
1053
- export interface FlatRatePricingOption {
1406
+ export interface CPAPricingOption {
1054
1407
  /**
1055
1408
  * Unique identifier for this pricing option within the product
1056
1409
  */
1057
1410
  pricing_option_id: string;
1058
1411
  /**
1059
- * Fixed cost regardless of delivery volume
1412
+ * Cost per acquisition (conversion event)
1060
1413
  */
1061
- pricing_model: 'flat_rate';
1414
+ pricing_model: 'cpa';
1062
1415
  /**
1063
- * ISO 4217 currency code
1416
+ * The conversion event type that triggers billing (e.g., purchase, lead, app_install)
1064
1417
  */
1065
- currency: string;
1418
+ event_type: EventType;
1066
1419
  /**
1067
- * Flat rate cost. If present, this is fixed pricing. If absent, auction-based.
1420
+ * Name of the custom event when event_type is 'custom'. Required when event_type is 'custom', ignored otherwise.
1068
1421
  */
1069
- fixed_price?: number;
1422
+ custom_event_name?: string;
1070
1423
  /**
1071
- * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
1424
+ * When present, only events from this specific event source count toward billing. Allows different CPA rates for different sources (e.g., online vs in-store purchases). Must match an event source configured via sync_event_sources.
1072
1425
  */
1073
- floor_price?: number;
1074
- price_guidance?: PriceGuidance6;
1426
+ event_source_id?: string;
1075
1427
  /**
1076
- * Flat rate parameters for DOOH and time-based campaigns
1428
+ * ISO 4217 currency code
1429
+ */
1430
+ currency: string;
1431
+ /**
1432
+ * Fixed price per acquisition in the specified currency
1433
+ */
1434
+ fixed_price: number;
1435
+ /**
1436
+ * Minimum spend requirement per package using this pricing option, in the specified currency
1437
+ */
1438
+ min_spend_per_package?: number;
1439
+ [k: string]: unknown | undefined;
1440
+ }
1441
+ /**
1442
+ * 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.
1443
+ */
1444
+ export interface FlatRatePricingOption {
1445
+ /**
1446
+ * Unique identifier for this pricing option within the product
1447
+ */
1448
+ pricing_option_id: string;
1449
+ /**
1450
+ * Fixed cost regardless of delivery volume
1451
+ */
1452
+ pricing_model: 'flat_rate';
1453
+ /**
1454
+ * ISO 4217 currency code
1455
+ */
1456
+ currency: string;
1457
+ /**
1458
+ * Flat rate cost. If present, this is fixed pricing. If absent, auction-based.
1459
+ */
1460
+ fixed_price?: number;
1461
+ /**
1462
+ * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
1463
+ */
1464
+ floor_price?: number;
1465
+ price_guidance?: PriceGuidance6;
1466
+ /**
1467
+ * Flat rate parameters for DOOH and time-based campaigns
1077
1468
  */
1078
1469
  parameters?: {
1079
1470
  /**
@@ -1134,6 +1525,77 @@ export interface PriceGuidance6 {
1134
1525
  p90?: number;
1135
1526
  [k: string]: unknown | undefined;
1136
1527
  }
1528
+ /**
1529
+ * Cost per time unit (hour, day, week, or month) - rate scales with campaign duration. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
1530
+ */
1531
+ export interface TimeBasedPricingOption {
1532
+ /**
1533
+ * Unique identifier for this pricing option within the product
1534
+ */
1535
+ pricing_option_id: string;
1536
+ /**
1537
+ * Cost per time unit - rate scales with campaign duration
1538
+ */
1539
+ pricing_model: 'time';
1540
+ /**
1541
+ * ISO 4217 currency code
1542
+ */
1543
+ currency: string;
1544
+ /**
1545
+ * Cost per time unit. If present, this is fixed pricing. If absent, auction-based.
1546
+ */
1547
+ fixed_price?: number;
1548
+ /**
1549
+ * Minimum acceptable bid per time unit for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
1550
+ */
1551
+ floor_price?: number;
1552
+ price_guidance?: PriceGuidance7;
1553
+ /**
1554
+ * Time-based pricing parameters
1555
+ */
1556
+ parameters: {
1557
+ /**
1558
+ * The time unit for pricing. Total cost = fixed_price × number of time_units in the campaign flight.
1559
+ */
1560
+ time_unit: 'hour' | 'day' | 'week' | 'month';
1561
+ /**
1562
+ * Minimum booking duration in time_units
1563
+ */
1564
+ min_duration?: number;
1565
+ /**
1566
+ * Maximum booking duration in time_units. Must be >= min_duration when both are present.
1567
+ */
1568
+ max_duration?: number;
1569
+ [k: string]: unknown | undefined;
1570
+ };
1571
+ /**
1572
+ * Minimum spend requirement per package using this pricing option, in the specified currency
1573
+ */
1574
+ min_spend_per_package?: number;
1575
+ [k: string]: unknown | undefined;
1576
+ }
1577
+ /**
1578
+ * Optional pricing guidance for auction-based bidding
1579
+ */
1580
+ export interface PriceGuidance7 {
1581
+ /**
1582
+ * 25th percentile of recent winning bids
1583
+ */
1584
+ p25?: number;
1585
+ /**
1586
+ * Median of recent winning bids
1587
+ */
1588
+ p50?: number;
1589
+ /**
1590
+ * 75th percentile of recent winning bids
1591
+ */
1592
+ p75?: number;
1593
+ /**
1594
+ * 90th percentile of recent winning bids
1595
+ */
1596
+ p90?: number;
1597
+ [k: string]: unknown | undefined;
1598
+ }
1137
1599
  /**
1138
1600
  * Measurement capabilities included with a product
1139
1601
  */
@@ -1179,9 +1641,17 @@ export interface ReportingCapabilities {
1179
1641
  */
1180
1642
  supports_webhooks: boolean;
1181
1643
  /**
1182
- * Metrics available in reporting. Impressions and spend are always implicitly included.
1644
+ * Metrics available in reporting. Impressions and spend are always implicitly included. When a creative format declares reported_metrics, buyers receive the intersection of these product-level metrics and the format's reported_metrics.
1183
1645
  */
1184
1646
  available_metrics: AvailableMetric[];
1647
+ /**
1648
+ * Whether this product supports creative-level metric breakdowns in delivery reporting (by_creative within by_package)
1649
+ */
1650
+ supports_creative_breakdown?: boolean;
1651
+ /**
1652
+ * 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.
1653
+ */
1654
+ date_range_support: 'date_range' | 'lifetime_only';
1185
1655
  [k: string]: unknown | undefined;
1186
1656
  }
1187
1657
  /**
@@ -1366,12 +1836,33 @@ export interface Error {
1366
1836
  };
1367
1837
  [k: string]: unknown | undefined;
1368
1838
  }
1839
+ /**
1840
+ * Standard cursor-based pagination metadata for list responses
1841
+ */
1842
+ export interface PaginationResponse {
1843
+ /**
1844
+ * Whether more results are available beyond this page
1845
+ */
1846
+ has_more: boolean;
1847
+ /**
1848
+ * Opaque cursor to pass in the next request to fetch the next page. Only present when has_more is true.
1849
+ */
1850
+ cursor?: string;
1851
+ /**
1852
+ * Total number of items matching the query across all pages. Optional because not all backends can efficiently compute this.
1853
+ */
1854
+ total_count?: number;
1855
+ }
1369
1856
  /**
1370
1857
  * 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.
1371
1858
  */
1372
1859
  /**
1373
1860
  * Filter by format type (technical categories with distinct requirements)
1374
1861
  */
1862
+ export type WCAGLevel = 'A' | 'AA' | 'AAA';
1863
+ /**
1864
+ * Request parameters for discovering supported creative formats
1865
+ */
1375
1866
  export interface ListCreativeFormatsRequest {
1376
1867
  /**
1377
1868
  * Return only these specific format IDs (e.g., from get_products response)
@@ -1406,6 +1897,8 @@ export interface ListCreativeFormatsRequest {
1406
1897
  * Search for formats by name (case-insensitive partial match)
1407
1898
  */
1408
1899
  name_search?: string;
1900
+ wcag_level?: WCAGLevel;
1901
+ pagination?: PaginationRequest;
1409
1902
  context?: ContextObject;
1410
1903
  ext?: ExtensionObject;
1411
1904
  }
@@ -1413,17 +1906,17 @@ export interface ListCreativeFormatsRequest {
1413
1906
  * 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.
1414
1907
  */
1415
1908
  /**
1416
- * Media type of this format - determines rendering method and asset requirements
1909
+ * DEPRECATED: High-level category for this format. Use the assets array to understand creative requirements instead - it provides precise information about what asset types are needed.
1417
1910
  */
1418
1911
  export type FormatIDParameter = 'dimensions' | 'duration';
1419
1912
  /**
1420
- * Type of asset
1913
+ * Standardized macro placeholders for dynamic value substitution in creative tracking URLs. Macros are replaced with actual values at impression time. See docs/creative/universal-macros.mdx for detailed documentation.
1421
1914
  */
1422
- export type AssetContentType1 = 'image' | 'video' | 'audio' | 'text' | 'markdown' | 'html' | 'css' | 'javascript' | 'vast' | 'daast' | 'promoted_offerings' | 'url' | 'webhook';
1915
+ export type UniversalMacro = 'MEDIA_BUY_ID' | 'PACKAGE_ID' | 'CREATIVE_ID' | 'CACHEBUSTER' | 'TIMESTAMP' | 'CLICK_URL' | 'GDPR' | 'GDPR_CONSENT' | 'US_PRIVACY' | 'GPP_STRING' | 'GPP_SID' | 'IP_ADDRESS' | 'LIMIT_AD_TRACKING' | 'DEVICE_TYPE' | 'OS' | 'OS_VERSION' | 'DEVICE_MAKE' | 'DEVICE_MODEL' | 'USER_AGENT' | 'APP_BUNDLE' | 'APP_NAME' | 'COUNTRY' | 'REGION' | 'CITY' | 'ZIP' | 'DMA' | 'LAT' | 'LONG' | 'DEVICE_ID' | 'DEVICE_ID_TYPE' | 'DOMAIN' | 'PAGE_URL' | 'REFERRER' | 'KEYWORDS' | 'PLACEMENT_ID' | 'FOLD_POSITION' | 'AD_WIDTH' | 'AD_HEIGHT' | 'VIDEO_ID' | 'VIDEO_TITLE' | 'VIDEO_DURATION' | 'VIDEO_CATEGORY' | 'CONTENT_GENRE' | 'CONTENT_RATING' | 'PLAYER_WIDTH' | 'PLAYER_HEIGHT' | 'POD_POSITION' | 'POD_SIZE' | 'AD_BREAK_ID' | 'STATION_ID' | 'SHOW_NAME' | 'EPISODE_ID' | 'AUDIO_DURATION' | 'AXEM';
1423
1916
  /**
1424
- * Capabilities supported by creative agents for format handling
1917
+ * 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.
1425
1918
  */
1426
- export type CreativeAgentCapability = 'validation' | 'assembly' | 'generation' | 'preview';
1919
+ export type CreativeAgentCapability = 'validation' | 'assembly' | 'generation' | 'preview' | 'delivery';
1427
1920
  /**
1428
1921
  * Response payload for list_creative_formats task
1429
1922
  */
@@ -1453,6 +1946,7 @@ export interface ListCreativeFormatsResponse {
1453
1946
  * Task-specific errors and warnings (e.g., format availability issues)
1454
1947
  */
1455
1948
  errors?: Error[];
1949
+ pagination?: PaginationResponse;
1456
1950
  context?: ContextObject;
1457
1951
  ext?: ExtensionObject;
1458
1952
  }
@@ -1473,7 +1967,7 @@ export interface Format {
1473
1967
  * Optional URL to showcase page with examples and interactive demos of this format
1474
1968
  */
1475
1969
  example_url?: string;
1476
- type: FormatCategory;
1970
+ type?: FormatCategory;
1477
1971
  /**
1478
1972
  * List of parameters this format accepts in format_id. Template formats define which parameters (dimensions, duration, etc.) can be specified when instantiating the format. Empty or omitted means this is a concrete format with fixed parameters.
1479
1973
  */
@@ -1498,31 +1992,7 @@ export interface Format {
1498
1992
  /**
1499
1993
  * 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.
1500
1994
  */
1501
- assets?: ({
1502
- /**
1503
- * Discriminator indicating this is an individual asset
1504
- */
1505
- item_type: 'individual';
1506
- /**
1507
- * Unique identifier for this asset. Creative manifests MUST use this exact value as the key in the assets object.
1508
- */
1509
- asset_id: string;
1510
- asset_type: AssetContentType;
1511
- /**
1512
- * Optional descriptive label for this asset's purpose (e.g., 'hero_image', 'logo', 'third_party_tracking'). Not used for referencing assets in manifests—use asset_id instead. This field is for human-readable documentation and UI display only.
1513
- */
1514
- asset_role?: string;
1515
- /**
1516
- * 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.
1517
- */
1518
- required: boolean;
1519
- /**
1520
- * Technical requirements for this asset (dimensions, file size, duration, etc.). For template formats, use parameters_from_format_id: true to indicate asset parameters must match the format_id parameters (width/height/unit and/or duration_ms).
1521
- */
1522
- requirements?: {
1523
- [k: string]: unknown | undefined;
1524
- };
1525
- } | {
1995
+ assets?: (BaseIndividualAsset | {
1526
1996
  /**
1527
1997
  * Discriminator indicating this is a repeatable asset group
1528
1998
  */
@@ -1543,30 +2013,14 @@ export interface Format {
1543
2013
  * Maximum number of repetitions allowed
1544
2014
  */
1545
2015
  max_count: number;
2016
+ /**
2017
+ * How the platform uses repetitions of this group. 'sequential' means all items display in order (carousels, playlists). 'optimize' means the platform selects the best-performing combination from alternatives (asset group optimization like Meta Advantage+ or Google Pmax).
2018
+ */
2019
+ selection_mode?: 'sequential' | 'optimize';
1546
2020
  /**
1547
2021
  * Assets within each repetition of this group
1548
2022
  */
1549
- assets: {
1550
- /**
1551
- * Identifier for this asset within the group
1552
- */
1553
- asset_id: string;
1554
- asset_type: AssetContentType1;
1555
- /**
1556
- * Optional descriptive label for this asset's purpose. Not used for referencing assets in manifests—use asset_id instead. This field is for human-readable documentation and UI display only.
1557
- */
1558
- asset_role?: string;
1559
- /**
1560
- * Whether this asset is required within each repetition of the group
1561
- */
1562
- required: boolean;
1563
- /**
1564
- * Technical requirements for this asset. For template formats, use parameters_from_format_id: true to indicate asset parameters must match the format_id parameters (width/height/unit and/or duration_ms).
1565
- */
1566
- requirements?: {
1567
- [k: string]: unknown | undefined;
1568
- };
1569
- }[];
2023
+ assets: BaseGroupAsset[];
1570
2024
  })[];
1571
2025
  /**
1572
2026
  * Delivery method specifications (e.g., hosted, VAST, third-party tags)
@@ -1575,9 +2029,9 @@ export interface Format {
1575
2029
  [k: string]: unknown | undefined;
1576
2030
  };
1577
2031
  /**
1578
- * List of universal macros supported by this format (e.g., MEDIA_BUY_ID, CACHEBUSTER, DEVICE_ID). Used for validation and developer tooling.
2032
+ * 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.
1579
2033
  */
1580
- supported_macros?: string[];
2034
+ supported_macros?: (UniversalMacro | string)[];
1581
2035
  /**
1582
2036
  * For generative formats: array of format IDs that this format can generate. When a format accepts inputs like brand_manifest and message, this specifies what concrete output formats can be produced (e.g., a generative banner format might output standard image banner formats).
1583
2037
  */
@@ -1595,6 +2049,16 @@ export interface Format {
1595
2049
  };
1596
2050
  [k: string]: unknown | undefined;
1597
2051
  };
2052
+ /**
2053
+ * Accessibility posture of this format. Declares the WCAG conformance level that creatives produced by this format will meet.
2054
+ */
2055
+ accessibility?: {
2056
+ wcag_level: WCAGLevel;
2057
+ /**
2058
+ * When true, all assets with x-accessibility fields must include those fields. For inspectable assets (image, video, audio), this means providing accessibility metadata like alt_text or captions. For opaque assets (HTML, JavaScript), this means providing self-declared accessibility properties.
2059
+ */
2060
+ requires_accessible_assets?: boolean;
2061
+ };
1598
2062
  /**
1599
2063
  * Optional detailed card with carousel and full specifications. Provides rich format documentation similar to ad spec pages.
1600
2064
  */
@@ -1608,11 +2072,52 @@ export interface Format {
1608
2072
  };
1609
2073
  [k: string]: unknown | undefined;
1610
2074
  };
2075
+ /**
2076
+ * 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.
2077
+ *
2078
+ * @minItems 1
2079
+ */
2080
+ reported_metrics?: [AvailableMetric, ...AvailableMetric[]];
1611
2081
  [k: string]: unknown | undefined;
1612
2082
  }
1613
2083
  /**
1614
2084
  * Structured format identifier with agent URL and format name
1615
2085
  */
2086
+ export interface BaseIndividualAsset {
2087
+ /**
2088
+ * Discriminator indicating this is an individual asset
2089
+ */
2090
+ item_type: 'individual';
2091
+ /**
2092
+ * Unique identifier for this asset. Creative manifests MUST use this exact value as the key in the assets object.
2093
+ */
2094
+ asset_id: string;
2095
+ /**
2096
+ * Optional descriptive label for this asset's purpose (e.g., 'hero_image', 'logo', 'third_party_tracking'). Not used for referencing assets in manifests—use asset_id instead. This field is for human-readable documentation and UI display only.
2097
+ */
2098
+ asset_role?: string;
2099
+ /**
2100
+ * 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.
2101
+ */
2102
+ required: boolean;
2103
+ }
2104
+ export interface BaseGroupAsset {
2105
+ /**
2106
+ * Identifier for this asset within the group
2107
+ */
2108
+ asset_id: string;
2109
+ /**
2110
+ * Optional descriptive label for this asset's purpose. Not used for referencing assets in manifests—use asset_id instead. This field is for human-readable documentation and UI display only.
2111
+ */
2112
+ asset_role?: string;
2113
+ /**
2114
+ * Whether this asset is required within each repetition of the group
2115
+ */
2116
+ required: boolean;
2117
+ }
2118
+ /**
2119
+ * 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.
2120
+ */
1616
2121
  export interface FormatID3 {
1617
2122
  /**
1618
2123
  * URL of the agent that defines this format (e.g., 'https://creatives.adcontextprotocol.org' for standard formats, or 'https://publisher.com/.well-known/adcp/sales' for custom formats)
@@ -1644,9 +2149,25 @@ export interface FormatID3 {
1644
2149
  */
1645
2150
  export type Pacing = 'even' | 'asap' | 'front_loaded';
1646
2151
  /**
1647
- * Metro area classification system (e.g., 'nielsen_dma', 'uk_itl2')
2152
+ * Event type to optimize for (e.g. purchase, lead)
2153
+ */
2154
+ export type MetroAreaSystem1 = 'nielsen_dma' | 'uk_itl1' | 'uk_itl2' | 'eurostat_nuts2' | 'custom';
2155
+ /**
2156
+ * Postal code system (e.g., 'us_zip', 'gb_outward'). System name encodes country and precision.
1648
2157
  */
1649
2158
  export type PostalCodeSystem = 'us_zip' | 'us_zip_plus_four' | 'gb_outward' | 'gb_full' | 'ca_fsa' | 'ca_full' | 'de_plz' | 'fr_code_postal' | 'au_postcode';
2159
+ /**
2160
+ * Postal code system (e.g., 'us_zip', 'gb_outward'). System name encodes country and precision.
2161
+ */
2162
+ export type PostalCodeSystem1 = 'us_zip' | 'us_zip_plus_four' | 'gb_outward' | 'gb_full' | 'ca_fsa' | 'ca_full' | 'de_plz' | 'fr_code_postal' | 'au_postcode';
2163
+ /**
2164
+ * Methods for verifying user age for compliance. Does not include 'inferred' as it is not accepted for regulatory compliance.
2165
+ */
2166
+ export type AgeVerificationMethod = 'facial_age_estimation' | 'id_document' | 'digital_id' | 'credit_card' | 'world_id';
2167
+ /**
2168
+ * Operating system platforms for device targeting. Browser values from Sec-CH-UA-Platform standard, extended for CTV.
2169
+ */
2170
+ export type DevicePlatform = 'ios' | 'android' | 'windows' | 'macos' | 'linux' | 'chromeos' | 'tvos' | 'tizen' | 'webos' | 'fire_os' | 'roku_os' | 'unknown';
1650
2171
  /**
1651
2172
  * JavaScript module type
1652
2173
  */
@@ -1676,6 +2197,14 @@ export type VASTAsset = {
1676
2197
  * Tracking events supported by this VAST tag
1677
2198
  */
1678
2199
  tracking_events?: VASTTrackingEvent[];
2200
+ /**
2201
+ * URL to captions file (WebVTT, SRT, etc.)
2202
+ */
2203
+ captions_url?: string;
2204
+ /**
2205
+ * URL to audio description track for visually impaired users
2206
+ */
2207
+ audio_description_url?: string;
1679
2208
  [k: string]: unknown | undefined;
1680
2209
  } | {
1681
2210
  /**
@@ -1699,6 +2228,14 @@ export type VASTAsset = {
1699
2228
  * Tracking events supported by this VAST tag
1700
2229
  */
1701
2230
  tracking_events?: VASTTrackingEvent[];
2231
+ /**
2232
+ * URL to captions file (WebVTT, SRT, etc.)
2233
+ */
2234
+ captions_url?: string;
2235
+ /**
2236
+ * URL to audio description track for visually impaired users
2237
+ */
2238
+ audio_description_url?: string;
1702
2239
  [k: string]: unknown | undefined;
1703
2240
  };
1704
2241
  /**
@@ -1738,6 +2275,10 @@ export type DAASTAsset = {
1738
2275
  * Whether companion display ads are included
1739
2276
  */
1740
2277
  companion_ads?: boolean;
2278
+ /**
2279
+ * URL to text transcript of the audio content
2280
+ */
2281
+ transcript_url?: string;
1741
2282
  [k: string]: unknown | undefined;
1742
2283
  } | {
1743
2284
  /**
@@ -1761,6 +2302,10 @@ export type DAASTAsset = {
1761
2302
  * Whether companion display ads are included
1762
2303
  */
1763
2304
  companion_ads?: boolean;
2305
+ /**
2306
+ * URL to text transcript of the audio content
2307
+ */
2308
+ transcript_url?: string;
1764
2309
  [k: string]: unknown | undefined;
1765
2310
  };
1766
2311
  /**
@@ -1804,9 +2349,9 @@ export interface CreateMediaBuyRequest {
1804
2349
  */
1805
2350
  buyer_ref: string;
1806
2351
  /**
1807
- * Account to bill for this media buy. Optional if the agent has a single account or the seller can determine the account from context (brand + agent). Required if the agent has multiple accounts and the seller cannot route automatically.
2352
+ * Account to bill for this media buy. The seller maps the agent's brand + operator to an account during sync_accounts; the agent passes that account_id here.
1808
2353
  */
1809
- account_id?: string;
2354
+ account_id: string;
1810
2355
  /**
1811
2356
  * ID of a proposal from get_products to execute. When provided with total_budget, the publisher converts the proposal's allocation percentages into packages automatically. Alternative to providing packages array.
1812
2357
  */
@@ -1921,105 +2466,265 @@ export interface PackageRequest {
1921
2466
  * Whether this package should be created in a paused state. Paused packages do not deliver impressions. Defaults to false.
1922
2467
  */
1923
2468
  paused?: boolean;
2469
+ optimization_goal?: OptimizationGoal;
1924
2470
  targeting_overlay?: TargetingOverlay;
1925
2471
  /**
1926
2472
  * Assign existing library creatives to this package with optional weights and placement targeting
2473
+ *
2474
+ * @minItems 1
1927
2475
  */
1928
- creative_assignments?: CreativeAssignment[];
2476
+ creative_assignments?: [CreativeAssignment, ...CreativeAssignment[]];
1929
2477
  /**
1930
2478
  * Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.
1931
2479
  *
2480
+ * @minItems 1
1932
2481
  * @maxItems 100
1933
2482
  */
1934
- creatives?: CreativeAsset[];
2483
+ creatives?: [CreativeAsset, ...CreativeAsset[]];
1935
2484
  ext?: ExtensionObject;
1936
2485
  [k: string]: unknown | undefined;
1937
2486
  }
1938
2487
  /**
1939
2488
  * 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.
1940
2489
  */
1941
- export interface TargetingOverlay {
2490
+ export interface OptimizationGoal {
1942
2491
  /**
1943
- * Restrict delivery to specific countries. ISO 3166-1 alpha-2 codes (e.g., 'US', 'GB', 'DE').
2492
+ * Event source to optimize against (must be configured on this account via sync_event_sources)
1944
2493
  */
1945
- geo_countries?: string[];
2494
+ event_source_id: string;
2495
+ event_type: EventType;
1946
2496
  /**
1947
- * Restrict delivery to specific regions/states. ISO 3166-2 subdivision codes (e.g., 'US-CA', 'GB-SCT').
2497
+ * Target return on ad spend (e.g. 4.0 = $4 conversion value per $1 spent). Mutually exclusive with target_cpa.
1948
2498
  */
1949
- geo_regions?: string[];
2499
+ target_roas?: number;
1950
2500
  /**
1951
- * Restrict delivery to specific metro areas. Each entry specifies the classification system and target values. Seller must declare supported systems in get_adcp_capabilities.
2501
+ * Target cost per acquisition in the buy currency. Mutually exclusive with target_roas.
1952
2502
  */
1953
- geo_metros?: {
1954
- system: MetroAreaSystem;
1955
- /**
1956
- * Metro codes within the system (e.g., ['501', '602'] for Nielsen DMAs)
1957
- *
1958
- * @minItems 1
1959
- */
1960
- values: [string, ...string[]];
1961
- }[];
2503
+ target_cpa?: number;
1962
2504
  /**
1963
- * Restrict delivery to specific postal areas. Each entry specifies the postal system and target values. Seller must declare supported systems in get_adcp_capabilities.
2505
+ * Attribution window for this optimization goal. Values must match an option declared in the seller's conversion_tracking.attribution_windows capability. When omitted, the seller uses their default window.
1964
2506
  */
1965
- geo_postal_areas?: {
1966
- system: PostalCodeSystem;
2507
+ attribution_window?: {
1967
2508
  /**
1968
- * Postal codes within the system (e.g., ['10001', '10002'] for us_zip)
1969
- *
1970
- * @minItems 1
2509
+ * Click-through attribution window (e.g. '7d', '28d', '30d')
1971
2510
  */
1972
- values: [string, ...string[]];
1973
- }[];
1974
- /**
1975
- * AXE segment ID to include for targeting
1976
- */
1977
- axe_include_segment?: string;
1978
- /**
1979
- * AXE segment ID to exclude from targeting
1980
- */
1981
- axe_exclude_segment?: string;
1982
- frequency_cap?: FrequencyCap;
1983
- property_list?: PropertyListReference;
2511
+ click_through: string;
2512
+ /**
2513
+ * View-through attribution window (e.g. '1d', '7d')
2514
+ */
2515
+ view_through?: string;
2516
+ [k: string]: unknown | undefined;
2517
+ };
1984
2518
  [k: string]: unknown | undefined;
1985
2519
  }
1986
2520
  /**
1987
- * Frequency capping settings for package-level application
2521
+ * 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).
1988
2522
  */
1989
- export interface FrequencyCap {
2523
+ export interface TargetingOverlay {
1990
2524
  /**
1991
- * Minutes to suppress after impression
2525
+ * Restrict delivery to specific countries. ISO 3166-1 alpha-2 codes (e.g., 'US', 'GB', 'DE').
2526
+ *
2527
+ * @minItems 1
1992
2528
  */
1993
- suppress_minutes: number;
1994
- [k: string]: unknown | undefined;
1995
- }
1996
- /**
1997
- * 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.
1998
- */
1999
- export interface CreativeAssignment {
2529
+ geo_countries?: [string, ...string[]];
2000
2530
  /**
2001
- * Unique identifier for the creative
2531
+ * Exclude specific countries from delivery. ISO 3166-1 alpha-2 codes (e.g., 'US', 'GB', 'DE').
2532
+ *
2533
+ * @minItems 1
2002
2534
  */
2003
- creative_id: string;
2535
+ geo_countries_exclude?: [string, ...string[]];
2004
2536
  /**
2005
- * Delivery weight for this creative
2537
+ * Restrict delivery to specific regions/states. ISO 3166-2 subdivision codes (e.g., 'US-CA', 'GB-SCT').
2538
+ *
2539
+ * @minItems 1
2006
2540
  */
2007
- weight?: number;
2541
+ geo_regions?: [string, ...string[]];
2008
2542
  /**
2009
- * 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.
2543
+ * Exclude specific regions/states from delivery. ISO 3166-2 subdivision codes (e.g., 'US-CA', 'GB-SCT').
2010
2544
  *
2011
2545
  * @minItems 1
2012
2546
  */
2013
- placement_ids?: [string, ...string[]];
2014
- [k: string]: unknown | undefined;
2015
- }
2016
- /**
2017
- * Creative asset for upload to library - supports static assets, generative formats, and third-party snippets
2018
- */
2019
- export interface CreativeAsset {
2547
+ geo_regions_exclude?: [string, ...string[]];
2020
2548
  /**
2021
- * Unique identifier for the creative
2022
- */
2549
+ * Restrict delivery to specific metro areas. Each entry specifies the classification system and target values. Seller must declare supported systems in get_adcp_capabilities.
2550
+ *
2551
+ * @minItems 1
2552
+ */
2553
+ geo_metros?: [
2554
+ {
2555
+ system: MetroAreaSystem;
2556
+ /**
2557
+ * Metro codes within the system (e.g., ['501', '602'] for Nielsen DMAs)
2558
+ *
2559
+ * @minItems 1
2560
+ */
2561
+ values: [string, ...string[]];
2562
+ },
2563
+ ...{
2564
+ system: MetroAreaSystem;
2565
+ /**
2566
+ * Metro codes within the system (e.g., ['501', '602'] for Nielsen DMAs)
2567
+ *
2568
+ * @minItems 1
2569
+ */
2570
+ values: [string, ...string[]];
2571
+ }[]
2572
+ ];
2573
+ /**
2574
+ * Exclude specific metro areas from delivery. Each entry specifies the classification system and excluded values. Seller must declare supported systems in get_adcp_capabilities.
2575
+ *
2576
+ * @minItems 1
2577
+ */
2578
+ geo_metros_exclude?: [
2579
+ {
2580
+ system: MetroAreaSystem1;
2581
+ /**
2582
+ * Metro codes to exclude within the system (e.g., ['501', '602'] for Nielsen DMAs)
2583
+ *
2584
+ * @minItems 1
2585
+ */
2586
+ values: [string, ...string[]];
2587
+ },
2588
+ ...{
2589
+ system: MetroAreaSystem1;
2590
+ /**
2591
+ * Metro codes to exclude within the system (e.g., ['501', '602'] for Nielsen DMAs)
2592
+ *
2593
+ * @minItems 1
2594
+ */
2595
+ values: [string, ...string[]];
2596
+ }[]
2597
+ ];
2598
+ /**
2599
+ * Restrict delivery to specific postal areas. Each entry specifies the postal system and target values. Seller must declare supported systems in get_adcp_capabilities.
2600
+ *
2601
+ * @minItems 1
2602
+ */
2603
+ geo_postal_areas?: [
2604
+ {
2605
+ system: PostalCodeSystem;
2606
+ /**
2607
+ * Postal codes within the system (e.g., ['10001', '10002'] for us_zip)
2608
+ *
2609
+ * @minItems 1
2610
+ */
2611
+ values: [string, ...string[]];
2612
+ },
2613
+ ...{
2614
+ system: PostalCodeSystem;
2615
+ /**
2616
+ * Postal codes within the system (e.g., ['10001', '10002'] for us_zip)
2617
+ *
2618
+ * @minItems 1
2619
+ */
2620
+ values: [string, ...string[]];
2621
+ }[]
2622
+ ];
2623
+ /**
2624
+ * Exclude specific postal areas from delivery. Each entry specifies the postal system and excluded values. Seller must declare supported systems in get_adcp_capabilities.
2625
+ *
2626
+ * @minItems 1
2627
+ */
2628
+ geo_postal_areas_exclude?: [
2629
+ {
2630
+ system: PostalCodeSystem1;
2631
+ /**
2632
+ * Postal codes to exclude within the system (e.g., ['10001', '10002'] for us_zip)
2633
+ *
2634
+ * @minItems 1
2635
+ */
2636
+ values: [string, ...string[]];
2637
+ },
2638
+ ...{
2639
+ system: PostalCodeSystem1;
2640
+ /**
2641
+ * Postal codes to exclude within the system (e.g., ['10001', '10002'] for us_zip)
2642
+ *
2643
+ * @minItems 1
2644
+ */
2645
+ values: [string, ...string[]];
2646
+ }[]
2647
+ ];
2648
+ /**
2649
+ * AXE segment ID to include for targeting
2650
+ */
2651
+ axe_include_segment?: string;
2652
+ /**
2653
+ * AXE segment ID to exclude from targeting
2654
+ */
2655
+ axe_exclude_segment?: string;
2656
+ frequency_cap?: FrequencyCap;
2657
+ property_list?: PropertyListReference;
2658
+ /**
2659
+ * Age restriction for compliance. Use for legal requirements (alcohol, gambling), not audience targeting.
2660
+ */
2661
+ age_restriction?: {
2662
+ /**
2663
+ * Minimum age required
2664
+ */
2665
+ min: number;
2666
+ /**
2667
+ * Whether verified age (not inferred) is required for compliance
2668
+ */
2669
+ verification_required?: boolean;
2670
+ /**
2671
+ * Accepted verification methods. If omitted, any method the platform supports is acceptable.
2672
+ *
2673
+ * @minItems 1
2674
+ */
2675
+ accepted_methods?: [AgeVerificationMethod, ...AgeVerificationMethod[]];
2676
+ };
2677
+ /**
2678
+ * Restrict to specific platforms. Use for technical compatibility (app only works on iOS). Values from Sec-CH-UA-Platform standard, extended for CTV.
2679
+ *
2680
+ * @minItems 1
2681
+ */
2682
+ device_platform?: [DevicePlatform, ...DevicePlatform[]];
2683
+ /**
2684
+ * Restrict to users with specific language preferences. ISO 639-1 codes (e.g., 'en', 'es', 'fr').
2685
+ *
2686
+ * @minItems 1
2687
+ */
2688
+ language?: [string, ...string[]];
2689
+ [k: string]: unknown | undefined;
2690
+ }
2691
+ /**
2692
+ * Frequency capping settings for package-level application
2693
+ */
2694
+ export interface FrequencyCap {
2695
+ /**
2696
+ * Minutes to suppress after impression
2697
+ */
2698
+ suppress_minutes: number;
2699
+ [k: string]: unknown | undefined;
2700
+ }
2701
+ /**
2702
+ * 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.
2703
+ */
2704
+ export interface CreativeAssignment {
2705
+ /**
2706
+ * Unique identifier for the creative
2707
+ */
2708
+ creative_id: string;
2709
+ /**
2710
+ * Delivery weight for this creative
2711
+ */
2712
+ weight?: number;
2713
+ /**
2714
+ * 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.
2715
+ *
2716
+ * @minItems 1
2717
+ */
2718
+ placement_ids?: [string, ...string[]];
2719
+ [k: string]: unknown | undefined;
2720
+ }
2721
+ /**
2722
+ * Creative asset for upload to library - supports static assets, generative formats, and third-party snippets
2723
+ */
2724
+ export interface CreativeAsset {
2725
+ /**
2726
+ * Unique identifier for the creative
2727
+ */
2023
2728
  creative_id: string;
2024
2729
  /**
2025
2730
  * Human-readable creative name
@@ -2203,6 +2908,18 @@ export interface VideoAsset {
2203
2908
  * True peak level in dBFS
2204
2909
  */
2205
2910
  audio_true_peak_dbfs?: number;
2911
+ /**
2912
+ * URL to captions file (WebVTT, SRT, etc.)
2913
+ */
2914
+ captions_url?: string;
2915
+ /**
2916
+ * URL to text transcript of the video content
2917
+ */
2918
+ transcript_url?: string;
2919
+ /**
2920
+ * URL to audio description track for visually impaired users
2921
+ */
2922
+ audio_description_url?: string;
2206
2923
  [k: string]: unknown | undefined;
2207
2924
  }
2208
2925
  /**
@@ -2253,6 +2970,10 @@ export interface AudioAsset {
2253
2970
  * True peak level in dBFS
2254
2971
  */
2255
2972
  true_peak_dbfs?: number;
2973
+ /**
2974
+ * URL to text transcript of the audio content
2975
+ */
2976
+ transcript_url?: string;
2256
2977
  [k: string]: unknown | undefined;
2257
2978
  }
2258
2979
  /**
@@ -2281,6 +3002,27 @@ export interface HTMLAsset {
2281
3002
  * HTML version (e.g., 'HTML5')
2282
3003
  */
2283
3004
  version?: string;
3005
+ /**
3006
+ * Self-declared accessibility properties for this opaque creative
3007
+ */
3008
+ accessibility?: {
3009
+ /**
3010
+ * Text alternative describing the creative content
3011
+ */
3012
+ alt_text?: string;
3013
+ /**
3014
+ * Whether the creative can be fully operated via keyboard
3015
+ */
3016
+ keyboard_navigable?: boolean;
3017
+ /**
3018
+ * Whether the creative respects prefers-reduced-motion or provides pause/stop controls
3019
+ */
3020
+ motion_control?: boolean;
3021
+ /**
3022
+ * Whether the creative has been tested with screen readers
3023
+ */
3024
+ screen_reader_tested?: boolean;
3025
+ };
2284
3026
  [k: string]: unknown | undefined;
2285
3027
  }
2286
3028
  /**
@@ -2306,6 +3048,27 @@ export interface JavaScriptAsset {
2306
3048
  */
2307
3049
  content: string;
2308
3050
  module_type?: JavaScriptModuleType;
3051
+ /**
3052
+ * Self-declared accessibility properties for this opaque creative
3053
+ */
3054
+ accessibility?: {
3055
+ /**
3056
+ * Text alternative describing the creative content
3057
+ */
3058
+ alt_text?: string;
3059
+ /**
3060
+ * Whether the creative can be fully operated via keyboard
3061
+ */
3062
+ keyboard_navigable?: boolean;
3063
+ /**
3064
+ * Whether the creative respects prefers-reduced-motion or provides pause/stop controls
3065
+ */
3066
+ motion_control?: boolean;
3067
+ /**
3068
+ * Whether the creative has been tested with screen readers
3069
+ */
3070
+ screen_reader_tested?: boolean;
3071
+ };
2309
3072
  [k: string]: unknown | undefined;
2310
3073
  }
2311
3074
  /**
@@ -2345,28 +3108,6 @@ export interface PromotedOfferings {
2345
3108
  /**
2346
3109
  * Inline brand manifest object
2347
3110
  */
2348
- export interface PromotedProducts {
2349
- /**
2350
- * Direct product SKU references from the brand manifest product catalog
2351
- */
2352
- manifest_skus?: string[];
2353
- /**
2354
- * Select products by tags from the brand manifest product catalog (e.g., 'organic', 'sauces', 'holiday')
2355
- */
2356
- manifest_tags?: string[];
2357
- /**
2358
- * Select products from a specific category in the brand manifest product catalog (e.g., 'beverages/soft-drinks', 'food/sauces')
2359
- */
2360
- manifest_category?: string;
2361
- /**
2362
- * Natural language query to select products from the brand manifest (e.g., 'all Kraft Heinz pasta sauces', 'organic products under $20')
2363
- */
2364
- manifest_query?: string;
2365
- [k: string]: unknown | undefined;
2366
- }
2367
- /**
2368
- * A promotable offering from a brand. Can represent a campaign, product promotion, service, or any other thing the brand wants to make available. Offerings can be promoted via traditional creatives (using portfolio_ref or assets) or conversational SI experiences (via si_agent_url at the promoted-offerings level).
2369
- */
2370
3111
  export interface Offering {
2371
3112
  /**
2372
3113
  * Unique identifier for this offering. Used by hosts to reference specific offerings in si_get_offering calls.
@@ -2526,9 +3267,25 @@ export interface Account {
2526
3267
  */
2527
3268
  billing_proxy?: string;
2528
3269
  /**
2529
- * Account status
3270
+ * Account status. pending_approval: seller reviewing (credit, contracts). payment_required: credit limit reached or funds depleted. suspended: was active, now paused. closed: terminated.
3271
+ */
3272
+ status: 'active' | 'pending_approval' | 'payment_required' | 'suspended' | 'closed';
3273
+ /**
3274
+ * House domain where brand.json is hosted. Canonical identity anchor for the brand.
2530
3275
  */
2531
- status: 'active' | 'suspended' | 'closed';
3276
+ house?: string;
3277
+ /**
3278
+ * Brand ID within the house portfolio (from brand.json)
3279
+ */
3280
+ brand_id?: string;
3281
+ /**
3282
+ * Domain of the entity operating this account
3283
+ */
3284
+ operator?: string;
3285
+ /**
3286
+ * Who is invoiced on this account. brand: seller invoices the brand directly. operator: seller invoices the operator (agency). agent: agent consolidates billing.
3287
+ */
3288
+ billing?: 'brand' | 'operator' | 'agent';
2532
3289
  /**
2533
3290
  * Identifier for the rate card applied to this account
2534
3291
  */
@@ -2545,6 +3302,7 @@ export interface Account {
2545
3302
  currency: string;
2546
3303
  };
2547
3304
  ext?: ExtensionObject;
3305
+ [k: string]: unknown | undefined;
2548
3306
  }
2549
3307
  /**
2550
3308
  * 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.
@@ -2588,6 +3346,7 @@ export interface Package {
2588
3346
  * Format IDs that creative assets will be provided for this package
2589
3347
  */
2590
3348
  format_ids_to_provide?: FormatID[];
3349
+ optimization_goal?: OptimizationGoal;
2591
3350
  /**
2592
3351
  * Whether this package is paused by the buyer. Paused packages do not deliver impressions. Defaults to false.
2593
3352
  */
@@ -2596,7 +3355,7 @@ export interface Package {
2596
3355
  [k: string]: unknown | undefined;
2597
3356
  }
2598
3357
  /**
2599
- * Optional geographic refinements for media buys. Most targeting should be expressed in the brief and handled by the publisher. These fields are primarily for geographic restrictions (RCT testing, regulatory compliance).
3358
+ * 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).
2600
3359
  */
2601
3360
  export interface CreateMediaBuyError {
2602
3361
  /**
@@ -2794,19 +3553,7 @@ export interface ListCreativesRequest {
2794
3553
  field?: CreativeSortField;
2795
3554
  direction?: SortDirection;
2796
3555
  };
2797
- /**
2798
- * Pagination parameters
2799
- */
2800
- pagination?: {
2801
- /**
2802
- * Maximum number of creatives to return
2803
- */
2804
- limit?: number;
2805
- /**
2806
- * Number of creatives to skip
2807
- */
2808
- offset?: number;
2809
- };
3556
+ pagination?: PaginationRequest;
2810
3557
  /**
2811
3558
  * Include package assignment information in response
2812
3559
  */
@@ -2832,24 +3579,34 @@ export interface ListCreativesRequest {
2832
3579
  export interface CreativeFilters {
2833
3580
  /**
2834
3581
  * Filter creatives by owning accounts. Useful for agencies managing multiple client accounts.
3582
+ *
3583
+ * @minItems 1
2835
3584
  */
2836
- account_ids?: string[];
3585
+ account_ids?: [string, ...string[]];
2837
3586
  /**
2838
3587
  * Filter by creative format types (e.g., video, audio, display)
3588
+ *
3589
+ * @minItems 1
2839
3590
  */
2840
- formats?: string[];
3591
+ formats?: [string, ...string[]];
2841
3592
  /**
2842
3593
  * Filter by creative approval statuses
3594
+ *
3595
+ * @minItems 1
2843
3596
  */
2844
- statuses?: CreativeStatus[];
3597
+ statuses?: [CreativeStatus, ...CreativeStatus[]];
2845
3598
  /**
2846
3599
  * Filter by creative tags (all tags must match)
3600
+ *
3601
+ * @minItems 1
2847
3602
  */
2848
- tags?: string[];
3603
+ tags?: [string, ...string[]];
2849
3604
  /**
2850
3605
  * Filter by creative tags (any tag must match)
3606
+ *
3607
+ * @minItems 1
2851
3608
  */
2852
- tags_any?: string[];
3609
+ tags_any?: [string, ...string[]];
2853
3610
  /**
2854
3611
  * Filter by creative names containing this text (case-insensitive)
2855
3612
  */
@@ -2857,9 +3614,10 @@ export interface CreativeFilters {
2857
3614
  /**
2858
3615
  * Filter by specific creative IDs
2859
3616
  *
3617
+ * @minItems 1
2860
3618
  * @maxItems 100
2861
3619
  */
2862
- creative_ids?: string[];
3620
+ creative_ids?: [string, ...string[]];
2863
3621
  /**
2864
3622
  * Filter creatives created after this date (ISO 8601)
2865
3623
  */
@@ -2878,16 +3636,22 @@ export interface CreativeFilters {
2878
3636
  updated_before?: string;
2879
3637
  /**
2880
3638
  * Filter creatives assigned to any of these packages
3639
+ *
3640
+ * @minItems 1
2881
3641
  */
2882
- assigned_to_packages?: string[];
3642
+ assigned_to_packages?: [string, ...string[]];
2883
3643
  /**
2884
3644
  * Filter creatives assigned to any of these media buys
3645
+ *
3646
+ * @minItems 1
2885
3647
  */
2886
- media_buy_ids?: string[];
3648
+ media_buy_ids?: [string, ...string[]];
2887
3649
  /**
2888
3650
  * Filter creatives assigned to media buys with any of these buyer references
3651
+ *
3652
+ * @minItems 1
2889
3653
  */
2890
- buyer_refs?: string[];
3654
+ buyer_refs?: [string, ...string[]];
2891
3655
  /**
2892
3656
  * Filter for unassigned creatives when true, assigned creatives when false
2893
3657
  */
@@ -2899,7 +3663,7 @@ export interface CreativeFilters {
2899
3663
  [k: string]: unknown | undefined;
2900
3664
  }
2901
3665
  /**
2902
- * 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.
3666
+ * Standard cursor-based pagination parameters for list operations
2903
3667
  */
2904
3668
  /**
2905
3669
  * Sort direction for list queries
@@ -2952,11 +3716,11 @@ export interface ListCreativesResponse {
2952
3716
  /**
2953
3717
  * Total number of creatives matching filters (across all pages)
2954
3718
  */
2955
- total_matching: number;
3719
+ total_matching?: number;
2956
3720
  /**
2957
3721
  * Number of creatives returned in this response
2958
3722
  */
2959
- returned: number;
3723
+ returned?: number;
2960
3724
  /**
2961
3725
  * List of filters that were applied to the query
2962
3726
  */
@@ -2969,31 +3733,7 @@ export interface ListCreativesResponse {
2969
3733
  direction?: SortDirection;
2970
3734
  };
2971
3735
  };
2972
- /**
2973
- * Pagination information for navigating results
2974
- */
2975
- pagination: {
2976
- /**
2977
- * Maximum number of results requested
2978
- */
2979
- limit: number;
2980
- /**
2981
- * Number of results skipped
2982
- */
2983
- offset: number;
2984
- /**
2985
- * Whether more results are available
2986
- */
2987
- has_more: boolean;
2988
- /**
2989
- * Total number of pages available
2990
- */
2991
- total_pages?: number;
2992
- /**
2993
- * Current page number (1-based)
2994
- */
2995
- current_page?: number;
2996
- };
3736
+ pagination: PaginationResponse;
2997
3737
  /**
2998
3738
  * Array of creative assets matching the query
2999
3739
  */
@@ -3132,7 +3872,7 @@ export interface ListCreativesResponse {
3132
3872
  ext?: ExtensionObject;
3133
3873
  }
3134
3874
  /**
3135
- * Account that owns this creative
3875
+ * Standard cursor-based pagination metadata for list responses
3136
3876
  */
3137
3877
  /**
3138
3878
  * Request parameters for updating campaign and package settings
@@ -3195,6 +3935,7 @@ export type PackageUpdate = {
3195
3935
  * Pause/resume specific package (true = paused, false = active)
3196
3936
  */
3197
3937
  paused?: boolean;
3938
+ optimization_goal?: OptimizationGoal;
3198
3939
  targeting_overlay?: TargetingOverlay;
3199
3940
  /**
3200
3941
  * Replace creative assignments for this package with optional weights and placement targeting. Uses replacement semantics - omit to leave assignments unchanged.
@@ -3203,9 +3944,10 @@ export type PackageUpdate = {
3203
3944
  /**
3204
3945
  * Upload new creative assets and assign to this package (creatives will be added to library). Use creative_assignments instead for existing library creatives.
3205
3946
  *
3947
+ * @minItems 1
3206
3948
  * @maxItems 100
3207
3949
  */
3208
- creatives?: CreativeAsset[];
3950
+ creatives?: [CreativeAsset, ...CreativeAsset[]];
3209
3951
  ext?: ExtensionObject;
3210
3952
  [k: string]: unknown | undefined;
3211
3953
  } & {
@@ -3263,6 +4005,10 @@ export type MediaBuyStatus = 'pending_activation' | 'active' | 'paused' | 'compl
3263
4005
  * Request parameters for retrieving comprehensive delivery metrics
3264
4006
  */
3265
4007
  export interface GetMediaBuyDeliveryRequest {
4008
+ /**
4009
+ * Filter delivery data to a specific account. When provided, only returns media buys belonging to this account. When omitted, returns data across all accessible accounts. Optional if the agent has a single account.
4010
+ */
4011
+ account_id?: string;
3266
4012
  /**
3267
4013
  * Array of publisher media buy IDs to get delivery data for
3268
4014
  */
@@ -3276,11 +4022,11 @@ export interface GetMediaBuyDeliveryRequest {
3276
4022
  */
3277
4023
  status_filter?: MediaBuyStatus | MediaBuyStatus[];
3278
4024
  /**
3279
- * Start date for reporting period (YYYY-MM-DD)
4025
+ * Start date for reporting period (YYYY-MM-DD). When omitted along with end_date, returns campaign lifetime data. Only accepted when the product's reporting_capabilities.date_range_support is 'date_range'.
3280
4026
  */
3281
4027
  start_date?: string;
3282
4028
  /**
3283
- * End date for reporting period (YYYY-MM-DD)
4029
+ * End date for reporting period (YYYY-MM-DD). When omitted along with start_date, returns campaign lifetime data. Only accepted when the product's reporting_capabilities.date_range_support is 'date_range'.
3284
4030
  */
3285
4031
  end_date?: string;
3286
4032
  context?: ContextObject;
@@ -3289,14 +4035,18 @@ export interface GetMediaBuyDeliveryRequest {
3289
4035
  /**
3290
4036
  * 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.
3291
4037
  */
4038
+ /**
4039
+ * Attribution model used to assign credit when multiple touchpoints exist
4040
+ */
4041
+ export type AttributionModel = 'last_touch' | 'first_touch' | 'linear' | 'time_decay' | 'data_driven';
3292
4042
  /**
3293
4043
  * Pricing model used for this media buy
3294
4044
  */
3295
- export type PricingModel = 'cpm' | 'vcpm' | 'cpc' | 'cpcv' | 'cpv' | 'cpp' | 'flat_rate';
4045
+ export type PricingModel = 'cpm' | 'vcpm' | 'cpc' | 'cpcv' | 'cpv' | 'cpp' | 'cpa' | 'flat_rate' | 'time';
3296
4046
  /**
3297
- * The pricing model used for this package (e.g., cpm, cpcv, cpp). Indicates how the package is billed and which metrics are most relevant for optimization.
4047
+ * The event type
3298
4048
  */
3299
- export type PricingModel1 = 'cpm' | 'vcpm' | 'cpc' | 'cpcv' | 'cpv' | 'cpp' | 'flat_rate';
4049
+ export type PricingModel1 = 'cpm' | 'vcpm' | 'cpc' | 'cpcv' | 'cpv' | 'cpp' | 'cpa' | 'flat_rate' | 'time';
3300
4050
  /**
3301
4051
  * Response payload for get_media_buy_delivery task
3302
4052
  */
@@ -3338,6 +4088,7 @@ export interface GetMediaBuyDeliveryResponse {
3338
4088
  * ISO 4217 currency code
3339
4089
  */
3340
4090
  currency: string;
4091
+ attribution_window?: AttributionWindow;
3341
4092
  /**
3342
4093
  * Combined metrics across all returned media buys. Only included in API responses (get_media_buy_delivery), not in webhook notifications.
3343
4094
  */
@@ -3358,6 +4109,26 @@ export interface GetMediaBuyDeliveryResponse {
3358
4109
  * Total video completions across all media buys (if applicable)
3359
4110
  */
3360
4111
  video_completions?: number;
4112
+ /**
4113
+ * Total conversions across all media buys (if applicable)
4114
+ */
4115
+ conversions?: number;
4116
+ /**
4117
+ * Total conversion value across all media buys (if applicable)
4118
+ */
4119
+ conversion_value?: number;
4120
+ /**
4121
+ * Aggregate return on ad spend across all media buys (total conversion_value / total spend)
4122
+ */
4123
+ roas?: number;
4124
+ /**
4125
+ * Fraction of total conversions across all media buys from first-time brand buyers (weighted by conversion volume, not a simple average of per-buy rates)
4126
+ */
4127
+ new_to_brand_rate?: number;
4128
+ /**
4129
+ * Aggregate cost per conversion across all media buys (total spend / total conversions)
4130
+ */
4131
+ cost_per_acquisition?: number;
3361
4132
  /**
3362
4133
  * Number of media buys included in the response
3363
4134
  */
@@ -3427,6 +4198,19 @@ export interface GetMediaBuyDeliveryResponse {
3427
4198
  * Whether this package is currently paused by the buyer
3428
4199
  */
3429
4200
  paused?: boolean;
4201
+ /**
4202
+ * Metrics broken down by creative within this package. Available when the seller supports creative-level reporting.
4203
+ */
4204
+ by_creative?: (DeliveryMetrics & {
4205
+ /**
4206
+ * Creative identifier matching the creative assignment
4207
+ */
4208
+ creative_id: string;
4209
+ /**
4210
+ * Observed delivery share for this creative within the package during the reporting period, expressed as a percentage (0-100). Reflects actual delivery distribution, not a configured setting.
4211
+ */
4212
+ weight?: number;
4213
+ })[];
3430
4214
  })[];
3431
4215
  /**
3432
4216
  * Day-by-day delivery
@@ -3444,6 +4228,22 @@ export interface GetMediaBuyDeliveryResponse {
3444
4228
  * Daily spend
3445
4229
  */
3446
4230
  spend: number;
4231
+ /**
4232
+ * Daily conversions
4233
+ */
4234
+ conversions?: number;
4235
+ /**
4236
+ * Daily conversion value
4237
+ */
4238
+ conversion_value?: number;
4239
+ /**
4240
+ * Daily return on ad spend (conversion_value / spend)
4241
+ */
4242
+ roas?: number;
4243
+ /**
4244
+ * Daily fraction of conversions from first-time brand buyers (0 = none, 1 = all)
4245
+ */
4246
+ new_to_brand_rate?: number;
3447
4247
  }[];
3448
4248
  }[];
3449
4249
  /**
@@ -3453,6 +4253,21 @@ export interface GetMediaBuyDeliveryResponse {
3453
4253
  context?: ContextObject;
3454
4254
  ext?: ExtensionObject;
3455
4255
  }
4256
+ /**
4257
+ * Attribution methodology and lookback windows used for conversion metrics in this response. All media buys from a single seller share the same attribution methodology. Enables cross-platform comparison (e.g., Amazon 14-day click vs. Criteo 30-day click).
4258
+ */
4259
+ export interface AttributionWindow {
4260
+ /**
4261
+ * Click-through attribution window in days. Conversions occurring within this many days after a click are attributed to the ad.
4262
+ */
4263
+ click_window_days?: number;
4264
+ /**
4265
+ * View-through attribution window in days. Conversions occurring within this many days after an ad impression (without click) are attributed to the ad.
4266
+ */
4267
+ view_window_days?: number;
4268
+ model: AttributionModel;
4269
+ [k: string]: unknown | undefined;
4270
+ }
3456
4271
  /**
3457
4272
  * Standard delivery metrics that can be reported at media buy, package, or creative level
3458
4273
  */
@@ -3486,13 +4301,48 @@ export interface DeliveryMetrics {
3486
4301
  */
3487
4302
  completion_rate?: number;
3488
4303
  /**
3489
- * Conversions (reserved for future CPA pricing support)
4304
+ * Total conversions attributed to this delivery. When by_event_type is present, this equals the sum of all by_event_type[].count entries.
3490
4305
  */
3491
4306
  conversions?: number;
3492
4307
  /**
3493
- * Leads generated (reserved for future CPL pricing support)
4308
+ * Total monetary value of attributed conversions (in the reporting currency)
4309
+ */
4310
+ conversion_value?: number;
4311
+ /**
4312
+ * Return on ad spend (conversion_value / spend)
4313
+ */
4314
+ roas?: number;
4315
+ /**
4316
+ * Cost per conversion (spend / conversions)
4317
+ */
4318
+ cost_per_acquisition?: number;
4319
+ /**
4320
+ * Fraction of conversions from first-time brand buyers (0 = none, 1 = all)
4321
+ */
4322
+ new_to_brand_rate?: number;
4323
+ /**
4324
+ * Leads generated (convenience alias for by_event_type where event_type='lead')
3494
4325
  */
3495
4326
  leads?: number;
4327
+ /**
4328
+ * Conversion metrics broken down by event type. Spend-derived metrics (ROAS, CPA) are only available at the package/totals level since spend cannot be attributed to individual event types.
4329
+ */
4330
+ by_event_type?: {
4331
+ event_type: EventType;
4332
+ /**
4333
+ * Event source that produced these conversions (for disambiguation when multiple event sources are configured)
4334
+ */
4335
+ event_source_id?: string;
4336
+ /**
4337
+ * Number of events of this type
4338
+ */
4339
+ count: number;
4340
+ /**
4341
+ * Total monetary value of events of this type
4342
+ */
4343
+ value?: number;
4344
+ [k: string]: unknown | undefined;
4345
+ }[];
3496
4346
  /**
3497
4347
  * Gross Rating Points delivered (for CPP)
3498
4348
  */
@@ -3582,6 +4432,55 @@ export interface DeliveryMetrics {
3582
4432
  }[];
3583
4433
  [k: string]: unknown | undefined;
3584
4434
  };
4435
+ /**
4436
+ * Viewability metrics. Viewable rate should be calculated as viewable_impressions / measurable_impressions (not total impressions), since some environments cannot measure viewability.
4437
+ */
4438
+ viewability?: {
4439
+ /**
4440
+ * Impressions where viewability could be measured. Excludes environments without measurement capability (e.g., non-Intersection Observer browsers, certain app environments).
4441
+ */
4442
+ measurable_impressions?: number;
4443
+ /**
4444
+ * Impressions that met the viewability threshold defined by the measurement standard.
4445
+ */
4446
+ viewable_impressions?: number;
4447
+ /**
4448
+ * Viewable impression rate (viewable_impressions / measurable_impressions). Range 0.0 to 1.0.
4449
+ */
4450
+ viewable_rate?: number;
4451
+ /**
4452
+ * 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.
4453
+ */
4454
+ standard?: 'mrc' | 'groupm';
4455
+ [k: string]: unknown | undefined;
4456
+ };
4457
+ /**
4458
+ * 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).
4459
+ */
4460
+ engagement_rate?: number;
4461
+ /**
4462
+ * Cost per click (spend / clicks)
4463
+ */
4464
+ cost_per_click?: number;
4465
+ /**
4466
+ * Conversion metrics broken down by action source (website, app, in_store, etc.). Useful for omnichannel sellers where conversions occur across digital and physical channels.
4467
+ */
4468
+ by_action_source?: {
4469
+ action_source: ActionSource;
4470
+ /**
4471
+ * Event source that produced these conversions (for disambiguation when multiple event sources are configured)
4472
+ */
4473
+ event_source_id?: string;
4474
+ /**
4475
+ * Number of conversions from this action source
4476
+ */
4477
+ count: number;
4478
+ /**
4479
+ * Total monetary value of conversions from this action source
4480
+ */
4481
+ value?: number;
4482
+ [k: string]: unknown | undefined;
4483
+ }[];
3585
4484
  [k: string]: unknown | undefined;
3586
4485
  }
3587
4486
  /**
@@ -3672,109 +4571,346 @@ export interface ProvidePerformanceFeedbackError {
3672
4571
  * Standard error structure for task-specific errors and warnings
3673
4572
  */
3674
4573
  /**
3675
- * VAST (Video Ad Serving Template) tag for third-party video ad serving
4574
+ * Standard marketing event types for event logging, aligned with IAB ECAPI
3676
4575
  */
3677
- export type HTTPMethod = 'GET' | 'POST';
4576
+ export interface SyncEventSourcesRequest {
4577
+ /**
4578
+ * Account to configure event sources for
4579
+ */
4580
+ account_id: string;
4581
+ /**
4582
+ * Event sources to sync (create or update). When omitted, the call is discovery-only and returns all existing event sources on the account without modification.
4583
+ */
4584
+ event_sources?: {
4585
+ /**
4586
+ * Unique identifier for this event source
4587
+ */
4588
+ event_source_id: string;
4589
+ /**
4590
+ * Human-readable name for this event source
4591
+ */
4592
+ name?: string;
4593
+ /**
4594
+ * Event types this source handles (e.g. purchase, lead). If omitted, accepts all event types.
4595
+ */
4596
+ event_types?: EventType[];
4597
+ /**
4598
+ * Domains authorized to send events for this event source
4599
+ */
4600
+ allowed_domains?: string[];
4601
+ }[];
4602
+ /**
4603
+ * When true, event sources not included in this sync will be removed
4604
+ */
4605
+ delete_missing?: boolean;
4606
+ context?: ContextObject;
4607
+ ext?: ExtensionObject;
4608
+ }
3678
4609
  /**
3679
- * Expected content type of webhook response
4610
+ * 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.
3680
4611
  */
3681
- export type WebhookResponseType = 'html' | 'json' | 'xml' | 'javascript';
3682
4612
  /**
3683
- * Authentication method
4613
+ * Response from event source sync operation. Returns either per-source results OR operation-level errors.
3684
4614
  */
3685
- export type WebhookSecurityMethod = 'hmac_sha256' | 'api_key' | 'none';
4615
+ export type SyncEventSourcesResponse = SyncEventSourcesSuccess | SyncEventSourcesError;
3686
4616
  /**
3687
- * DAAST (Digital Audio Ad Serving Template) tag for third-party audio ad serving
4617
+ * Standard marketing event types for event logging, aligned with IAB ECAPI
3688
4618
  */
3689
- export interface BuildCreativeRequest {
4619
+ export interface SyncEventSourcesSuccess {
3690
4620
  /**
3691
- * Natural language instructions for the transformation or generation. For pure generation, this is the creative brief. For transformation, this provides guidance on how to adapt the creative.
4621
+ * Results for each event source, including both synced and seller-managed sources on the account
3692
4622
  */
3693
- message?: string;
3694
- creative_manifest?: CreativeManifest;
3695
- target_format_id: FormatID1;
4623
+ event_sources: {
4624
+ /**
4625
+ * Event source ID from the request
4626
+ */
4627
+ event_source_id: string;
4628
+ /**
4629
+ * Name of the event source
4630
+ */
4631
+ name?: string;
4632
+ /**
4633
+ * Seller-assigned identifier for this event source (the ID in the seller's ad platform)
4634
+ */
4635
+ seller_id?: string;
4636
+ /**
4637
+ * Event types this source handles
4638
+ */
4639
+ event_types?: EventType[];
4640
+ action_source?: ActionSource;
4641
+ /**
4642
+ * Who manages this event source. 'buyer' = configured via this sync. 'seller' = always-on, managed by the seller (e.g. Amazon sales attribution for Amazon advertisers).
4643
+ */
4644
+ managed_by?: 'buyer' | 'seller';
4645
+ /**
4646
+ * Implementation details for activating this event source (e.g. JavaScript tag, pixel URL)
4647
+ */
4648
+ setup?: {
4649
+ /**
4650
+ * Code snippet to place on the site (JavaScript, HTML pixel, etc.)
4651
+ */
4652
+ snippet?: string;
4653
+ /**
4654
+ * Type of implementation. 'server_only' means no client-side tag is needed.
4655
+ */
4656
+ snippet_type?: 'javascript' | 'html' | 'pixel_url' | 'server_only';
4657
+ /**
4658
+ * Human/agent-readable setup instructions
4659
+ */
4660
+ instructions?: string;
4661
+ };
4662
+ /**
4663
+ * Action taken for this event source
4664
+ */
4665
+ action: 'created' | 'updated' | 'unchanged' | 'deleted' | 'failed';
4666
+ /**
4667
+ * Errors for this event source (only present when action='failed')
4668
+ */
4669
+ errors?: string[];
4670
+ }[];
3696
4671
  context?: ContextObject;
3697
4672
  ext?: ExtensionObject;
3698
4673
  }
3699
4674
  /**
3700
- * Creative manifest to transform or generate from. For pure generation, this should include the target format_id and any required input assets (e.g., promoted_offerings for generative formats). For transformation (e.g., resizing, reformatting), this is the complete creative to adapt.
4675
+ * 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.
3701
4676
  */
3702
- export interface CreativeManifest {
3703
- format_id: FormatID;
4677
+ export interface SyncEventSourcesError {
3704
4678
  /**
3705
- * Product name or offering being advertised. Maps to promoted_offerings in create_media_buy request to associate creative with the product being promoted.
4679
+ * Operation-level errors that prevented processing
3706
4680
  */
3707
- promoted_offering?: string;
4681
+ errors: Error[];
4682
+ context?: ContextObject;
4683
+ ext?: ExtensionObject;
4684
+ }
4685
+ /**
4686
+ * Standard error structure for task-specific errors and warnings
4687
+ */
4688
+ /**
4689
+ * Standard event type
4690
+ */
4691
+ export type UserMatch = {
4692
+ [k: string]: unknown | undefined;
4693
+ } & {
3708
4694
  /**
3709
- * 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.
4695
+ * Universal ID values for user matching
3710
4696
  *
3711
- * IMPORTANT: Creative manifest validation MUST be performed in the context of the format specification. The format defines what type each asset_id should be, which eliminates any validation ambiguity.
4697
+ * @minItems 1
3712
4698
  */
3713
- assets: {
3714
- [k: string]: unknown | undefined;
3715
- };
4699
+ uids?: [
4700
+ {
4701
+ type: UIDType;
4702
+ /**
4703
+ * Universal ID value
4704
+ */
4705
+ value: string;
4706
+ [k: string]: unknown | undefined;
4707
+ },
4708
+ ...{
4709
+ type: UIDType;
4710
+ /**
4711
+ * Universal ID value
4712
+ */
4713
+ value: string;
4714
+ [k: string]: unknown | undefined;
4715
+ }[]
4716
+ ];
4717
+ /**
4718
+ * SHA-256 hash of lowercase, trimmed email address. Buyer must normalize before hashing: lowercase, trim whitespace.
4719
+ */
4720
+ hashed_email?: string;
4721
+ /**
4722
+ * SHA-256 hash of E.164-formatted phone number (e.g. +12065551234). Buyer must normalize to E.164 before hashing.
4723
+ */
4724
+ hashed_phone?: string;
4725
+ /**
4726
+ * Platform click identifier (fbclid, gclid, ttclid, ScCid, etc.)
4727
+ */
4728
+ click_id?: string;
4729
+ /**
4730
+ * Type of click identifier (e.g. fbclid, gclid, ttclid, msclkid, ScCid)
4731
+ */
4732
+ click_id_type?: string;
4733
+ /**
4734
+ * Client IP address for probabilistic matching
4735
+ */
4736
+ client_ip?: string;
4737
+ /**
4738
+ * Client user agent string for probabilistic matching
4739
+ */
4740
+ client_user_agent?: string;
3716
4741
  ext?: ExtensionObject;
3717
4742
  [k: string]: unknown | undefined;
4743
+ };
4744
+ /**
4745
+ * Universal ID type
4746
+ */
4747
+ export type UIDType = 'rampid' | 'id5' | 'uid2' | 'euid' | 'pairid' | 'external_id' | 'maid' | 'other';
4748
+ /**
4749
+ * Where the event originated
4750
+ */
4751
+ export interface LogEventRequest {
4752
+ /**
4753
+ * Event source configured on the account via sync_event_sources
4754
+ */
4755
+ event_source_id: string;
4756
+ /**
4757
+ * Test event code for validation without affecting production data. Events with this code appear in the platform's test events UI.
4758
+ */
4759
+ test_event_code?: string;
4760
+ /**
4761
+ * Events to log
4762
+ *
4763
+ * @maxItems 10000
4764
+ */
4765
+ events: Event[];
4766
+ context?: ContextObject;
4767
+ ext?: ExtensionObject;
3718
4768
  }
3719
4769
  /**
3720
- * 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'}).
4770
+ * A marketing event (conversion, engagement, or custom) for attribution and optimization
3721
4771
  */
3722
- export interface WebhookAsset {
4772
+ export interface Event {
3723
4773
  /**
3724
- * Webhook URL to call for dynamic content
4774
+ * Unique identifier for deduplication (scoped to event_type + event_source_id)
3725
4775
  */
3726
- url: string;
3727
- method?: HTTPMethod;
4776
+ event_id: string;
4777
+ event_type: EventType;
3728
4778
  /**
3729
- * Maximum time to wait for response in milliseconds
4779
+ * ISO 8601 timestamp when the event occurred
3730
4780
  */
3731
- timeout_ms?: number;
4781
+ event_time: string;
4782
+ user_match?: UserMatch;
4783
+ custom_data?: EventCustomData;
4784
+ action_source?: ActionSource;
3732
4785
  /**
3733
- * Universal macros that can be passed to webhook (e.g., {DEVICE_TYPE}, {COUNTRY})
4786
+ * URL where the event occurred (required when action_source is 'website')
3734
4787
  */
3735
- supported_macros?: string[];
4788
+ event_source_url?: string;
3736
4789
  /**
3737
- * Universal macros that must be provided for webhook to function
4790
+ * Name for custom events (used when event_type is 'custom')
3738
4791
  */
3739
- required_macros?: string[];
3740
- response_type: WebhookResponseType;
4792
+ custom_event_name?: string;
4793
+ ext?: ExtensionObject;
4794
+ [k: string]: unknown | undefined;
4795
+ }
4796
+ /**
4797
+ * 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.
4798
+ */
4799
+ export interface EventCustomData {
3741
4800
  /**
3742
- * Security configuration for webhook calls
4801
+ * Monetary value of the event (should be accompanied by currency)
3743
4802
  */
3744
- security: {
3745
- method: WebhookSecurityMethod;
4803
+ value?: number;
4804
+ /**
4805
+ * ISO 4217 currency code
4806
+ */
4807
+ currency?: string;
4808
+ /**
4809
+ * Unique order or transaction identifier
4810
+ */
4811
+ order_id?: string;
4812
+ /**
4813
+ * Product or content identifiers
4814
+ */
4815
+ content_ids?: string[];
4816
+ /**
4817
+ * Category of content (product, service, etc.)
4818
+ */
4819
+ content_type?: string;
4820
+ /**
4821
+ * Name of the product or content
4822
+ */
4823
+ content_name?: string;
4824
+ /**
4825
+ * Category of the product or content
4826
+ */
4827
+ content_category?: string;
4828
+ /**
4829
+ * Number of items in the event
4830
+ */
4831
+ num_items?: number;
4832
+ /**
4833
+ * Search query for search events
4834
+ */
4835
+ search_string?: string;
4836
+ /**
4837
+ * Per-item details for e-commerce events
4838
+ */
4839
+ contents?: {
3746
4840
  /**
3747
- * Header name for HMAC signature (e.g., 'X-Signature')
4841
+ * Product or content identifier
3748
4842
  */
3749
- hmac_header?: string;
4843
+ id: string;
3750
4844
  /**
3751
- * Header name for API key (e.g., 'X-API-Key')
4845
+ * Quantity of this item
3752
4846
  */
3753
- api_key_header?: string;
3754
- };
4847
+ quantity?: number;
4848
+ /**
4849
+ * Price per unit of this item
4850
+ */
4851
+ price?: number;
4852
+ /**
4853
+ * Brand name of this item
4854
+ */
4855
+ brand?: string;
4856
+ [k: string]: unknown | undefined;
4857
+ }[];
4858
+ ext?: ExtensionObject;
3755
4859
  [k: string]: unknown | undefined;
3756
4860
  }
3757
4861
  /**
3758
- * CSS stylesheet asset
4862
+ * 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.
3759
4863
  */
3760
4864
  /**
3761
- * Response containing the transformed or generated creative manifest, ready for use with preview_creative or sync_creatives. Returns either the complete creative manifest OR error information, never both.
4865
+ * Response from event logging operation. Returns either event processing results OR operation-level errors.
3762
4866
  */
3763
- export type BuildCreativeResponse = BuildCreativeSuccess | BuildCreativeError;
4867
+ export type LogEventResponse = LogEventSuccess | LogEventError;
3764
4868
  /**
3765
- * VAST (Video Ad Serving Template) tag for third-party video ad serving
4869
+ * Success response - events received and queued for processing
3766
4870
  */
3767
- export interface BuildCreativeSuccess {
3768
- creative_manifest: CreativeManifest;
4871
+ export interface LogEventSuccess {
4872
+ /**
4873
+ * Number of events received
4874
+ */
4875
+ events_received: number;
4876
+ /**
4877
+ * Number of events successfully queued for processing
4878
+ */
4879
+ events_processed: number;
4880
+ /**
4881
+ * Events that failed validation
4882
+ */
4883
+ partial_failures?: {
4884
+ /**
4885
+ * ID of the failed event
4886
+ */
4887
+ event_id: string;
4888
+ /**
4889
+ * Error code
4890
+ */
4891
+ code: string;
4892
+ /**
4893
+ * Human-readable error message
4894
+ */
4895
+ message: string;
4896
+ }[];
4897
+ /**
4898
+ * Non-fatal issues (low match quality, missing recommended fields, deprecation notices)
4899
+ */
4900
+ warnings?: string[];
4901
+ /**
4902
+ * Overall match quality score for the batch (0.0 = no matches, 1.0 = all matched)
4903
+ */
4904
+ match_quality?: number;
3769
4905
  context?: ContextObject;
3770
4906
  ext?: ExtensionObject;
3771
4907
  }
3772
4908
  /**
3773
- * The generated or transformed creative manifest
4909
+ * 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.
3774
4910
  */
3775
- export interface BuildCreativeError {
4911
+ export interface LogEventError {
3776
4912
  /**
3777
- * Array of errors explaining why creative generation failed
4913
+ * Operation-level errors
3778
4914
  */
3779
4915
  errors: Error[];
3780
4916
  context?: ContextObject;
@@ -3784,15 +4920,127 @@ export interface BuildCreativeError {
3784
4920
  * Standard error structure for task-specific errors and warnings
3785
4921
  */
3786
4922
  /**
3787
- * Request to generate previews of one or more creative manifests. Accepts either a single creative request or an array of requests for batch processing.
4923
+ * VAST (Video Ad Serving Template) tag for third-party video ad serving
3788
4924
  */
3789
- export type PreviewCreativeRequest = {
3790
- /**
3791
- * Discriminator indicating this is a single preview request
3792
- */
3793
- request_type: 'single';
3794
- format_id: FormatID;
3795
- creative_manifest: CreativeManifest;
4925
+ export type HTTPMethod = 'GET' | 'POST';
4926
+ /**
4927
+ * Standardized macro placeholders for dynamic value substitution in creative tracking URLs. Macros are replaced with actual values at impression time. See docs/creative/universal-macros.mdx for detailed documentation.
4928
+ */
4929
+ export type WebhookResponseType = 'html' | 'json' | 'xml' | 'javascript';
4930
+ /**
4931
+ * Authentication method
4932
+ */
4933
+ export type WebhookSecurityMethod = 'hmac_sha256' | 'api_key' | 'none';
4934
+ /**
4935
+ * DAAST (Digital Audio Ad Serving Template) tag for third-party audio ad serving
4936
+ */
4937
+ export interface BuildCreativeRequest {
4938
+ /**
4939
+ * Natural language instructions for the transformation or generation. For pure generation, this is the creative brief. For transformation, this provides guidance on how to adapt the creative.
4940
+ */
4941
+ message?: string;
4942
+ creative_manifest?: CreativeManifest;
4943
+ target_format_id: FormatID1;
4944
+ context?: ContextObject;
4945
+ ext?: ExtensionObject;
4946
+ }
4947
+ /**
4948
+ * Creative manifest to transform or generate from. For pure generation, this should include the target format_id and any required input assets (e.g., promoted_offerings for generative formats). For transformation (e.g., resizing, reformatting), this is the complete creative to adapt.
4949
+ */
4950
+ export interface CreativeManifest {
4951
+ format_id: FormatID;
4952
+ /**
4953
+ * Product name or offering being advertised. Maps to promoted_offerings in create_media_buy request to associate creative with the product being promoted.
4954
+ */
4955
+ promoted_offering?: string;
4956
+ /**
4957
+ * 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.
4958
+ *
4959
+ * 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.
4960
+ */
4961
+ assets: {
4962
+ [k: string]: unknown | undefined;
4963
+ };
4964
+ ext?: ExtensionObject;
4965
+ [k: string]: unknown | undefined;
4966
+ }
4967
+ /**
4968
+ * 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'}).
4969
+ */
4970
+ export interface WebhookAsset {
4971
+ /**
4972
+ * Webhook URL to call for dynamic content
4973
+ */
4974
+ url: string;
4975
+ method?: HTTPMethod;
4976
+ /**
4977
+ * Maximum time to wait for response in milliseconds
4978
+ */
4979
+ timeout_ms?: number;
4980
+ /**
4981
+ * Universal macros that can be passed to webhook (e.g., DEVICE_TYPE, COUNTRY). See docs/creative/universal-macros.mdx for full list.
4982
+ */
4983
+ supported_macros?: (UniversalMacro | string)[];
4984
+ /**
4985
+ * Universal macros that must be provided for webhook to function
4986
+ */
4987
+ required_macros?: (UniversalMacro | string)[];
4988
+ response_type: WebhookResponseType;
4989
+ /**
4990
+ * Security configuration for webhook calls
4991
+ */
4992
+ security: {
4993
+ method: WebhookSecurityMethod;
4994
+ /**
4995
+ * Header name for HMAC signature (e.g., 'X-Signature')
4996
+ */
4997
+ hmac_header?: string;
4998
+ /**
4999
+ * Header name for API key (e.g., 'X-API-Key')
5000
+ */
5001
+ api_key_header?: string;
5002
+ };
5003
+ [k: string]: unknown | undefined;
5004
+ }
5005
+ /**
5006
+ * CSS stylesheet asset
5007
+ */
5008
+ /**
5009
+ * Response containing the transformed or generated creative manifest, ready for use with preview_creative or sync_creatives. Returns either the complete creative manifest OR error information, never both.
5010
+ */
5011
+ export type BuildCreativeResponse = BuildCreativeSuccess | BuildCreativeError;
5012
+ /**
5013
+ * VAST (Video Ad Serving Template) tag for third-party video ad serving
5014
+ */
5015
+ export interface BuildCreativeSuccess {
5016
+ creative_manifest: CreativeManifest;
5017
+ context?: ContextObject;
5018
+ ext?: ExtensionObject;
5019
+ }
5020
+ /**
5021
+ * The generated or transformed creative manifest
5022
+ */
5023
+ export interface BuildCreativeError {
5024
+ /**
5025
+ * Array of errors explaining why creative generation failed
5026
+ */
5027
+ errors: Error[];
5028
+ context?: ContextObject;
5029
+ ext?: ExtensionObject;
5030
+ }
5031
+ /**
5032
+ * Standard error structure for task-specific errors and warnings
5033
+ */
5034
+ /**
5035
+ * Request to generate previews of one or more creative manifests. Accepts either a single creative request or an array of requests for batch processing.
5036
+ */
5037
+ export type PreviewCreativeRequest = {
5038
+ /**
5039
+ * Discriminator indicating this is a single preview request
5040
+ */
5041
+ request_type: 'single';
5042
+ format_id?: FormatID;
5043
+ creative_manifest: CreativeManifest;
3796
5044
  /**
3797
5045
  * Array of input sets for generating multiple preview variants. Each input set defines macros and context values for one preview rendering. If not provided, creative agent will generate default previews.
3798
5046
  */
@@ -3830,7 +5078,7 @@ export type PreviewCreativeRequest = {
3830
5078
  * @maxItems 50
3831
5079
  */
3832
5080
  requests: {
3833
- format_id: FormatID2;
5081
+ format_id?: FormatID2;
3834
5082
  creative_manifest: CreativeManifest1;
3835
5083
  /**
3836
5084
  * Array of input sets for generating multiple preview variants
@@ -3860,6 +5108,22 @@ export type PreviewCreativeRequest = {
3860
5108
  output_format?: PreviewOutputFormat2;
3861
5109
  context?: ContextObject;
3862
5110
  ext?: ExtensionObject;
5111
+ } | {
5112
+ /**
5113
+ * Discriminator indicating this is a variant preview request
5114
+ */
5115
+ request_type: 'variant';
5116
+ /**
5117
+ * Platform-assigned variant identifier from get_creative_delivery response
5118
+ */
5119
+ variant_id: string;
5120
+ /**
5121
+ * Creative identifier for context
5122
+ */
5123
+ creative_id?: string;
5124
+ output_format?: PreviewOutputFormat3;
5125
+ context?: ContextObject;
5126
+ ext?: ExtensionObject;
3863
5127
  };
3864
5128
  /**
3865
5129
  * VAST (Video Ad Serving Template) tag for third-party video ad serving
@@ -3874,7 +5138,11 @@ export type PreviewOutputFormat1 = 'url' | 'html';
3874
5138
  */
3875
5139
  export type PreviewOutputFormat2 = 'url' | 'html';
3876
5140
  /**
3877
- * Format identifier for rendering the preview
5141
+ * Output format for the preview. 'url' returns preview_url (iframe-embeddable URL), 'html' returns preview_html (raw HTML for direct embedding).
5142
+ */
5143
+ export type PreviewOutputFormat3 = 'url' | 'html';
5144
+ /**
5145
+ * Format identifier for rendering the preview. Optional — defaults to creative_manifest.format_id if omitted.
3878
5146
  */
3879
5147
  export interface CreativeManifest1 {
3880
5148
  format_id: FormatID1;
@@ -3885,7 +5153,7 @@ export interface CreativeManifest1 {
3885
5153
  /**
3886
5154
  * 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.
3887
5155
  *
3888
- * IMPORTANT: Creative manifest validation MUST be performed in the context of the format specification. The format defines what type each asset_id should be, which eliminates any validation ambiguity.
5156
+ * 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.
3889
5157
  */
3890
5158
  assets: {
3891
5159
  [k: string]: unknown | undefined;
@@ -3896,7 +5164,7 @@ export interface CreativeManifest1 {
3896
5164
  /**
3897
5165
  * Response containing preview links for one or more creatives. Format matches the request: single preview response for single requests, batch results for batch requests.
3898
5166
  */
3899
- export type PreviewCreativeResponse = PreviewCreativeSingleResponse | PreviewCreativeBatchResponse;
5167
+ export type PreviewCreativeResponse = PreviewCreativeSingleResponse | PreviewCreativeBatchResponse | PreviewCreativeVariantResponse;
3900
5168
  /**
3901
5169
  * A single rendered piece of a creative preview with discriminated output format
3902
5170
  */
@@ -4044,7 +5312,7 @@ export type PreviewRender = {
4044
5312
  [k: string]: unknown | undefined;
4045
5313
  };
4046
5314
  /**
4047
- * Single preview response - each preview URL returns an HTML page that can be embedded in an iframe
5315
+ * VAST (Video Ad Serving Template) tag for third-party video ad serving
4048
5316
  */
4049
5317
  export interface PreviewCreativeSingleResponse {
4050
5318
  /**
@@ -4116,49 +5384,463 @@ export interface PreviewBatchResultError {
4116
5384
  success?: false;
4117
5385
  }
4118
5386
  /**
4119
- * A deployment target where signals can be activated (DSP, sales agent, etc.)
5387
+ * Variant preview response - shows what a specific creative variant looked like when served during delivery
4120
5388
  */
4121
- export type Destination = {
5389
+ export interface PreviewCreativeVariantResponse {
4122
5390
  /**
4123
- * Discriminator indicating this is a platform-based deployment
5391
+ * Discriminator indicating this is a variant preview response
4124
5392
  */
4125
- type: 'platform';
5393
+ response_type: 'variant';
4126
5394
  /**
4127
- * Platform identifier for DSPs (e.g., 'the-trade-desk', 'amazon-dsp')
5395
+ * Platform-assigned variant identifier
4128
5396
  */
4129
- platform: string;
5397
+ variant_id: string;
4130
5398
  /**
4131
- * Optional account identifier on the platform
5399
+ * Creative identifier this variant belongs to
4132
5400
  */
4133
- account?: string;
5401
+ creative_id?: string;
5402
+ /**
5403
+ * Array of rendered pieces for this variant. Most formats render as a single piece.
5404
+ */
5405
+ previews: {
5406
+ /**
5407
+ * Unique identifier for this preview
5408
+ */
5409
+ preview_id: string;
5410
+ /**
5411
+ * Rendered pieces for this variant
5412
+ */
5413
+ renders: PreviewRender[];
5414
+ }[];
5415
+ manifest?: CreativeManifest;
5416
+ /**
5417
+ * ISO 8601 timestamp when preview links expire
5418
+ */
5419
+ expires_at?: string;
5420
+ context?: ContextObject;
5421
+ ext?: ExtensionObject;
5422
+ }
5423
+ /**
5424
+ * The rendered creative manifest for this variant — the actual output that was served, not the input assets
5425
+ */
5426
+ /**
5427
+ * Request parameters for retrieving creative delivery data including variant-level metrics from a creative agent. At least one scoping filter (media_buy_ids, media_buy_buyer_refs, or creative_ids) is required.
5428
+ */
5429
+ export type GetCreativeDeliveryRequest = {
4134
5430
  [k: string]: unknown | undefined;
4135
- } | {
5431
+ } & {
4136
5432
  /**
4137
- * Discriminator indicating this is an agent URL-based deployment
5433
+ * Account context for routing and scoping. Limits results to creatives within this account. Optional if the agent has a single account or can determine routing from the media buy identifiers.
4138
5434
  */
4139
- type: 'agent';
5435
+ account_id?: string;
4140
5436
  /**
4141
- * URL identifying the deployment agent (for sales agents, etc.)
5437
+ * Filter to specific media buys by publisher ID. If omitted, returns creative delivery across all matching media buys.
4142
5438
  */
4143
- agent_url: string;
5439
+ media_buy_ids?: string[];
4144
5440
  /**
4145
- * Optional account identifier on the agent
5441
+ * Filter to specific media buys by buyer reference ID. Alternative to media_buy_ids when the buyer doesn't have the publisher's identifiers.
4146
5442
  */
4147
- account?: string;
4148
- [k: string]: unknown | undefined;
5443
+ media_buy_buyer_refs?: string[];
5444
+ /**
5445
+ * Filter to specific creatives by ID. If omitted, returns delivery for all creatives matching the other filters.
5446
+ */
5447
+ creative_ids?: string[];
5448
+ /**
5449
+ * Start date for delivery period (YYYY-MM-DD). Interpreted in the platform's reporting timezone.
5450
+ */
5451
+ start_date?: string;
5452
+ /**
5453
+ * End date for delivery period (YYYY-MM-DD). Interpreted in the platform's reporting timezone.
5454
+ */
5455
+ end_date?: string;
5456
+ /**
5457
+ * Maximum number of variants to return per creative. When omitted, the agent returns all variants. Use this to limit response size for generative creatives that may produce large numbers of variants.
5458
+ */
5459
+ max_variants?: number;
5460
+ /**
5461
+ * Pagination parameters for the creatives array in the response. When omitted, the agent returns all matching creatives.
5462
+ */
5463
+ pagination?: {
5464
+ /**
5465
+ * Maximum number of creatives to return
5466
+ */
5467
+ limit?: number;
5468
+ /**
5469
+ * Number of creatives to skip
5470
+ */
5471
+ offset?: number;
5472
+ };
5473
+ context?: ContextObject;
5474
+ ext?: ExtensionObject;
4149
5475
  };
4150
5476
  /**
4151
- * Types of signal catalogs available for audience targeting
5477
+ * 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.
4152
5478
  */
4153
- export type SignalCatalogType = 'marketplace' | 'custom' | 'owned';
4154
5479
  /**
4155
- * Request parameters for discovering signals based on description
5480
+ * The event type
4156
5481
  */
4157
- export interface GetSignalsRequest {
5482
+ export type CreativeVariant = DeliveryMetrics1 & {
5483
+ /**
5484
+ * Platform-assigned identifier for this variant
5485
+ */
5486
+ variant_id: string;
5487
+ manifest?: CreativeManifest;
5488
+ /**
5489
+ * Input signals that triggered generation of this variant (Tier 3). Describes why the platform created this specific variant. Platforms should provide summarized or anonymized signals rather than raw user input. For web contexts, may include page topic or URL. For conversational contexts, an anonymized content signal. For search, query category or intent. When the content context is managed through AdCP content standards, reference the artifact directly via the artifact field.
5490
+ */
5491
+ generation_context?: {
5492
+ /**
5493
+ * Type of context that triggered generation (e.g., 'web_page', 'conversational', 'search', 'app', 'dooh')
5494
+ */
5495
+ context_type?: string;
5496
+ /**
5497
+ * Reference to the content-standards artifact that provided the generation context. Links this variant to the specific piece of content (article, video, podcast segment, etc.) where the ad was placed.
5498
+ */
5499
+ artifact?: {
5500
+ property_id: Identifier;
5501
+ /**
5502
+ * Artifact identifier within the property
5503
+ */
5504
+ artifact_id: string;
5505
+ };
5506
+ ext?: ExtensionObject;
5507
+ [k: string]: unknown | undefined;
5508
+ };
5509
+ };
5510
+ /**
5511
+ * VAST (Video Ad Serving Template) tag for third-party video ad serving
5512
+ */
5513
+ export type PropertyIdentifierTypes = 'domain' | 'subdomain' | 'network_id' | 'ios_bundle' | 'android_package' | 'apple_app_store_id' | 'google_play_id' | 'roku_store_id' | 'fire_tv_asin' | 'samsung_app_id' | 'apple_tv_bundle' | 'bundle_id' | 'venue_id' | 'screen_id' | 'openooh_venue_type' | 'rss_url' | 'apple_podcast_id' | 'spotify_show_id' | 'podcast_guid';
5514
+ /**
5515
+ * Response payload for get_creative_delivery task. Returns creative delivery data with variant-level breakdowns including manifests and metrics.
5516
+ */
5517
+ export interface GetCreativeDeliveryResponse {
5518
+ /**
5519
+ * Account identifier. Present when the response spans or is scoped to a specific account.
5520
+ */
5521
+ account_id?: string;
5522
+ /**
5523
+ * Publisher's media buy identifier. Present when the request was scoped to a single media buy.
5524
+ */
5525
+ media_buy_id?: string;
5526
+ /**
5527
+ * Buyer's reference identifier for the media buy. Echoed back so the buyer can correlate without mapping publisher IDs.
5528
+ */
5529
+ media_buy_buyer_ref?: string;
4158
5530
  /**
4159
- * Natural language description of the desired signals
5531
+ * ISO 4217 currency code for monetary values in this response (e.g., 'USD', 'EUR')
4160
5532
  */
4161
- signal_spec: string;
5533
+ currency: string;
5534
+ /**
5535
+ * Date range for the report.
5536
+ */
5537
+ reporting_period: {
5538
+ /**
5539
+ * ISO 8601 start timestamp
5540
+ */
5541
+ start: string;
5542
+ /**
5543
+ * ISO 8601 end timestamp
5544
+ */
5545
+ end: string;
5546
+ /**
5547
+ * IANA timezone identifier for the reporting period (e.g., 'America/New_York', 'UTC'). Platforms report in their native timezone.
5548
+ */
5549
+ timezone?: string;
5550
+ };
5551
+ /**
5552
+ * Creative delivery data with variant breakdowns
5553
+ */
5554
+ creatives: {
5555
+ /**
5556
+ * Creative identifier
5557
+ */
5558
+ creative_id: string;
5559
+ /**
5560
+ * Publisher's media buy identifier for this creative. Present when the request spanned multiple media buys, so the buyer can correlate each creative to its media buy.
5561
+ */
5562
+ media_buy_id?: string;
5563
+ format_id?: FormatID;
5564
+ totals?: DeliveryMetrics;
5565
+ /**
5566
+ * Total number of variants for this creative. When max_variants was specified in the request, this may exceed the number of items in the variants array.
5567
+ */
5568
+ variant_count?: number;
5569
+ /**
5570
+ * Variant-level delivery breakdown. Each variant includes the rendered manifest and delivery metrics. For standard creatives, contains a single variant. For asset group optimization, one per combination. For generative creative, one per generated execution. Empty when a creative has no variants yet.
5571
+ */
5572
+ variants: CreativeVariant[];
5573
+ }[];
5574
+ /**
5575
+ * Pagination information. Present when the request included pagination parameters.
5576
+ */
5577
+ pagination?: {
5578
+ /**
5579
+ * Maximum number of creatives requested
5580
+ */
5581
+ limit: number;
5582
+ /**
5583
+ * Number of creatives skipped
5584
+ */
5585
+ offset: number;
5586
+ /**
5587
+ * Whether more creatives are available beyond this page
5588
+ */
5589
+ has_more: boolean;
5590
+ /**
5591
+ * Total number of creatives matching the request filters
5592
+ */
5593
+ total?: number;
5594
+ };
5595
+ /**
5596
+ * Task-specific errors and warnings
5597
+ */
5598
+ errors?: Error[];
5599
+ context?: ContextObject;
5600
+ ext?: ExtensionObject;
5601
+ }
5602
+ /**
5603
+ * Format of this creative
5604
+ */
5605
+ export interface DeliveryMetrics1 {
5606
+ /**
5607
+ * Impressions delivered
5608
+ */
5609
+ impressions?: number;
5610
+ /**
5611
+ * Amount spent
5612
+ */
5613
+ spend?: number;
5614
+ /**
5615
+ * Total clicks
5616
+ */
5617
+ clicks?: number;
5618
+ /**
5619
+ * Click-through rate (clicks/impressions)
5620
+ */
5621
+ ctr?: number;
5622
+ /**
5623
+ * Views at threshold (for CPV)
5624
+ */
5625
+ views?: number;
5626
+ /**
5627
+ * 100% completions (for CPCV)
5628
+ */
5629
+ completed_views?: number;
5630
+ /**
5631
+ * Completion rate (completed_views/impressions)
5632
+ */
5633
+ completion_rate?: number;
5634
+ /**
5635
+ * Total conversions attributed to this delivery. When by_event_type is present, this equals the sum of all by_event_type[].count entries.
5636
+ */
5637
+ conversions?: number;
5638
+ /**
5639
+ * Total monetary value of attributed conversions (in the reporting currency)
5640
+ */
5641
+ conversion_value?: number;
5642
+ /**
5643
+ * Return on ad spend (conversion_value / spend)
5644
+ */
5645
+ roas?: number;
5646
+ /**
5647
+ * Cost per conversion (spend / conversions)
5648
+ */
5649
+ cost_per_acquisition?: number;
5650
+ /**
5651
+ * Fraction of conversions from first-time brand buyers (0 = none, 1 = all)
5652
+ */
5653
+ new_to_brand_rate?: number;
5654
+ /**
5655
+ * Leads generated (convenience alias for by_event_type where event_type='lead')
5656
+ */
5657
+ leads?: number;
5658
+ /**
5659
+ * Conversion metrics broken down by event type. Spend-derived metrics (ROAS, CPA) are only available at the package/totals level since spend cannot be attributed to individual event types.
5660
+ */
5661
+ by_event_type?: {
5662
+ event_type: EventType;
5663
+ /**
5664
+ * Event source that produced these conversions (for disambiguation when multiple event sources are configured)
5665
+ */
5666
+ event_source_id?: string;
5667
+ /**
5668
+ * Number of events of this type
5669
+ */
5670
+ count: number;
5671
+ /**
5672
+ * Total monetary value of events of this type
5673
+ */
5674
+ value?: number;
5675
+ [k: string]: unknown | undefined;
5676
+ }[];
5677
+ /**
5678
+ * Gross Rating Points delivered (for CPP)
5679
+ */
5680
+ grps?: number;
5681
+ /**
5682
+ * Unique reach - units depend on measurement provider (e.g., individuals, households, devices, cookies). See delivery_measurement.provider for methodology.
5683
+ */
5684
+ reach?: number;
5685
+ /**
5686
+ * Average frequency per individual (typically measured over campaign duration, but can vary by measurement provider)
5687
+ */
5688
+ frequency?: number;
5689
+ /**
5690
+ * Video quartile completion data
5691
+ */
5692
+ quartile_data?: {
5693
+ /**
5694
+ * 25% completion views
5695
+ */
5696
+ q1_views?: number;
5697
+ /**
5698
+ * 50% completion views
5699
+ */
5700
+ q2_views?: number;
5701
+ /**
5702
+ * 75% completion views
5703
+ */
5704
+ q3_views?: number;
5705
+ /**
5706
+ * 100% completion views
5707
+ */
5708
+ q4_views?: number;
5709
+ };
5710
+ /**
5711
+ * DOOH-specific metrics (only included for DOOH campaigns)
5712
+ */
5713
+ dooh_metrics?: {
5714
+ /**
5715
+ * Number of times ad played in rotation
5716
+ */
5717
+ loop_plays?: number;
5718
+ /**
5719
+ * Number of unique screens displaying the ad
5720
+ */
5721
+ screens_used?: number;
5722
+ /**
5723
+ * Total display time in seconds
5724
+ */
5725
+ screen_time_seconds?: number;
5726
+ /**
5727
+ * Actual share of voice delivered (0.0 to 1.0)
5728
+ */
5729
+ sov_achieved?: number;
5730
+ /**
5731
+ * Explanation of how DOOH impressions were calculated
5732
+ */
5733
+ calculation_notes?: string;
5734
+ /**
5735
+ * Per-venue performance breakdown
5736
+ */
5737
+ venue_breakdown?: {
5738
+ /**
5739
+ * Venue identifier
5740
+ */
5741
+ venue_id: string;
5742
+ /**
5743
+ * Human-readable venue name
5744
+ */
5745
+ venue_name?: string;
5746
+ /**
5747
+ * Venue type (e.g., 'airport', 'transit', 'retail', 'billboard')
5748
+ */
5749
+ venue_type?: string;
5750
+ /**
5751
+ * Impressions delivered at this venue
5752
+ */
5753
+ impressions: number;
5754
+ /**
5755
+ * Loop plays at this venue
5756
+ */
5757
+ loop_plays?: number;
5758
+ /**
5759
+ * Number of screens used at this venue
5760
+ */
5761
+ screens_used?: number;
5762
+ [k: string]: unknown | undefined;
5763
+ }[];
5764
+ [k: string]: unknown | undefined;
5765
+ };
5766
+ /**
5767
+ * Viewability metrics. Viewable rate should be calculated as viewable_impressions / measurable_impressions (not total impressions), since some environments cannot measure viewability.
5768
+ */
5769
+ viewability?: {
5770
+ /**
5771
+ * Impressions where viewability could be measured. Excludes environments without measurement capability (e.g., non-Intersection Observer browsers, certain app environments).
5772
+ */
5773
+ measurable_impressions?: number;
5774
+ /**
5775
+ * Impressions that met the viewability threshold defined by the measurement standard.
5776
+ */
5777
+ viewable_impressions?: number;
5778
+ /**
5779
+ * Viewable impression rate (viewable_impressions / measurable_impressions). Range 0.0 to 1.0.
5780
+ */
5781
+ viewable_rate?: number;
5782
+ /**
5783
+ * 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.
5784
+ */
5785
+ standard?: 'mrc' | 'groupm';
5786
+ [k: string]: unknown | undefined;
5787
+ };
5788
+ /**
5789
+ * 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).
5790
+ */
5791
+ engagement_rate?: number;
5792
+ /**
5793
+ * Cost per click (spend / clicks)
5794
+ */
5795
+ cost_per_click?: number;
5796
+ /**
5797
+ * Conversion metrics broken down by action source (website, app, in_store, etc.). Useful for omnichannel sellers where conversions occur across digital and physical channels.
5798
+ */
5799
+ by_action_source?: {
5800
+ action_source: ActionSource;
5801
+ /**
5802
+ * Event source that produced these conversions (for disambiguation when multiple event sources are configured)
5803
+ */
5804
+ event_source_id?: string;
5805
+ /**
5806
+ * Number of conversions from this action source
5807
+ */
5808
+ count: number;
5809
+ /**
5810
+ * Total monetary value of conversions from this action source
5811
+ */
5812
+ value?: number;
5813
+ [k: string]: unknown | undefined;
5814
+ }[];
5815
+ [k: string]: unknown | undefined;
5816
+ }
5817
+ /**
5818
+ * The rendered creative manifest for this variant — the actual output that was served, not the input assets. Contains format_id and the resolved assets (specific headline, image, video, etc. the platform selected or generated). For Tier 2, shows which asset combination was picked. For Tier 3, contains the generated assets which may differ entirely from the input brand manifest. Pass to preview_creative to re-render.
5819
+ */
5820
+ export interface Identifier {
5821
+ type: PropertyIdentifierTypes;
5822
+ /**
5823
+ * The identifier value. For domain type: 'example.com' matches base domain plus www and m subdomains; 'edition.example.com' matches that specific subdomain; '*.example.com' matches ALL subdomains but NOT base domain
5824
+ */
5825
+ value: string;
5826
+ }
5827
+ /**
5828
+ * Standard error structure for task-specific errors and warnings
5829
+ */
5830
+ /**
5831
+ * Request parameters for discovering signals. Use signal_spec for natural language discovery, signal_ids for exact lookups, or both (signal_ids take precedence for exact matches, signal_spec provides additional discovery context).
5832
+ */
5833
+ export type GetSignalsRequest = {
5834
+ [k: string]: unknown | undefined;
5835
+ } & {
5836
+ /**
5837
+ * Natural language description of the desired signals. When used alone, enables semantic discovery. When combined with signal_ids, provides context for the agent but signal_ids matches are returned first.
5838
+ */
5839
+ signal_spec?: string;
5840
+ /**
5841
+ * Specific signals to look up by data provider and ID. Returns exact matches from the data provider's catalog. Takes precedence over signal_spec when both are provided.
5842
+ */
5843
+ signal_ids?: SignalID[];
4162
5844
  /**
4163
5845
  * Deployment targets where signals need to be activated
4164
5846
  */
@@ -4174,24 +5856,65 @@ export interface GetSignalsRequest {
4174
5856
  };
4175
5857
  filters?: SignalFilters;
4176
5858
  /**
4177
- * Maximum number of results to return
5859
+ * Maximum number of results to return
5860
+ */
5861
+ max_results?: number;
5862
+ pagination?: PaginationRequest;
5863
+ context?: ContextObject;
5864
+ ext?: ExtensionObject;
5865
+ };
5866
+ /**
5867
+ * Universal signal identifier. Uses 'source' as discriminator: 'catalog' for signals from a data provider's published catalog (verifiable), 'agent' for agent-native signals (not externally verifiable).
5868
+ */
5869
+ export type Destination = {
5870
+ /**
5871
+ * Discriminator indicating this is a platform-based deployment
5872
+ */
5873
+ type: 'platform';
5874
+ /**
5875
+ * Platform identifier for DSPs (e.g., 'the-trade-desk', 'amazon-dsp')
5876
+ */
5877
+ platform: string;
5878
+ /**
5879
+ * Optional account identifier on the platform
5880
+ */
5881
+ account?: string;
5882
+ [k: string]: unknown | undefined;
5883
+ } | {
5884
+ /**
5885
+ * Discriminator indicating this is an agent URL-based deployment
5886
+ */
5887
+ type: 'agent';
5888
+ /**
5889
+ * URL identifying the deployment agent (for sales agents, etc.)
5890
+ */
5891
+ agent_url: string;
5892
+ /**
5893
+ * Optional account identifier on the agent
4178
5894
  */
4179
- max_results?: number;
4180
- context?: ContextObject;
4181
- ext?: ExtensionObject;
4182
- }
5895
+ account?: string;
5896
+ [k: string]: unknown | undefined;
5897
+ };
5898
+ /**
5899
+ * Types of signal catalogs available for audience targeting
5900
+ */
5901
+ export type SignalCatalogType = 'marketplace' | 'custom' | 'owned';
4183
5902
  /**
4184
5903
  * Filters to refine signal discovery results
4185
5904
  */
4186
5905
  export interface SignalFilters {
4187
5906
  /**
4188
5907
  * Filter by catalog type
5908
+ *
5909
+ * @minItems 1
4189
5910
  */
4190
- catalog_types?: SignalCatalogType[];
5911
+ catalog_types?: [SignalCatalogType, ...SignalCatalogType[]];
4191
5912
  /**
4192
5913
  * Filter by specific data providers
5914
+ *
5915
+ * @minItems 1
4193
5916
  */
4194
- data_providers?: string[];
5917
+ data_providers?: [string, ...string[]];
4195
5918
  /**
4196
5919
  * Maximum CPM price filter
4197
5920
  */
@@ -4203,10 +5926,14 @@ export interface SignalFilters {
4203
5926
  [k: string]: unknown | undefined;
4204
5927
  }
4205
5928
  /**
4206
- * 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.
5929
+ * Standard cursor-based pagination parameters for list operations
5930
+ */
5931
+ /**
5932
+ * Universal signal identifier referencing the data provider's catalog. Use this to verify authorization and look up signal definitions.
4207
5933
  */
5934
+ export type SignalValueType = 'binary' | 'categorical' | 'numeric';
4208
5935
  /**
4209
- * Type of signal
5936
+ * Catalog type of signal (marketplace, custom, owned)
4210
5937
  */
4211
5938
  export type Deployment = {
4212
5939
  /**
@@ -4327,8 +6054,9 @@ export interface GetSignalsResponse {
4327
6054
  * Array of matching signals
4328
6055
  */
4329
6056
  signals: {
6057
+ signal_id?: SignalID;
4330
6058
  /**
4331
- * Unique identifier for the signal
6059
+ * Opaque identifier used for activation. This is the signals agent's internal segment ID.
4332
6060
  */
4333
6061
  signal_agent_segment_id: string;
4334
6062
  /**
@@ -4339,9 +6067,10 @@ export interface GetSignalsResponse {
4339
6067
  * Detailed signal description
4340
6068
  */
4341
6069
  description: string;
6070
+ value_type?: SignalValueType;
4342
6071
  signal_type: SignalCatalogType;
4343
6072
  /**
4344
- * Name of the data provider
6073
+ * Human-readable name of the data provider
4345
6074
  */
4346
6075
  data_provider: string;
4347
6076
  /**
@@ -4370,6 +6099,7 @@ export interface GetSignalsResponse {
4370
6099
  * Task-specific errors and warnings (e.g., signal discovery or pricing issues)
4371
6100
  */
4372
6101
  errors?: Error[];
6102
+ pagination?: PaginationResponse;
4373
6103
  context?: ContextObject;
4374
6104
  ext?: ExtensionObject;
4375
6105
  }
@@ -4430,10 +6160,6 @@ export type BasePropertySource = PublisherTagsSource | PublisherPropertyIDsSourc
4430
6160
  /**
4431
6161
  * Tag for categorizing publisher properties. Must be lowercase alphanumeric with underscores only.
4432
6162
  */
4433
- export type PropertyIdentifierTypes = 'domain' | 'subdomain' | 'network_id' | 'ios_bundle' | 'android_package' | 'apple_app_store_id' | 'google_play_id' | 'roku_store_id' | 'fire_tv_asin' | 'samsung_app_id' | 'apple_tv_bundle' | 'bundle_id' | 'venue_id' | 'screen_id' | 'openooh_venue_type' | 'rss_url' | 'apple_podcast_id' | 'spotify_show_id' | 'podcast_guid';
4434
- /**
4435
- * Standardized advertising media channels describing how buyers allocate budget. Channels are planning abstractions, not technical substrates. See the Media Channel Taxonomy specification for detailed definitions.
4436
- */
4437
6163
  export type PropertyType = 'website' | 'mobile_app' | 'ctv_app' | 'desktop_app' | 'dooh' | 'podcast' | 'radio' | 'streaming_audio';
4438
6164
  /**
4439
6165
  * Type of asset. Note: Brand manifests typically contain basic media assets (image, video, audio, text). Code assets (html, javascript, css) and ad markup (vast, daast) are usually not part of brand asset libraries.
@@ -4512,37 +6238,37 @@ export interface DirectIdentifiersSource {
4512
6238
  /**
4513
6239
  * A property identifier with type and value. Used to identify properties across platforms (domains, app store IDs, etc.).
4514
6240
  */
4515
- export interface Identifier {
4516
- type: PropertyIdentifierTypes;
4517
- /**
4518
- * The identifier value. For domain type: 'example.com' matches base domain plus www and m subdomains; 'edition.example.com' matches that specific subdomain; '*.example.com' matches ALL subdomains but NOT base domain
4519
- */
4520
- value: string;
4521
- }
4522
- /**
4523
- * Dynamic filters to apply when resolving the list
4524
- */
4525
6241
  export interface PropertyListFilters {
4526
6242
  /**
4527
6243
  * Property must have feature data for ALL listed countries (ISO codes). Required.
6244
+ *
6245
+ * @minItems 1
4528
6246
  */
4529
- countries_all: string[];
6247
+ countries_all: [string, ...string[]];
4530
6248
  /**
4531
6249
  * Property must support ANY of the listed channels. Required.
6250
+ *
6251
+ * @minItems 1
4532
6252
  */
4533
- channels_any: MediaChannel[];
6253
+ channels_any: [MediaChannel, ...MediaChannel[]];
4534
6254
  /**
4535
6255
  * Filter to these property types
6256
+ *
6257
+ * @minItems 1
4536
6258
  */
4537
- property_types?: PropertyType[];
6259
+ property_types?: [PropertyType, ...PropertyType[]];
4538
6260
  /**
4539
6261
  * Feature-based requirements. Property must pass ALL requirements (AND logic).
6262
+ *
6263
+ * @minItems 1
4540
6264
  */
4541
- feature_requirements?: FeatureRequirement[];
6265
+ feature_requirements?: [FeatureRequirement, ...FeatureRequirement[]];
4542
6266
  /**
4543
6267
  * Identifiers to always exclude from results
6268
+ *
6269
+ * @minItems 1
4544
6270
  */
4545
- exclude_identifiers?: Identifier[];
6271
+ exclude_identifiers?: [Identifier, ...Identifier[]];
4546
6272
  }
4547
6273
  /**
4548
6274
  * A feature-based requirement for property filtering. Use min_value/max_value for quantitative features, allowed_values for binary/categorical features.
@@ -4562,8 +6288,10 @@ export interface FeatureRequirement {
4562
6288
  max_value?: number;
4563
6289
  /**
4564
6290
  * Values that pass the requirement (for binary/categorical features)
6291
+ *
6292
+ * @minItems 1
4565
6293
  */
4566
- allowed_values?: unknown[];
6294
+ allowed_values?: [unknown, ...unknown[]];
4567
6295
  /**
4568
6296
  * 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).
4569
6297
  */
@@ -4688,13 +6416,18 @@ export interface GetPropertyListRequest {
4688
6416
  */
4689
6417
  resolve?: boolean;
4690
6418
  /**
4691
- * Maximum identifiers to return (for large lists)
4692
- */
4693
- max_results?: number;
4694
- /**
4695
- * Pagination cursor for large result sets
6419
+ * Pagination parameters. Uses higher limits than standard pagination because property lists can contain tens of thousands of identifiers.
4696
6420
  */
4697
- cursor?: string;
6421
+ pagination?: {
6422
+ /**
6423
+ * Maximum number of identifiers to return per page
6424
+ */
6425
+ max_results?: number;
6426
+ /**
6427
+ * Opaque cursor from a previous response to fetch the next page
6428
+ */
6429
+ cursor?: string;
6430
+ };
4698
6431
  context?: ContextObject;
4699
6432
  ext?: ExtensionObject;
4700
6433
  }
@@ -4710,27 +6443,7 @@ export interface GetPropertyListResponse {
4710
6443
  * Resolved identifiers that passed filters (if resolve=true). Cache these locally for real-time use.
4711
6444
  */
4712
6445
  identifiers?: Identifier[];
4713
- /**
4714
- * Total number of identifiers in resolved list
4715
- */
4716
- total_count?: number;
4717
- /**
4718
- * Number of identifiers returned in this response
4719
- */
4720
- returned_count?: number;
4721
- /**
4722
- * Pagination information
4723
- */
4724
- pagination?: {
4725
- /**
4726
- * Whether more results are available
4727
- */
4728
- has_more?: boolean;
4729
- /**
4730
- * Cursor for next page
4731
- */
4732
- cursor?: string;
4733
- };
6446
+ pagination?: PaginationResponse;
4734
6447
  /**
4735
6448
  * When the list was resolved
4736
6449
  */
@@ -4762,19 +6475,12 @@ export interface ListPropertyListsRequest {
4762
6475
  * Filter to lists whose name contains this string
4763
6476
  */
4764
6477
  name_contains?: string;
4765
- /**
4766
- * Maximum lists to return
4767
- */
4768
- max_results?: number;
4769
- /**
4770
- * Pagination cursor
4771
- */
4772
- cursor?: string;
6478
+ pagination?: PaginationRequest;
4773
6479
  context?: ContextObject;
4774
6480
  ext?: ExtensionObject;
4775
6481
  }
4776
6482
  /**
4777
- * 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.
6483
+ * Standard cursor-based pagination parameters for list operations
4778
6484
  */
4779
6485
  /**
4780
6486
  * A source of properties for a property list. Supports three selection patterns: publisher with tags, publisher with property IDs, or direct identifiers.
@@ -4784,27 +6490,7 @@ export interface ListPropertyListsResponse {
4784
6490
  * Array of property lists (metadata only, not resolved properties)
4785
6491
  */
4786
6492
  lists: PropertyList[];
4787
- /**
4788
- * Total number of lists matching criteria
4789
- */
4790
- total_count?: number;
4791
- /**
4792
- * Number of lists returned in this response
4793
- */
4794
- returned_count?: number;
4795
- /**
4796
- * Pagination information
4797
- */
4798
- pagination?: {
4799
- /**
4800
- * Whether more results are available
4801
- */
4802
- has_more?: boolean;
4803
- /**
4804
- * Cursor for next page
4805
- */
4806
- cursor?: string;
4807
- };
6493
+ pagination?: PaginationResponse;
4808
6494
  ext?: ExtensionObject;
4809
6495
  }
4810
6496
  /**
@@ -4857,11 +6543,12 @@ export interface ListContentStandardsRequest {
4857
6543
  * Filter by ISO 3166-1 alpha-2 country codes
4858
6544
  */
4859
6545
  countries?: string[];
6546
+ pagination?: PaginationRequest;
4860
6547
  context?: ContextObject;
4861
6548
  ext?: ExtensionObject;
4862
6549
  }
4863
6550
  /**
4864
- * 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.
6551
+ * Standard cursor-based pagination parameters for list operations
4865
6552
  */
4866
6553
  /**
4867
6554
  * Response payload with list of content standards configurations
@@ -4877,6 +6564,7 @@ export type ListContentStandardsResponse = {
4877
6564
  errors?: {
4878
6565
  [k: string]: unknown | undefined;
4879
6566
  };
6567
+ pagination?: PaginationResponse;
4880
6568
  context?: ContextObject;
4881
6569
  ext?: ExtensionObject;
4882
6570
  } | {
@@ -4976,12 +6664,16 @@ export interface ContentStandards {
4976
6664
  name?: string;
4977
6665
  /**
4978
6666
  * ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).
6667
+ *
6668
+ * @minItems 1
4979
6669
  */
4980
- countries_all?: string[];
6670
+ countries_all?: [string, ...string[]];
4981
6671
  /**
4982
6672
  * Advertising channels. Standards apply to ANY of the listed channels (OR logic).
6673
+ *
6674
+ * @minItems 1
4983
6675
  */
4984
- channels_any?: MediaChannel[];
6676
+ channels_any?: [MediaChannel, ...MediaChannel[]];
4985
6677
  /**
4986
6678
  * 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.
4987
6679
  *
@@ -5790,6 +7482,10 @@ export type ValidateContentDeliveryResponse = {
5790
7482
  * Request parameters for retrieving content artifacts from a media buy for validation
5791
7483
  */
5792
7484
  export interface GetMediaBuyArtifactsRequest {
7485
+ /**
7486
+ * Filter artifacts to a specific account. When provided, only returns artifacts for media buys belonging to this account. When omitted, returns artifacts across all accessible accounts. Optional if the agent has a single account.
7487
+ */
7488
+ account_id?: string;
5793
7489
  /**
5794
7490
  * Media buy to get artifacts from
5795
7491
  */
@@ -5825,13 +7521,18 @@ export interface GetMediaBuyArtifactsRequest {
5825
7521
  end?: string;
5826
7522
  };
5827
7523
  /**
5828
- * Maximum artifacts to return per request
5829
- */
5830
- limit?: number;
5831
- /**
5832
- * Pagination cursor for fetching subsequent pages
7524
+ * Pagination parameters. Uses higher limits than standard pagination because artifact result sets can be very large.
5833
7525
  */
5834
- cursor?: string;
7526
+ pagination?: {
7527
+ /**
7528
+ * Maximum number of artifacts to return per page
7529
+ */
7530
+ max_results?: number;
7531
+ /**
7532
+ * Opaque cursor from a previous response to fetch the next page
7533
+ */
7534
+ cursor?: string;
7535
+ };
5835
7536
  context?: ContextObject;
5836
7537
  ext?: ExtensionObject;
5837
7538
  }
@@ -5910,19 +7611,7 @@ export type GetMediaBuyArtifactsResponse = {
5910
7611
  */
5911
7612
  method?: 'random' | 'stratified' | 'recent' | 'failures_only';
5912
7613
  };
5913
- /**
5914
- * Pagination information for large result sets
5915
- */
5916
- pagination?: {
5917
- /**
5918
- * Cursor for fetching the next page
5919
- */
5920
- cursor?: string;
5921
- /**
5922
- * Whether more results are available
5923
- */
5924
- has_more?: boolean;
5925
- };
7614
+ pagination?: PaginationResponse;
5926
7615
  /**
5927
7616
  * Field must not be present in success response
5928
7617
  */
@@ -6593,6 +8282,10 @@ export interface GetAdCPCapabilitiesRequest {
6593
8282
  /**
6594
8283
  * 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.
6595
8284
  */
8285
+ /**
8286
+ * Methods for verifying user age for compliance. Does not include 'inferred' as it is not accepted for regulatory compliance.
8287
+ */
8288
+ export type EventType1 = 'page_view' | 'view_content' | 'select_content' | 'select_item' | 'search' | 'share' | 'add_to_cart' | 'remove_from_cart' | 'viewed_cart' | 'add_to_wishlist' | 'initiate_checkout' | 'add_payment_info' | 'purchase' | 'refund' | 'lead' | 'qualify_lead' | 'close_convert_lead' | 'disqualify_lead' | 'complete_registration' | 'subscribe' | 'start_trial' | 'app_install' | 'app_launch' | 'contact' | 'schedule' | 'donate' | 'submit_application' | 'custom';
6596
8289
  /**
6597
8290
  * Standardized advertising media channels describing how buyers allocate budget. Channels are planning abstractions, not technical substrates. See the Media Channel Taxonomy specification for detailed definitions.
6598
8291
  */
@@ -6610,6 +8303,31 @@ export interface GetAdCPCapabilitiesResponse {
6610
8303
  * Which AdCP domain protocols this seller supports
6611
8304
  */
6612
8305
  supported_protocols: ('media_buy' | 'signals' | 'governance' | 'sponsored_intelligence' | 'creative')[];
8306
+ /**
8307
+ * Account management capabilities. Describes how accounts are established, what billing models are supported, and whether an account is required before browsing products.
8308
+ */
8309
+ account?: {
8310
+ /**
8311
+ * Whether the seller requires operator-level credentials. When false (default), the seller trusts the agent's identity claims — the agent authenticates once and declares brands/operators via sync_accounts. When true, each operator must authenticate independently with the seller, and the agent opens a per-operator session using the operator's credential.
8312
+ */
8313
+ require_operator_auth?: boolean;
8314
+ /**
8315
+ * OAuth authorization endpoint for obtaining operator-level credentials. Present when the seller supports OAuth for operator authentication. The agent directs the operator to this URL to authenticate and obtain a bearer token. If absent and require_operator_auth is true, operators obtain credentials out-of-band (e.g., seller portal, API key).
8316
+ */
8317
+ authorization_endpoint?: string;
8318
+ /**
8319
+ * Billing models this seller supports. brand: seller invoices the brand directly. operator: seller invoices the operator (agency). agent: agent consolidates billing.
8320
+ */
8321
+ supported_billing: ('brand' | 'operator' | 'agent')[];
8322
+ /**
8323
+ * The billing model applied when the agent omits billing from a sync_accounts request. Must be one of the values in supported_billing.
8324
+ */
8325
+ default_billing?: 'brand' | 'operator' | 'agent';
8326
+ /**
8327
+ * Whether an active account is required to call get_products. When true, the agent must establish an account via sync_accounts before browsing products. When false, get_products works without an account (account_id is optional for rate-card-specific pricing).
8328
+ */
8329
+ required_for_products?: boolean;
8330
+ };
6613
8331
  /**
6614
8332
  * Media-buy protocol capabilities. Only present if media_buy is in supported_protocols.
6615
8333
  */
@@ -6718,8 +8436,64 @@ export interface GetAdCPCapabilitiesResponse {
6718
8436
  */
6719
8437
  au_postcode?: boolean;
6720
8438
  };
8439
+ /**
8440
+ * Age restriction capabilities for compliance (alcohol, gambling)
8441
+ */
8442
+ age_restriction?: {
8443
+ /**
8444
+ * Whether seller supports age restrictions
8445
+ */
8446
+ supported?: boolean;
8447
+ /**
8448
+ * Age verification methods this seller supports
8449
+ */
8450
+ verification_methods?: AgeVerificationMethod[];
8451
+ };
8452
+ /**
8453
+ * Whether seller supports device platform targeting (Sec-CH-UA-Platform values)
8454
+ */
8455
+ device_platform?: boolean;
8456
+ /**
8457
+ * Whether seller supports language targeting (ISO 639-1 codes)
8458
+ */
8459
+ language?: boolean;
6721
8460
  };
6722
8461
  };
8462
+ /**
8463
+ * Seller-level conversion tracking capabilities. Only present when features.conversion_tracking is true.
8464
+ */
8465
+ conversion_tracking?: {
8466
+ /**
8467
+ * Event types this seller can track and attribute. If omitted, all standard event types are supported.
8468
+ */
8469
+ supported_event_types?: EventType[];
8470
+ /**
8471
+ * Universal ID types accepted for user matching
8472
+ */
8473
+ supported_uid_types?: UIDType[];
8474
+ /**
8475
+ * Hashed PII types accepted for user matching. Buyers must hash before sending (SHA-256, normalized).
8476
+ */
8477
+ supported_hashed_identifiers?: ('hashed_email' | 'hashed_phone')[];
8478
+ /**
8479
+ * Action sources this seller accepts events from
8480
+ */
8481
+ supported_action_sources?: ActionSource[];
8482
+ /**
8483
+ * Attribution windows available from this seller. Single-element arrays indicate fixed windows; multi-element arrays indicate configurable options the buyer can choose from via optimization_goal.attribution_window on packages.
8484
+ */
8485
+ attribution_windows?: {
8486
+ event_type?: EventType1;
8487
+ /**
8488
+ * Available click-through attribution windows (e.g. ["7d"], ["7d", "14d", "30d"])
8489
+ */
8490
+ click_through: string[];
8491
+ /**
8492
+ * Available view-through attribution windows (e.g. ["1d"], ["1d", "7d", "14d"])
8493
+ */
8494
+ view_through?: string[];
8495
+ }[];
8496
+ };
6723
8497
  /**
6724
8498
  * Information about the seller's media inventory portfolio
6725
8499
  */
@@ -6747,13 +8521,21 @@ export interface GetAdCPCapabilitiesResponse {
6747
8521
  };
6748
8522
  };
6749
8523
  /**
6750
- * Signals protocol capabilities. Only present if signals is in supported_protocols. Reserved for future use.
8524
+ * Signals protocol capabilities. Only present if signals is in supported_protocols.
6751
8525
  */
6752
8526
  signals?: {
8527
+ /**
8528
+ * Data provider domains this signals agent is authorized to resell. Buyers should fetch each data provider's adagents.json for signal catalog definitions and to verify authorization.
8529
+ */
8530
+ data_provider_domains?: string[];
6753
8531
  /**
6754
8532
  * Optional signals features supported
6755
8533
  */
6756
8534
  features?: {
8535
+ /**
8536
+ * Supports signals from data provider catalogs with structured signal_id references
8537
+ */
8538
+ catalog_signals?: boolean;
6757
8539
  [k: string]: boolean | undefined;
6758
8540
  };
6759
8541
  };
@@ -6855,14 +8637,15 @@ export interface GetAdCPCapabilitiesResponse {
6855
8637
  */
6856
8638
  export interface ListAccountsRequest {
6857
8639
  /**
6858
- * Filter accounts by status
8640
+ * Filter accounts by status. Omit to return accounts in all statuses.
6859
8641
  */
6860
- status?: 'active' | 'suspended' | 'closed' | 'all';
8642
+ status?: 'active' | 'pending_approval' | 'payment_required' | 'suspended' | 'closed';
8643
+ pagination?: PaginationRequest;
6861
8644
  context?: ContextObject;
6862
8645
  ext?: ExtensionObject;
6863
8646
  }
6864
8647
  /**
6865
- * 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.
8648
+ * Standard cursor-based pagination parameters for list operations
6866
8649
  */
6867
8650
  /**
6868
8651
  * Response payload for list_accounts task
@@ -6876,10 +8659,157 @@ export interface ListAccountsResponse {
6876
8659
  * Task-specific errors and warnings
6877
8660
  */
6878
8661
  errors?: Error[];
8662
+ pagination?: PaginationResponse;
6879
8663
  context?: ContextObject;
6880
8664
  ext?: ExtensionObject;
6881
8665
  }
6882
8666
  /**
6883
8667
  * A billing account representing the relationship between a buyer and seller. The account determines rate cards, payment terms, and billing entity.
6884
8668
  */
8669
+ /**
8670
+ * Authentication schemes for push notification endpoints
8671
+ */
8672
+ export interface SyncAccountsRequest {
8673
+ /**
8674
+ * Advertiser accounts to sync
8675
+ *
8676
+ * @maxItems 1000
8677
+ */
8678
+ accounts: {
8679
+ /**
8680
+ * House domain where brand.json is hosted (e.g., 'unilever.com', 'coca-cola.com'). This is the canonical identity anchor for the brand, resolved via /.well-known/brand.json. For single-brand houses, this alone identifies the brand.
8681
+ */
8682
+ house: string;
8683
+ /**
8684
+ * Brand ID within the house portfolio (from brand.json). Required when the house has multiple brands (e.g., 'dove' under unilever.com, 'tide' under pg.com). Omit for single-brand houses.
8685
+ */
8686
+ brand_id?: string;
8687
+ /**
8688
+ * Domain of the entity operating the seat (e.g., 'groupm.com', 'mindshare.com'). Verified against the brand's authorized_operators in brand.json. Omit if the brand operates its own seat.
8689
+ */
8690
+ operator?: string;
8691
+ /**
8692
+ * Who should be invoiced. brand: seller invoices the brand directly. operator: seller invoices the operator (agency). agent: agent consolidates billing across brands. Omit to accept the seller's default.
8693
+ */
8694
+ billing?: 'brand' | 'operator' | 'agent';
8695
+ }[];
8696
+ /**
8697
+ * When true, accounts previously synced by this agent but not included in this request will be deactivated. Scoped to the authenticated agent — does not affect accounts managed by other agents. Use with caution.
8698
+ */
8699
+ delete_missing?: boolean;
8700
+ /**
8701
+ * When true, preview what would change without applying. Returns what would be created/updated/deactivated.
8702
+ */
8703
+ dry_run?: boolean;
8704
+ push_notification_config?: PushNotificationConfig;
8705
+ context?: ContextObject;
8706
+ ext?: ExtensionObject;
8707
+ }
8708
+ /**
8709
+ * Optional webhook for async notifications when account status changes (e.g., pending_approval transitions to active).
8710
+ */
8711
+ /**
8712
+ * Response from account sync operation. Returns per-account results with status and billing, or operation-level errors on complete failure.
8713
+ */
8714
+ export type SyncAccountsResponse = SyncAccountsSuccess | SyncAccountsError;
8715
+ /**
8716
+ * Sync operation processed accounts (individual accounts may be pending or have action=failed)
8717
+ */
8718
+ export interface SyncAccountsSuccess {
8719
+ /**
8720
+ * Whether this was a dry run (no actual changes made)
8721
+ */
8722
+ dry_run?: boolean;
8723
+ /**
8724
+ * Results for each account processed
8725
+ */
8726
+ accounts: {
8727
+ /**
8728
+ * Seller-assigned account identifier. When billing is 'agent', multiple brands may share the same account_id.
8729
+ */
8730
+ account_id?: string;
8731
+ /**
8732
+ * House domain, echoed from the request
8733
+ */
8734
+ house: string;
8735
+ /**
8736
+ * Brand ID within the house portfolio, echoed from request
8737
+ */
8738
+ brand_id?: string;
8739
+ /**
8740
+ * Operator domain, echoed from request
8741
+ */
8742
+ operator?: string;
8743
+ /**
8744
+ * Human-readable account name assigned by the seller
8745
+ */
8746
+ name?: string;
8747
+ /**
8748
+ * Action taken for this account. created: new account provisioned. updated: existing account modified. unchanged: no changes needed. failed: could not process (see errors).
8749
+ */
8750
+ action: 'created' | 'updated' | 'unchanged' | 'failed';
8751
+ /**
8752
+ * Account status. active: ready for use. pending_approval: seller reviewing (credit, legal). payment_required: credit limit reached or funds depleted. suspended: was active, now paused. closed: terminated.
8753
+ */
8754
+ status: 'active' | 'pending_approval' | 'payment_required' | 'suspended' | 'closed';
8755
+ /**
8756
+ * Who is invoiced on this account. May differ from the requested billing if the seller doesn't support it.
8757
+ */
8758
+ billing?: 'brand' | 'operator' | 'agent';
8759
+ /**
8760
+ * Parent account ID when this account is a sub-account under a shared billing account
8761
+ */
8762
+ parent_account_id?: string;
8763
+ /**
8764
+ * Setup information for pending accounts. Provides the agent (or human) with next steps to complete account activation.
8765
+ */
8766
+ setup?: {
8767
+ /**
8768
+ * URL where the human can complete the required action (credit application, legal agreement, add funds)
8769
+ */
8770
+ url?: string;
8771
+ /**
8772
+ * Human-readable description of what's needed
8773
+ */
8774
+ message: string;
8775
+ /**
8776
+ * When this setup link expires
8777
+ */
8778
+ expires_at?: string;
8779
+ };
8780
+ /**
8781
+ * Rate card applied to this account
8782
+ */
8783
+ rate_card?: string;
8784
+ /**
8785
+ * Payment terms (e.g., 'net_30', 'prepay')
8786
+ */
8787
+ payment_terms?: string;
8788
+ credit_limit?: {
8789
+ amount: number;
8790
+ currency: string;
8791
+ };
8792
+ /**
8793
+ * Per-account errors (only present when action is 'failed')
8794
+ */
8795
+ errors?: Error[];
8796
+ /**
8797
+ * Non-fatal warnings about this account
8798
+ */
8799
+ warnings?: string[];
8800
+ }[];
8801
+ context?: ContextObject;
8802
+ ext?: ExtensionObject;
8803
+ }
8804
+ /**
8805
+ * Standard error structure for task-specific errors and warnings
8806
+ */
8807
+ export interface SyncAccountsError {
8808
+ /**
8809
+ * Operation-level errors (e.g., authentication failure, service unavailable)
8810
+ */
8811
+ errors: Error[];
8812
+ context?: ContextObject;
8813
+ ext?: ExtensionObject;
8814
+ }
6885
8815
  //# sourceMappingURL=tools.generated.d.ts.map