@adcp/client 3.11.2 → 3.13.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 (55) hide show
  1. package/README.md +35 -32
  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/core/ADCPMultiAgentClient.d.ts +0 -1
  10. package/dist/lib/core/ADCPMultiAgentClient.d.ts.map +1 -1
  11. package/dist/lib/core/ADCPMultiAgentClient.js +0 -1
  12. package/dist/lib/core/ADCPMultiAgentClient.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 +660 -45
  24. package/dist/lib/types/core.generated.d.ts.map +1 -1
  25. package/dist/lib/types/core.generated.js +2 -2
  26. package/dist/lib/types/core.generated.js.map +1 -1
  27. package/dist/lib/types/schemas.generated.d.ts +5821 -3396
  28. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  29. package/dist/lib/types/schemas.generated.js +717 -177
  30. package/dist/lib/types/schemas.generated.js.map +1 -1
  31. package/dist/lib/types/tools.generated.d.ts +2198 -384
  32. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  33. package/dist/lib/types/tools.generated.js +0 -3
  34. package/dist/lib/types/tools.generated.js.map +1 -1
  35. package/dist/lib/utils/capabilities.d.ts +4 -0
  36. package/dist/lib/utils/capabilities.d.ts.map +1 -1
  37. package/dist/lib/utils/capabilities.js +6 -1
  38. package/dist/lib/utils/capabilities.js.map +1 -1
  39. package/dist/lib/utils/index.d.ts +2 -1
  40. package/dist/lib/utils/index.d.ts.map +1 -1
  41. package/dist/lib/utils/index.js +6 -1
  42. package/dist/lib/utils/index.js.map +1 -1
  43. package/dist/lib/utils/pagination.d.ts +31 -0
  44. package/dist/lib/utils/pagination.d.ts.map +1 -0
  45. package/dist/lib/utils/pagination.js +51 -0
  46. package/dist/lib/utils/pagination.js.map +1 -0
  47. package/dist/lib/utils/pricing-adapter.d.ts +4 -0
  48. package/dist/lib/utils/pricing-adapter.d.ts.map +1 -1
  49. package/dist/lib/utils/pricing-adapter.js +7 -0
  50. package/dist/lib/utils/pricing-adapter.js.map +1 -1
  51. package/dist/lib/version.d.ts +7 -7
  52. package/dist/lib/version.d.ts.map +1 -1
  53. package/dist/lib/version.js +6 -6
  54. package/dist/lib/version.js.map +1 -1
  55. package/package.json +2 -2
@@ -10,10 +10,22 @@ 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';
25
+ /**
26
+ * Days of the week for daypart targeting
27
+ */
28
+ export type DayOfWeek = 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday';
17
29
  /**
18
30
  * Methods for verifying user age for compliance. Does not include 'inferred' as it is not accepted for regulatory compliance.
19
31
  */
@@ -22,6 +34,10 @@ export type AgeVerificationMethod = 'facial_age_estimation' | 'id_document' | 'd
22
34
  * Operating system platforms for device targeting. Browser values from Sec-CH-UA-Platform standard, extended for CTV.
23
35
  */
24
36
  export type DevicePlatform = 'ios' | 'android' | 'windows' | 'macos' | 'linux' | 'chromeos' | 'tvos' | 'tizen' | 'webos' | 'fire_os' | 'roku_os' | 'unknown';
37
+ /**
38
+ * Event type to optimize for (e.g. purchase, lead)
39
+ */
40
+ 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
41
  /**
26
42
  * Represents a purchased advertising campaign
27
43
  */
@@ -71,7 +87,7 @@ export interface Account {
71
87
  */
72
88
  account_id: string;
73
89
  /**
74
- * Human-readable account name (e.g., 'Coke', 'Coke c/o Publicis')
90
+ * Human-readable account name (e.g., 'Acme', 'Acme c/o Pinnacle')
75
91
  */
76
92
  name: string;
77
93
  /**
@@ -83,9 +99,25 @@ export interface Account {
83
99
  */
84
100
  billing_proxy?: string;
85
101
  /**
86
- * Account status
102
+ * Account status. pending_approval: seller reviewing (credit, contracts). payment_required: credit limit reached or funds depleted. suspended: was active, now paused. closed: terminated.
103
+ */
104
+ status: 'active' | 'pending_approval' | 'payment_required' | 'suspended' | 'closed';
105
+ /**
106
+ * House domain where brand.json is hosted. Canonical identity anchor for the brand.
87
107
  */
88
- status: 'active' | 'suspended' | 'closed';
108
+ house?: string;
109
+ /**
110
+ * Brand ID within the house portfolio (from brand.json)
111
+ */
112
+ brand_id?: string;
113
+ /**
114
+ * Domain of the entity operating this account
115
+ */
116
+ operator?: string;
117
+ /**
118
+ * Who is invoiced on this account. brand: seller invoices the brand directly. operator: seller invoices the operator (agency). agent: agent consolidates billing.
119
+ */
120
+ billing?: 'brand' | 'operator' | 'agent';
89
121
  /**
90
122
  * Identifier for the rate card applied to this account
91
123
  */
@@ -102,6 +134,7 @@ export interface Account {
102
134
  currency: string;
103
135
  };
104
136
  ext?: ExtensionObject;
137
+ [k: string]: unknown | undefined;
105
138
  }
106
139
  /**
107
140
  * 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 +184,7 @@ export interface Package {
151
184
  * Format IDs that creative assets will be provided for this package
152
185
  */
153
186
  format_ids_to_provide?: FormatID[];
