@adcp/client 3.1.0 → 3.2.1

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 (59) hide show
  1. package/README.md +3 -0
  2. package/dist/lib/agents/index.generated.d.ts +27 -50
  3. package/dist/lib/agents/index.generated.d.ts.map +1 -1
  4. package/dist/lib/agents/index.generated.js +12 -24
  5. package/dist/lib/agents/index.generated.js.map +1 -1
  6. package/dist/lib/core/ADCPMultiAgentClient.d.ts +150 -41
  7. package/dist/lib/core/ADCPMultiAgentClient.d.ts.map +1 -1
  8. package/dist/lib/core/ADCPMultiAgentClient.js +150 -41
  9. package/dist/lib/core/ADCPMultiAgentClient.js.map +1 -1
  10. package/dist/lib/core/CreativeAgentClient.d.ts.map +1 -1
  11. package/dist/lib/core/CreativeAgentClient.js +6 -1
  12. package/dist/lib/core/CreativeAgentClient.js.map +1 -1
  13. package/dist/lib/core/ProtocolResponseParser.d.ts.map +1 -1
  14. package/dist/lib/core/ProtocolResponseParser.js +9 -1
  15. package/dist/lib/core/ProtocolResponseParser.js.map +1 -1
  16. package/dist/lib/core/ResponseValidator.d.ts.map +1 -1
  17. package/dist/lib/core/ResponseValidator.js +5 -6
  18. package/dist/lib/core/ResponseValidator.js.map +1 -1
  19. package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
  20. package/dist/lib/core/SingleAgentClient.js +3 -8
  21. package/dist/lib/core/SingleAgentClient.js.map +1 -1
  22. package/dist/lib/core/TaskExecutor.d.ts +1 -1
  23. package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
  24. package/dist/lib/core/TaskExecutor.js +60 -61
  25. package/dist/lib/core/TaskExecutor.js.map +1 -1
  26. package/dist/lib/index.d.ts +30 -15
  27. package/dist/lib/index.d.ts.map +1 -1
  28. package/dist/lib/index.js +86 -26
  29. package/dist/lib/index.js.map +1 -1
  30. package/dist/lib/protocols/a2a.d.ts +2 -1
  31. package/dist/lib/protocols/a2a.d.ts.map +1 -1
  32. package/dist/lib/protocols/a2a.js +10 -2
  33. package/dist/lib/protocols/a2a.js.map +1 -1
  34. package/dist/lib/protocols/index.d.ts +12 -1
  35. package/dist/lib/protocols/index.d.ts.map +1 -1
  36. package/dist/lib/protocols/index.js +29 -14
  37. package/dist/lib/protocols/index.js.map +1 -1
  38. package/dist/lib/types/core.generated.d.ts +185 -163
  39. package/dist/lib/types/core.generated.d.ts.map +1 -1
  40. package/dist/lib/types/core.generated.js +2 -2
  41. package/dist/lib/types/schemas.generated.d.ts +3536 -3236
  42. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  43. package/dist/lib/types/schemas.generated.js +440 -365
  44. package/dist/lib/types/schemas.generated.js.map +1 -1
  45. package/dist/lib/types/tools.generated.d.ts +590 -565
  46. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  47. package/dist/lib/utils/index.d.ts +3 -0
  48. package/dist/lib/utils/index.d.ts.map +1 -1
  49. package/dist/lib/utils/index.js +10 -1
  50. package/dist/lib/utils/index.js.map +1 -1
  51. package/dist/lib/utils/response-unwrapper.d.ts +36 -0
  52. package/dist/lib/utils/response-unwrapper.d.ts.map +1 -0
  53. package/dist/lib/utils/response-unwrapper.js +331 -0
  54. package/dist/lib/utils/response-unwrapper.js.map +1 -0
  55. package/dist/lib/version.d.ts +13 -5
  56. package/dist/lib/version.d.ts.map +1 -1
  57. package/dist/lib/version.js +19 -5
  58. package/dist/lib/version.js.map +1 -1
  59. package/package.json +4 -6
@@ -6,10 +6,6 @@ export type MediaBuyStatus = 'pending_activation' | 'active' | 'paused' | 'compl
6
6
  * Budget pacing strategy
7
7
  */
8
8
  export type Pacing = 'even' | 'asap' | 'front_loaded';
