@adcp/client 3.11.2 → 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 (49) hide show
  1. package/dist/lib/adapters/property-list-adapter.d.ts.map +1 -1
  2. package/dist/lib/adapters/property-list-adapter.js +10 -5
  3. package/dist/lib/adapters/property-list-adapter.js.map +1 -1
  4. package/dist/lib/agents/index.generated.d.ts +33 -1
  5. package/dist/lib/agents/index.generated.d.ts.map +1 -1
  6. package/dist/lib/agents/index.generated.js +48 -0
  7. package/dist/lib/agents/index.generated.js.map +1 -1
  8. package/dist/lib/index.d.ts +4 -2
  9. package/dist/lib/index.d.ts.map +1 -1
  10. package/dist/lib/index.js +14 -3
  11. package/dist/lib/index.js.map +1 -1
  12. package/dist/lib/testing/scenarios/creative.js +11 -1
  13. package/dist/lib/testing/scenarios/creative.js.map +1 -1
  14. package/dist/lib/testing/types.d.ts +12 -0
  15. package/dist/lib/testing/types.d.ts.map +1 -1
  16. package/dist/lib/types/adcp.d.ts +1 -0
  17. package/dist/lib/types/adcp.d.ts.map +1 -1
  18. package/dist/lib/types/core.generated.d.ts +478 -42
  19. package/dist/lib/types/core.generated.d.ts.map +1 -1
  20. package/dist/lib/types/core.generated.js +1 -1
  21. package/dist/lib/types/schemas.generated.d.ts +3031 -1004
  22. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  23. package/dist/lib/types/schemas.generated.js +623 -138
  24. package/dist/lib/types/schemas.generated.js.map +1 -1
  25. package/dist/lib/types/tools.generated.d.ts +1940 -305
  26. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  27. package/dist/lib/types/tools.generated.js +0 -3
  28. package/dist/lib/types/tools.generated.js.map +1 -1
  29. package/dist/lib/utils/capabilities.d.ts +4 -0
  30. package/dist/lib/utils/capabilities.d.ts.map +1 -1
  31. package/dist/lib/utils/capabilities.js +6 -1
  32. package/dist/lib/utils/capabilities.js.map +1 -1
  33. package/dist/lib/utils/index.d.ts +2 -1
  34. package/dist/lib/utils/index.d.ts.map +1 -1
  35. package/dist/lib/utils/index.js +6 -1
  36. package/dist/lib/utils/index.js.map +1 -1
  37. package/dist/lib/utils/pagination.d.ts +31 -0
  38. package/dist/lib/utils/pagination.d.ts.map +1 -0
  39. package/dist/lib/utils/pagination.js +51 -0
  40. package/dist/lib/utils/pagination.js.map +1 -0
  41. package/dist/lib/utils/pricing-adapter.d.ts +4 -0
  42. package/dist/lib/utils/pricing-adapter.d.ts.map +1 -1
  43. package/dist/lib/utils/pricing-adapter.js +7 -0
  44. package/dist/lib/utils/pricing-adapter.js.map +1 -1
  45. package/dist/lib/version.d.ts +3 -3
  46. package/dist/lib/version.d.ts.map +1 -1
  47. package/dist/lib/version.js +3 -3
  48. package/dist/lib/version.js.map +1 -1
  49. package/package.json +1 -1
@@ -10,10 +10,18 @@ export type Pacing = 'even' | 'asap' | 'front_loaded';
10
10
  * Metro area classification system (e.g., 'nielsen_dma', 'uk_itl2')
11
11
  */
12
12
  export type MetroAreaSystem = 'nielsen_dma' | 'uk_itl1' | 'uk_itl2' | 'eurostat_nuts2' | 'custom';
13
+ /**
14
+ * Metro area classification system (e.g., 'nielsen_dma', 'uk_itl2')
15
+ */
16
+ export type MetroAreaSystem1 = 'nielsen_dma' | 'uk_itl1' | 'uk_itl2' | 'eurostat_nuts2' | 'custom';
13
17
  /**
14
18
  * Postal code system (e.g., 'us_zip', 'gb_outward'). System name encodes country and precision.
15
19
  */
16
20
  export type PostalCodeSystem = 'us_zip' | 'us_zip_plus_four' | 'gb_outward' | 'gb_full' | 'ca_fsa' | 'ca_full' | 'de_plz' | 'fr_code_postal' | 'au_postcode';
