@adcp/client 4.0.0 → 4.0.2

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 (34) hide show
  1. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  2. package/dist/lib/core/SingleAgentClient.d.ts +1 -0
  3. package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
  4. package/dist/lib/core/SingleAgentClient.js +52 -12
  5. package/dist/lib/core/SingleAgentClient.js.map +1 -1
  6. package/dist/lib/types/core.generated.d.ts +139 -17
  7. package/dist/lib/types/core.generated.d.ts.map +1 -1
  8. package/dist/lib/types/core.generated.js +1 -1
  9. package/dist/lib/types/schemas.generated.d.ts +2162 -1392
  10. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  11. package/dist/lib/types/schemas.generated.js +192 -51
  12. package/dist/lib/types/schemas.generated.js.map +1 -1
  13. package/dist/lib/types/tools.generated.d.ts +483 -29
  14. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  15. package/dist/lib/utils/creative-adapter.d.ts +2 -2
  16. package/dist/lib/utils/creative-adapter.d.ts.map +1 -1
  17. package/dist/lib/utils/creative-adapter.js +19 -4
  18. package/dist/lib/utils/creative-adapter.js.map +1 -1
  19. package/dist/lib/utils/index.d.ts +1 -0
  20. package/dist/lib/utils/index.d.ts.map +1 -1
  21. package/dist/lib/utils/index.js +4 -1
  22. package/dist/lib/utils/index.js.map +1 -1
  23. package/dist/lib/utils/pricing-adapter.d.ts.map +1 -1
  24. package/dist/lib/utils/pricing-adapter.js +3 -5
  25. package/dist/lib/utils/pricing-adapter.js.map +1 -1
  26. package/dist/lib/utils/sync-creatives-adapter.d.ts +18 -0
  27. package/dist/lib/utils/sync-creatives-adapter.d.ts.map +1 -0
  28. package/dist/lib/utils/sync-creatives-adapter.js +46 -0
  29. package/dist/lib/utils/sync-creatives-adapter.js.map +1 -0
  30. package/dist/lib/version.d.ts +3 -3
  31. package/dist/lib/version.d.ts.map +1 -1
  32. package/dist/lib/version.js +3 -3
  33. package/dist/lib/version.js.map +1 -1
  34. package/package.json +1 -1