9
- /**
10
- * Status of a package
11
- */
12
- export type PackageStatus = 'draft' | 'active' | 'paused' | 'completed';
13
9
  /**
14
10
  * Represents a purchased advertising campaign
15
11
  */
@@ -47,6 +43,7 @@ export interface MediaBuy {
47
43
  * Last update timestamp
48
44
  */
49
45
  updated_at?: string;
46
+ ext?: ExtensionObject;
50
47
  }
51
48
  /**
52
49
  * A specific product within a media buy (line item)
@@ -90,7 +87,11 @@ export interface Package {
90
87
  * Format IDs that creative assets will be provided for this package
91
88
  */
92
89
  format_ids_to_provide?: FormatID[];
93
- status: PackageStatus;
90
+ /**
91
+ * Whether this package is paused by the buyer. Paused packages do not deliver impressions. Defaults to false.
92
+ */
93
+ paused?: boolean;
94
+ ext?: ExtensionObject;
94
95
  }
95
96
  /**
96
97
  * 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).
@@ -151,7 +152,7 @@ export interface CreativeAssignment {
151
152
  placement_ids?: [string, ...string[]];
152
153
  }
153
154
  /**
154
- * Structured format identifier with agent URL and format name
155
+ * 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.
155
156
  */
156
157
  export interface FormatID {
157
158
  /**
@@ -159,10 +160,70 @@ export interface FormatID {
159
160
  */
160
161
  agent_url: string;
161
162
  /**
162
- * Format identifier within the agent's namespace (e.g., 'display_300x250', 'video_standard_30s')
163
+ * Format identifier within the agent's namespace (e.g., 'display_static', 'video_hosted', 'audio_standard'). When used alone, references a template format. When combined with dimension/duration fields, creates a parameterized format ID for a specific variant.
163
164
  */
164
165
  id: string;
166
+ /**
167
+ * Width in pixels for visual formats. When specified, height must also be specified. Both fields together create a parameterized format ID for dimension-specific variants.
168
+ */
169
+ width?: number;
170
+ /**
171
+ * Height in pixels for visual formats. When specified, width must also be specified. Both fields together create a parameterized format ID for dimension-specific variants.
172
+ */
173
+ height?: number;
174
+ /**
175
+ * Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters.
176
+ */
177
+ duration_ms?: number;
165
178
  }
179
+ /**
180
+ * 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.
181
+ */
182
+ export interface ExtensionObject {
183
+ [k: string]: unknown;
184
+ }
185
+ /**
186
+ * Image asset with URL and dimensions
187
+ */
188
+ export type ImageAsset = Dimensions & {
189
+ /**
190
+ * URL to the image asset
191
+ */
192
+ url: string;
193
+ /**
194
+ * Image file format (jpg, png, gif, webp, etc.)
195
+ */
196
+ format?: string;
197
+ /**
198
+ * Alternative text for accessibility
199
+ */
200
+ alt_text?: string;
201
+ };
202
+ /**
203
+ * Video asset with URL and specifications
204
+ */
205
+ export type VideoAsset = Dimensions & {
206
+ /**
207
+ * URL to the video asset
208
+ */
209
+ url: string;
210
+ /**
211
+ * Video duration in milliseconds
212
+ */
213
+ duration_ms?: number;
214
+ /**
215
+ * Video file format (mp4, webm, mov, etc.)
216
+ */
217
+ format?: string;
218
+ /**
219
+ * Video bitrate in kilobits per second
220
+ */
221
+ bitrate_kbps?: number;
222
+ };
223
+ /**
224
+ * JavaScript module type
225
+ */
226
+ export type JavaScriptModuleType = 'esm' | 'commonjs' | 'script';
166
227
  /**
167
228
  * VAST (Video Ad Serving Template) tag for third-party video ad serving
168
229
  */