21
+ /**
22
+ * Postal code system (e.g., 'us_zip', 'gb_outward'). System name encodes country and precision.
23
+ */
24
+ export type PostalCodeSystem1 = 'us_zip' | 'us_zip_plus_four' | 'gb_outward' | 'gb_full' | 'ca_fsa' | 'ca_full' | 'de_plz' | 'fr_code_postal' | 'au_postcode';
17
25
  /**
18
26
  * Methods for verifying user age for compliance. Does not include 'inferred' as it is not accepted for regulatory compliance.
19
27
  */
@@ -22,6 +30,10 @@ export type AgeVerificationMethod = 'facial_age_estimation' | 'id_document' | 'd
22
30
  * Operating system platforms for device targeting. Browser values from Sec-CH-UA-Platform standard, extended for CTV.
23
31
  */
24
32
  export type DevicePlatform = 'ios' | 'android' | 'windows' | 'macos' | 'linux' | 'chromeos' | 'tvos' | 'tizen' | 'webos' | 'fire_os' | 'roku_os' | 'unknown';
33
+ /**
34
+ * Event type to optimize for (e.g. purchase, lead)
35
+ */
36
+ 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';
25
37
  /**
26
38
  * Represents a purchased advertising campaign
27
39
  */
@@ -83,9 +95,25 @@ export interface Account {
83
95
  */
84
96
  billing_proxy?: string;
85
97
  /**
86
- * Account status
98
+ * Account status. pending_approval: seller reviewing (credit, contracts). payment_required: credit limit reached or funds depleted. suspended: was active, now paused. closed: terminated.
87
99
  */
88
- status: 'active' | 'suspended' | 'closed';
100
+ status: 'active' | 'pending_approval' | 'payment_required' | 'suspended' | 'closed';
101
+ /**
102
+ * House domain where brand.json is hosted. Canonical identity anchor for the brand.
103
+ */
104
+ house?: string;
105
+ /**
106
+ * Brand ID within the house portfolio (from brand.json)
107
+ */
108
+ brand_id?: string;
109
+ /**
110
+ * Domain of the entity operating this account
111
+ */
112
+ operator?: string;
113
+ /**
114
+ * Who is invoiced on this account. brand: seller invoices the brand directly. operator: seller invoices the operator (agency). agent: agent consolidates billing.
115
+ */
116
+ billing?: 'brand' | 'operator' | 'agent';
89
117
  /**
90
118
  * Identifier for the rate card applied to this account
91
119
  */
@@ -102,6 +130,7 @@ export interface Account {
102
130
  currency: string;
103
131
  };
104
132
  ext?: ExtensionObject;
133
+ [k: string]: unknown | undefined;
105
134
  }
106
135
  /**
107
136
  * 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.
@@ -151,6 +180,7 @@ export interface Package {
151
180
  * Format IDs that creative assets will be provided for this package
152
181
  */
153
182
  format_ids_to_provide?: FormatID[];
183
+ optimization_goal?: OptimizationGoal;
154
184
  /**
155
185
  * Whether this package is paused by the buyer. Paused packages do not deliver impressions. Defaults to false.
156
186
  */