@@ -691,7 +691,11 @@ export interface Product {
691
691
  /**
692
692
  * Metric kinds this product can optimize for. Buyers should only request metric goals for kinds listed here.
693
693
  */
694
- supported_metrics: ('clicks' | 'views' | 'completed_views' | 'viewed_seconds' | 'attention_seconds' | 'attention_score' | 'engagements' | 'follows' | 'saves' | 'profile_visits')[];
694
+ supported_metrics: ('clicks' | 'views' | 'completed_views' | 'viewed_seconds' | 'attention_seconds' | 'attention_score' | 'engagements' | 'follows' | 'saves' | 'profile_visits' | 'reach')[];
695
+ /**
696
+ * Reach units this product can optimize for. Required when supported_metrics includes 'reach'. Buyers must set reach_unit to a value in this list on reach optimization goals — sellers reject unsupported values.
697
+ */
698
+ supported_reach_units?: ReachUnit[];
695
699
  /**
696
700
  * Video view duration thresholds (in seconds) this product supports for completed_views goals. Only relevant when supported_metrics includes 'completed_views'. When absent, the seller uses their platform default. Buyers must set view_duration_seconds to a value in this list — sellers reject unsupported values.
697
701
  */
@@ -1298,11 +1302,57 @@ export interface ReportingCapabilities {
1298
1302
  * Whether this product supports creative-level metric breakdowns in delivery reporting (by_creative within by_package)
1299
1303
  */
1300
1304
  supports_creative_breakdown?: boolean;
1305
+ /**
1306
+ * Whether this product supports keyword-level metric breakdowns in delivery reporting (by_keyword within by_package)
1307
+ */
1308
+ supports_keyword_breakdown?: boolean;
1309
+ supports_geo_breakdown?: GeographicBreakdownSupport;
1310
+ /**
1311
+ * Whether this product supports device type breakdowns in delivery reporting (by_device_type within by_package)
1312
+ */
1313
+ supports_device_type_breakdown?: boolean;
1314
+ /**
1315
+ * Whether this product supports device platform breakdowns in delivery reporting (by_device_platform within by_package)
1316
+ */
1317
+ supports_device_platform_breakdown?: boolean;
1318
+ /**
1319
+ * Whether this product supports audience segment breakdowns in delivery reporting (by_audience within by_package)
1320
+ */
1321
+ supports_audience_breakdown?: boolean;
1322
+ /**
1323
+ * Whether this product supports placement breakdowns in delivery reporting (by_placement within by_package)
1324
+ */
1325
+ supports_placement_breakdown?: boolean;
1301
1326
  /**
1302
1327
  * 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.
1303
1328
  */
1304
1329
  date_range_support: 'date_range' | 'lifetime_only';
1305
1330
  }
1331
+ /**
1332
+ * Geographic breakdown support for this product. Declares which geo levels and systems are available for by_geo reporting within by_package.
1333
+ */
1334
+ export interface GeographicBreakdownSupport {
1335
+ /**
1336
+ * Supports country-level geo breakdown (ISO 3166-1 alpha-2)
1337
+ */
1338
+ country?: boolean;
1339
+ /**
1340
+ * Supports region/state-level geo breakdown (ISO 3166-2)
1341
+ */
1342
+ region?: boolean;
1343
+ /**
1344
+ * Metro area breakdown support. Keys are metro-system enum values; true means supported.
1345
+ */
1346
+ metro?: {
1347
+ [k: string]: boolean | undefined;
1348
+ };
1349
+ /**
1350
+ * Postal area breakdown support. Keys are postal-system enum values; true means supported.
1351
+ */
1352
+ postal_area?: {
1353
+ [k: string]: boolean | undefined;
1354
+ };
1355
+ }
1306
1356
  /**
1307
1357
  * Creative requirements and restrictions for a product
1308
1358
  */
@@ -2193,9 +2243,19 @@ export type Pacing = 'even' | 'asap' | 'front_loaded';
2193
2243
  export type OptimizationGoal = {
2194
2244
  kind: 'metric';
2195
2245
  /**
2196
- * Seller-native metric to optimize for. Delivery metrics: clicks (link clicks, swipe-throughs, CTA taps that navigate away), views (viewable impressions), completed_views (video/audio completions — see view_duration_seconds). Duration/score metrics: viewed_seconds (time in view per impression), attention_seconds (attention time per impression), attention_score (vendor-specific attention score). Audience action metrics: engagements (any direct interaction with the ad unit beyond viewing — social reactions/comments/shares, story/unit opens, interactive overlay taps, companion banner interactions on audio and CTV), follows (new followers, page likes, artist/podcast/channel subscribes), saves (saves, bookmarks, playlist adds, pins — signals of intent to return), profile_visits (visits to the brand's in-platform page — profile, artist page, channel, or storefront. Does not include external website clicks, which are covered by 'clicks').
2246
+ * Seller-native metric to optimize for. Delivery metrics: clicks (link clicks, swipe-throughs, CTA taps that navigate away), views (viewable impressions), completed_views (video/audio completions — see view_duration_seconds), reach (unique audience reach — see reach_unit and target_frequency). Duration/score metrics: viewed_seconds (time in view per impression), attention_seconds (attention time per impression), attention_score (vendor-specific attention score). Audience action metrics: engagements (any direct interaction with the ad unit beyond viewing — social reactions/comments/shares, story/unit opens, interactive overlay taps, companion banner interactions on audio and CTV), follows (new followers, page likes, artist/podcast/channel subscribes), saves (saves, bookmarks, playlist adds, pins — signals of intent to return), profile_visits (visits to the brand's in-platform page — profile, artist page, channel, or storefront. Does not include external website clicks, which are covered by 'clicks').
2197
2247
  */
2198
- metric: 'clicks' | 'views' | 'completed_views' | 'viewed_seconds' | 'attention_seconds' | 'attention_score' | 'engagements' | 'follows' | 'saves' | 'profile_visits';
2248
+ metric: 'clicks' | 'views' | 'completed_views' | 'viewed_seconds' | 'attention_seconds' | 'attention_score' | 'engagements' | 'follows' | 'saves' | 'profile_visits' | 'reach';
2249
+ /**
2250
+ * Unit for reach measurement. Required when metric is 'reach'. Must be a value declared in the product's metric_optimization.supported_reach_units.
2251
+ */
2252
+ reach_unit?: ReachUnit;
2253
+ /**
2254
+ * Target frequency band for reach optimization. Only applicable when metric is 'reach'. Frames frequency as an optimization signal: the seller should treat impressions toward entities already within the [min, max] band as lower-value, and impressions toward unreached entities as higher-value. This shifts budget toward fresh reach rather than re-reaching known users. When omitted, the seller maximizes unique reach without a frequency constraint. A hard cap can still be layered via targeting_overlay.frequency_cap if a ceiling is needed.
2255
+ */
2256
+ target_frequency?: {
2257
+ [k: string]: unknown | undefined;
2258
+ };
2199
2259
  /**
2200
2260
  * Minimum video view duration in seconds that qualifies as a completed_view for this goal. Only applicable when metric is 'completed_views'. When omitted, the seller uses their platform default (typically 2–15 seconds). Common values: 2 (Snap/LinkedIn default), 6 (TikTok), 15 (Snap 15-second views, Meta ThruPlay). Sellers declare which durations they support in metric_optimization.supported_view_durations. Sellers must reject goals with unsupported values — silent rounding would create measurement discrepancies.
2201
2261
  */
@@ -2284,6 +2344,29 @@ export type OptimizationGoal = {
2284
2344
  * Postal code system (e.g., 'us_zip', 'gb_outward'). System name encodes country and precision.
2285
2345
  */
2286
2346
  export type PostalCodeSystem = 'us_zip' | 'us_zip_plus_four' | 'gb_outward' | 'gb_full' | 'ca_fsa' | 'ca_full' | 'de_plz' | 'fr_code_postal' | 'au_postcode' | 'ch_plz' | 'at_plz';
2347
+ /**
2348
+ * Frequency capping settings for package-level application. Two types of frequency control can be used independently or together: suppress_minutes enforces a cooldown between consecutive exposures; max_impressions + per + window caps total exposures per entity in a time window. At least one of suppress_minutes or max_impressions must be set.
2349
+ */
2350
+ export type FrequencyCap = {
2351
+ [k: string]: unknown | undefined;
2352
+ } & {
2353
+ /**
2354
+ * Cooldown period in minutes between consecutive exposures to the same entity. Prevents back-to-back ad delivery (e.g., 60 = at least 1 hour between impressions).
2355
+ */
2356
+ suppress_minutes?: number;
2357
+ /**
2358
+ * Maximum number of impressions per entity per window. For duration windows (e.g., '1d', '7d'), implementations typically use a rolling window; 'campaign' applies a fixed cap across the full flight.
2359
+ */
2360
+ max_impressions?: number;
2361
+ /**
2362
+ * Entity granularity for impression counting. Required when max_impressions is set.
2363
+ */
2364
+ per?: ReachUnit;
2365
+ /**
2366
+ * Time window for the max_impressions cap. Duration string (e.g., '1h', '6h', '1d', '7d', '30d', 'campaign'). 'campaign' applies the cap across the full campaign flight. Required when max_impressions is set.
2367
+ */
2368
+ window?: string;
2369
+ };
2287
2370
  /**
2288
2371
  * Methods for verifying user age for compliance. Does not include 'inferred' as it is not accepted for regulatory compliance.
2289
2372
  */
@@ -2292,6 +2375,10 @@ export type AgeVerificationMethod = 'facial_age_estimation' | 'id_document' | 'd
2292
2375
  * Operating system platforms for device targeting. Browser values from Sec-CH-UA-Platform standard, extended for CTV.
2293
2376
  */
2294
2377
  export type DevicePlatform = 'ios' | 'android' | 'windows' | 'macos' | 'linux' | 'chromeos' | 'tvos' | 'tizen' | 'webos' | 'fire_os' | 'roku_os' | 'unknown';
2378
+ /**
2379
+ * Device form factor categories for targeting and reporting. Complements device-platform (operating system) with hardware classification. OpenRTB mapping: 1 (Mobile/Tablet General) → mobile, 2 (PC) → desktop, 4 (Phone) → mobile, 5 (Tablet) → tablet, 6 (Connected Device) → ctv, 7 (Set Top Box) → ctv. DOOH inventory uses dooh.
2380
+ */
2381
+ export type DeviceType = 'desktop' | 'mobile' | 'tablet' | 'ctv' | 'dooh' | 'unknown';
2295
2382
  /**
2296
2383
  * JavaScript module type
2297
2384
  */
@@ -2593,7 +2680,7 @@ export interface PackageRequest {
2593
2680
  ext?: ExtensionObject;
2594
2681
  }
2595
2682
  /**
2596
- * Optional restriction overlays for media buys. Most targeting should be expressed in the brief and handled by the publisher. These fields are for functional restrictions: geographic (RCT testing, regulatory compliance), age verification (alcohol, gambling), device platform (app compatibility), and language (localization).
2683
+ * Optional restriction overlays for media buys. Most targeting should be expressed in the brief and handled by the publisher. These fields are for functional restrictions: geographic (RCT testing, regulatory compliance, proximity targeting), age verification (alcohol, gambling), device platform (app compatibility), language (localization), and keyword targeting (search/retail media).
2597
2684
  */
2598
2685
  export interface TargetingOverlay {
2599
2686
  /**
@@ -2695,6 +2782,14 @@ export interface TargetingOverlay {
2695
2782
  * Restrict to specific platforms. Use for technical compatibility (app only works on iOS). Values from Sec-CH-UA-Platform standard, extended for CTV.
2696
2783
  */
2697
2784
  device_platform?: DevicePlatform[];
2785
+ /**
2786
+ * Restrict to specific device form factors. Use for campaigns targeting hardware categories rather than operating systems (e.g., mobile-only promotions, CTV campaigns).
2787
+ */
2788
+ device_type?: DeviceType[];
2789
+ /**
2790
+ * Exclude specific device form factors from delivery (e.g., exclude CTV for app-install campaigns).
2791
+ */
2792
+ device_type_exclude?: DeviceType[];
2698
2793
  /**
2699
2794
  * Target users within store catchment areas from a synced store catalog. Each entry references a store-type catalog and optionally narrows to specific stores or catchment zones.
2700
2795
  */
@@ -2712,19 +2807,46 @@ export interface TargetingOverlay {
2712
2807
  */
2713
2808
  catchment_ids?: string[];
2714
2809
  }[];
2810
+ /**
2811
+ * Target users within travel time, distance, or a custom boundary around arbitrary geographic points. Multiple entries use OR semantics — a user within range of any listed point is eligible. For campaigns targeting 10+ locations, consider using store_catchments with a location catalog instead. Seller must declare support in get_adcp_capabilities.
2812
+ */
2813
+ geo_proximity?: {
2814
+ [k: string]: unknown | undefined;
2815
+ }[];
2715
2816
  /**
2716
2817
  * Restrict to users with specific language preferences. ISO 639-1 codes (e.g., 'en', 'es', 'fr').
2717
2818
  */
2718
2819
  language?: string[];
2719
- }
2720
- /**
2721
- * Frequency capping settings for package-level application
2722
- */
2723
- export interface FrequencyCap {
2724
2820
  /**
2725
- * Minutes to suppress after impression
2821
+ * Keyword targeting for search and retail media platforms. Restricts delivery to queries matching the specified keywords. Each keyword is identified by the tuple (keyword, match_type) — the same keyword string with different match types are distinct targets. Sellers SHOULD reject duplicate (keyword, match_type) pairs within a single request. Seller must declare support in get_adcp_capabilities.
2726
2822
  */
2727
- suppress_minutes: number;
2823
+ keyword_targets?: {
2824
+ /**
2825
+ * The keyword to target
2826
+ */
2827
+ keyword: string;
2828
+ /**
2829
+ * Match type: broad matches related queries, phrase matches queries containing the keyword phrase, exact matches the query exactly
2830
+ */
2831
+ match_type: 'broad' | 'phrase' | 'exact';
2832
+ /**
2833
+ * Per-keyword bid price, denominated in the same currency as the package's pricing option. Overrides the package-level bid_price for this keyword. Inherits the max_bid interpretation from the pricing option: when max_bid is true, this is the keyword's bid ceiling; when false, this is the exact bid. If omitted, the package bid_price applies.
2834
+ */
2835
+ bid_price?: number;
2836
+ }[];
2837
+ /**
2838
+ * Keywords to exclude from delivery. Queries matching these keywords will not trigger the ad. Each negative keyword is identified by the tuple (keyword, match_type). Seller must declare support in get_adcp_capabilities.
2839
+ */
2840
+ negative_keywords?: {
2841
+ /**
2842
+ * The keyword to exclude
2843
+ */
2844
+ keyword: string;
2845
+ /**
2846
+ * Match type for exclusion
2847
+ */
2848
+ match_type: 'broad' | 'phrase' | 'exact';
2849
+ }[];
2728
2850
  }
2729
2851
  /**
2730
2852
  * Assignment of a creative asset to a package with optional placement targeting. Used in create_media_buy and update_media_buy requests. Note: sync_creatives does not support placement_ids - use create/update_media_buy for placement-level targeting.
@@ -3866,6 +3988,62 @@ export type PackageUpdate = {
3866
3988
  */
3867
3989
  optimization_goals?: OptimizationGoal[];
3868
3990
  targeting_overlay?: TargetingOverlay;
3991
+ /**
3992
+ * Keyword targets to add or update on this package. Upserts by (keyword, match_type) identity: if the pair already exists, its bid_price is updated; if not, a new keyword target is added. Use targeting_overlay.keyword_targets in create_media_buy to set the initial list.
3993
+ */
3994
+ keyword_targets_add?: {
3995
+ /**
3996
+ * The keyword to target
3997
+ */
3998
+ keyword: string;
3999
+ /**
4000
+ * Match type for this keyword
4001
+ */
4002
+ match_type: 'broad' | 'phrase' | 'exact';
4003
+ /**
4004
+ * Per-keyword bid price. Inherits currency and max_bid interpretation from the package's pricing option.
4005
+ */
4006
+ bid_price?: number;
4007
+ }[];
4008
+ /**
4009
+ * Keyword targets to remove from this package. Removes matching (keyword, match_type) pairs. If a specified pair is not present, sellers SHOULD treat it as a no-op for that entry.
4010
+ */
4011
+ keyword_targets_remove?: {
4012
+ /**
4013
+ * The keyword to stop targeting
4014
+ */
4015
+ keyword: string;
4016
+ /**
4017
+ * Match type to remove
4018
+ */
4019
+ match_type: 'broad' | 'phrase' | 'exact';
4020
+ }[];
4021
+ /**
4022
+ * Negative keywords to add to this package. Appends to the existing negative keyword list — does not replace it. If a keyword+match_type pair already exists, sellers SHOULD treat it as a no-op for that entry. Use targeting_overlay.negative_keywords in create_media_buy to set the initial list.
4023
+ */
4024
+ negative_keywords_add?: {
4025
+ /**
4026
+ * The keyword to exclude
4027
+ */
4028
+ keyword: string;
4029
+ /**
4030
+ * Match type for exclusion
4031
+ */
4032
+ match_type: 'broad' | 'phrase' | 'exact';
4033
+ }[];
4034
+ /**
4035
+ * Negative keywords to remove from this package. Removes matching keyword+match_type pairs from the existing list. If a specified pair is not present, sellers SHOULD treat it as a no-op for that entry.
4036
+ */
4037
+ negative_keywords_remove?: {
4038
+ /**
4039
+ * The keyword to stop excluding
4040
+ */
4041
+ keyword: string;
4042
+ /**
4043
+ * Match type to remove
4044
+ */
4045
+ match_type: 'broad' | 'phrase' | 'exact';
4046
+ }[];
3869
4047
  /**
3870
4048
  * Replace creative assignments for this package with optional weights and placement targeting. Uses replacement semantics - omit to leave assignments unchanged.
3871
4049
  */
@@ -4117,6 +4295,10 @@ export interface GetMediaBuysResponse {
4117
4295
  context?: ContextObject;
4118
4296
  ext?: ExtensionObject;
4119
4297
  }
4298
+ /**
4299
+ * Metric to sort breakdown rows by (descending). Falls back to 'spend' if the seller does not report the requested metric.
4300
+ */
4301
+ export type SortMetric = 'impressions' | 'spend' | 'clicks' | 'ctr' | 'views' | 'completed_views' | 'completion_rate' | 'conversions' | 'conversion_value' | 'roas' | 'cost_per_acquisition' | 'new_to_brand_rate' | 'leads' | 'grps' | 'reach' | 'frequency' | 'engagements' | 'follows' | 'saves' | 'profile_visits' | 'engagement_rate' | 'cost_per_click';
4120
4302
  /**
4121
4303
  * Request parameters for retrieving comprehensive delivery metrics
4122
4304
  */
@@ -4142,6 +4324,66 @@ export interface GetMediaBuyDeliveryRequest {
4142
4324
  * End date for reporting period (YYYY-MM-DD). When omitted along with start_date, returns campaign lifetime data. Only accepted when the product's reporting_capabilities.date_range_support is 'date_range'.
4143
4325
  */
4144
4326
  end_date?: string;
4327
+ /**
4328
+ * Request dimensional breakdowns in delivery reporting. Each key enables a specific breakdown dimension within by_package — include as an empty object (e.g., "device_type": {}) to activate with defaults. Omit entirely for no breakdowns (backward compatible). Unsupported dimensions are silently omitted from the response.
4329
+ */
4330
+ reporting_dimensions?: {
4331
+ /**
4332
+ * Request geographic breakdown. Check reporting_capabilities.supports_geo_breakdown for available levels and systems.
4333
+ */
4334
+ geo?: {
4335
+ geo_level: GeographicTargetingLevel;
4336
+ /**
4337
+ * Classification system for metro or postal_area levels (e.g., 'nielsen_dma', 'us_zip'). Required when geo_level is 'metro' or 'postal_area'.
4338
+ */
4339
+ system?: MetroAreaSystem | PostalCodeSystem;
4340
+ /**
4341
+ * Maximum number of geo entries to return. Defaults to 25. When truncated, by_geo_truncated is true in the response.
4342
+ */
4343
+ limit?: number;
4344
+ sort_by?: SortMetric;
4345
+ };
4346
+ /**
4347
+ * Request device type breakdown.
4348
+ */
4349
+ device_type?: {
4350
+ /**
4351
+ * Maximum number of entries to return. When omitted, all entries are returned (the enum is small and bounded).
4352
+ */
4353
+ limit?: number;
4354
+ sort_by?: SortMetric;
4355
+ };
4356
+ /**
4357
+ * Request device platform breakdown.
4358
+ */
4359
+ device_platform?: {
4360
+ /**
4361
+ * Maximum number of entries to return. When omitted, all entries are returned (the enum is small and bounded).
4362
+ */
4363
+ limit?: number;
4364
+ sort_by?: SortMetric;
4365
+ };
4366
+ /**
4367
+ * Request audience segment breakdown.
4368
+ */
4369
+ audience?: {
4370
+ /**
4371
+ * Maximum number of entries to return. Defaults to 25.
4372
+ */
4373
+ limit?: number;
4374
+ sort_by?: SortMetric;
4375
+ };
4376
+ /**
4377
+ * Request placement breakdown.
4378
+ */
4379
+ placement?: {
4380
+ /**
4381
+ * Maximum number of entries to return. Defaults to 25.
4382
+ */
4383
+ limit?: number;
4384
+ sort_by?: SortMetric;
4385
+ };
4386
+ };
4145
4387
  context?: ContextObject;
4146
4388
  ext?: ExtensionObject;
4147
4389
  }
@@ -4153,6 +4395,10 @@ export type AttributionModel = 'last_touch' | 'first_touch' | 'linear' | 'time_d
4153
4395
  * Pricing model used for this media buy
4154
4396
  */
4155
4397
  export type PricingModel = 'cpm' | 'vcpm' | 'cpc' | 'cpcv' | 'cpv' | 'cpp' | 'cpa' | 'flat_rate' | 'time';
4398
+ /**
4399
+ * Origin of the audience segment (synced, platform, third_party, lookalike, retargeting, unknown)
4400
+ */
4401
+ export type AudienceSource = 'synced' | 'platform' | 'third_party' | 'lookalike' | 'retargeting' | 'unknown';
4156
4402
  /**
4157
4403
  * Response payload for get_media_buy_delivery task
4158
4404
  */
@@ -4331,6 +4577,96 @@ export interface GetMediaBuyDeliveryResponse {
4331
4577
  */
4332
4578
  weight?: number;
4333
4579
  })[];
4580
+ /**
4581
+ * Metrics broken down by keyword within this package. One row per (keyword, match_type) pair — the same keyword with different match types appears as separate rows. Keyword-grain only: rows reflect aggregate performance of each targeted keyword, not individual search queries. Rows may not sum to package totals when a single impression is attributed to the triggering keyword only. Available for search and retail media packages when the seller supports keyword-level reporting.
4582
+ */
4583
+ by_keyword?: (DeliveryMetrics & {
4584
+ /**
4585
+ * The targeted keyword
4586
+ */
4587
+ keyword: string;
4588
+ /**
4589
+ * Match type for this keyword
4590
+ */
4591
+ match_type: 'broad' | 'phrase' | 'exact';
4592
+ })[];
4593
+ /**
4594
+ * Delivery by geographic area within this package. Available when the buyer requests geo breakdown via reporting_dimensions and the seller supports it. Each dimension's rows are independent slices that should sum to the package total.
4595
+ */
4596
+ by_geo?: (DeliveryMetrics & {
4597
+ geo_level: GeographicTargetingLevel;
4598
+ /**
4599
+ * Classification system for metro or postal_area levels (e.g., 'nielsen_dma', 'us_zip'). Present when geo_level is 'metro' or 'postal_area'.
4600
+ */
4601
+ system?: string;
4602
+ /**
4603
+ * Geographic code within the level and system. Country: ISO 3166-1 alpha-2 ('US'). Region: ISO 3166-2 with country prefix ('US-CA'). Metro/postal: system-specific code ('501', '10001').
4604
+ */
4605
+ geo_code: string;
4606
+ /**
4607
+ * Human-readable geographic name (e.g., 'United States', 'California', 'New York DMA')
4608
+ */
4609
+ geo_name?: string;
4610
+ })[];
4611
+ /**
4612
+ * Whether by_geo was truncated due to the requested limit or a seller-imposed maximum. Sellers MUST return this flag whenever by_geo is present (false means the list is complete).
4613
+ */
4614
+ by_geo_truncated?: boolean;
4615
+ /**
4616
+ * Delivery by device form factor within this package. Available when the buyer requests device_type breakdown via reporting_dimensions and the seller supports it.
4617
+ */
4618
+ by_device_type?: (DeliveryMetrics & {
4619
+ device_type: DeviceType;
4620
+ })[];
4621
+ /**
4622
+ * Whether by_device_type was truncated. Sellers MUST return this flag whenever by_device_type is present (false means the list is complete).
4623
+ */
4624
+ by_device_type_truncated?: boolean;
4625
+ /**
4626
+ * Delivery by operating system within this package. Available when the buyer requests device_platform breakdown via reporting_dimensions and the seller supports it. Useful for CTV campaigns where tvOS vs Roku OS vs Fire OS matters.
4627
+ */
4628
+ by_device_platform?: (DeliveryMetrics & {
4629
+ device_platform: DevicePlatform;
4630
+ })[];
4631
+ /**
4632
+ * Whether by_device_platform was truncated. Sellers MUST return this flag whenever by_device_platform is present (false means the list is complete).
4633
+ */
4634
+ by_device_platform_truncated?: boolean;
4635
+ /**
4636
+ * Delivery by audience segment within this package. Available when the buyer requests audience breakdown via reporting_dimensions and the seller supports it. Only 'synced' audiences are directly targetable via the targeting overlay; other sources are informational.
4637
+ */
4638
+ by_audience?: (DeliveryMetrics & {
4639
+ /**
4640
+ * Audience segment identifier. For 'synced' source, matches audience_id from sync_audiences. For other sources, seller-defined.
4641
+ */
4642
+ audience_id: string;
4643
+ audience_source: AudienceSource;
4644
+ /**
4645
+ * Human-readable audience segment name
4646
+ */
4647
+ audience_name?: string;
4648
+ })[];
4649
+ /**
4650
+ * Whether by_audience was truncated. Sellers MUST return this flag whenever by_audience is present (false means the list is complete).
4651
+ */
4652
+ by_audience_truncated?: boolean;
4653
+ /**
4654
+ * Delivery by placement within this package. Available when the buyer requests placement breakdown via reporting_dimensions and the seller supports it. Placement IDs reference the product's placements array.
4655
+ */
4656
+ by_placement?: (DeliveryMetrics & {
4657
+ /**
4658
+ * Placement identifier from the product's placements array
4659
+ */
4660
+ placement_id: string;
4661
+ /**
4662
+ * Human-readable placement name
4663
+ */
4664
+ placement_name?: string;
4665
+ })[];
4666
+ /**
4667
+ * Whether by_placement was truncated. Sellers MUST return this flag whenever by_placement is present (false means the list is complete).
4668
+ */
4669
+ by_placement_truncated?: boolean;
4334
4670
  })[];