@@ -175,10 +236,7 @@ export type VASTAsset = {
175
236
  * URL endpoint that returns VAST XML
176
237
  */
177
238
  url: string;
178
- /**
179
- * VAST specification version
180
- */
181
- vast_version?: '2.0' | '3.0' | '4.0' | '4.1' | '4.2';
239
+ vast_version?: VASTVersion;
182
240
  /**
183
241
  * Whether VPAID (Video Player-Ad Interface Definition) is supported
184
242
  */
@@ -190,7 +248,7 @@ export type VASTAsset = {
190
248
  /**
191
249
  * Tracking events supported by this VAST tag
192
250
  */
193
- tracking_events?: ('start' | 'firstQuartile' | 'midpoint' | 'thirdQuartile' | 'complete' | 'impression' | 'click' | 'pause' | 'resume' | 'skip' | 'mute' | 'unmute' | 'fullscreen' | 'exitFullscreen' | 'playerExpand' | 'playerCollapse')[];
251
+ tracking_events?: VASTTrackingEvent[];
194
252
  } | {
195
253
  /**
196
254
  * Discriminator indicating VAST is delivered as inline XML content
@@ -200,10 +258,7 @@ export type VASTAsset = {
200
258
  * Inline VAST XML content
201
259
  */
202
260
  content: string;
203
- /**
204
- * VAST specification version
205
- */
206
- vast_version?: '2.0' | '3.0' | '4.0' | '4.1' | '4.2';
261
+ vast_version?: VASTVersion1;
207
262
  /**
208
263
  * Whether VPAID (Video Player-Ad Interface Definition) is supported
209
264
  */
@@ -215,8 +270,20 @@ export type VASTAsset = {
215
270
  /**
216
271
  * Tracking events supported by this VAST tag
217
272
  */
218
- tracking_events?: ('start' | 'firstQuartile' | 'midpoint' | 'thirdQuartile' | 'complete' | 'impression' | 'click' | 'pause' | 'resume' | 'skip' | 'mute' | 'unmute' | 'fullscreen' | 'exitFullscreen' | 'playerExpand' | 'playerCollapse')[];
273
+ tracking_events?: VASTTrackingEvent[];
219
274
  };
275
+ /**
276
+ * VAST specification version
277
+ */
278
+ export type VASTVersion = '2.0' | '3.0' | '4.0' | '4.1' | '4.2';
279
+ /**
280
+ * Standard VAST tracking events for video ad playback and interaction
281
+ */
282
+ export type VASTTrackingEvent = 'start' | 'firstQuartile' | 'midpoint' | 'thirdQuartile' | 'complete' | 'impression' | 'click' | 'pause' | 'resume' | 'skip' | 'mute' | 'unmute' | 'fullscreen' | 'exitFullscreen' | 'playerExpand' | 'playerCollapse';
283
+ /**
284
+ * VAST specification version
285
+ */
286
+ export type VASTVersion1 = '2.0' | '3.0' | '4.0' | '4.1' | '4.2';
220
287
  /**
221
288
  * DAAST (Digital Audio Ad Serving Template) tag for third-party audio ad serving
222
289
  */
@@ -229,10 +296,7 @@ export type DAASTAsset = {
229
296
  * URL endpoint that returns DAAST XML
230
297
  */
231
298
  url: string;
232
- /**
233
- * DAAST specification version
234
- */
235
- daast_version?: '1.0' | '1.1';
299
+ daast_version?: DAASTVersion;
236
300
  /**
237
301
  * Expected audio duration in milliseconds (if known)
238
302
  */
@@ -240,7 +304,7 @@ export type DAASTAsset = {
240
304
  /**
241
305
  * Tracking events supported by this DAAST tag
242
306
  */
243
- tracking_events?: ('start' | 'firstQuartile' | 'midpoint' | 'thirdQuartile' | 'complete' | 'impression' | 'pause' | 'resume' | 'skip' | 'mute' | 'unmute')[];
307
+ tracking_events?: DAASTTrackingEvent[];
244
308
  /**
245
309
  * Whether companion display ads are included
246
310
  */
@@ -254,10 +318,7 @@ export type DAASTAsset = {
254
318
  * Inline DAAST XML content
255
319
  */
256
320
  content: string;
257
- /**
258
- * DAAST specification version
259
- */
260
- daast_version?: '1.0' | '1.1';
321
+ daast_version?: DAASTVersion1;
261
322
  /**
262
323
  * Expected audio duration in milliseconds (if known)
263
324
  */
@@ -265,12 +326,24 @@ export type DAASTAsset = {
265
326
  /**
266
327
  * Tracking events supported by this DAAST tag
267
328
  */
268
- tracking_events?: ('start' | 'firstQuartile' | 'midpoint' | 'thirdQuartile' | 'complete' | 'impression' | 'pause' | 'resume' | 'skip' | 'mute' | 'unmute')[];
329
+ tracking_events?: DAASTTrackingEvent[];
269
330
  /**
270
331
  * Whether companion display ads are included
271
332
  */
272
333
  companion_ads?: boolean;
273
334
  };
335
+ /**
336
+ * DAAST specification version
337
+ */
338
+ export type DAASTVersion = '1.0' | '1.1';
339
+ /**
340
+ * Standard DAAST tracking events for audio ad playback and interaction
341
+ */
342
+ export type DAASTTrackingEvent = 'start' | 'firstQuartile' | 'midpoint' | 'thirdQuartile' | 'complete' | 'impression' | 'pause' | 'resume' | 'skip' | 'mute' | 'unmute';
343
+ /**
344
+ * DAAST specification version
345
+ */
346
+ export type DAASTVersion1 = '1.0' | '1.1';
274
347
  /**
275
348
  * Brand information manifest containing assets, themes, and guidelines. Can be provided inline or as a URL reference to a hosted manifest.
276
349
  */
@@ -279,6 +352,10 @@ export type BrandManifestReference = BrandManifest | string;
279
352
  * 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.
280
353
  */
281
354
  export type AssetContentType = 'image' | 'video' | 'audio' | 'text' | 'markdown' | 'html' | 'css' | 'javascript' | 'vast' | 'daast' | 'promoted_offerings' | 'url' | 'webhook';
355
+ /**
356
+ * Type of URL asset: 'clickthrough' for user click destination (landing page), 'tracker_pixel' for impression/event tracking via HTTP request (fires GET, expects pixel/204 response), 'tracker_script' for measurement SDKs that must load as <script> tag (OMID verification, native event trackers using method:2)
357
+ */
358
+ export type URLAssetType = 'clickthrough' | 'tracker_pixel' | 'tracker_script';
282
359
  /**
283
360
  * Creative asset for upload to library - supports static assets, generative formats, and third-party snippets
284
361
  */
@@ -329,73 +406,29 @@ export interface CreativeAsset {
329
406
  * For generative creatives: set to true to approve and finalize, false to request regeneration with updated assets/message. Omit for non-generative creatives.
330
407
  */
331
408
  approved?: boolean;
332
- }
333
- /**
334
- * Format identifier specifying which format this creative conforms to
335
- */
336
- export interface FormatID {
337
409
  /**
338
- * 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)
339
- */
340
- agent_url: string;
341
- /**
342
- * Format identifier within the agent's namespace (e.g., 'display_300x250', 'video_standard_30s')
343
- */
344
- id: string;
345
- }
346
- /**
347
- * Image asset with URL and dimensions
348
- */
349
- export interface ImageAsset {
350
- /**
351
- * URL to the image asset
352
- */
353
- url: string;
354
- /**
355
- * Image width in pixels
410
+ * Optional delivery weight for creative rotation when uploading via create_media_buy or update_media_buy (0-100). If omitted, platform determines rotation. Only used during upload to media buy - not stored in creative library.
356
411
  */
357
- width?: number;
358
- /**
359
- * Image height in pixels
360
- */
361
- height?: number;
362
- /**
363
- * Image file format (jpg, png, gif, webp, etc.)
364
- */
365
- format?: string;
412
+ weight?: number;
366
413
  /**
367
- * Alternative text for accessibility
414
+ * Optional array of placement IDs where this creative should run when uploading via create_media_buy or update_media_buy. References placement_id values from the product's placements array. If omitted, creative runs on all placements. Only used during upload to media buy - not stored in creative library.
415
+ *
416
+ * @minItems 1
368
417
  */
369
- alt_text?: string;
418
+ placement_ids?: [string, ...string[]];
370
419
  }
371
420
  /**
372
- * Video asset with URL and specifications
421
+ * Format identifier specifying which format this creative conforms to. Can be: (1) concrete format_id referencing a format with fixed dimensions, (2) template format_id referencing a template format, or (3) parameterized format_id with dimensions/duration parameters for template formats.
373
422
  */
374
- export interface VideoAsset {
375
- /**
376
- * URL to the video asset
377
- */
378
- url: string;
423
+ export interface Dimensions {
379
424
  /**
380
- * Video width in pixels
425
+ * Width in pixels
381
426
  */
382
- width?: number;
427
+ width: number;
383
428
  /**
384
- * Video height in pixels
429
+ * Height in pixels
385
430
  */
386
- height?: number;
387
- /**
388
- * Video duration in milliseconds
389
- */
390
- duration_ms?: number;
391
- /**
392
- * Video file format (mp4, webm, mov, etc.)
393
- */
394
- format?: string;
395
- /**
396
- * Video bitrate in kilobits per second
397
- */
398
- bitrate_kbps?: number;
431
+ height: number;
399
432
  }
400
433
  /**
401
434
  * Audio asset with URL and specifications
@@ -465,10 +498,7 @@ export interface JavaScriptAsset {
465
498
  * JavaScript content
466
499
  */
467
500
  content: string;
468
- /**
469
- * JavaScript module type
470
- */
471
- module_type?: 'esm' | 'commonjs' | 'script';
501
+ module_type?: JavaScriptModuleType;
472
502
  }
473
503
  /**
474
504
  * Complete offering specification combining brand manifest, product selectors, and asset filters. Provides all context needed for creative generation about what is being promoted.
@@ -758,10 +788,7 @@ export interface URLAsset {
758
788
  * URL reference
759
789
  */
760
790
  url: string;
761
- /**
762
- * Type of URL asset: 'clickthrough' for user click destination (landing page), 'tracker_pixel' for impression/event tracking via HTTP request (fires GET, expects pixel/204 response), 'tracker_script' for measurement SDKs that must load as <script> tag (OMID verification, native event trackers using method:2)
763
- */
764
- url_type?: 'clickthrough' | 'tracker_pixel' | 'tracker_script';
791
+ url_type?: URLAssetType;
765
792
  /**
766
793
  * Description of what this URL points to
767
794
  */
@@ -793,7 +820,7 @@ export type PublisherPropertySelector = {
793
820
  *
794
821
  * @minItems 1
795
822
  */
796
- property_ids: [string, ...string[]];
823
+ property_ids: [PropertyID, ...PropertyID[]];
797
824
  } | {
798
825
  /**
799
826
  * Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')
@@ -808,8 +835,16 @@ export type PublisherPropertySelector = {
808
835
  *
809
836
  * @minItems 1
810
837
  */
811
- property_tags: [string, ...string[]];
838
+ property_tags: [PropertyTag, ...PropertyTag[]];
812
839
  };
840
+ /**
841
+ * Identifier for a publisher property. Must be lowercase alphanumeric with underscores only.
842
+ */
843
+ export type PropertyID = string;
844
+ /**
845
+ * Tag for categorizing publisher properties. Must be lowercase alphanumeric with underscores only.
846
+ */
847
+ export type PropertyTag = string;
813
848
  /**
814
849
  * Type of inventory delivery
815
850
  */
@@ -818,6 +853,22 @@ export type DeliveryType = 'guaranteed' | 'non_guaranteed';
818
853
  * A pricing model option offered by a publisher for a product. Each pricing model has its own schema with model-specific requirements.
819
854
  */
820
855
  export type PricingOption = CPMFixedRatePricingOption | CPMAuctionPricingOption | VCPMFixedRatePricingOption | VCPMAuctionPricingOption | CPCPricingOption | CPCVPricingOption | CPVPricingOption | CPPPricingOption | FlatRatePricingOption;
856
+ /**
857
+ * Available frequencies for delivery reports and metrics updates
858
+ */
859
+ export type ReportingFrequency = 'hourly' | 'daily' | 'monthly';
860
+ /**
861
+ * Standard delivery and performance metrics available for reporting
862
+ */
863
+ export type AvailableMetric = 'impressions' | 'spend' | 'clicks' | 'ctr' | 'video_completions' | 'completion_rate' | 'conversions' | 'viewability' | 'engagement_rate';
864
+ /**
865
+ * Co-branding requirement
866
+ */
867
+ export type CoBrandingRequirement = 'required' | 'optional' | 'none';
868
+ /**
869
+ * Landing page requirements
870
+ */
871
+ export type LandingPageRequirement = 'any' | 'retailer_site_only' | 'must_include_retailer';
821
872
  /**
822
873
  * Represents available advertising inventory
823
874
  */
@@ -909,22 +960,10 @@ export interface Product {
909
960
  */
910
961
  manifest: {};
911
962
  };
963
+ ext?: ExtensionObject;
912
964
  }
913
965
  /**
914
- * Structured format identifier with agent URL and format name
915
- */
916
- export interface FormatID {
917
- /**
918
- * 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)
919
- */
920
- agent_url: string;
921
- /**
922
- * Format identifier within the agent's namespace (e.g., 'display_300x250', 'video_standard_30s')
923
- */
924
- id: string;
925
- }
926
- /**
927
- * Represents a specific ad placement within a product's inventory
966
+ * 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.
928
967
  */
929
968
  export interface Placement {
930
969
  /**
@@ -940,7 +979,7 @@ export interface Placement {
940
979
  */
941
980
  description?: string;
942
981
  /**
943
- * Format IDs supported by this specific placement (subset of product's formats)
982
+ * Format IDs supported by this specific placement. Can include: (1) concrete format_ids (fixed dimensions), (2) template format_ids without parameters (accepts any dimensions/duration), or (3) parameterized format_ids (specific dimension/duration constraints).
944
983
  *
945
984
  * @minItems 1
946
985
  */
@@ -1336,7 +1375,7 @@ export interface ReportingCapabilities {
1336
1375
  *
1337
1376
  * @minItems 1
1338
1377
  */
1339
- available_reporting_frequencies: ['hourly' | 'daily' | 'monthly', ...('hourly' | 'daily' | 'monthly')[]];
1378
+ available_reporting_frequencies: [ReportingFrequency, ...ReportingFrequency[]];
1340
1379
  /**
1341
1380
  * Expected delay in minutes before reporting data becomes available (e.g., 240 for 4-hour delay)
1342
1381
  */
@@ -1352,27 +1391,21 @@ export interface ReportingCapabilities {
1352
1391
  /**
1353
1392
  * Metrics available in reporting. Impressions and spend are always implicitly included.
1354
1393
  */
1355
- available_metrics: ('impressions' | 'spend' | 'clicks' | 'ctr' | 'video_completions' | 'completion_rate' | 'conversions' | 'viewability' | 'engagement_rate')[];
1394
+ available_metrics: AvailableMetric[];
1356
1395
  }
1357
1396
  /**
1358
1397
  * Creative requirements and restrictions for a product
1359
1398
  */
1360
1399
  export interface CreativePolicy {
1361
- /**
1362
- * Co-branding requirement
1363
- */
1364
- co_branding: 'required' | 'optional' | 'none';
1365
- /**
1366
- * Landing page requirements
1367
- */
1368
- landing_page: 'any' | 'retailer_site_only' | 'must_include_retailer';
1400
+ co_branding: CoBrandingRequirement;
1401
+ landing_page: LandingPageRequirement;
1369
1402
  /**
1370
1403
  * Whether creative templates are provided
1371
1404
  */
1372
1405
  templates_available: boolean;
1373
1406
  }
1374
1407
  /**
1375
- * Structured format identifier with agent URL and format name
1408
+ * 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.
1376
1409
  */
1377
1410
  export interface FormatID1 {
1378
1411
  /**
@@ -1380,78 +1413,67 @@ export interface FormatID1 {
1380
1413
  */
1381
1414
  agent_url: string;
1382
1415
  /**
1383
- * Format identifier within the agent's namespace (e.g., 'display_300x250', 'video_standard_30s')
1416
+ * Format identifier within the agent's namespace (e.g., 'display_static', 'video_hosted', 'audio_standard'). When used alone, references a template format. When combined with dimension/duration fields, creates a parameterized format ID for a specific variant.
1384
1417
  */
1385
1418
  id: string;
1386
- }
1387
- /**
1388
- * Structured format identifier with agent URL and format name
1389
- */
1390
- export interface FormatID2 {
1391
1419
  /**
1392
- * 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)
1420
+ * Width in pixels for visual formats. When specified, height must also be specified. Both fields together create a parameterized format ID for dimension-specific variants.
1393
1421
  */
1394
- agent_url: string;
1422
+ width?: number;
1395
1423
  /**
1396
- * Format identifier within the agent's namespace (e.g., 'display_300x250', 'video_standard_30s')
1424
+ * Height in pixels for visual formats. When specified, width must also be specified. Both fields together create a parameterized format ID for dimension-specific variants.
1397
1425
  */
1398
- id: string;
1426
+ height?: number;
1427
+ /**
1428
+ * Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters.
1429
+ */
1430
+ duration_ms?: number;
1399
1431
  }
1400
1432
  /**
1401
- * 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).
1433
+ * 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.
1402
1434
  */
1403
- export interface TargetingOverlay {
1404
- /**
1405
- * Restrict delivery to specific countries (ISO codes). Use for regulatory compliance or RCT testing.
1406
- */
1407
- geo_country_any_of?: string[];
1435
+ export interface FormatID2 {
1408
1436
  /**
1409
- * Restrict delivery to specific regions/states. Use for regulatory compliance or RCT testing.
1437
+ * 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)
1410
1438
  */
1411
- geo_region_any_of?: string[];
1439
+ agent_url: string;
1412
1440
  /**
1413
- * Restrict delivery to specific metro areas (DMA codes). Use for regulatory compliance or RCT testing.
1441
+ * Format identifier within the agent's namespace (e.g., 'display_static', 'video_hosted', 'audio_standard'). When used alone, references a template format. When combined with dimension/duration fields, creates a parameterized format ID for a specific variant.
1414
1442
  */
1415
- geo_metro_any_of?: string[];
1443
+ id: string;
1416
1444
  /**
1417
- * Restrict delivery to specific postal/ZIP codes. Use for regulatory compliance or RCT testing.
1445
+ * Width in pixels for visual formats. When specified, height must also be specified. Both fields together create a parameterized format ID for dimension-specific variants.
1418
1446
  */
1419
- geo_postal_code_any_of?: string[];
1447
+ width?: number;
1420
1448
  /**
1421
- * AXE segment ID to include for targeting
1449
+ * Height in pixels for visual formats. When specified, width must also be specified. Both fields together create a parameterized format ID for dimension-specific variants.
1422
1450
  */
1423
- axe_include_segment?: string;
1451
+ height?: number;
1424
1452
  /**
1425
- * AXE segment ID to exclude from targeting
1453
+ * Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters.
1426
1454
  */
1427
- axe_exclude_segment?: string;
1428
- frequency_cap?: FrequencyCap;
1455
+ duration_ms?: number;
1429
1456
  }
1430
1457
  /**
1431
- * Frequency capping settings for package-level application
1458
+ * 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.
1432
1459
  */
1433
- export interface FrequencyCap {
1434
- /**
1435
- * Minutes to suppress after impression
1436
- */
1437
- suppress_minutes: number;
1438
- }
1460
+ /**
1461
+ * 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).
1462
+ */
1463
+ /**
1464
+ * Unique identifier for this property (optional). Enables referencing properties by ID instead of repeating full objects.
1465
+ */
1466
+ export type PropertyType = 'website' | 'mobile_app' | 'ctv_app' | 'dooh' | 'podcast' | 'radio' | 'streaming_audio';
1439
1467
  /**
1440
1468
  * Type of identifier for this property
1441
1469
  */
1442
1470
  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';
1443
1471
  /**
1444
- * An advertising property that can be validated via adagents.json
1472
+ * Tag for categorizing publisher properties. Must be lowercase alphanumeric with underscores only.
1445
1473
  */
1446
1474
  export interface Property {
1447
- /**
1448
- * Unique identifier for this property (optional). Enables referencing properties by ID instead of repeating full objects. Recommended format: lowercase with underscores (e.g., 'cnn_ctv_app', 'instagram_mobile')
1449
- */
1450
- property_id?: string;
1451
- /**
1452
- * Type of advertising property
1453
- */
1454
- property_type: 'website' | 'mobile_app' | 'ctv_app' | 'dooh' | 'podcast' | 'radio' | 'streaming_audio';
1475
+ property_id?: PropertyID;
1476
+ property_type: PropertyType;
1455
1477
  /**
1456
1478
  * Human-readable property name
1457
1479
  */
@@ -1480,7 +1502,7 @@ export interface Property {
1480
1502
  /**
1481
1503
  * Tags for categorization and grouping (e.g., network membership, content categories)
1482
1504
  */
1483
- tags?: string[];
1505
+ tags?: PropertyTag[];
1484
1506
  /**
1485
1507
  * Domain where adagents.json should be checked for authorization validation. Required for list_authorized_properties response. Optional in adagents.json (file location implies domain).
1486
1508
  */