187
+ optimization_goal?: OptimizationGoal;
154
188
  /**
155
189
  * Whether this package is paused by the buyer. Paused packages do not deliver impressions. Defaults to false.
156
190
  */
@@ -164,36 +198,134 @@ export interface Package {
164
198
  export interface TargetingOverlay {
165
199
  /**
166
200
  * Restrict delivery to specific countries. ISO 3166-1 alpha-2 codes (e.g., 'US', 'GB', 'DE').
201
+ *
202
+ * @minItems 1
167
203
  */
168
- geo_countries?: string[];
204
+ geo_countries?: [string, ...string[]];
205
+ /**
206
+ * Exclude specific countries from delivery. ISO 3166-1 alpha-2 codes (e.g., 'US', 'GB', 'DE').
207
+ *
208
+ * @minItems 1
209
+ */
210
+ geo_countries_exclude?: [string, ...string[]];
169
211
  /**
170
212
  * Restrict delivery to specific regions/states. ISO 3166-2 subdivision codes (e.g., 'US-CA', 'GB-SCT').
213
+ *
214
+ * @minItems 1
171
215
  */
172
- geo_regions?: string[];
216
+ geo_regions?: [string, ...string[]];
217
+ /**
218
+ * Exclude specific regions/states from delivery. ISO 3166-2 subdivision codes (e.g., 'US-CA', 'GB-SCT').
219
+ *
220
+ * @minItems 1
221
+ */
222
+ geo_regions_exclude?: [string, ...string[]];
173
223
  /**
174
224
  * Restrict delivery to specific metro areas. Each entry specifies the classification system and target values. Seller must declare supported systems in get_adcp_capabilities.
225
+ *
226
+ * @minItems 1
175
227
  */
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
- }[];
228
+ geo_metros?: [
229
+ {
230
+ system: MetroAreaSystem;
231
+ /**
232
+ * Metro codes within the system (e.g., ['501', '602'] for Nielsen DMAs)
233
+ *
234
+ * @minItems 1
235
+ */
236
+ values: [string, ...string[]];
237
+ },
238
+ ...{
239
+ system: MetroAreaSystem;
240
+ /**
241
+ * Metro codes within the system (e.g., ['501', '602'] for Nielsen DMAs)
242
+ *
243
+ * @minItems 1
244
+ */
245
+ values: [string, ...string[]];
246
+ }[]
247
+ ];
248
+ /**
249
+ * Exclude specific metro areas from delivery. Each entry specifies the classification system and excluded values. Seller must declare supported systems in get_adcp_capabilities.
250
+ *
251
+ * @minItems 1
252
+ */
253
+ geo_metros_exclude?: [
254
+ {
255
+ system: MetroAreaSystem1;
256
+ /**
257
+ * Metro codes to exclude within the system (e.g., ['501', '602'] for Nielsen DMAs)
258
+ *
259
+ * @minItems 1
260
+ */
261
+ values: [string, ...string[]];
262
+ },
263
+ ...{
264
+ system: MetroAreaSystem1;
265
+ /**
266
+ * Metro codes to exclude within the system (e.g., ['501', '602'] for Nielsen DMAs)
267
+ *
268
+ * @minItems 1
269
+ */
270
+ values: [string, ...string[]];
271
+ }[]
272
+ ];
185
273
  /**
186
274
  * Restrict delivery to specific postal areas. Each entry specifies the postal system and target values. Seller must declare supported systems in get_adcp_capabilities.
275
+ *
276
+ * @minItems 1
187
277
  */
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
- }[];
278
+ geo_postal_areas?: [
279
+ {
280
+ system: PostalCodeSystem;
281
+ /**
282
+ * Postal codes within the system (e.g., ['10001', '10002'] for us_zip)
283
+ *
284
+ * @minItems 1
285
+ */
286
+ values: [string, ...string[]];
287
+ },
288
+ ...{
289
+ system: PostalCodeSystem;
290
+ /**
291
+ * Postal codes within the system (e.g., ['10001', '10002'] for us_zip)
292
+ *
293
+ * @minItems 1
294
+ */
295
+ values: [string, ...string[]];
296
+ }[]
297
+ ];
298
+ /**
299
+ * Exclude specific postal areas from delivery. Each entry specifies the postal system and excluded values. Seller must declare supported systems in get_adcp_capabilities.
300
+ *
301
+ * @minItems 1
302
+ */
303
+ geo_postal_areas_exclude?: [
304
+ {
305
+ system: PostalCodeSystem1;
306
+ /**
307
+ * Postal codes to exclude within the system (e.g., ['10001', '10002'] for us_zip)
308
+ *
309
+ * @minItems 1
310
+ */
311
+ values: [string, ...string[]];
312
+ },
313
+ ...{
314
+ system: PostalCodeSystem1;
315
+ /**
316
+ * Postal codes to exclude within the system (e.g., ['10001', '10002'] for us_zip)
317
+ *
318
+ * @minItems 1
319
+ */
320
+ values: [string, ...string[]];
321
+ }[]
322
+ ];
323
+ /**
324
+ * Restrict delivery to specific time windows. Each entry specifies days of week and an hour range.
325
+ *
326
+ * @minItems 1
327
+ */
328
+ daypart_targets?: [DaypartTarget, ...DaypartTarget[]];
197
329
  /**
198
330
  * AXE segment ID to include for targeting
199
331
  */