@@ -164,36 +194,128 @@ export interface Package {
164
194
  export interface TargetingOverlay {
165
195
  /**
166
196
  * Restrict delivery to specific countries. ISO 3166-1 alpha-2 codes (e.g., 'US', 'GB', 'DE').
197
+ *
198
+ * @minItems 1
199
+ */
200
+ geo_countries?: [string, ...string[]];
201
+ /**
202
+ * Exclude specific countries from delivery. ISO 3166-1 alpha-2 codes (e.g., 'US', 'GB', 'DE').
203
+ *
204
+ * @minItems 1
167
205
  */
168
- geo_countries?: string[];
206
+ geo_countries_exclude?: [string, ...string[]];
169
207
  /**
170
208
  * Restrict delivery to specific regions/states. ISO 3166-2 subdivision codes (e.g., 'US-CA', 'GB-SCT').
209
+ *
210
+ * @minItems 1
171
211
  */
172
- geo_regions?: string[];
212
+ geo_regions?: [string, ...string[]];
213
+ /**
214
+ * Exclude specific regions/states from delivery. ISO 3166-2 subdivision codes (e.g., 'US-CA', 'GB-SCT').
215
+ *
216
+ * @minItems 1
217
+ */
218
+ geo_regions_exclude?: [string, ...string[]];
173
219
  /**
174
220
  * Restrict delivery to specific metro areas. Each entry specifies the classification system and target values. Seller must declare supported systems in get_adcp_capabilities.
221
+ *
222
+ * @minItems 1
175
223
  */
176
- geo_metros?: {
177
- system: MetroAreaSystem;
178
- /**
179
- * Metro codes within the system (e.g., ['501', '602'] for Nielsen DMAs)
180
- *
181
- * @minItems 1
182
- */
183
- values: [string, ...string[]];
184
- }[];
224
+ geo_metros?: [
225
+ {
226
+ system: MetroAreaSystem;
227
+ /**
228
+ * Metro codes within the system (e.g., ['501', '602'] for Nielsen DMAs)
229
+ *
230
+ * @minItems 1
231
+ */
232
+ values: [string, ...string[]];
233
+ },
234
+ ...{
235
+ system: MetroAreaSystem;
236
+ /**
237
+ * Metro codes within the system (e.g., ['501', '602'] for Nielsen DMAs)
238
+ *
239
+ * @minItems 1
240
+ */
241
+ values: [string, ...string[]];
242
+ }[]
243
+ ];
244
+ /**
245
+ * Exclude specific metro areas from delivery. Each entry specifies the classification system and excluded values. Seller must declare supported systems in get_adcp_capabilities.
246
+ *
247
+ * @minItems 1
248
+ */
249
+ geo_metros_exclude?: [
250
+ {
251
+ system: MetroAreaSystem1;
252
+ /**
253
+ * Metro codes to exclude within the system (e.g., ['501', '602'] for Nielsen DMAs)
254
+ *
255
+ * @minItems 1
256
+ */
257
+ values: [string, ...string[]];
258
+ },
259
+ ...{
260
+ system: MetroAreaSystem1;
261
+ /**
262
+ * Metro codes to exclude within the system (e.g., ['501', '602'] for Nielsen DMAs)
263
+ *
264
+ * @minItems 1
265
+ */
266
+ values: [string, ...string[]];
267
+ }[]
268
+ ];
185
269
  /**
186
270
  * Restrict delivery to specific postal areas. Each entry specifies the postal system and target values. Seller must declare supported systems in get_adcp_capabilities.
271
+ *
272
+ * @minItems 1
187
273
  */
188
- geo_postal_areas?: {
189
- system: PostalCodeSystem;
190
- /**
191
- * Postal codes within the system (e.g., ['10001', '10002'] for us_zip)
192
- *
193
- * @minItems 1
194
- */
195
- values: [string, ...string[]];
196
- }[];
274
+ geo_postal_areas?: [
275
+ {
276
+ system: PostalCodeSystem;
277
+ /**
278
+ * Postal codes within the system (e.g., ['10001', '10002'] for us_zip)
279
+ *
280
+ * @minItems 1
281
+ */
282
+ values: [string, ...string[]];
283
+ },
284
+ ...{
285
+ system: PostalCodeSystem;
286
+ /**
287
+ * Postal codes within the system (e.g., ['10001', '10002'] for us_zip)
288
+ *
289
+ * @minItems 1
290
+ */
291
+ values: [string, ...string[]];
292
+ }[]
293
+ ];
294
+ /**
295
+ * Exclude specific postal areas from delivery. Each entry specifies the postal system and excluded values. Seller must declare supported systems in get_adcp_capabilities.
296
+ *
297
+ * @minItems 1
298
+ */
299
+ geo_postal_areas_exclude?: [
300
+ {
301
+ system: PostalCodeSystem1;
302
+ /**
303
+ * Postal codes to exclude within the system (e.g., ['10001', '10002'] for us_zip)
304
+ *
305
+ * @minItems 1
306
+ */
307
+ values: [string, ...string[]];
308
+ },
309
+ ...{
310
+ system: PostalCodeSystem1;
311
+ /**
312
+ * Postal codes to exclude within the system (e.g., ['10001', '10002'] for us_zip)
313
+ *
314
+ * @minItems 1
315
+ */
316
+ values: [string, ...string[]];
317
+ }[]
318
+ ];
197
319
  /**
198
320
  * AXE segment ID to include for targeting
199
321
  */
@@ -218,8 +340,10 @@ export interface TargetingOverlay {
218
340
  verification_required?: boolean;
219
341
  /**
220
342
  * Accepted verification methods. If omitted, any method the platform supports is acceptable.
343
+ *
344
+ * @minItems 1
221
345
  */
222
- accepted_methods?: AgeVerificationMethod[];
346
+ accepted_methods?: [AgeVerificationMethod, ...AgeVerificationMethod[]];
223
347
  };
224
348
  /**
225
349
  * Restrict to specific platforms. Use for technical compatibility (app only works on iOS). Values from Sec-CH-UA-Platform standard, extended for CTV.
@@ -308,6 +432,39 @@ export interface FormatID {
308
432
  duration_ms?: number;
309
433
  [k: string]: unknown | undefined;
310
434
  }
435
+ /**
436
+ * Conversion optimization goal for a package. Tells the seller which event source and event type to optimize delivery against. Provide at most one of target_roas or target_cpa. If neither is provided, the seller optimizes for maximum conversions within budget.
437
+ */
438
+ export interface OptimizationGoal {
439
+ /**
440
+ * Event source to optimize against (must be configured on this account via sync_event_sources)
441
+ */
442
+ event_source_id: string;
443
+ event_type: EventType;
444
+ /**
445
+ * Target return on ad spend (e.g. 4.0 = $4 conversion value per $1 spent). Mutually exclusive with target_cpa.
446
+ */
447
+ target_roas?: number;
448
+ /**
449
+ * Target cost per acquisition in the buy currency. Mutually exclusive with target_roas.
450
+ */
451
+ target_cpa?: number;
452
+ /**
453
+ * 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.
454
+ */
455
+ attribution_window?: {
456
+ /**
457
+ * Click-through attribution window (e.g. '7d', '28d', '30d')
458
+ */
459
+ click_through: string;
460
+ /**
461
+ * View-through attribution window (e.g. '1d', '7d')
462
+ */
463
+ view_through?: string;
464
+ [k: string]: unknown | undefined;
465
+ };
466
+ [k: string]: unknown | undefined;
467
+ }
311
468
  /**
312
469
  * JavaScript module type
313
470
  */
@@ -337,6 +494,14 @@ export type VASTAsset = {
337
494
  * Tracking events supported by this VAST tag
338
495
  */
339
496
  tracking_events?: VASTTrackingEvent[];
497
+ /**
498
+ * URL to captions file (WebVTT, SRT, etc.)
499
+ */
500
+ captions_url?: string;
501
+ /**
502
+ * URL to audio description track for visually impaired users
503
+ */
504
+ audio_description_url?: string;
340
505
  [k: string]: unknown | undefined;
341
506
  } | {
342
507
  /**
@@ -360,6 +525,14 @@ export type VASTAsset = {
360
525
  * Tracking events supported by this VAST tag
361
526
  */
362
527
  tracking_events?: VASTTrackingEvent[];
528
+ /**
529
+ * URL to captions file (WebVTT, SRT, etc.)
530
+ */
531
+ captions_url?: string;
532
+ /**
533
+ * URL to audio description track for visually impaired users
534
+ */
535
+ audio_description_url?: string;
363
536
  [k: string]: unknown | undefined;
364
537
  };
365
538
  /**
@@ -399,6 +572,10 @@ export type DAASTAsset = {
399
572
  * Whether companion display ads are included
400
573
  */
401
574
  companion_ads?: boolean;
575
+ /**
576
+ * URL to text transcript of the audio content
577
+ */
578
+ transcript_url?: string;
402
579
  [k: string]: unknown | undefined;
403
580
  } | {
404
581
  /**
@@ -422,6 +599,10 @@ export type DAASTAsset = {
422
599
  * Whether companion display ads are included
423
600
  */
424
601
  companion_ads?: boolean;
602
+ /**
603
+ * URL to text transcript of the audio content
604
+ */
605
+ transcript_url?: string;
425
606
  [k: string]: unknown | undefined;
426
607
  };
427
608
  /**
@@ -642,6 +823,18 @@ export interface VideoAsset {
642
823
  * True peak level in dBFS
643
824
  */
644
825
  audio_true_peak_dbfs?: number;
826
+ /**
827
+ * URL to captions file (WebVTT, SRT, etc.)
828
+ */
829
+ captions_url?: string;
830
+ /**
831
+ * URL to text transcript of the video content
832
+ */
833
+ transcript_url?: string;
834
+ /**
835
+ * URL to audio description track for visually impaired users
836
+ */
837
+ audio_description_url?: string;
645
838
  [k: string]: unknown | undefined;
646
839
  }