4335
4671
  /**
4336
4672
  * Day-by-day delivery
@@ -4853,7 +5189,7 @@ export type UserMatch = {
4853
5189
  /**
4854
5190
  * Universal ID type
4855
5191
  */
4856
- export type UIDType = 'rampid' | 'id5' | 'uid2' | 'euid' | 'pairid' | 'external_id' | 'maid' | 'other';
5192
+ export type UIDType = 'rampid' | 'id5' | 'uid2' | 'euid' | 'pairid' | 'maid' | 'other';
4857
5193
  /**
4858
5194
  * Request parameters for logging marketing events
4859
5195
  */
@@ -5024,11 +5360,15 @@ export interface LogEventError {
5024
5360
  ext?: ExtensionObject;
5025
5361
  }
5026
5362
  /**
5027
- * Hashed identifiers for a CRM audience member. All identifiers must be normalized before hashing: emails to lowercase+trim, phone numbers to E.164 format (e.g. +12065551234). At least one identifier is required. Providing multiple identifiers for the same person improves match rates. Composite identifiers (e.g. hashed first name + last name + zip for Google Customer Match) are not yet standardized — use the ext field for platform-specific extensions.
5363
+ * A CRM audience member identified by a buyer-assigned external_id and at least one matchable identifier. All identifiers must be normalized before hashing: emails to lowercase+trim, phone numbers to E.164 format (e.g. +12065551234). Providing multiple identifiers for the same person improves match rates. Composite identifiers (e.g. hashed first name + last name + zip for Google Customer Match) are not yet standardized — use the ext field for platform-specific extensions.
5028
5364
  */