@@ -218,8 +350,10 @@ export interface TargetingOverlay {
218
350
  verification_required?: boolean;
219
351
  /**
220
352
  * Accepted verification methods. If omitted, any method the platform supports is acceptable.
353
+ *
354
+ * @minItems 1
221
355
  */
222
- accepted_methods?: AgeVerificationMethod[];
356
+ accepted_methods?: [AgeVerificationMethod, ...AgeVerificationMethod[]];
223
357
  };
224
358
  /**
225
359
  * Restrict to specific platforms. Use for technical compatibility (app only works on iOS). Values from Sec-CH-UA-Platform standard, extended for CTV.
@@ -235,6 +369,29 @@ export interface TargetingOverlay {
235
369
  language?: [string, ...string[]];
236
370
  [k: string]: unknown | undefined;
237
371
  }
372
+ /**
373
+ * A time window for daypart targeting. Specifies days of week and an hour range. start_hour is inclusive, end_hour is exclusive (e.g., 6-10 = 6:00am to 10:00am). Follows the Google Ads AdScheduleInfo / DV360 DayPartTargeting pattern.
374
+ */
375
+ export interface DaypartTarget {
376
+ /**
377
+ * Days of week this window applies to. Use multiple days for compact targeting (e.g., monday-friday in one object).
378
+ *
379
+ * @minItems 1
380
+ */
381
+ days: [DayOfWeek, ...DayOfWeek[]];
382
+ /**
383
+ * Start hour (inclusive), 0-23 in 24-hour format. 0 = midnight, 6 = 6:00am, 18 = 6:00pm.
384
+ */
385
+ start_hour: number;
386
+ /**
387
+ * End hour (exclusive), 1-24 in 24-hour format. 10 = 10:00am, 24 = midnight. Must be greater than start_hour.
388
+ */
389
+ end_hour: number;
390
+ /**
391
+ * Optional human-readable name for this time window (e.g., 'Morning Drive', 'Prime Time')
392
+ */
393
+ label?: string;
394
+ }
238
395
  /**
239
396
  * Frequency capping settings for package-level application
240
397
  */
@@ -308,6 +465,39 @@ export interface FormatID {
308
465
  duration_ms?: number;
309
466
  [k: string]: unknown | undefined;
310
467
  }
468
+ /**
469
+ * 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.
470
+ */
471
+ export interface OptimizationGoal {
472
+ /**
473
+ * Event source to optimize against (must be configured on this account via sync_event_sources)
474
+ */
475
+ event_source_id: string;
476
+ event_type: EventType;
477
+ /**
478
+ * Target return on ad spend (e.g. 4.0 = $4 conversion value per $1 spent). Mutually exclusive with target_cpa.
479
+ */
480
+ target_roas?: number;
481
+ /**
482
+ * Target cost per acquisition in the buy currency. Mutually exclusive with target_roas.
483
+ */
484
+ target_cpa?: number;
485
+ /**
486
+ * 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.
487
+ */
488
+ attribution_window?: {
489
+ /**
490
+ * Click-through attribution window (e.g. '7d', '28d', '30d')
491
+ */
492
+ click_through: string;
493
+ /**
494
+ * View-through attribution window (e.g. '1d', '7d')
495
+ */
496
+ view_through?: string;
497
+ [k: string]: unknown | undefined;
498
+ };
499
+ [k: string]: unknown | undefined;
500
+ }
311
501
  /**
312
502
  * JavaScript module type
313
503
  */
@@ -337,6 +527,14 @@ export type VASTAsset = {
337
527
  * Tracking events supported by this VAST tag
338
528
  */
339
529
  tracking_events?: VASTTrackingEvent[];
530
+ /**
531
+ * URL to captions file (WebVTT, SRT, etc.)
532
+ */
533
+ captions_url?: string;
534
+ /**
535
+ * URL to audio description track for visually impaired users
536
+ */
537
+ audio_description_url?: string;
340
538
  [k: string]: unknown | undefined;
341
539
  } | {
342
540
  /**
@@ -360,6 +558,14 @@ export type VASTAsset = {
360
558
  * Tracking events supported by this VAST tag
361
559
  */
362
560
  tracking_events?: VASTTrackingEvent[];
561
+ /**
562
+ * URL to captions file (WebVTT, SRT, etc.)
563
+ */
564
+ captions_url?: string;
565
+ /**
566
+ * URL to audio description track for visually impaired users
567
+ */
568
+ audio_description_url?: string;
363
569
  [k: string]: unknown | undefined;
364
570
  };
365
571
  /**
@@ -399,6 +605,10 @@ export type DAASTAsset = {
399
605
  * Whether companion display ads are included
400
606
  */
401
607
  companion_ads?: boolean;
608
+ /**
609
+ * URL to text transcript of the audio content
610
+ */
611
+ transcript_url?: string;
402
612
  [k: string]: unknown | undefined;
403
613
  } | {
404
614
  /**
@@ -422,6 +632,10 @@ export type DAASTAsset = {
422
632
  * Whether companion display ads are included
423
633
  */
424
634
  companion_ads?: boolean;
635
+ /**
636
+ * URL to text transcript of the audio content
637
+ */
638
+ transcript_url?: string;
425
639
  [k: string]: unknown | undefined;
426
640
  };
427
641
  /**
@@ -642,6 +856,18 @@ export interface VideoAsset {
642
856
  * True peak level in dBFS
643
857
  */
644
858
  audio_true_peak_dbfs?: number;
859
+ /**
860
+ * URL to captions file (WebVTT, SRT, etc.)
861
+ */
862
+ captions_url?: string;
863
+ /**
864
+ * URL to text transcript of the video content
865
+ */
866
+ transcript_url?: string;
867
+ /**
868
+ * URL to audio description track for visually impaired users
869
+ */
870
+ audio_description_url?: string;
645
871
  [k: string]: unknown | undefined;