647
840
  /**
@@ -692,6 +885,10 @@ export interface AudioAsset {
692
885
  * True peak level in dBFS
693
886
  */
694
887
  true_peak_dbfs?: number;
888
+ /**
889
+ * URL to text transcript of the audio content
890
+ */
891
+ transcript_url?: string;
695
892
  [k: string]: unknown | undefined;
696
893
  }
697
894
  /**
@@ -720,6 +917,27 @@ export interface HTMLAsset {
720
917
  * HTML version (e.g., 'HTML5')
721
918
  */
722
919
  version?: string;
920
+ /**
921
+ * Self-declared accessibility properties for this opaque creative
922
+ */
923
+ accessibility?: {
924
+ /**
925
+ * Text alternative describing the creative content
926
+ */
927
+ alt_text?: string;
928
+ /**
929
+ * Whether the creative can be fully operated via keyboard
930
+ */
931
+ keyboard_navigable?: boolean;
932
+ /**
933
+ * Whether the creative respects prefers-reduced-motion or provides pause/stop controls
934
+ */
935
+ motion_control?: boolean;
936
+ /**
937
+ * Whether the creative has been tested with screen readers
938
+ */
939
+ screen_reader_tested?: boolean;
940
+ };
723
941
  [k: string]: unknown | undefined;