5029
5365
  export type AudienceMember = {
5030
5366
  [k: string]: unknown | undefined;
5031
5367
  } & {
5368
+ /**
5369
+ * Buyer-assigned stable identifier for this audience member (e.g. CRM record ID, loyalty ID). Used for deduplication, removal, and cross-referencing with buyer systems. Adapters for CDPs that don't natively assign IDs can derive one (e.g. hash of the member's identifiers).
5370
+ */
5371
+ external_id: string;
5032
5372
  /**
5033
5373
  * SHA-256 hash of lowercase, trimmed email address.
5034
5374
  */
@@ -6040,6 +6380,14 @@ export interface Identifier {
6040
6380
  export type GetSignalsRequest = {
6041
6381
  [k: string]: unknown | undefined;
6042
6382
  } & {
6383
+ /**
6384
+ * The caller's account with this signals agent. When provided, the signals agent returns per-account pricing options if configured.
6385
+ */
6386
+ account_id?: string;
6387
+ /**
6388
+ * The buyer's campaign reference. Used to correlate signal discovery with subsequent report_usage calls.
6389
+ */
6390
+ buyer_campaign_ref?: string;
6043
6391
  /**
6044
6392
  * Natural language description of the desired signals. When used alone, enables semantic discovery. When combined with signal_ids, provides context for the agent but signal_ids matches are returned first.
6045
6393
  */
@@ -6049,18 +6397,13 @@ export type GetSignalsRequest = {
6049
6397
  */
6050
6398
  signal_ids?: SignalID[];
6051
6399
  /**
6052
- * Deployment targets where signals need to be activated
6400
+ * Filter signals to those activatable on specific agents/platforms. When omitted, returns all signals available on the current agent. If the authenticated caller matches one of these destinations, activation keys will be included in the response.
6053
6401
  */
6054
- deliver_to: {
6055
- /**
6056
- * List of deployment targets (DSPs, sales agents, etc.). If the authenticated caller matches one of these deployment targets, activation keys will be included in the response.
6057
- */
6058
- deployments: Destination[];
6059
- /**
6060
- * Countries where signals will be used (ISO codes)
6061
- */
6062
- countries: string[];
6063
- };
6402
+ destinations?: Destination[];
6403
+ /**
6404
+ * Countries where signals will be used (ISO 3166-1 alpha-2 codes). When omitted, no geographic filter is applied.
6405
+ */
6406
+ countries?: string[];
6064
6407
  filters?: SignalFilters;
6065
6408
  /**
6066
6409
  * Maximum number of results to return
@@ -6117,9 +6460,13 @@ export interface SignalFilters {
6117
6460
  */
6118
6461
  data_providers?: string[];
6119
6462
  /**
6120
- * Maximum CPM price filter
6463
+ * Maximum CPM filter. Applies only to signals with model='cpm'.
6121
6464
  */
6122
6465
  max_cpm?: number;
6466
+ /**
6467
+ * Maximum percent-of-media rate filter. Signals where all percent_of_media pricing options exceed this value are excluded. Does not account for max_cpm caps.
6468
+ */
6469
+ max_percent?: number;
6123
6470
  /**
6124
6471
  * Minimum coverage requirement
6125
6472
  */
@@ -6211,6 +6558,19 @@ export type ActivationKey = {
6211
6558
  */
6212
6559
  value: string;
6213
6560
  };
6561
+ /**
6562
+ * A pricing option offered by a signals agent. Combines pricing_option_id with the signal pricing model fields at the same level — pass pricing_option_id in report_usage for billing verification.
6563
+ */
6564
+ export type SignalPricingOption = {
6565
+ /**
6566
+ * Opaque identifier for this pricing option, unique within the signals agent. Pass this in report_usage to identify which pricing option was applied.
6567
+ */
6568
+ pricing_option_id: string;
6569
+ } & SignalPricing;
6570
+ /**
6571
+ * Pricing model for a signal. Discriminated by model: 'cpm' (fixed CPM), 'percent_of_media' (percentage of spend with optional CPM cap), or 'flat_fee' (fixed charge per reporting period, e.g. monthly licensed segments).
6572
+ */
6573
+ export type SignalPricing = CpmPricing | PercentOfMediaPricing | FlatFeePricing;
6214
6574
  /**
6215
6575
  * Response payload for get_signals task
6216
6576
  */
@@ -6249,7 +6609,7 @@ export interface GetSignalsResponse {
6249
6609
  /**
6250
6610
  * Pricing options available for this signal. The buyer selects one and passes its pricing_option_id in report_usage for billing verification.
6251
6611
  */
6252
- pricing_options: PricingOption[];
6612
+ pricing_options: SignalPricingOption[];
6253
6613
  }[];
6254
6614
  /**
6255
6615
  * Task-specific errors and warnings (e.g., signal discovery or pricing issues)
@@ -6263,6 +6623,55 @@ export interface GetSignalsResponse {
6263
6623
  context?: ContextObject;
6264
6624
  ext?: ExtensionObject;
6265
6625
  }
6626
+ /**
6627
+ * Fixed cost per thousand impressions
6628
+ */
6629
+ export interface CpmPricing {
6630
+ model: 'cpm';
6631
+ /**
6632
+ * Cost per thousand impressions
6633
+ */
6634
+ cpm: number;
6635
+ /**
6636
+ * ISO 4217 currency code
6637
+ */
6638
+ currency: string;
6639
+ ext?: ExtensionObject;
6640
+ }
6641
+ /**
6642
+ * Percentage of media spend charged for this signal. When max_cpm is set, the effective rate is capped at that CPM — useful for platforms like The Trade Desk that use percent-of-media pricing with a CPM ceiling.
6643
+ */
6644
+ export interface PercentOfMediaPricing {
6645
+ model: 'percent_of_media';
6646
+ /**
6647
+ * Percentage of media spend, e.g. 15 = 15%
6648
+ */
6649
+ percent: number;
6650
+ /**
6651
+ * Optional CPM cap. When set, the effective charge is min(percent × media_spend_per_mille, max_cpm).
6652
+ */
6653
+ max_cpm?: number;
6654
+ /**
6655
+ * ISO 4217 currency code for the resulting charge
6656
+ */
6657
+ currency: string;
6658
+ ext?: ExtensionObject;
6659
+ }
6660
+ /**
6661
+ * Fixed charge per reporting period, regardless of impressions or spend. Used for licensed data bundles and monthly audience subscriptions.
6662
+ */
6663
+ export interface FlatFeePricing {
6664
+ model: 'flat_fee';
6665
+ /**
6666
+ * Fixed charge for the reporting period
6667
+ */
6668
+ amount: number;
6669
+ /**
6670
+ * ISO 4217 currency code
6671
+ */
6672
+ currency: string;
6673
+ ext?: ExtensionObject;
6674
+ }
6266
6675
  /**
6267
6676
  * Request parameters for activating a signal on a specific deployment target
6268
6677
  */
@@ -6276,9 +6685,17 @@ export interface ActivateSignalRequest {
6276
6685
  */
6277
6686
  deployments: Destination[];
6278
6687
  /**
6279
- * The pricing option selected from the signal's pricing_options in the get_signals response. Required when the signal has pricing options. Records the buyer's pricing commitment at activation time and is referenced in subsequent report_usage calls.
6688
+ * The pricing option selected from the signal's pricing_options in the get_signals response. Required when the signal has pricing options. Records the buyer's pricing commitment at activation time; pass this same value in report_usage for billing verification.
6280
6689
  */
6281
6690
  pricing_option_id?: string;
6691
+ /**
6692
+ * The caller's account with the signals agent. Associates this activation with a commercial relationship established via sync_accounts.
6693
+ */
6694
+ account_id?: string;
6695
+ /**
6696
+ * The buyer's campaign reference for this activation. Enables the signals agent to correlate activations with subsequent report_usage calls.
6697
+ */
6698
+ buyer_campaign_ref?: string;
6282
6699
  context?: ContextObject;
6283
6700
  ext?: ExtensionObject;
6284
6701
  }
@@ -8147,6 +8564,10 @@ export interface GetAdCPCapabilitiesRequest {
8147
8564
  context?: ContextObject;
8148
8565
  ext?: ExtensionObject;
8149
8566
  }
8567
+ /**
8568
+ * Transportation modes for isochrone-based catchment area calculations. Determines how travel time translates to geographic reach.
8569
+ */
8570
+ export type TransportMode = 'walking' | 'cycling' | 'driving' | 'public_transport';
8150
8571
  /**
8151
8572
  * Response payload for get_adcp_capabilities task. Protocol-level capability discovery across all AdCP protocols. Each domain protocol has its own capability section.
8152
8573
  */
@@ -8326,6 +8747,10 @@ export interface GetAdCPCapabilitiesResponse {
8326
8747
  * Whether seller supports device platform targeting (Sec-CH-UA-Platform values)
8327
8748
  */
8328
8749
  device_platform?: boolean;
8750
+ /**
8751
+ * Whether seller supports device type targeting (form factor: desktop, mobile, tablet, ctv, dooh, unknown). When true, seller supports both device_type (include) and device_type_exclude (exclude) in targeting overlays.
8752
+ */
8753
+ device_type?: boolean;
8329
8754
  /**
8330
8755
  * Whether seller supports language targeting (ISO 639-1 codes)
8331
8756
  */
@@ -8338,6 +8763,35 @@ export interface GetAdCPCapabilitiesResponse {
8338
8763
  * Whether seller supports audience_exclude in targeting overlays (requires features.audience_targeting)
8339
8764
  */
8340
8765
  audience_exclude?: boolean;
8766
+ /**
8767
+ * Whether seller supports keyword targeting via targeting_overlay.keyword_targets and keyword_targets_add/remove in update_media_buy
8768
+ */
8769
+ keyword_targets?: boolean;
8770
+ /**
8771
+ * Whether seller supports negative keyword targeting via targeting_overlay.negative_keywords and negative_keywords_add/remove in update_media_buy
8772
+ */
8773
+ negative_keywords?: boolean;
8774
+ /**
8775
+ * Proximity targeting capabilities from arbitrary coordinates via targeting_overlay.geo_proximity.
8776
+ */
8777
+ geo_proximity?: {
8778
+ /**
8779
+ * Whether seller supports simple radius targeting (distance circle from a point)
8780
+ */
8781
+ radius?: boolean;
8782
+ /**
8783
+ * Whether seller supports travel time isochrone targeting (requires a routing engine)
8784
+ */
8785
+ travel_time?: boolean;
8786
+ /**
8787
+ * Whether seller supports pre-computed GeoJSON geometry (buyer provides the polygon)
8788
+ */
8789
+ geometry?: boolean;
8790
+ /**
8791
+ * Transport modes supported for travel_time isochrones. Only relevant when travel_time is true.
8792
+ */
8793
+ transport_modes?: TransportMode[];
8794
+ };
8341
8795
  };
8342
8796
  };
8343
8797
  /**
@@ -8345,9 +8799,9 @@ export interface GetAdCPCapabilitiesResponse {
8345
8799
  */
8346
8800
  audience_targeting?: {
8347
8801
  /**
8348
- * Hashed PII types accepted for audience matching. Buyers should only send identifiers the seller supports.
8802
+ * Identifier types accepted for audience matching. Buyers should only send identifiers the seller supports.
8349
8803
  */
8350
- supported_identifier_types: ('hashed_email' | 'hashed_phone')[];
8804
+ supported_identifier_types: ('hashed_email' | 'hashed_phone' | 'external_id')[];
8351
8805
  /**
8352
8806
  * Universal ID types accepted for audience matching (MAIDs, RampID, UID2, etc.). MAID support varies significantly by platform — check this field before sending uids with type: maid.
8353
8807
  */