646
872
  }
647
873
  /**
@@ -692,6 +918,10 @@ export interface AudioAsset {
692
918
  * True peak level in dBFS
693
919
  */
694
920
  true_peak_dbfs?: number;
921
+ /**
922
+ * URL to text transcript of the audio content
923
+ */
924
+ transcript_url?: string;
695
925
  [k: string]: unknown | undefined;
696
926
  }
697
927
  /**
@@ -720,6 +950,27 @@ export interface HTMLAsset {
720
950
  * HTML version (e.g., 'HTML5')
721
951
  */
722
952
  version?: string;
953
+ /**
954
+ * Self-declared accessibility properties for this opaque creative
955
+ */
956
+ accessibility?: {
957
+ /**
958
+ * Text alternative describing the creative content
959
+ */
960
+ alt_text?: string;
961
+ /**
962
+ * Whether the creative can be fully operated via keyboard
963
+ */
964
+ keyboard_navigable?: boolean;
965
+ /**
966
+ * Whether the creative respects prefers-reduced-motion or provides pause/stop controls
967
+ */
968
+ motion_control?: boolean;
969
+ /**
970
+ * Whether the creative has been tested with screen readers
971
+ */
972
+ screen_reader_tested?: boolean;
973
+ };
723
974
  [k: string]: unknown | undefined;
724
975
  }
725
976
  /**
@@ -745,6 +996,27 @@ export interface JavaScriptAsset {
745
996
  */
746
997
  content: string;
747
998
  module_type?: JavaScriptModuleType;
999
+ /**
1000
+ * Self-declared accessibility properties for this opaque creative
1001
+ */
1002
+ accessibility?: {
1003
+ /**
1004
+ * Text alternative describing the creative content
1005
+ */
1006
+ alt_text?: string;
1007
+ /**
1008
+ * Whether the creative can be fully operated via keyboard
1009
+ */
1010
+ keyboard_navigable?: boolean;
1011
+ /**
1012
+ * Whether the creative respects prefers-reduced-motion or provides pause/stop controls
1013
+ */
1014
+ motion_control?: boolean;
1015
+ /**
1016
+ * Whether the creative has been tested with screen readers
1017
+ */
1018
+ screen_reader_tested?: boolean;
1019
+ };
748
1020
  [k: string]: unknown | undefined;
749
1021
  }
750
1022
  /**
@@ -835,29 +1107,29 @@ export interface BrandManifest {
835
1107
  height?: number;
836
1108
  }[];
837
1109
  /**
838
- * Brand color palette
1110
+ * Brand color palette. Each role accepts a single hex color or an array of hex colors for brands with multiple values per role.
839
1111
  */
840
1112
  colors?: {
841
1113
  /**
842
- * Primary brand color (hex format)
1114
+ * Primary brand color(s)
843
1115
  */
844
- primary?: string;
1116
+ primary?: string | [string, ...string[]];
845
1117
  /**
846
- * Secondary brand color (hex format)
1118
+ * Secondary brand color(s)
847
1119
  */
848
- secondary?: string;
1120
+ secondary?: string | [string, ...string[]];
849
1121
  /**
850
- * Accent color (hex format)
1122
+ * Accent color(s)
851
1123
  */
852
- accent?: string;
1124
+ accent?: string | [string, ...string[]];
853
1125
  /**
854
- * Background color (hex format)
1126
+ * Background color(s)
855
1127
  */
856
- background?: string;
1128
+ background?: string | [string, ...string[]];
857
1129
  /**
858
- * Text color (hex format)
1130
+ * Text color(s)
859
1131
  */
860
- text?: string;
1132
+ text?: string | [string, ...string[]];
861
1133
  };
862
1134
  /**
863
1135
  * Brand typography guidelines
@@ -879,7 +1151,7 @@ export interface BrandManifest {
879
1151
  /**
880
1152
  * Brand voice and messaging tone guidelines for creative agents.
881
1153
  */