724
942
  }
725
943
  /**
@@ -745,6 +963,27 @@ export interface JavaScriptAsset {
745
963
  */
746
964
  content: string;
747
965
  module_type?: JavaScriptModuleType;
966
+ /**
967
+ * Self-declared accessibility properties for this opaque creative
968
+ */
969
+ accessibility?: {
970
+ /**
971
+ * Text alternative describing the creative content
972
+ */
973
+ alt_text?: string;
974
+ /**
975
+ * Whether the creative can be fully operated via keyboard
976
+ */
977
+ keyboard_navigable?: boolean;
978
+ /**
979
+ * Whether the creative respects prefers-reduced-motion or provides pause/stop controls
980
+ */
981
+ motion_control?: boolean;
982
+ /**
983
+ * Whether the creative has been tested with screen readers
984
+ */
985
+ screen_reader_tested?: boolean;
986
+ };
748
987
  [k: string]: unknown | undefined;
749
988
  }
750
989
  /**
@@ -835,29 +1074,29 @@ export interface BrandManifest {
835
1074
  height?: number;
836
1075
  }[];
837
1076
  /**
838
- * Brand color palette
1077
+ * Brand color palette. Each role accepts a single hex color or an array of hex colors for brands with multiple values per role.
839
1078
  */
840
1079
  colors?: {
841
1080
  /**
842
- * Primary brand color (hex format)
1081
+ * Primary brand color(s)
843
1082
  */
844
- primary?: string;
1083
+ primary?: string | [string, ...string[]];
845
1084
  /**
846
- * Secondary brand color (hex format)
1085
+ * Secondary brand color(s)
847
1086
  */
848
- secondary?: string;
1087
+ secondary?: string | [string, ...string[]];
849
1088
  /**
850
- * Accent color (hex format)
1089
+ * Accent color(s)
851
1090
  */
852
- accent?: string;
1091
+ accent?: string | [string, ...string[]];
853
1092
  /**
854
- * Background color (hex format)
1093
+ * Background color(s)
855
1094
  */
856
- background?: string;
1095
+ background?: string | [string, ...string[]];
857
1096
  /**
858
- * Text color (hex format)
1097
+ * Text color(s)
859
1098
  */
860
- text?: string;
1099
+ text?: string | [string, ...string[]];
861
1100
  };
862
1101
  /**
863
1102
  * Brand typography guidelines
@@ -879,7 +1118,7 @@ export interface BrandManifest {
879
1118
  /**
880
1119
  * Brand voice and messaging tone guidelines for creative agents.
881
1120
  */