882
- tone?: {
1154
+ tone?: string | {
883
1155
  /**
884
1156
  * High-level voice descriptor (e.g., 'warm and inviting', 'professional and trustworthy')
885
1157
  */
@@ -1096,6 +1368,10 @@ export interface BrandManifest {
1096
1368
  * Selectors to choose which products/offerings from the brand manifest product catalog to promote
1097
1369
  */
1098
1370
  export interface PromotedProducts {
1371
+ /**
1372
+ * GTIN product identifiers for cross-retailer catalog matching. Accepts standard GTIN formats (GTIN-8, UPC-A/GTIN-12, EAN-13/GTIN-13, GTIN-14).
1373
+ */
1374
+ manifest_gtins?: string[];
1099
1375
  /**
1100
1376
  * Direct product SKU references from the brand manifest product catalog
1101
1377
  */
@@ -1240,6 +1516,10 @@ export type PropertyID = string;
1240
1516
  * Tag for categorizing publisher properties. Must be lowercase alphanumeric with underscores only.
1241
1517
  */
1242
1518
  export type PropertyTag = string;
1519
+ /**
1520
+ * 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.
1521
+ */
1522
+ 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
1523
  /**
1244
1524
  * Type of inventory delivery
1245
1525
  */
@@ -1247,15 +1527,19 @@ export type DeliveryType = 'guaranteed' | 'non_guaranteed';
1247
1527
  /**
1248
1528
  * 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
1529
  */
1250
- export type PricingOption = CPMPricingOption | VCPMPricingOption | CPCPricingOption | CPCVPricingOption | CPVPricingOption | CPPPricingOption | FlatRatePricingOption;
1530
+ export type PricingOption = CPMPricingOption | VCPMPricingOption | CPCPricingOption | CPCVPricingOption | CPVPricingOption | CPPPricingOption | CPAPricingOption | FlatRatePricingOption | TimeBasedPricingOption;
1531
+ /**
1532
+ * Measurement system for the demographic field. Defaults to nielsen when omitted.
1533
+ */
1534
+ export type DemographicSystem = 'nielsen' | 'barb' | 'agf' | 'oztam' | 'mediametrie' | 'custom';
1251
1535
  /**
1252
- * Available frequencies for delivery reports and metrics updates
1536
+ * Standard marketing event types for event logging, aligned with IAB ECAPI
1253
1537
  */
1254
1538
  export type ReportingFrequency = 'hourly' | 'daily' | 'monthly';
1255
1539
  /**
1256
1540
  * Standard delivery and performance metrics available for reporting
1257
1541
  */
1258
- export type AvailableMetric = 'impressions' | 'spend' | 'clicks' | 'ctr' | 'video_completions' | 'completion_rate' | 'conversions' | 'viewability' | 'engagement_rate';
1542
+ 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
1543
  /**
1260
1544
  * Co-branding requirement
1261
1545
  */
@@ -1310,6 +1594,10 @@ export type DataProviderSignalSelector = {
1310
1594
  signal_tags: [string, ...string[]];
1311
1595
  [k: string]: unknown | undefined;
1312
1596
  };
1597
+ /**
1598
+ * Where the conversion event originated
1599
+ */
1600
+ export type ActionSource = 'website' | 'app' | 'offline' | 'phone_call' | 'chat' | 'email' | 'in_store' | 'system_generated' | 'other';
1313
1601
  /**
1314
1602
  * Represents available advertising inventory
1315
1603
  */
@@ -1330,6 +1618,10 @@ export interface Product {
1330
1618
  * 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
1619
  */
1332
1620
  publisher_properties: PublisherPropertySelector[];
1621
+ /**
1622
+ * 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'].
1623
+ */
1624
+ channels?: MediaChannel[];
1333
1625
  /**
1334
1626
  * Array of supported creative format IDs - structured format_id objects with agent_url and id
1335
1627
  */
@@ -1379,6 +1671,40 @@ export interface Product {
1379
1671
  * 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
1672
  */
1381
1673
  signal_targeting_allowed?: boolean;
1674
+ /**
1675
+ * 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.
1676
+ */
1677
+ conversion_tracking?: {
1678
+ /**
1679
+ * 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')
1680
+ */
1681
+ action_sources?: ActionSource[];
1682
+ /**
1683
+ * Optimization strategies this product supports when an optimization_goal is set on a package
1684
+ */
1685
+ supported_optimization_strategies?: ('maximize_conversions' | 'target_cpa' | 'target_roas')[];
1686
+ /**
1687
+ * 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'.
1688
+ */
1689
+ platform_managed?: boolean;
1690
+ };
1691
+ /**
1692
+ * When the buyer provides a brand_manifest with product_catalog, indicates which of the buyer's catalog items are eligible for this product. Enables buyers to make informed product_selector choices in create_media_buy. Only present for products where catalog matching is relevant (e.g. sponsored product listings on retail media). Sellers SHOULD include at least one of matched_gtins or matched_skus.
1693
+ */
1694
+ catalog_match?: {
1695
+ /**
1696
+ * GTINs from the buyer's catalog that are eligible on this product's inventory. Buyers can use these values in product_selectors.manifest_gtins when creating media buys. Standard GTIN formats (GTIN-8 through GTIN-14).
1697
+ */
1698
+ matched_gtins?: string[];
1699
+ /**
1700
+ * SKUs from the buyer's catalog that are eligible on this product's inventory. Buyers can use these values in product_selectors.manifest_skus when creating media buys.
1701
+ */
1702
+ matched_skus?: string[];
1703
+ /**
1704
+ * Total catalog items evaluated from the buyer's feed.
1705
+ */
1706
+ submitted_count: number;
1707
+ };
1382
1708
  /**
1383
1709
  * Explanation of why this product matches the brief (only included when brief is provided)
1384
1710
  */
@@ -1740,8 +2066,9 @@ export interface CPPPricingOption {
1740
2066
  * CPP-specific parameters for demographic targeting
1741
2067
  */
1742
2068
  parameters: {
2069
+ demographic_system?: DemographicSystem;
1743
2070
  /**
1744
- * Target demographic in Nielsen format (P18-49, M25-54, W35+, etc.)
2071
+ * Target demographic code within the specified demographic_system (e.g., P18-49 for Nielsen, ABC1 Adults for BARB)
1745
2072
  */
1746
2073
  demographic: string;
1747
2074
  /**
@@ -1778,6 +2105,44 @@ export interface PriceGuidance5 {
1778
2105
  p90?: number;
1779
2106
  [k: string]: unknown | undefined;
1780
2107
  }
2108
+ /**
2109
+ * 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).
2110
+ */
2111
+ export interface CPAPricingOption {
2112
+ /**
2113
+ * Unique identifier for this pricing option within the product
2114
+ */
2115
+ pricing_option_id: string;
2116
+ /**
2117
+ * Cost per acquisition (conversion event)
2118
+ */
2119
+ pricing_model: 'cpa';
2120
+ /**
2121
+ * The conversion event type that triggers billing (e.g., purchase, lead, app_install)
2122
+ */
2123
+ event_type: EventType;
2124
+ /**
2125
+ * Name of the custom event when event_type is 'custom'. Required when event_type is 'custom', ignored otherwise.
2126
+ */
2127
+ custom_event_name?: string;
2128
+ /**
2129
+ * 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.
2130
+ */
2131
+ event_source_id?: string;
2132
+ /**
2133
+ * ISO 4217 currency code
2134
+ */
2135
+ currency: string;
2136
+ /**
2137
+ * Fixed price per acquisition in the specified currency
2138
+ */
2139
+ fixed_price: number;
2140
+ /**
2141
+ * Minimum spend requirement per package using this pricing option, in the specified currency
2142
+ */
2143
+ min_spend_per_package?: number;
2144
+ [k: string]: unknown | undefined;
2145
+ }
1781
2146
  /**
1782
2147
  * 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
2148
  */
@@ -1865,6 +2230,77 @@ export interface PriceGuidance6 {
1865
2230
  p90?: number;
1866
2231
  [k: string]: unknown | undefined;
1867
2232
  }
2233
+ /**
2234
+ * 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.
2235
+ */
2236
+ export interface TimeBasedPricingOption {
2237
+ /**
2238
+ * Unique identifier for this pricing option within the product
2239
+ */
2240
+ pricing_option_id: string;
2241
+ /**
2242
+ * Cost per time unit - rate scales with campaign duration
2243
+ */
2244
+ pricing_model: 'time';
2245
+ /**
2246
+ * ISO 4217 currency code
2247
+ */
2248
+ currency: string;
2249
+ /**
2250
+ * Cost per time unit. If present, this is fixed pricing. If absent, auction-based.
2251
+ */
2252
+ fixed_price?: number;
2253
+ /**
2254
+ * Minimum acceptable bid per time unit for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
2255
+ */
2256
+ floor_price?: number;
2257
+ price_guidance?: PriceGuidance7;
2258
+ /**
2259
+ * Time-based pricing parameters
2260
+ */
2261
+ parameters: {
2262
+ /**
2263
+ * The time unit for pricing. Total cost = fixed_price × number of time_units in the campaign flight.
2264
+ */
2265
+ time_unit: 'hour' | 'day' | 'week' | 'month';
2266
+ /**
2267
+ * Minimum booking duration in time_units
2268
+ */
2269
+ min_duration?: number;
2270
+ /**
2271
+ * Maximum booking duration in time_units. Must be >= min_duration when both are present.
2272
+ */
2273
+ max_duration?: number;
2274
+ [k: string]: unknown | undefined;
2275
+ };
2276
+ /**
2277
+ * Minimum spend requirement per package using this pricing option, in the specified currency
2278
+ */
2279
+ min_spend_per_package?: number;
2280
+ [k: string]: unknown | undefined;
2281
+ }
2282
+ /**
2283
+ * Optional pricing guidance for auction-based bidding
2284
+ */
2285
+ export interface PriceGuidance7 {
2286
+ /**
2287
+ * 25th percentile of recent winning bids
2288
+ */
2289
+ p25?: number;
2290
+ /**
2291
+ * Median of recent winning bids
2292
+ */
2293
+ p50?: number;
2294
+ /**
2295
+ * 75th percentile of recent winning bids
2296
+ */
2297
+ p75?: number;
2298
+ /**
2299
+ * 90th percentile of recent winning bids
2300
+ */
2301
+ p90?: number;
2302
+ [k: string]: unknown | undefined;
2303
+ }
1868
2304
  /**
1869
2305
  * Measurement capabilities included with a product
1870
2306
  */
@@ -1910,9 +2346,17 @@ export interface ReportingCapabilities {
1910
2346
  */
1911
2347
  supports_webhooks: boolean;
1912
2348
  /**
1913
- * Metrics available in reporting. Impressions and spend are always implicitly included.
2349
+ * 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
2350
  */
1915
2351
  available_metrics: AvailableMetric[];
2352
+ /**
2353
+ * Whether this product supports creative-level metric breakdowns in delivery reporting (by_creative within by_package)
2354
+ */
2355
+ supports_creative_breakdown?: boolean;
2356
+ /**
2357
+ * 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.
2358
+ */
2359
+ date_range_support: 'date_range' | 'lifetime_only';
1916
2360
  [k: string]: unknown | undefined;
1917
2361
  }
1918
2362
  /**
@@ -2017,6 +2461,10 @@ export interface Property {
2017
2461
  * Tags for categorization and grouping (e.g., network membership, content categories)
2018
2462
  */
2019
2463
  tags?: PropertyTag[];
2464
+ /**
2465
+ * 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.
2466
+ */
2467
+ supported_channels?: MediaChannel[];
2020
2468
  /**
2021
2469
  * Domain where adagents.json should be checked for authorization validation. Optional in adagents.json (file location implies domain).
2022
2470
  */
@@ -2025,7 +2473,7 @@ export interface Property {
2025
2473
  /**
2026
2474
  * Type of AdCP operation that triggered this webhook. Enables webhook handlers to route to appropriate processing logic.
2027
2475
  */
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';
2476
+ 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
2477
  /**
2030
2478
  * AdCP domain this task belongs to. Helps classify the operation type at a high level.
2031
2479
  */
@@ -2041,10 +2489,30 @@ export type AdCPAsyncResponseData = GetProductsResponse | GetProductsAsyncWorkin
2041
2489
  /**
2042
2490
  * Selects properties from a publisher's adagents.json. Used for both product definitions and agent authorization. Supports three selection patterns: all properties, specific IDs, or by tags.
2043
2491
  */
2492
+ export type ForecastRangeUnit = 'spend' | 'reach_freq' | 'weekly' | 'daily' | 'clicks' | 'conversions';
2493
+ /**
2494
+ * Method used to produce this forecast
2495
+ */
2496
+ export type ForecastMethod = 'estimate' | 'modeled' | 'guaranteed';
2497
+ /**
2498
+ * Measurement system for the demographic field. Ensures buyer and seller agree on demographic notation.
2499
+ */
2500
+ export type DemographicSystem1 = 'nielsen' | 'barb' | 'agf' | 'oztam' | 'mediametrie' | 'custom';
2501
+ /**
2502
+ * Unit of measurement for reach and audience_size metrics in this forecast. Required for cross-channel forecast comparison.
2503
+ */
2504
+ export type ReachUnit = 'individuals' | 'households' | 'devices' | 'accounts' | 'cookies' | 'custom';
2505
+ /**
2506
+ * Response for completed or failed create_media_buy
2507
+ */
2044
2508
  export type CreateMediaBuyResponse = CreateMediaBuySuccess | CreateMediaBuyError;
2045
2509
  /**
2046
2510
  * Budget pacing strategy
2047
2511
  */
2512
+ 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';
2513
+ /**
2514
+ * Response for completed or failed update_media_buy
2515
+ */
2048
2516
  export type UpdateMediaBuyResponse = UpdateMediaBuySuccess | UpdateMediaBuyError;
2049
2517
  /**
2050
2518
  * Response for completed or failed sync_creatives
@@ -2103,6 +2571,11 @@ export interface GetProductsResponse {
2103
2571
  * [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
2572
  */
2105
2573
  property_list_applied?: boolean;
2574
+ /**
2575
+ * 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.
2576
+ */
2577
+ product_selectors_applied?: boolean;
2578
+ pagination?: PaginationResponse;
2106
2579
  context?: ContextObject;
2107
2580
  ext?: ExtensionObject;
2108
2581
  [k: string]: unknown | undefined;
@@ -2159,6 +2632,7 @@ export interface Proposal {
2159
2632
  * Explanation of how this proposal aligns with the campaign brief
2160
2633
  */
2161
2634
  brief_alignment?: string;
2635
+ forecast?: DeliveryForecast1;
2162
2636
  ext?: ExtensionObject;
2163
2637
  [k: string]: unknown | undefined;
2164
2638
  }
@@ -2190,6 +2664,113 @@ export interface ProductAllocation {
2190
2664
  * Categorical tags for this allocation (e.g., 'desktop', 'german', 'mobile') - useful for grouping/filtering allocations by dimension
2191
2665
  */
2192
2666
  tags?: string[];
2667
+ /**
2668
+ * Recommended time windows for this allocation in spot-plan proposals.
2669
+ *
2670
+ * @minItems 1
2671
+ */
2672
+ daypart_targets?: [DaypartTarget, ...DaypartTarget[]];
2673
+ forecast?: DeliveryForecast;
2674
+ ext?: ExtensionObject;
2675
+ [k: string]: unknown | undefined;
2676
+ }
2677
+ /**
2678
+ * A time window for daypart targeting. Specifies days of week and an hour range. start_hour is inclusive, end_hour is exclusive (e.g., 6-10 = 6:00am to 10:00am). Follows the Google Ads AdScheduleInfo / DV360 DayPartTargeting pattern.
2679
+ */
2680
+ export interface DeliveryForecast {
2681
+ /**
2682
+ * Forecasted delivery at one or more budget levels. A single point is a standard forecast; multiple points ordered by ascending budget form a curve showing how metrics scale with spend. Each point pairs a budget with metric ranges.
2683
+ *
2684
+ * @minItems 1
2685
+ */
2686
+ points: [ForecastPoint, ...ForecastPoint[]];
2687
+ forecast_range_unit?: ForecastRangeUnit;
2688
+ method: ForecastMethod;
2689
+ /**
2690
+ * ISO 4217 currency code for monetary values in this forecast (spend, budget)
2691
+ */
2692
+ currency: string;
2693
+ demographic_system?: DemographicSystem1;
2694
+ /**
2695
+ * Target demographic code within the specified demographic_system. For Nielsen: P18-49, M25-54, W35+. For BARB: ABC1 Adults, 16-34. For AGF: E 14-49.
2696
+ */
2697
+ demographic?: string;
2698
+ reach_unit?: ReachUnit;
2699
+ /**
2700
+ * When this forecast was computed
2701
+ */
2702
+ generated_at?: string;
2703
+ /**
2704
+ * When this forecast expires. After this time, the forecast should be refreshed. Forecast expiry does not affect proposal executability.
2705
+ */
2706
+ valid_until?: string;
2707
+ ext?: ExtensionObject;
2708
+ [k: string]: unknown | undefined;
2709
+ }
2710
+ /**
2711
+ * A forecast at a specific budget level. A single point represents a standard forecast; multiple points ordered by ascending budget form a curve showing how delivery metrics scale with spend.
2712
+ */
2713
+ export interface ForecastPoint {
2714
+ /**
2715
+ * Budget amount for this forecast point. For allocation-level forecasts, this is the absolute budget for that allocation (not the percentage). For proposal-level forecasts, this is the total proposal budget.
2716
+ */
2717
+ budget: number;
2718
+ /**
2719
+ * Forecasted metric values at this budget level. Keys are either forecastable-metric values for delivery/engagement (impressions, reach, spend, etc.) or event-type values for outcomes (purchase, lead, app_install, etc.). Values are ForecastRange objects (low/mid/high). Use { "mid": value } for point estimates. Include spend when the platform predicts it will differ from budget.
2720
+ */
2721
+ metrics: {
2722
+ [k: string]: ForecastRange | undefined;
2723
+ };
2724
+ [k: string]: unknown | undefined;
2725
+ }
2726
+ /**
2727
+ * A forecast value with optional low/high bounds. The mid value represents the most likely outcome. When low and high are provided, they represent conservative and optimistic estimates respectively.
2728
+ */
2729
+ export interface ForecastRange {
2730
+ /**
2731
+ * Conservative (low-end) forecast value
2732
+ */
2733
+ low?: number;
2734
+ /**
2735
+ * Expected (most likely) forecast value
2736
+ */
2737
+ mid: number;
2738
+ /**
2739
+ * Optimistic (high-end) forecast value
2740
+ */
2741
+ high?: number;
2742
+ [k: string]: unknown | undefined;
2743
+ }
2744
+ /**
2745
+ * Aggregate forecasted delivery metrics for the entire proposal. When both proposal-level and allocation-level forecasts are present, the proposal-level forecast is authoritative for total delivery estimation.
2746
+ */
2747
+ export interface DeliveryForecast1 {
2748
+ /**
2749
+ * Forecasted delivery at one or more budget levels. A single point is a standard forecast; multiple points ordered by ascending budget form a curve showing how metrics scale with spend. Each point pairs a budget with metric ranges.
2750
+ *
2751
+ * @minItems 1
2752
+ */
2753
+ points: [ForecastPoint, ...ForecastPoint[]];
2754
+ forecast_range_unit?: ForecastRangeUnit;
2755
+ method: ForecastMethod;
2756
+ /**
2757
+ * ISO 4217 currency code for monetary values in this forecast (spend, budget)
2758
+ */
2759
+ currency: string;
2760
+ demographic_system?: DemographicSystem1;
2761
+ /**
2762
+ * Target demographic code within the specified demographic_system. For Nielsen: P18-49, M25-54, W35+. For BARB: ABC1 Adults, 16-34. For AGF: E 14-49.
2763
+ */
2764
+ demographic?: string;
2765
+ reach_unit?: ReachUnit;
2766
+ /**
2767
+ * When this forecast was computed
2768
+ */
2769
+ generated_at?: string;
2770
+ /**
2771
+ * When this forecast expires. After this time, the forecast should be refreshed. Forecast expiry does not affect proposal executability.
2772
+ */
2773
+ valid_until?: string;
2193
2774
  ext?: ExtensionObject;
2194
2775
  [k: string]: unknown | undefined;
2195
2776
  }
@@ -2225,6 +2806,23 @@ export interface Error {
2225
2806
  };
2226
2807
  [k: string]: unknown | undefined;
2227
2808
  }
2809
+ /**
2810
+ * Standard cursor-based pagination metadata for list responses
2811
+ */
2812
+ export interface PaginationResponse {
2813
+ /**
2814
+ * Whether more results are available beyond this page
2815
+ */
2816
+ has_more: boolean;
2817
+ /**
2818
+ * Opaque cursor to pass in the next request to fetch the next page. Only present when has_more is true.
2819
+ */
2820
+ cursor?: string;
2821
+ /**
2822
+ * Total number of items matching the query across all pages. Optional because not all backends can efficiently compute this.
2823
+ */
2824
+ total_count?: number;
2825
+ }
2228
2826
  /**
2229
2827
  * 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
2828
  */
@@ -2523,7 +3121,7 @@ export interface Account1 {
2523
3121
  */
2524
3122
  account_id: string;
2525
3123
  /**
2526
- * Human-readable account name (e.g., 'Coke', 'Coke c/o Publicis')
3124
+ * Human-readable account name (e.g., 'Acme', 'Acme c/o Pinnacle')
2527
3125
  */
2528
3126
  name: string;
2529
3127
  /**
@@ -2535,9 +3133,25 @@ export interface Account1 {
2535
3133
  */
2536
3134
  billing_proxy?: string;
2537
3135
  /**
2538
- * Account status
3136
+ * Account status. pending_approval: seller reviewing (credit, contracts). payment_required: credit limit reached or funds depleted. suspended: was active, now paused. closed: terminated.
3137
+ */
3138
+ status: 'active' | 'pending_approval' | 'payment_required' | 'suspended' | 'closed';
3139
+ /**
3140
+ * House domain where brand.json is hosted. Canonical identity anchor for the brand.
3141
+ */
3142
+ house?: string;
3143
+ /**
3144
+ * Brand ID within the house portfolio (from brand.json)
2539
3145
  */
2540
- status: 'active' | 'suspended' | 'closed';
3146
+ brand_id?: string;
3147
+ /**
3148
+ * Domain of the entity operating this account
3149
+ */
3150
+ operator?: string;
3151
+ /**
3152
+ * Who is invoiced on this account. brand: seller invoices the brand directly. operator: seller invoices the operator (agency). agent: agent consolidates billing.
3153
+ */
3154
+ billing?: 'brand' | 'operator' | 'agent';
2541
3155
  /**
2542
3156
  * Identifier for the rate card applied to this account
2543
3157
  */
@@ -2554,6 +3168,7 @@ export interface Account1 {
2554
3168
  currency: string;
2555
3169
  };
2556
3170
  ext?: ExtensionObject;
3171
+ [k: string]: unknown | undefined;
2557
3172
  }
2558
3173
  /**
2559
3174
  * Error response - operation failed completely, no creatives were processed