882
- tone?: {
1121
+ tone?: string | {
883
1122
  /**
884
1123
  * High-level voice descriptor (e.g., 'warm and inviting', 'professional and trustworthy')
885
1124
  */
@@ -1096,6 +1335,10 @@ export interface BrandManifest {
1096
1335
  * Selectors to choose which products/offerings from the brand manifest product catalog to promote
1097
1336
  */
1098
1337
  export interface PromotedProducts {
1338
+ /**
1339
+ * GTIN product identifiers for cross-retailer catalog matching. Accepts standard GTIN formats (GTIN-8, UPC-A/GTIN-12, EAN-13/GTIN-13, GTIN-14).
1340
+ */
1341
+ manifest_gtins?: string[];
1099
1342
  /**
1100
1343
  * Direct product SKU references from the brand manifest product catalog
1101
1344
  */
@@ -1240,6 +1483,10 @@ export type PropertyID = string;
1240
1483
  * Tag for categorizing publisher properties. Must be lowercase alphanumeric with underscores only.
1241
1484
  */
1242
1485
  export type PropertyTag = string;
1486
+ /**
1487
+ * 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.
1488
+ */
1489
+ export type MediaChannel = 'display' | 'olv' | 'social' | 'search' | 'ctv' | 'linear_tv' | 'radio' | 'streaming_audio' | 'podcast' | 'dooh' | 'ooh' | 'print' | 'cinema' | 'email' | 'gaming' | 'retail_media' | 'influencer' | 'affiliate' | 'product_placement';
1243
1490
  /**
1244
1491
  * Type of inventory delivery
1245
1492
  */
@@ -1247,15 +1494,15 @@ export type DeliveryType = 'guaranteed' | 'non_guaranteed';
1247
1494
  /**
1248
1495
  * A pricing model option offered by a publisher for a product. Discriminated by pricing_model field. If fixed_price is present, it's fixed pricing. If absent, it's auction-based (floor_price and price_guidance optional).
1249
1496
  */
1250
- export type PricingOption = CPMPricingOption | VCPMPricingOption | CPCPricingOption | CPCVPricingOption | CPVPricingOption | CPPPricingOption | FlatRatePricingOption;
1497
+ export type PricingOption = CPMPricingOption | VCPMPricingOption | CPCPricingOption | CPCVPricingOption | CPVPricingOption | CPPPricingOption | CPAPricingOption | FlatRatePricingOption | TimeBasedPricingOption;
1251
1498
  /**
1252
- * Available frequencies for delivery reports and metrics updates
1499
+ * Standard marketing event types for event logging, aligned with IAB ECAPI
1253
1500
  */
1254
1501
  export type ReportingFrequency = 'hourly' | 'daily' | 'monthly';
1255
1502
  /**
1256
1503
  * Standard delivery and performance metrics available for reporting
1257
1504
  */
1258
- export type AvailableMetric = 'impressions' | 'spend' | 'clicks' | 'ctr' | 'video_completions' | 'completion_rate' | 'conversions' | 'viewability' | 'engagement_rate';
1505
+ 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';
1259
1506
  /**
1260
1507
  * Co-branding requirement
1261
1508
  */
@@ -1310,6 +1557,10 @@ export type DataProviderSignalSelector = {
1310
1557
  signal_tags: [string, ...string[]];
1311
1558
  [k: string]: unknown | undefined;
1312
1559
  };
1560
+ /**
1561
+ * Where the conversion event originated
1562
+ */
1563
+ export type ActionSource = 'website' | 'app' | 'offline' | 'phone_call' | 'chat' | 'email' | 'in_store' | 'system_generated' | 'other';
1313
1564
  /**
1314
1565
  * Represents available advertising inventory
1315
1566
  */
@@ -1330,6 +1581,10 @@ export interface Product {
1330
1581
  * Publisher properties covered by this product. Buyers fetch actual property definitions from each publisher's adagents.json and validate agent authorization. Selection patterns mirror the authorization patterns in adagents.json for consistency.
1331
1582
  */
1332
1583
  publisher_properties: PublisherPropertySelector[];
1584
+ /**
1585
+ * 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'].
1586
+ */
1587
+ channels?: MediaChannel[];
1333
1588
  /**
1334
1589
  * Array of supported creative format IDs - structured format_id objects with agent_url and id
1335
1590
  */
@@ -1379,6 +1634,23 @@ export interface Product {
1379
1634
  * 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.
1380
1635
  */
1381
1636
  signal_targeting_allowed?: boolean;
1637
+ /**
1638
+ * 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.
1639
+ */
1640
+ conversion_tracking?: {
1641
+ /**
1642
+ * 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')
1643
+ */
1644
+ action_sources?: ActionSource[];
1645
+ /**
1646
+ * Optimization strategies this product supports when an optimization_goal is set on a package
1647
+ */
1648
+ supported_optimization_strategies?: ('maximize_conversions' | 'target_cpa' | 'target_roas')[];
1649
+ /**
1650
+ * 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'.
1651
+ */
1652
+ platform_managed?: boolean;
1653
+ };
1382
1654
  /**
1383
1655
  * Explanation of why this product matches the brief (only included when brief is provided)
1384
1656
  */
@@ -1778,6 +2050,44 @@ export interface PriceGuidance5 {
1778
2050
  p90?: number;
1779
2051
  [k: string]: unknown | undefined;
1780
2052
  }
2053
+ /**
2054
+ * 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).
2055
+ */
2056
+ export interface CPAPricingOption {
2057
+ /**
2058
+ * Unique identifier for this pricing option within the product
2059
+ */
2060
+ pricing_option_id: string;
2061
+ /**
2062
+ * Cost per acquisition (conversion event)
2063
+ */
2064
+ pricing_model: 'cpa';
2065
+ /**
2066
+ * The conversion event type that triggers billing (e.g., purchase, lead, app_install)
2067
+ */
2068
+ event_type: EventType;
2069
+ /**
2070
+ * Name of the custom event when event_type is 'custom'. Required when event_type is 'custom', ignored otherwise.
2071
+ */
2072
+ custom_event_name?: string;
2073
+ /**
2074
+ * 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.
2075
+ */
2076
+ event_source_id?: string;
2077
+ /**
2078
+ * ISO 4217 currency code
2079
+ */
2080
+ currency: string;
2081
+ /**
2082
+ * Fixed price per acquisition in the specified currency
2083
+ */
2084
+ fixed_price: number;
2085
+ /**
2086
+ * Minimum spend requirement per package using this pricing option, in the specified currency
2087
+ */
2088
+ min_spend_per_package?: number;
2089
+ [k: string]: unknown | undefined;
2090
+ }
1781
2091
  /**
1782
2092
  * 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.
1783
2093
  */
@@ -1865,6 +2175,77 @@ export interface PriceGuidance6 {
1865
2175
  p90?: number;
1866
2176
  [k: string]: unknown | undefined;
1867
2177
  }
2178
+ /**
2179
+ * 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.
2180
+ */
2181
+ export interface TimeBasedPricingOption {
2182
+ /**
2183
+ * Unique identifier for this pricing option within the product
2184
+ */
2185
+ pricing_option_id: string;
2186
+ /**
2187
+ * Cost per time unit - rate scales with campaign duration
2188
+ */
2189
+ pricing_model: 'time';
2190
+ /**
2191
+ * ISO 4217 currency code
2192
+ */
2193
+ currency: string;
2194
+ /**
2195
+ * Cost per time unit. If present, this is fixed pricing. If absent, auction-based.
2196
+ */
2197
+ fixed_price?: number;
2198
+ /**
2199
+ * Minimum acceptable bid per time unit for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
2200
+ */
2201
+ floor_price?: number;
2202
+ price_guidance?: PriceGuidance7;
2203
+ /**
2204
+ * Time-based pricing parameters
2205
+ */
2206
+ parameters: {
2207
+ /**
2208
+ * The time unit for pricing. Total cost = fixed_price × number of time_units in the campaign flight.
2209
+ */
2210
+ time_unit: 'hour' | 'day' | 'week' | 'month';
2211
+ /**
2212
+ * Minimum booking duration in time_units
2213
+ */
2214
+ min_duration?: number;
2215
+ /**
2216
+ * Maximum booking duration in time_units. Must be >= min_duration when both are present.
2217
+ */
2218
+ max_duration?: number;
2219
+ [k: string]: unknown | undefined;
2220
+ };
2221
+ /**
2222
+ * Minimum spend requirement per package using this pricing option, in the specified currency
2223
+ */
2224
+ min_spend_per_package?: number;
2225
+ [k: string]: unknown | undefined;
2226
+ }
2227
+ /**
2228
+ * Optional pricing guidance for auction-based bidding
2229
+ */
2230
+ export interface PriceGuidance7 {
2231
+ /**
2232
+ * 25th percentile of recent winning bids
2233
+ */
2234
+ p25?: number;
2235
+ /**
2236
+ * Median of recent winning bids
2237
+ */
2238
+ p50?: number;
2239
+ /**
2240
+ * 75th percentile of recent winning bids
2241
+ */
2242
+ p75?: number;
2243
+ /**
2244
+ * 90th percentile of recent winning bids
2245
+ */
2246
+ p90?: number;
2247
+ [k: string]: unknown | undefined;
2248
+ }
1868
2249
  /**
1869
2250
  * Measurement capabilities included with a product
1870
2251
  */
@@ -1910,9 +2291,17 @@ export interface ReportingCapabilities {
1910
2291
  */
1911
2292
  supports_webhooks: boolean;
1912
2293
  /**
1913
- * Metrics available in reporting. Impressions and spend are always implicitly included.
2294
+ * 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.
1914
2295
  */
1915
2296
  available_metrics: AvailableMetric[];
2297
+ /**
2298
+ * Whether this product supports creative-level metric breakdowns in delivery reporting (by_creative within by_package)
2299
+ */
2300
+ supports_creative_breakdown?: boolean;
2301
+ /**
2302
+ * 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.
2303
+ */
2304
+ date_range_support: 'date_range' | 'lifetime_only';
1916
2305
  [k: string]: unknown | undefined;
1917
2306
  }
1918
2307
  /**
@@ -2017,6 +2406,10 @@ export interface Property {
2017
2406
  * Tags for categorization and grouping (e.g., network membership, content categories)
2018
2407
  */
2019
2408
  tags?: PropertyTag[];
2409
+ /**
2410
+ * Advertising channels this property supports (e.g., ['display', 'olv', 'social']). Publishers declare which channels their inventory aligns with. Properties may support multiple channels. See the Media Channel Taxonomy for definitions.
2411
+ */
2412
+ supported_channels?: MediaChannel[];
2020
2413
  /**
2021
2414
  * Domain where adagents.json should be checked for authorization validation. Optional in adagents.json (file location implies domain).
2022
2415
  */
@@ -2025,7 +2418,7 @@ export interface Property {
2025
2418
  /**
2026
2419
  * Type of AdCP operation that triggered this webhook. Enables webhook handlers to route to appropriate processing logic.
2027
2420
  */
2028
- export type TaskType = 'create_media_buy' | 'update_media_buy' | 'sync_creatives' | 'activate_signal' | 'get_signals' | 'create_property_list' | 'update_property_list' | 'get_property_list' | 'list_property_lists' | 'delete_property_list';
2421
+ export type TaskType = 'create_media_buy' | 'update_media_buy' | 'sync_creatives' | 'activate_signal' | 'get_signals' | 'create_property_list' | 'update_property_list' | 'get_property_list' | 'list_property_lists' | 'delete_property_list' | 'sync_accounts' | 'get_creative_delivery' | 'sync_event_sources' | 'log_event';
2029
2422
  /**
2030
2423
  * AdCP domain this task belongs to. Helps classify the operation type at a high level.
2031
2424
  */
@@ -2045,6 +2438,10 @@ export type CreateMediaBuyResponse = CreateMediaBuySuccess | CreateMediaBuyError
2045
2438
  /**
2046
2439
  * Budget pacing strategy
2047
2440
  */
2441
+ 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';
2442
+ /**
2443
+ * Response for completed or failed update_media_buy
2444
+ */
2048
2445
  export type UpdateMediaBuyResponse = UpdateMediaBuySuccess | UpdateMediaBuyError;
2049
2446
  /**
2050
2447
  * Response for completed or failed sync_creatives
@@ -2103,6 +2500,11 @@ export interface GetProductsResponse {
2103
2500
  * [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.
2104
2501
  */
2105
2502
  property_list_applied?: boolean;
2503
+ /**
2504
+ * 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.
2505
+ */
2506
+ product_selectors_applied?: boolean;
2507
+ pagination?: PaginationResponse;
2106
2508
  context?: ContextObject;
2107
2509
  ext?: ExtensionObject;
2108
2510
  [k: string]: unknown | undefined;
@@ -2225,6 +2627,23 @@ export interface Error {
2225
2627
  };
2226
2628
  [k: string]: unknown | undefined;
2227
2629
  }
2630
+ /**
2631
+ * Standard cursor-based pagination metadata for list responses
2632
+ */
2633
+ export interface PaginationResponse {
2634
+ /**
2635
+ * Whether more results are available beyond this page
2636
+ */
2637
+ has_more: boolean;
2638
+ /**
2639
+ * Opaque cursor to pass in the next request to fetch the next page. Only present when has_more is true.
2640
+ */
2641
+ cursor?: string;
2642
+ /**
2643
+ * Total number of items matching the query across all pages. Optional because not all backends can efficiently compute this.
2644
+ */
2645
+ total_count?: number;
2646
+ }
2228
2647
  /**
2229
2648
  * 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.
2230
2649
  */
@@ -2535,9 +2954,25 @@ export interface Account1 {
2535
2954
  */
2536
2955
  billing_proxy?: string;
2537
2956
  /**
2538
- * Account status
2957
+ * Account status. pending_approval: seller reviewing (credit, contracts). payment_required: credit limit reached or funds depleted. suspended: was active, now paused. closed: terminated.
2958
+ */
2959
+ status: 'active' | 'pending_approval' | 'payment_required' | 'suspended' | 'closed';
2960
+ /**
2961
+ * House domain where brand.json is hosted. Canonical identity anchor for the brand.
2962
+ */
2963
+ house?: string;
2964
+ /**
2965
+ * Brand ID within the house portfolio (from brand.json)
2966
+ */
2967
+ brand_id?: string;
2968
+ /**
2969
+ * Domain of the entity operating this account
2970
+ */
2971
+ operator?: string;
2972
+ /**
2973
+ * Who is invoiced on this account. brand: seller invoices the brand directly. operator: seller invoices the operator (agency). agent: agent consolidates billing.
2539
2974
  */
2540
- status: 'active' | 'suspended' | 'closed';
2975
+ billing?: 'brand' | 'operator' | 'agent';
2541
2976
  /**
2542
2977
  * Identifier for the rate card applied to this account
2543
2978
  */
@@ -2554,6 +2989,7 @@ export interface Account1 {
2554
2989
  currency: string;
2555
2990
  };
2556
2991
  ext?: ExtensionObject;
2992
+ [k: string]: unknown | undefined;
2557
2993
  }
2558
2994
  /**
2559
2995
  * Error response - operation failed completely, no creatives were processed