@adcp/client 3.17.0 → 3.19.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.
@@ -2,6 +2,26 @@
2
2
  * Brand identifier within the house portfolio. Optional for single-brand domains.
3
3
  */
4
4
  export type BrandID = string;
5
+ /**
6
+ * Catalog type. Structural types: 'offering' (AdCP Offering objects), 'product' (ecommerce entries), 'inventory' (stock per location), 'store' (physical locations), 'promotion' (deals and pricing). Vertical types: 'hotel', 'flight', 'job', 'vehicle', 'real_estate', 'education', 'destination', 'app' — each with an industry-specific item schema.
7
+ */
8
+ export type CatalogType = 'offering' | 'product' | 'inventory' | 'store' | 'promotion' | 'hotel' | 'flight' | 'job' | 'vehicle' | 'real_estate' | 'education' | 'destination' | 'app';
9
+ /**
10
+ * Format of the external feed at url. Required when url points to a non-AdCP feed (e.g., Google Merchant Center XML, Meta Product Catalog). Omit for offering-type catalogs where the feed is native AdCP JSON.
11
+ */
12
+ export type FeedFormat = 'google_merchant_center' | 'facebook_catalog' | 'shopify' | 'linkedin_jobs' | 'custom';
13
+ /**
14
+ * How often the platform should re-fetch the feed from url. Only applicable when url is provided. Platforms may use this as a hint for polling schedules.
15
+ */
16
+ export type UpdateFrequency = 'realtime' | 'hourly' | 'daily' | 'weekly';
17
+ /**
18
+ * Standard marketing event types for event logging, aligned with IAB ECAPI
19
+ */
20
+ 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';
21
+ /**
22
+ * Identifier type that the event's content_ids field should be matched against for items in this catalog. For example, 'gtin' means content_ids values are Global Trade Item Numbers, 'sku' means retailer SKUs. Omit when using a custom identifier scheme not listed in the enum.
23
+ */
24
+ export type ContentIDType = 'sku' | 'gtin' | 'offering_id' | 'job_id' | 'hotel_id' | 'flight_id' | 'vehicle_id' | 'listing_id' | 'store_id' | 'program_id' | 'destination_id' | 'app_id';
5
25
  /**
6
26
  * Type of inventory delivery
7
27
  */
@@ -37,7 +57,7 @@ export type SignalTargeting = {
37
57
  value: boolean;
38
58
  [k: string]: unknown | undefined;
39
59
  } | {
40
- signal_id: SignalID1;
60
+ signal_id: SignalID;
41
61
  /**
42
62
  * Discriminator for categorical signals
43
63
  */
@@ -50,7 +70,7 @@ export type SignalTargeting = {
50
70
  values: [string, ...string[]];
51
71
  [k: string]: unknown | undefined;
52
72
  } | {
53
- signal_id: SignalID2;
73
+ signal_id: SignalID;
54
74
  /**
55
75
  * Discriminator for numeric signals
56
76
  */
@@ -100,81 +120,21 @@ export type SignalID = {
100
120
  /**
101
121
  * The signal to target
102
122
  */
103
- export type SignalID1 = {
104
- /**
105
- * Discriminator indicating this signal is from a data provider's published catalog
106
- */
107
- source: 'catalog';
108
- /**
109
- * Domain of the data provider that owns this signal (e.g., 'polk.com', 'experian.com'). The signal definition is published at this domain's /.well-known/adagents.json
110
- */
111
- data_provider_domain: string;
112
- /**
113
- * Signal identifier within the data provider's catalog (e.g., 'likely_tesla_buyers', 'income_100k_plus')
114
- */
115
- id: string;
116
- [k: string]: unknown | undefined;
117
- } | {
118
- /**
119
- * Discriminator indicating this signal is native to the agent (not from a data provider catalog)
120
- */
121
- source: 'agent';
122
- /**
123
- * URL of the signals agent that provides this signal (e.g., 'https://liveramp.com/.well-known/adcp/signals')
124
- */
125
- agent_url: string;
126
- /**
127
- * Signal identifier within the agent's signal set (e.g., 'custom_auto_intenders')
128
- */
129
- id: string;
130
- [k: string]: unknown | undefined;
131
- };
132
- /**
133
- * The signal to target
134
- */
135
- export type SignalID2 = {
136
- /**
137
- * Discriminator indicating this signal is from a data provider's published catalog
138
- */
139
- source: 'catalog';
140
- /**
141
- * Domain of the data provider that owns this signal (e.g., 'polk.com', 'experian.com'). The signal definition is published at this domain's /.well-known/adagents.json
142
- */
143
- data_provider_domain: string;
144
- /**
145
- * Signal identifier within the data provider's catalog (e.g., 'likely_tesla_buyers', 'income_100k_plus')
146
- */
147
- id: string;
148
- [k: string]: unknown | undefined;
149
- } | {
150
- /**
151
- * Discriminator indicating this signal is native to the agent (not from a data provider catalog)
152
- */
153
- source: 'agent';
154
- /**
155
- * URL of the signals agent that provides this signal (e.g., 'https://liveramp.com/.well-known/adcp/signals')
156
- */
157
- agent_url: string;
158
- /**
159
- * Signal identifier within the agent's signal set (e.g., 'custom_auto_intenders')
160
- */
161
- id: string;
162
- [k: string]: unknown | undefined;
163
- };
164
- /**
165
- * Request parameters for discovering available advertising products
166
- */
167
123
  export interface GetProductsRequest {
168
124
  /**
169
125
  * Natural language description of campaign requirements.
170
126
  */
171
127
  brief?: string;
172
128
  brand?: BrandReference;
173
- product_selectors?: PromotedProducts;
129
+ catalog?: Catalog;
174
130
  /**
175
131
  * Account ID for product lookup. Required when the seller declares account.required_for_products = true in capabilities. Returns products with pricing specific to this account's rate card.
176
132
  */
177
133
  account_id?: string;
134
+ /**
135
+ * Buyer's campaign reference label. Groups related discovery and buy operations under a single campaign for CRM and ad server correlation (e.g., 'NovaDrink_Meals_Q2').
136
+ */
137
+ campaign_ref?: string;
178
138
  filters?: ProductFilters;
179
139
  property_list?: PropertyListReference;
180
140
  pagination?: PaginationRequest;
@@ -192,29 +152,63 @@ export interface BrandReference {
192
152
  brand_id?: BrandID;
193
153
  }
194
154
  /**
195
- * Selectors to filter the brand's product catalog for product discovery. When provided, sellers should only return advertising products where the selected catalog items have matches. Uses the same selection methods as promoted-offerings.
155
+ * Catalog of items the buyer wants to promote. The seller matches catalog items against its inventory and returns products where matches exist. Supports all catalog types: a job catalog finds job ad products, a product catalog finds sponsored product slots. Reference a synced catalog by catalog_id, or provide inline items.
196
156
  */
197
- export interface PromotedProducts {
157
+ export interface Catalog {
158
+ /**
159
+ * Buyer's identifier for this catalog. Required when syncing via sync_catalogs. When used in creatives, references a previously synced catalog on the account.
160
+ */
161
+ catalog_id?: string;
162
+ /**
163
+ * Human-readable name for this catalog (e.g., 'Summer Products 2025', 'Amsterdam Store Locations').
164
+ */
165
+ name?: string;
166
+ type: CatalogType;
167
+ /**
168
+ * URL to an external catalog feed. The platform fetches and resolves items from this URL. For offering-type catalogs, the feed contains an array of Offering objects. For other types, the feed format is determined by feed_format. When omitted with type 'product', the platform uses its synced copy of the brand's product catalog.
169
+ */
170
+ url?: string;
171
+ feed_format?: FeedFormat;
172
+ update_frequency?: UpdateFrequency;
173
+ /**
174
+ * Inline catalog data. The item schema depends on the catalog type: Offering objects for 'offering', StoreItem for 'store', HotelItem for 'hotel', FlightItem for 'flight', JobItem for 'job', VehicleItem for 'vehicle', RealEstateItem for 'real_estate', EducationItem for 'education', DestinationItem for 'destination', AppItem for 'app', or freeform objects for 'product', 'inventory', and 'promotion'. Mutually exclusive with url — provide one or the other, not both. Implementations should validate items against the type-specific schema.
175
+ *
176
+ * @minItems 1
177
+ */
178
+ items?: [{}, ...{}[]];
179
+ /**
180
+ * Filter catalog to specific item IDs. For offering-type catalogs, these are offering_id values. For product-type catalogs, these are SKU identifiers.
181
+ *
182
+ * @minItems 1
183
+ */
184
+ ids?: [string, ...string[]];
198
185
  /**
199
- * GTIN product identifiers for cross-retailer catalog matching. Accepts standard GTIN formats (GTIN-8, UPC-A/GTIN-12, EAN-13/GTIN-13, GTIN-14).
186
+ * Filter product-type catalogs by GTIN identifiers for cross-retailer catalog matching. Accepts standard GTIN formats (GTIN-8, UPC-A/GTIN-12, EAN-13/GTIN-13, GTIN-14). Only applicable when type is 'product'.
187
+ *
188
+ * @minItems 1
200
189
  */
201
- manifest_gtins?: string[];
190
+ gtins?: [string, ...string[]];
202
191
  /**
203
- * Direct product SKU references from the brand's product catalog
192
+ * Filter catalog to items with these tags. Tags are matched using OR logic — items matching any tag are included.
193
+ *
194
+ * @minItems 1
204
195
  */
205
- manifest_skus?: string[];
196
+ tags?: [string, ...string[]];
206
197
  /**
207
- * Select products by tags from the brand's product catalog (e.g., 'organic', 'sauces', 'holiday')
198
+ * Filter catalog to items in this category (e.g., 'beverages/soft-drinks', 'chef-positions').
208
199
  */
209
- manifest_tags?: string[];
200
+ category?: string;
210
201
  /**
211
- * Select products from a specific category in the brand's product catalog (e.g., 'beverages/soft-drinks', 'food/sauces')
202
+ * Natural language filter for catalog items (e.g., 'all pasta sauces under $5', 'amsterdam vacancies').
212
203
  */
213
- manifest_category?: string;
204
+ query?: string;
214
205
  /**
215
- * Natural language query to select products from the brand's catalog (e.g., 'all pasta sauces', 'organic products under $20')
206
+ * Event types that represent conversions for items in this catalog. Declares what events the platform should attribute to catalog items — e.g., a job catalog converts via submit_application, a product catalog via purchase. The event's content_ids field carries the item IDs that connect back to catalog items. Use content_id_type to declare what identifier type content_ids values represent.
207
+ *
208
+ * @minItems 1
216
209
  */
217
- manifest_query?: string;
210
+ conversion_events?: [EventType, ...EventType[]];
211
+ content_id_type?: ContentIDType;
218
212
  [k: string]: unknown | undefined;
219
213
  }
220
214
  /**
@@ -385,6 +379,14 @@ export interface MediaBuyFeatures {
385
379
  * Supports sync_audiences task and audience_include/audience_exclude in targeting overlays for first-party CRM audience management
386
380
  */
387
381
  audience_targeting?: boolean;
382
+ /**
383
+ * Supports sync_catalogs task for catalog feed management with platform review and approval
384
+ */
385
+ catalog_management?: boolean;
386
+ /**
387
+ * Supports sandbox mode for operations without real platform calls or spend
388
+ */
389
+ sandbox?: boolean;
388
390
  [k: string]: boolean | undefined;
389
391
  }
390
392
  /**
@@ -494,10 +496,6 @@ export type DemographicSystem = 'nielsen' | 'barb' | 'agf' | 'oztam' | 'mediamet
494
496
  /**
495
497
  * Standard marketing event types for event logging, aligned with IAB ECAPI
496
498
  */
497
- 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';
498
- /**
499
- * How to interpret the points array. 'spend' (default when omitted): points at ascending budget levels. 'reach_freq': points at ascending reach/frequency targets. 'weekly'/'daily': metrics are per-period values. 'clicks'/'conversions': points at ascending outcome targets.
500
- */
501
499
  export type ForecastRangeUnit = 'spend' | 'reach_freq' | 'weekly' | 'daily' | 'clicks' | 'conversions';
502
500
  /**
503
501
  * Method used to produce this forecast
@@ -506,10 +504,6 @@ export type ForecastMethod = 'estimate' | 'modeled' | 'guaranteed';
506
504
  /**
507
505
  * Measurement system for the demographic field. Ensures buyer and seller agree on demographic notation.
508
506
  */
509
- export type DemographicSystem1 = 'nielsen' | 'barb' | 'agf' | 'oztam' | 'mediametrie' | 'custom';
510
- /**
511
- * Unit of measurement for reach and audience_size metrics in this forecast. Required for cross-channel forecast comparison.
512
- */
513
507
  export type ReachUnit = 'individuals' | 'households' | 'devices' | 'accounts' | 'cookies' | 'custom';
514
508
  /**
515
509
  * Available frequencies for delivery reports and metrics updates
@@ -574,7 +568,7 @@ export type DataProviderSignalSelector = {
574
568
  [k: string]: unknown | undefined;
575
569
  };
576
570
  /**
577
- * Where the conversion event originated
571
+ * The type of catalog feed. Determines the item schema and how the platform resolves catalog items. Multiple catalog types can be synced to the same account and referenced together in creatives.
578
572
  */
579
573
  export type ActionSource = 'website' | 'app' | 'offline' | 'phone_call' | 'chat' | 'email' | 'in_store' | 'system_generated' | 'other';
580
574
  /**
@@ -602,10 +596,14 @@ export interface GetProductsResponse {
602
596
  */
603
597
  property_list_applied?: boolean;
604
598
  /**
605
- * 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.
599
+ * Whether the seller filtered results based on the provided catalog. True if the seller matched catalog items against its inventory. Absent or false if no catalog was provided or the seller does not support catalog matching.
606
600
  */
607
- product_selectors_applied?: boolean;
601
+ catalog_applied?: boolean;
608
602
  pagination?: PaginationResponse;
603
+ /**
604
+ * When true, this response contains simulated data from sandbox mode.
605
+ */
606
+ sandbox?: boolean;
609
607
  context?: ContextObject;
610
608
  ext?: ExtensionObject;
611
609
  }
@@ -685,6 +683,12 @@ export interface Product {
685
683
  * 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.
686
684
  */
687
685
  signal_targeting_allowed?: boolean;
686
+ /**
687
+ * Catalog types this product supports for catalog-driven campaigns. A sponsored product listing declares ["product"], a job board declares ["job", "offering"]. Buyers match synced catalogs to products via this field.
688
+ *
689
+ * @minItems 1
690
+ */
691
+ catalog_types?: [CatalogType, ...CatalogType[]];
688
692
  /**
689
693
  * 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.
690
694
  */
@@ -711,19 +715,23 @@ export interface Product {
711
715
  [k: string]: unknown | undefined;
712
716
  };
713
717
  /**
714
- * When the buyer provides a brand 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.
718
+ * When the buyer provides a catalog on get_products, indicates which catalog items are eligible for this product. Only present for products where catalog matching is relevant (e.g., sponsored product listings, job boards, hotel ads).
715
719
  */
716
720
  catalog_match?: {
717
721
  /**
718
- * 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).
722
+ * GTINs from the buyer's catalog that are eligible on this product's inventory. Standard GTIN formats (GTIN-8 through GTIN-14). Only present for product-type catalogs with GTIN matching.
719
723
  */
720
724
  matched_gtins?: string[];
721
725
  /**
722
- * 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.
726
+ * Item IDs from the buyer's catalog that matched this product's inventory. The ID type depends on the catalog type and content_id_type (e.g., SKUs for product catalogs, job_ids for job catalogs, offering_ids for offering catalogs).
727
+ */
728
+ matched_ids?: string[];
729
+ /**
730
+ * Number of catalog items that matched this product's inventory.
723
731
  */
724
- matched_skus?: string[];
732
+ matched_count?: number;
725
733
  /**
726
- * Total catalog items evaluated from the buyer's feed.
734
+ * Total catalog items evaluated from the buyer's catalog.
727
735
  */
728
736
  submitted_count: number;
729
737
  };
@@ -739,7 +747,7 @@ export interface Product {
739
747
  * Optional standard visual card (300x400px) for displaying this product in user interfaces. Can be rendered via preview_creative or pre-generated.
740
748
  */
741
749
  product_card?: {
742
- format_id: FormatID1;
750
+ format_id: FormatID;
743
751
  /**
744
752
  * Asset manifest for rendering the card, structure defined by the format
745
753
  */
@@ -752,7 +760,7 @@ export interface Product {
752
760
  * Optional detailed card with carousel and full specifications. Provides rich product presentation similar to media kit pages.
753
761
  */
754
762
  product_card_detailed?: {
755
- format_id: FormatID2;
763
+ format_id: FormatID;
756
764
  /**
757
765
  * Asset manifest for rendering the detailed card, structure defined by the format
758
766
  */
@@ -865,7 +873,7 @@ export interface VCPMPricingOption {
865
873
  * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
866
874
  */
867
875
  floor_price?: number;
868
- price_guidance?: PriceGuidance1;
876
+ price_guidance?: PriceGuidance;
869
877
  /**
870
878
  * Minimum spend requirement per package using this pricing option, in the specified currency
871
879
  */
@@ -875,28 +883,6 @@ export interface VCPMPricingOption {
875
883
  /**
876
884
  * Optional pricing guidance for auction-based bidding
877
885
  */
878
- export interface PriceGuidance1 {
879
- /**
880
- * 25th percentile of recent winning bids
881
- */
882
- p25?: number;
883
- /**
884
- * Median of recent winning bids
885
- */
886
- p50?: number;
887
- /**
888
- * 75th percentile of recent winning bids
889
- */
890
- p75?: number;
891
- /**
892
- * 90th percentile of recent winning bids
893
- */
894
- p90?: number;
895
- [k: string]: unknown | undefined;
896
- }
897
- /**
898
- * Cost Per Click pricing. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
899
- */
900
886
  export interface CPCPricingOption {
901
887
  /**
902
888
  * Unique identifier for this pricing option within the product
@@ -918,7 +904,7 @@ export interface CPCPricingOption {
918
904
  * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
919
905
  */
920
906
  floor_price?: number;
921
- price_guidance?: PriceGuidance2;
907
+ price_guidance?: PriceGuidance;
922
908
  /**
923
909
  * Minimum spend requirement per package using this pricing option, in the specified currency
924
910
  */
@@ -928,28 +914,6 @@ export interface CPCPricingOption {
928
914
  /**
929
915
  * Optional pricing guidance for auction-based bidding
930
916
  */
931
- export interface PriceGuidance2 {
932
- /**
933
- * 25th percentile of recent winning bids
934
- */
935
- p25?: number;
936
- /**
937
- * Median of recent winning bids
938
- */
939
- p50?: number;
940
- /**
941
- * 75th percentile of recent winning bids
942
- */
943
- p75?: number;
944
- /**
945
- * 90th percentile of recent winning bids
946
- */
947
- p90?: number;
948
- [k: string]: unknown | undefined;
949
- }
950
- /**
951
- * Cost Per Completed View (100% video/audio completion) pricing. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
952
- */
953
917
  export interface CPCVPricingOption {
954
918
  /**
955
919
  * Unique identifier for this pricing option within the product
@@ -971,7 +935,7 @@ export interface CPCVPricingOption {
971
935
  * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
972
936
  */
973
937
  floor_price?: number;
974
- price_guidance?: PriceGuidance3;
938
+ price_guidance?: PriceGuidance;
975
939
  /**
976
940
  * Minimum spend requirement per package using this pricing option, in the specified currency
977
941
  */
@@ -981,28 +945,6 @@ export interface CPCVPricingOption {
981
945
  /**
982
946
  * Optional pricing guidance for auction-based bidding
983
947
  */
984
- export interface PriceGuidance3 {
985
- /**
986
- * 25th percentile of recent winning bids
987
- */
988
- p25?: number;
989
- /**
990
- * Median of recent winning bids
991
- */
992
- p50?: number;
993
- /**
994
- * 75th percentile of recent winning bids
995
- */
996
- p75?: number;
997
- /**
998
- * 90th percentile of recent winning bids
999
- */
1000
- p90?: number;
1001
- [k: string]: unknown | undefined;
1002
- }
1003
- /**
1004
- * Cost Per View (at publisher-defined threshold) pricing for video/audio. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
1005
- */
1006
948
  export interface CPVPricingOption {
1007
949
  /**
1008
950
  * Unique identifier for this pricing option within the product
@@ -1024,7 +966,7 @@ export interface CPVPricingOption {
1024
966
  * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
1025
967
  */
1026
968
  floor_price?: number;
1027
- price_guidance?: PriceGuidance4;
969
+ price_guidance?: PriceGuidance;
1028
970
  /**
1029
971
  * CPV-specific parameters defining the view threshold
1030
972
  */
@@ -1047,28 +989,6 @@ export interface CPVPricingOption {
1047
989
  /**
1048
990
  * Optional pricing guidance for auction-based bidding
1049
991
  */
1050
- export interface PriceGuidance4 {
1051
- /**
1052
- * 25th percentile of recent winning bids
1053
- */
1054
- p25?: number;
1055
- /**
1056
- * Median of recent winning bids
1057
- */
1058
- p50?: number;
1059
- /**
1060
- * 75th percentile of recent winning bids
1061
- */
1062
- p75?: number;
1063
- /**
1064
- * 90th percentile of recent winning bids
1065
- */
1066
- p90?: number;
1067
- [k: string]: unknown | undefined;
1068
- }
1069
- /**
1070
- * Cost Per Point (Gross Rating Point) pricing for TV and audio campaigns. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
1071
- */
1072
992
  export interface CPPPricingOption {
1073
993
  /**
1074
994
  * Unique identifier for this pricing option within the product
@@ -1090,7 +1010,7 @@ export interface CPPPricingOption {
1090
1010
  * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
1091
1011
  */
1092
1012
  floor_price?: number;
1093
- price_guidance?: PriceGuidance5;
1013
+ price_guidance?: PriceGuidance;
1094
1014
  /**
1095
1015
  * CPP-specific parameters for demographic targeting
1096
1016
  */
@@ -1115,28 +1035,6 @@ export interface CPPPricingOption {
1115
1035
  /**
1116
1036
  * Optional pricing guidance for auction-based bidding
1117
1037
  */
1118
- export interface PriceGuidance5 {
1119
- /**
1120
- * 25th percentile of recent winning bids
1121
- */
1122
- p25?: number;
1123
- /**
1124
- * Median of recent winning bids
1125
- */
1126
- p50?: number;
1127
- /**
1128
- * 75th percentile of recent winning bids
1129
- */
1130
- p75?: number;
1131
- /**
1132
- * 90th percentile of recent winning bids
1133
- */
1134
- p90?: number;
1135
- [k: string]: unknown | undefined;
1136
- }
1137
- /**
1138
- * 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).
1139
- */
1140
1038
  export interface CPAPricingOption {
1141
1039
  /**
1142
1040
  * Unique identifier for this pricing option within the product
@@ -1196,7 +1094,7 @@ export interface FlatRatePricingOption {
1196
1094
  * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
1197
1095
  */
1198
1096
  floor_price?: number;
1199
- price_guidance?: PriceGuidance6;
1097
+ price_guidance?: PriceGuidance;
1200
1098
  /**
1201
1099
  * Flat rate parameters for DOOH and time-based campaigns
1202
1100
  */
@@ -1240,28 +1138,6 @@ export interface FlatRatePricingOption {
1240
1138
  /**
1241
1139
  * Optional pricing guidance for auction-based bidding
1242
1140
  */
1243
- export interface PriceGuidance6 {
1244
- /**
1245
- * 25th percentile of recent winning bids
1246
- */
1247
- p25?: number;
1248
- /**
1249
- * Median of recent winning bids
1250
- */
1251
- p50?: number;
1252
- /**
1253
- * 75th percentile of recent winning bids
1254
- */
1255
- p75?: number;
1256
- /**
1257
- * 90th percentile of recent winning bids
1258
- */
1259
- p90?: number;
1260
- [k: string]: unknown | undefined;
1261
- }
1262
- /**
1263
- * 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.
1264
- */
1265
1141
  export interface TimeBasedPricingOption {
1266
1142
  /**
1267
1143
  * Unique identifier for this pricing option within the product
@@ -1283,7 +1159,7 @@ export interface TimeBasedPricingOption {
1283
1159
  * Minimum acceptable bid per time unit for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
1284
1160
  */
1285
1161
  floor_price?: number;
1286
- price_guidance?: PriceGuidance7;
1162
+ price_guidance?: PriceGuidance;
1287
1163
  /**
1288
1164
  * Time-based pricing parameters
1289
1165
  */
@@ -1311,42 +1187,20 @@ export interface TimeBasedPricingOption {
1311
1187
  /**
1312
1188
  * Optional pricing guidance for auction-based bidding
1313
1189
  */
1314
- export interface PriceGuidance7 {
1190
+ export interface DeliveryForecast {
1315
1191
  /**
1316
- * 25th percentile of recent winning bids
1192
+ * 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.
1193
+ *
1194
+ * @minItems 1
1317
1195
  */
1318
- p25?: number;
1319
- /**
1320
- * Median of recent winning bids
1321
- */
1322
- p50?: number;
1323
- /**
1324
- * 75th percentile of recent winning bids
1325
- */
1326
- p75?: number;
1327
- /**
1328
- * 90th percentile of recent winning bids
1329
- */
1330
- p90?: number;
1331
- [k: string]: unknown | undefined;
1332
- }
1333
- /**
1334
- * Forecasted delivery metrics for this product. Gives buyers an estimate of expected performance before requesting a proposal.
1335
- */
1336
- export interface DeliveryForecast {
1337
- /**
1338
- * 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.
1339
- *
1340
- * @minItems 1
1341
- */
1342
- points: [ForecastPoint, ...ForecastPoint[]];
1343
- forecast_range_unit?: ForecastRangeUnit;
1344
- method: ForecastMethod;
1196
+ points: [ForecastPoint, ...ForecastPoint[]];
1197
+ forecast_range_unit?: ForecastRangeUnit;
1198
+ method: ForecastMethod;
1345
1199
  /**
1346
1200
  * ISO 4217 currency code for monetary values in this forecast (spend, budget)
1347
1201
  */
1348
1202
  currency: string;
1349
- demographic_system?: DemographicSystem1;
1203
+ demographic_system?: DemographicSystem;
1350
1204
  /**
1351
1205
  * 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.
1352
1206
  */
@@ -1470,58 +1324,6 @@ export interface CreativePolicy {
1470
1324
  /**
1471
1325
  * 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.
1472
1326
  */
1473
- export interface FormatID1 {
1474
- /**
1475
- * 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)
1476
- */
1477
- agent_url: string;
1478
- /**
1479
- * 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.
1480
- */
1481
- id: string;
1482
- /**
1483
- * 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.
1484
- */
1485
- width?: number;
1486
- /**
1487
- * 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.
1488
- */
1489
- height?: number;
1490
- /**
1491
- * Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters.
1492
- */
1493
- duration_ms?: number;
1494
- [k: string]: unknown | undefined;
1495
- }
1496
- /**
1497
- * 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.
1498
- */
1499
- export interface FormatID2 {
1500
- /**
1501
- * 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)
1502
- */
1503
- agent_url: string;
1504
- /**
1505
- * 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.
1506
- */
1507
- id: string;
1508
- /**
1509
- * 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.
1510
- */
1511
- width?: number;
1512
- /**
1513
- * 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.
1514
- */
1515
- height?: number;
1516
- /**
1517
- * Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters.
1518
- */
1519
- duration_ms?: number;
1520
- [k: string]: unknown | undefined;
1521
- }
1522
- /**
1523
- * A proposed media plan with budget allocations across products. Represents the publisher's strategic recommendation for how to structure a campaign based on the brief. Proposals are actionable - buyers can execute them directly via create_media_buy by providing the proposal_id.
1524
- */
1525
1327
  export interface Proposal {
1526
1328
  /**
1527
1329
  * Unique identifier for this proposal. Used to execute it via create_media_buy.
@@ -1571,7 +1373,7 @@ export interface Proposal {
1571
1373
  * Explanation of how this proposal aligns with the campaign brief
1572
1374
  */
1573
1375
  brief_alignment?: string;
1574
- forecast?: DeliveryForecast2;
1376
+ forecast?: DeliveryForecast;
1575
1377
  ext?: ExtensionObject;
1576
1378
  [k: string]: unknown | undefined;
1577
1379
  }
@@ -1609,7 +1411,7 @@ export interface ProductAllocation {
1609
1411
  * @minItems 1
1610
1412
  */
1611
1413
  daypart_targets?: [DaypartTarget, ...DaypartTarget[]];
1612
- forecast?: DeliveryForecast1;
1414
+ forecast?: DeliveryForecast;
1613
1415
  ext?: ExtensionObject;
1614
1416
  [k: string]: unknown | undefined;
1615
1417
  }
@@ -1639,72 +1441,6 @@ export interface DaypartTarget {
1639
1441
  /**
1640
1442
  * Forecasted delivery metrics for this allocation
1641
1443
  */
1642
- export interface DeliveryForecast1 {
1643
- /**
1644
- * 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.
1645
- *
1646
- * @minItems 1
1647
- */
1648
- points: [ForecastPoint, ...ForecastPoint[]];
1649
- forecast_range_unit?: ForecastRangeUnit;
1650
- method: ForecastMethod;
1651
- /**
1652
- * ISO 4217 currency code for monetary values in this forecast (spend, budget)
1653
- */
1654
- currency: string;
1655
- demographic_system?: DemographicSystem1;
1656
- /**
1657
- * 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.
1658
- */
1659
- demographic?: string;
1660
- reach_unit?: ReachUnit;
1661
- /**
1662
- * When this forecast was computed
1663
- */
1664
- generated_at?: string;
1665
- /**
1666
- * When this forecast expires. After this time, the forecast should be refreshed. Forecast expiry does not affect proposal executability.
1667
- */
1668
- valid_until?: string;
1669
- ext?: ExtensionObject;
1670
- [k: string]: unknown | undefined;
1671
- }
1672
- /**
1673
- * 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.
1674
- */
1675
- export interface DeliveryForecast2 {
1676
- /**
1677
- * 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.
1678
- *
1679
- * @minItems 1
1680
- */
1681
- points: [ForecastPoint, ...ForecastPoint[]];
1682
- forecast_range_unit?: ForecastRangeUnit;
1683
- method: ForecastMethod;
1684
- /**
1685
- * ISO 4217 currency code for monetary values in this forecast (spend, budget)
1686
- */
1687
- currency: string;
1688
- demographic_system?: DemographicSystem1;
1689
- /**
1690
- * 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.
1691
- */
1692
- demographic?: string;
1693
- reach_unit?: ReachUnit;
1694
- /**
1695
- * When this forecast was computed
1696
- */
1697
- generated_at?: string;
1698
- /**
1699
- * When this forecast expires. After this time, the forecast should be refreshed. Forecast expiry does not affect proposal executability.
1700
- */
1701
- valid_until?: string;
1702
- ext?: ExtensionObject;
1703
- [k: string]: unknown | undefined;
1704
- }
1705
- /**
1706
- * Standard error structure for task-specific errors and warnings
1707
- */
1708
1444
  export interface Error {
1709
1445
  /**
1710
1446
  * Error code for programmatic handling
@@ -1757,7 +1493,7 @@ export interface PaginationResponse {
1757
1493
  /**
1758
1494
  * Filter by format type (technical categories with distinct requirements)
1759
1495
  */
1760
- export type AssetContentType = 'image' | 'video' | 'audio' | 'text' | 'markdown' | 'html' | 'css' | 'javascript' | 'vast' | 'daast' | 'promoted_offerings' | 'url' | 'webhook';
1496
+ export type AssetContentType = 'image' | 'video' | 'audio' | 'text' | 'markdown' | 'html' | 'css' | 'javascript' | 'vast' | 'daast' | 'url' | 'webhook';
1761
1497
  /**
1762
1498
  * Filter to formats that meet at least this WCAG conformance level (A < AA < AAA)
1763
1499
  */
@@ -1800,6 +1536,14 @@ export interface ListCreativeFormatsRequest {
1800
1536
  */
1801
1537
  name_search?: string;
1802
1538
  wcag_level?: WCAGLevel;
1539
+ /**
1540
+ * Filter to formats whose output_format_ids includes any of these format IDs. Returns formats that can produce these outputs — inspect each result's input_format_ids to see what inputs they accept.
1541
+ */
1542
+ output_format_ids?: FormatID[];
1543
+ /**
1544
+ * Filter to formats whose input_format_ids includes any of these format IDs. Returns formats that accept these creatives as input — inspect each result's output_format_ids to see what they can produce.
1545
+ */
1546
+ input_format_ids?: FormatID[];
1803
1547
  pagination?: PaginationRequest;
1804
1548
  context?: ContextObject;
1805
1549
  ext?: ExtensionObject;
@@ -1814,10 +1558,14 @@ export type FormatIDParameter = 'dimensions' | 'duration';
1814
1558
  /**
1815
1559
  * Standardized macro placeholders for dynamic value substitution in creative tracking URLs. Macros are replaced with actual values at impression time. See docs/creative/universal-macros.mdx for detailed documentation.
1816
1560
  */
1817
- export type UniversalMacro = 'MEDIA_BUY_ID' | 'PACKAGE_ID' | 'CREATIVE_ID' | 'CACHEBUSTER' | 'TIMESTAMP' | 'CLICK_URL' | 'GDPR' | 'GDPR_CONSENT' | 'US_PRIVACY' | 'GPP_STRING' | 'GPP_SID' | 'IP_ADDRESS' | 'LIMIT_AD_TRACKING' | 'DEVICE_TYPE' | 'OS' | 'OS_VERSION' | 'DEVICE_MAKE' | 'DEVICE_MODEL' | 'USER_AGENT' | 'APP_BUNDLE' | 'APP_NAME' | 'COUNTRY' | 'REGION' | 'CITY' | 'ZIP' | 'DMA' | 'LAT' | 'LONG' | 'DEVICE_ID' | 'DEVICE_ID_TYPE' | 'DOMAIN' | 'PAGE_URL' | 'REFERRER' | 'KEYWORDS' | 'PLACEMENT_ID' | 'FOLD_POSITION' | 'AD_WIDTH' | 'AD_HEIGHT' | 'VIDEO_ID' | 'VIDEO_TITLE' | 'VIDEO_DURATION' | 'VIDEO_CATEGORY' | 'CONTENT_GENRE' | 'CONTENT_RATING' | 'PLAYER_WIDTH' | 'PLAYER_HEIGHT' | 'POD_POSITION' | 'POD_SIZE' | 'AD_BREAK_ID' | 'STATION_ID' | 'SHOW_NAME' | 'EPISODE_ID' | 'AUDIO_DURATION' | 'AXEM';
1561
+ export type UniversalMacro = 'MEDIA_BUY_ID' | 'PACKAGE_ID' | 'CREATIVE_ID' | 'CACHEBUSTER' | 'TIMESTAMP' | 'CLICK_URL' | 'GDPR' | 'GDPR_CONSENT' | 'US_PRIVACY' | 'GPP_STRING' | 'GPP_SID' | 'IP_ADDRESS' | 'LIMIT_AD_TRACKING' | 'DEVICE_TYPE' | 'OS' | 'OS_VERSION' | 'DEVICE_MAKE' | 'DEVICE_MODEL' | 'USER_AGENT' | 'APP_BUNDLE' | 'APP_NAME' | 'COUNTRY' | 'REGION' | 'CITY' | 'ZIP' | 'DMA' | 'LAT' | 'LONG' | 'DEVICE_ID' | 'DEVICE_ID_TYPE' | 'DOMAIN' | 'PAGE_URL' | 'REFERRER' | 'KEYWORDS' | 'PLACEMENT_ID' | 'FOLD_POSITION' | 'AD_WIDTH' | 'AD_HEIGHT' | 'VIDEO_ID' | 'VIDEO_TITLE' | 'VIDEO_DURATION' | 'VIDEO_CATEGORY' | 'CONTENT_GENRE' | 'CONTENT_RATING' | 'PLAYER_WIDTH' | 'PLAYER_HEIGHT' | 'POD_POSITION' | 'POD_SIZE' | 'AD_BREAK_ID' | 'STATION_ID' | 'SHOW_NAME' | 'EPISODE_ID' | 'AUDIO_DURATION' | 'AXEM' | 'CATALOG_ID' | 'SKU' | 'GTIN' | 'OFFERING_ID' | 'JOB_ID' | 'HOTEL_ID' | 'FLIGHT_ID' | 'VEHICLE_ID' | 'LISTING_ID' | 'STORE_ID' | 'PROGRAM_ID' | 'DESTINATION_ID' | 'CREATIVE_VARIANT_ID' | 'APP_ITEM_ID';
1818
1562
  /**
1819
1563
  * WCAG conformance level that this format achieves. For format-rendered creatives, the format guarantees this level. For opaque creatives, the format requires assets that self-certify to this level.
1820
1564
  */
1565
+ export type AssetRequirements = ImageAssetRequirements | VideoAssetRequirements | AudioAssetRequirements | TextAssetRequirements | MarkdownAssetRequirements | HTMLAssetRequirements | CSSAssetRequirements | JavaScriptAssetRequirements | VASTAssetRequirements | DAASTAssetRequirements | URLAssetRequirements | WebhookAssetRequirements;
1566
+ /**
1567
+ * Standard delivery and performance metrics available for reporting
1568
+ */
1821
1569
  export type CreativeAgentCapability = 'validation' | 'assembly' | 'generation' | 'preview' | 'delivery';
1822
1570
  /**
1823
1571
  * Response payload for list_creative_formats task
@@ -1849,6 +1597,10 @@ export interface ListCreativeFormatsResponse {
1849
1597
  */
1850
1598
  errors?: Error[];
1851
1599
  pagination?: PaginationResponse;
1600
+ /**
1601
+ * When true, this response contains simulated data from sandbox mode.
1602
+ */
1603
+ sandbox?: boolean;
1852
1604
  context?: ContextObject;
1853
1605
  ext?: ExtensionObject;
1854
1606
  }
@@ -1935,14 +1687,18 @@ export interface Format {
1935
1687
  */
1936
1688
  supported_macros?: (UniversalMacro | string)[];
1937
1689
  /**
1938
- * For generative formats: array of format IDs that this format can generate. When a format accepts inputs like brand context and message, this specifies what concrete output formats can be produced (e.g., a generative banner format might output standard image banner formats).
1690
+ * Array of format IDs this format accepts as input creative manifests. When present, indicates this format can take existing creatives in these formats as input. Omit for formats that work from raw assets (images, text, etc.) rather than existing creatives.
1939
1691
  */
1940
- output_format_ids?: FormatID1[];
1692
+ input_format_ids?: FormatID[];
1693
+ /**
1694
+ * Array of format IDs that this format can produce as output. When present, indicates this format can build creatives in these output formats (e.g., a multi-publisher template format might produce standard display formats across many publishers). Omit for formats that produce a single fixed output (the format itself).
1695
+ */
1696
+ output_format_ids?: FormatID[];
1941
1697
  /**
1942
1698
  * Optional standard visual card (300x400px) for displaying this format in user interfaces. Can be rendered via preview_creative or pre-generated.
1943
1699
  */
1944
1700
  format_card?: {
1945
- format_id: FormatID2;
1701
+ format_id: FormatID;
1946
1702
  /**
1947
1703
  * Asset manifest for rendering the card, structure defined by the format
1948
1704
  */
@@ -1965,7 +1721,7 @@ export interface Format {
1965
1721
  * Optional detailed card with carousel and full specifications. Provides rich format documentation similar to ad spec pages.
1966
1722
  */
1967
1723
  format_card_detailed?: {
1968
- format_id: FormatID3;
1724
+ format_id: FormatID;
1969
1725
  /**
1970
1726
  * Asset manifest for rendering the detailed card, structure defined by the format
1971
1727
  */
@@ -1974,6 +1730,12 @@ export interface Format {
1974
1730
  };
1975
1731
  [k: string]: unknown | undefined;
1976
1732
  };
1733
+ /**
1734
+ * Catalog feeds this format requires for rendering. Formats that display product listings, store locators, inventory availability, or promotional pricing declare what catalog types must be synced to the account. Buyers ensure the required catalogs are synced via sync_catalogs before submitting creatives in this format.
1735
+ *
1736
+ * @minItems 1
1737
+ */
1738
+ catalog_requirements?: [CatalogRequirements, ...CatalogRequirements[]];
1977
1739
  /**
1978
1740
  * Metrics this format can produce in delivery reporting. Buyers receive the intersection of format reported_metrics and product available_metrics. If omitted, the format defers entirely to product-level metric declarations.
1979
1741
  *
@@ -2020,51 +1782,375 @@ export interface BaseGroupAsset {
2020
1782
  /**
2021
1783
  * 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.
2022
1784
  */
2023
- export interface FormatID3 {
1785
+ export interface CatalogRequirements {
1786
+ catalog_type: CatalogType;
2024
1787
  /**
2025
- * 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)
1788
+ * Whether this catalog type must be present. When true, creatives using this format must reference a synced catalog of this type.
2026
1789
  */
2027
- agent_url: string;
1790
+ required?: boolean;
2028
1791
  /**
2029
- * 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.
1792
+ * Minimum number of items the catalog must contain for this format to render properly (e.g., a carousel might require at least 3 products)
2030
1793
  */
2031
- id: string;
1794
+ min_items?: number;
2032
1795
  /**
2033
- * 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.
1796
+ * Fields that must be present and non-empty on every item in the catalog. Field names are catalog-type-specific (e.g., 'title', 'price', 'image_url' for product catalogs; 'store_id', 'quantity' for inventory feeds).
1797
+ *
1798
+ * @minItems 1
2034
1799
  */
2035
- width?: number;
1800
+ required_fields?: [string, ...string[]];
2036
1801
  /**
2037
- * 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.
1802
+ * Accepted feed formats for this catalog type. When specified, the synced catalog must use one of these formats. When omitted, any format is accepted.
1803
+ *
1804
+ * @minItems 1
2038
1805
  */
2039
- height?: number;
1806
+ feed_formats?: [FeedFormat, ...FeedFormat[]];
2040
1807
  /**
2041
- * Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters.
1808
+ * Per-offering creative requirements. Only applicable when catalog_type is 'offering'. Declares what asset groups (headlines, images, videos) each offering must provide, along with count bounds and per-asset technical constraints.
1809
+ *
1810
+ * @minItems 1
2042
1811
  */
2043
- duration_ms?: number;
1812
+ offering_asset_constraints?: [OfferingAssetConstraint, ...OfferingAssetConstraint[]];
2044
1813
  [k: string]: unknown | undefined;
2045
1814
  }
2046
1815
  /**
2047
- * Standard error structure for task-specific errors and warnings
1816
+ * Declares per-group creative requirements that each offering must satisfy. Allows formats to specify what asset groups (headlines, images, videos) offerings must provide, along with count and per-asset technical constraints.
2048
1817
  */
1818
+ export interface OfferingAssetConstraint {
1819
+ /**
1820
+ * The asset group this constraint applies to. Values are format-defined vocabulary — each format chooses its own group IDs (e.g., 'headlines', 'images', 'videos'). Buyers discover them via list_creative_formats.
1821
+ */
1822
+ asset_group_id: string;
1823
+ asset_type: AssetContentType;
1824
+ /**
1825
+ * Whether this asset group must be present in each offering. Defaults to true.
1826
+ */
1827
+ required?: boolean;
1828
+ /**
1829
+ * Minimum number of items required in this group.
1830
+ */
1831
+ min_count?: number;
1832
+ /**
1833
+ * Maximum number of items allowed in this group.
1834
+ */
1835
+ max_count?: number;
1836
+ asset_requirements?: AssetRequirements;
1837
+ ext?: ExtensionObject;
1838
+ [k: string]: unknown | undefined;
1839
+ }
2049
1840
  /**
2050
- * Budget pacing strategy
1841
+ * Requirements for image creative assets. These define the technical constraints for image files.
2051
1842
  */
2052
- export type Pacing = 'even' | 'asap' | 'front_loaded';
1843
+ export interface ImageAssetRequirements {
1844
+ /**
1845
+ * Minimum width in pixels. For exact dimensions, set min_width = max_width.
1846
+ */
1847
+ min_width?: number;
1848
+ /**
1849
+ * Maximum width in pixels. For exact dimensions, set min_width = max_width.
1850
+ */
1851
+ max_width?: number;
1852
+ /**
1853
+ * Minimum height in pixels. For exact dimensions, set min_height = max_height.
1854
+ */
1855
+ min_height?: number;
1856
+ /**
1857
+ * Maximum height in pixels. For exact dimensions, set min_height = max_height.
1858
+ */
1859
+ max_height?: number;
1860
+ /**
1861
+ * Required aspect ratio (e.g., '16:9', '1:1', '1.91:1')
1862
+ */
1863
+ aspect_ratio?: string;
1864
+ /**
1865
+ * Accepted image file formats
1866
+ */
1867
+ formats?: ('jpg' | 'jpeg' | 'png' | 'gif' | 'webp' | 'svg' | 'avif')[];
1868
+ /**
1869
+ * Maximum file size in kilobytes
1870
+ */
1871
+ max_file_size_kb?: number;
1872
+ /**
1873
+ * Whether the image must support transparency (requires PNG, WebP, or GIF)
1874
+ */
1875
+ transparency_required?: boolean;
1876
+ /**
1877
+ * Whether animated images (GIF, animated WebP) are accepted
1878
+ */
1879
+ animation_allowed?: boolean;
1880
+ /**
1881
+ * Maximum animation duration in milliseconds (if animation_allowed is true)
1882
+ */
1883
+ max_animation_duration_ms?: number;
1884
+ [k: string]: unknown | undefined;
1885
+ }
1886
+ /**
1887
+ * Requirements for video creative assets. These define the technical constraints for video files.
1888
+ */
1889
+ export interface VideoAssetRequirements {
1890
+ /**
1891
+ * Minimum width in pixels
1892
+ */
1893
+ min_width?: number;
1894
+ /**
1895
+ * Maximum width in pixels
1896
+ */
1897
+ max_width?: number;
1898
+ /**
1899
+ * Minimum height in pixels
1900
+ */
1901
+ min_height?: number;
1902
+ /**
1903
+ * Maximum height in pixels
1904
+ */
1905
+ max_height?: number;
1906
+ /**
1907
+ * Required aspect ratio (e.g., '16:9', '9:16')
1908
+ */
1909
+ aspect_ratio?: string;
1910
+ /**
1911
+ * Minimum duration in milliseconds
1912
+ */
1913
+ min_duration_ms?: number;
1914
+ /**
1915
+ * Maximum duration in milliseconds
1916
+ */
1917
+ max_duration_ms?: number;
1918
+ /**
1919
+ * Accepted video container formats
1920
+ */
1921
+ containers?: ('mp4' | 'webm' | 'mov' | 'avi' | 'mkv')[];
1922
+ /**
1923
+ * Accepted video codecs
1924
+ */
1925
+ codecs?: ('h264' | 'h265' | 'vp8' | 'vp9' | 'av1')[];
1926
+ /**
1927
+ * Maximum file size in kilobytes
1928
+ */
1929
+ max_file_size_kb?: number;
1930
+ /**
1931
+ * Minimum video bitrate in kilobits per second
1932
+ */
1933
+ min_bitrate_kbps?: number;
1934
+ /**
1935
+ * Maximum video bitrate in kilobits per second
1936
+ */
1937
+ max_bitrate_kbps?: number;
1938
+ /**
1939
+ * Accepted frame rates in frames per second (e.g., [24, 30, 60])
1940
+ */
1941
+ frame_rates?: number[];
1942
+ /**
1943
+ * Whether the video must include an audio track
1944
+ */
1945
+ audio_required?: boolean;
1946
+ [k: string]: unknown | undefined;
1947
+ }
1948
+ /**
1949
+ * Requirements for audio creative assets.
1950
+ */
1951
+ export interface AudioAssetRequirements {
1952
+ /**
1953
+ * Minimum duration in milliseconds
1954
+ */
1955
+ min_duration_ms?: number;
1956
+ /**
1957
+ * Maximum duration in milliseconds
1958
+ */
1959
+ max_duration_ms?: number;
1960
+ /**
1961
+ * Accepted audio file formats
1962
+ */
1963
+ formats?: ('mp3' | 'aac' | 'wav' | 'ogg' | 'flac')[];
1964
+ /**
1965
+ * Maximum file size in kilobytes
1966
+ */
1967
+ max_file_size_kb?: number;
1968
+ /**
1969
+ * Accepted sample rates in Hz (e.g., [44100, 48000])
1970
+ */
1971
+ sample_rates?: number[];
1972
+ /**
1973
+ * Accepted audio channel configurations
1974
+ */
1975
+ channels?: ('mono' | 'stereo')[];
1976
+ /**
1977
+ * Minimum audio bitrate in kilobits per second
1978
+ */
1979
+ min_bitrate_kbps?: number;
1980
+ /**
1981
+ * Maximum audio bitrate in kilobits per second
1982
+ */
1983
+ max_bitrate_kbps?: number;
1984
+ [k: string]: unknown | undefined;
1985
+ }
1986
+ /**
1987
+ * Requirements for text creative assets such as headlines, body copy, and CTAs.
1988
+ */
1989
+ export interface TextAssetRequirements {
1990
+ /**
1991
+ * Minimum character length
1992
+ */
1993
+ min_length?: number;
1994
+ /**
1995
+ * Maximum character length
1996
+ */
1997
+ max_length?: number;
1998
+ /**
1999
+ * Minimum number of lines
2000
+ */
2001
+ min_lines?: number;
2002
+ /**
2003
+ * Maximum number of lines
2004
+ */
2005
+ max_lines?: number;
2006
+ /**
2007
+ * Regex pattern defining allowed characters (e.g., '^[a-zA-Z0-9 .,!?-]+$')
2008
+ */
2009
+ character_pattern?: string;
2010
+ /**
2011
+ * List of prohibited words or phrases
2012
+ */
2013
+ prohibited_terms?: string[];
2014
+ [k: string]: unknown | undefined;
2015
+ }
2053
2016
  /**
2054
- * Event type to optimize for (e.g. purchase, lead)
2017
+ * Requirements for markdown creative assets.
2055
2018
  */
2056
- export type MetroAreaSystem1 = 'nielsen_dma' | 'uk_itl1' | 'uk_itl2' | 'eurostat_nuts2' | 'custom';
2019
+ export interface MarkdownAssetRequirements {
2020
+ /**
2021
+ * Maximum character length
2022
+ */
2023
+ max_length?: number;
2024
+ [k: string]: unknown | undefined;
2025
+ }
2026
+ /**
2027
+ * Requirements for HTML creative assets. These define the execution environment constraints that the HTML must be compatible with.
2028
+ */
2029
+ export interface HTMLAssetRequirements {
2030
+ /**
2031
+ * Maximum file size in kilobytes for the HTML asset
2032
+ */
2033
+ max_file_size_kb?: number;
2034
+ /**
2035
+ * Sandbox environment the HTML must be compatible with. 'none' = direct DOM access, 'iframe' = standard iframe isolation, 'safeframe' = IAB SafeFrame container, 'fencedframe' = Privacy Sandbox fenced frame
2036
+ */
2037
+ sandbox?: 'none' | 'iframe' | 'safeframe' | 'fencedframe';
2038
+ /**
2039
+ * Whether the HTML creative can load external resources (scripts, images, fonts, etc.). When false, all resources must be inlined or bundled.
2040
+ */
2041
+ external_resources_allowed?: boolean;
2042
+ /**
2043
+ * List of domains the HTML creative may reference for external resources. Only applicable when external_resources_allowed is true.
2044
+ */
2045
+ allowed_external_domains?: string[];
2046
+ [k: string]: unknown | undefined;
2047
+ }
2048
+ /**
2049
+ * Requirements for CSS creative assets.
2050
+ */
2051
+ export interface CSSAssetRequirements {
2052
+ /**
2053
+ * Maximum file size in kilobytes
2054
+ */
2055
+ max_file_size_kb?: number;
2056
+ [k: string]: unknown | undefined;
2057
+ }
2058
+ /**
2059
+ * Requirements for JavaScript creative assets. These define the execution environment constraints that the JavaScript must be compatible with.
2060
+ */
2061
+ export interface JavaScriptAssetRequirements {
2062
+ /**
2063
+ * Maximum file size in kilobytes for the JavaScript asset
2064
+ */
2065
+ max_file_size_kb?: number;
2066
+ /**
2067
+ * Required JavaScript module format. 'script' = classic script, 'module' = ES modules, 'iife' = immediately invoked function expression
2068
+ */
2069
+ module_type?: 'script' | 'module' | 'iife';
2070
+ /**
2071
+ * Whether the JavaScript must use strict mode
2072
+ */
2073
+ strict_mode_required?: boolean;
2074
+ /**
2075
+ * Whether the JavaScript can load external resources dynamically
2076
+ */
2077
+ external_resources_allowed?: boolean;
2078
+ /**
2079
+ * List of domains the JavaScript may reference for external resources. Only applicable when external_resources_allowed is true.
2080
+ */
2081
+ allowed_external_domains?: string[];
2082
+ [k: string]: unknown | undefined;
2083
+ }
2084
+ /**
2085
+ * Requirements for VAST (Video Ad Serving Template) creative assets.
2086
+ */
2087
+ export interface VASTAssetRequirements {
2088
+ /**
2089
+ * Required VAST version
2090
+ */
2091
+ vast_version?: '2.0' | '3.0' | '4.0' | '4.1' | '4.2';
2092
+ [k: string]: unknown | undefined;
2093
+ }
2094
+ /**
2095
+ * Requirements for DAAST (Digital Audio Ad Serving Template) creative assets.
2096
+ */
2097
+ export interface DAASTAssetRequirements {
2098
+ /**
2099
+ * Required DAAST version. DAAST 1.0 is the current IAB standard.
2100
+ */
2101
+ daast_version?: '1.0';
2102
+ [k: string]: unknown | undefined;
2103
+ }
2104
+ /**
2105
+ * Requirements for URL assets such as click-through URLs, tracking pixels, and landing pages.
2106
+ */
2107
+ export interface URLAssetRequirements {
2108
+ /**
2109
+ * Standard role for this URL asset. Use this to constrain which purposes are valid for this URL slot. Complements asset_role (which is a human-readable label) by providing a machine-readable enum.
2110
+ */
2111
+ role?: 'clickthrough' | 'landing_page' | 'impression_tracker' | 'click_tracker' | 'viewability_tracker' | 'third_party_tracker';
2112
+ /**
2113
+ * Allowed URL protocols. HTTPS is recommended for all ad URLs.
2114
+ */
2115
+ protocols?: ('https' | 'http')[];
2116
+ /**
2117
+ * List of allowed domains for the URL
2118
+ */
2119
+ allowed_domains?: string[];
2120
+ /**
2121
+ * Maximum URL length in characters
2122
+ */
2123
+ max_length?: number;
2124
+ /**
2125
+ * Whether the URL supports macro substitution (e.g., ${CACHEBUSTER})
2126
+ */
2127
+ macro_support?: boolean;
2128
+ [k: string]: unknown | undefined;
2129
+ }
2130
+ /**
2131
+ * Requirements for webhook creative assets.
2132
+ */
2133
+ export interface WebhookAssetRequirements {
2134
+ /**
2135
+ * Allowed HTTP methods
2136
+ */
2137
+ methods?: ('GET' | 'POST')[];
2138
+ [k: string]: unknown | undefined;
2139
+ }
2140
+ /**
2141
+ * 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.
2142
+ */
2143
+ /**
2144
+ * Budget pacing strategy
2145
+ */
2146
+ export type Pacing = 'even' | 'asap' | 'front_loaded';
2057
2147
  /**
2058
- * Postal code system (e.g., 'us_zip', 'gb_outward'). System name encodes country and precision.
2148
+ * Catalog type. Structural types: 'offering' (AdCP Offering objects), 'product' (ecommerce entries), 'inventory' (stock per location), 'store' (physical locations), 'promotion' (deals and pricing). Vertical types: 'hotel', 'flight', 'job', 'vehicle', 'real_estate', 'education', 'destination', 'app' — each with an industry-specific item schema.
2059
2149
  */
2060
2150
  export type PostalCodeSystem = 'us_zip' | 'us_zip_plus_four' | 'gb_outward' | 'gb_full' | 'ca_fsa' | 'ca_full' | 'de_plz' | 'fr_code_postal' | 'au_postcode';
2061
2151
  /**
2062
2152
  * Postal code system (e.g., 'us_zip', 'gb_outward'). System name encodes country and precision.
2063
2153
  */
2064
- export type PostalCodeSystem1 = 'us_zip' | 'us_zip_plus_four' | 'gb_outward' | 'gb_full' | 'ca_fsa' | 'ca_full' | 'de_plz' | 'fr_code_postal' | 'au_postcode';
2065
- /**
2066
- * Days of the week for daypart targeting
2067
- */
2068
2154
  export type AgeVerificationMethod = 'facial_age_estimation' | 'id_document' | 'digital_id' | 'credit_card' | 'world_id';
2069
2155
  /**
2070
2156
  * Operating system platforms for device targeting. Browser values from Sec-CH-UA-Platform standard, extended for CTV.
@@ -2117,7 +2203,7 @@ export type VASTAsset = {
2117
2203
  * Inline VAST XML content
2118
2204
  */
2119
2205
  content: string;
2120
- vast_version?: VASTVersion1;
2206
+ vast_version?: VASTVersion;
2121
2207
  /**
2122
2208
  * Whether VPAID (Video Player-Ad Interface Definition) is supported
2123
2209
  */
@@ -2151,10 +2237,6 @@ export type VASTTrackingEvent = 'start' | 'firstQuartile' | 'midpoint' | 'thirdQ
2151
2237
  /**
2152
2238
  * VAST specification version
2153
2239
  */
2154
- export type VASTVersion1 = '2.0' | '3.0' | '4.0' | '4.1' | '4.2';
2155
- /**
2156
- * DAAST (Digital Audio Ad Serving Template) tag for third-party audio ad serving
2157
- */
2158
2240
  export type DAASTAsset = {
2159
2241
  /**
2160
2242
  * Discriminator indicating DAAST is delivered via URL endpoint
@@ -2191,7 +2273,7 @@ export type DAASTAsset = {
2191
2273
  * Inline DAAST XML content
2192
2274
  */
2193
2275
  content: string;
2194
- daast_version?: DAASTVersion1;
2276
+ daast_version?: DAASTVersion;
2195
2277
  /**
2196
2278
  * Expected audio duration in milliseconds (if known)
2197
2279
  */
@@ -2221,17 +2303,13 @@ export type DAASTTrackingEvent = 'start' | 'firstQuartile' | 'midpoint' | 'third
2221
2303
  /**
2222
2304
  * DAAST specification version
2223
2305
  */
2224
- export type DAASTVersion1 = '1.0' | '1.1';
2225
- /**
2226
- * Brand identifier within the house portfolio. Optional for single-brand domains.
2227
- */
2228
2306
  export type URLAssetType = 'clickthrough' | 'tracker_pixel' | 'tracker_script';
2229
2307
  /**
2230
2308
  * For generative creatives: set to 'approved' to finalize, 'rejected' to request regeneration with updated assets/message. Omit for non-generative creatives (system will set based on processing state).
2231
2309
  */
2232
2310
  export type CreativeStatus = 'processing' | 'approved' | 'rejected' | 'pending_review' | 'archived';
2233
2311
  /**
2234
- * Campaign start timing: 'asap' or ISO 8601 date-time
2312
+ * Brand identifier within the house portfolio. Optional for single-brand domains.
2235
2313
  */
2236
2314
  export type StartTiming = 'asap' | string;
2237
2315
  /**
@@ -2246,6 +2324,10 @@ export interface CreateMediaBuyRequest {
2246
2324
  * Buyer's reference identifier for this media buy
2247
2325
  */
2248
2326
  buyer_ref: string;
2327
+ /**
2328
+ * Buyer's campaign reference label. Groups related discovery and buy operations under a single campaign for CRM and ad server correlation (e.g., 'NovaDrink_Meals_Q2').
2329
+ */
2330
+ campaign_ref?: string;
2249
2331
  /**
2250
2332
  * Account to bill for this media buy. Required when the agent has access to multiple accounts; when omitted, the seller uses the agent's sole account. The seller maps the agent's brand + operator to an account during sync_accounts; the agent passes that account_id here.
2251
2333
  */
@@ -2271,7 +2353,7 @@ export interface CreateMediaBuyRequest {
2271
2353
  * Array of package configurations. Required when not using proposal_id. When executing a proposal, this can be omitted and packages will be derived from the proposal's allocations.
2272
2354
  */
2273
2355
  packages?: PackageRequest[];
2274
- brand: BrandReference1;
2356
+ brand: BrandReference;
2275
2357
  /**
2276
2358
  * Purchase order number for tracking
2277
2359
  */
@@ -2364,6 +2446,7 @@ export interface PackageRequest {
2364
2446
  * Whether this package should be created in a paused state. Paused packages do not deliver impressions. Defaults to false.
2365
2447
  */
2366
2448
  paused?: boolean;
2449
+ catalog?: Catalog;
2367
2450
  optimization_goal?: OptimizationGoal;
2368
2451
  targeting_overlay?: TargetingOverlay;
2369
2452
  /**
@@ -2475,7 +2558,7 @@ export interface TargetingOverlay {
2475
2558
  */
2476
2559
  geo_metros_exclude?: [
2477
2560
  {
2478
- system: MetroAreaSystem1;
2561
+ system: MetroAreaSystem;
2479
2562
  /**
2480
2563
  * Metro codes to exclude within the system (e.g., ['501', '602'] for Nielsen DMAs)
2481
2564
  *
@@ -2484,7 +2567,7 @@ export interface TargetingOverlay {
2484
2567
  values: [string, ...string[]];
2485
2568
  },
2486
2569
  ...{
2487
- system: MetroAreaSystem1;
2570
+ system: MetroAreaSystem;
2488
2571
  /**
2489
2572
  * Metro codes to exclude within the system (e.g., ['501', '602'] for Nielsen DMAs)
2490
2573
  *
@@ -2525,7 +2608,7 @@ export interface TargetingOverlay {
2525
2608
  */
2526
2609
  geo_postal_areas_exclude?: [
2527
2610
  {
2528
- system: PostalCodeSystem1;
2611
+ system: PostalCodeSystem;
2529
2612
  /**
2530
2613
  * Postal codes to exclude within the system (e.g., ['10001', '10002'] for us_zip)
2531
2614
  *
@@ -2534,7 +2617,7 @@ export interface TargetingOverlay {
2534
2617
  values: [string, ...string[]];
2535
2618
  },
2536
2619
  ...{
2537
- system: PostalCodeSystem1;
2620
+ system: PostalCodeSystem;
2538
2621
  /**
2539
2622
  * Postal codes to exclude within the system (e.g., ['10001', '10002'] for us_zip)
2540
2623
  *
@@ -2596,6 +2679,51 @@ export interface TargetingOverlay {
2596
2679
  * @minItems 1
2597
2680
  */
2598
2681
  device_platform?: [DevicePlatform, ...DevicePlatform[]];
2682
+ /**
2683
+ * 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.
2684
+ *
2685
+ * @minItems 1
2686
+ */
2687
+ store_catchments?: [
2688
+ {
2689
+ /**
2690
+ * Synced store-type catalog ID from sync_catalogs.
2691
+ */
2692
+ catalog_id: string;
2693
+ /**
2694
+ * Filter to specific stores within the catalog. Omit to target all stores.
2695
+ *
2696
+ * @minItems 1
2697
+ */
2698
+ store_ids?: [string, ...string[]];
2699
+ /**
2700
+ * Catchment zone IDs to target (e.g., 'walk', 'drive'). Omit to target all catchment zones.
2701
+ *
2702
+ * @minItems 1
2703
+ */
2704
+ catchment_ids?: [string, ...string[]];
2705
+ [k: string]: unknown | undefined;
2706
+ },
2707
+ ...{
2708
+ /**
2709
+ * Synced store-type catalog ID from sync_catalogs.
2710
+ */
2711
+ catalog_id: string;
2712
+ /**
2713
+ * Filter to specific stores within the catalog. Omit to target all stores.
2714
+ *
2715
+ * @minItems 1
2716
+ */
2717
+ store_ids?: [string, ...string[]];
2718
+ /**
2719
+ * Catchment zone IDs to target (e.g., 'walk', 'drive'). Omit to target all catchment zones.
2720
+ *
2721
+ * @minItems 1
2722
+ */
2723
+ catchment_ids?: [string, ...string[]];
2724
+ [k: string]: unknown | undefined;
2725
+ }[]
2726
+ ];
2599
2727
  /**
2600
2728
  * Restrict to users with specific language preferences. ISO 639-1 codes (e.g., 'en', 'es', 'fr').
2601
2729
  *
@@ -2646,7 +2774,13 @@ export interface CreativeAsset {
2646
2774
  * Human-readable creative name
2647
2775
  */
2648
2776
  name: string;
2649
- format_id: FormatID1;
2777
+ format_id: FormatID;
2778
+ /**
2779
+ * Catalogs this creative renders. Each entry satisfies one of the format's catalog_requirements, matched by type. Each catalog can be inline (with items), a reference to a synced catalog (by catalog_id), or a URL to an external feed.
2780
+ *
2781
+ * @minItems 1
2782
+ */
2783
+ catalogs?: [Catalog, ...Catalog[]];
2650
2784
  /**
2651
2785
  * Assets required by the format, keyed by asset_role
2652
2786
  */
@@ -2988,98 +3122,7 @@ export interface JavaScriptAsset {
2988
3122
  [k: string]: unknown | undefined;
2989
3123
  }
2990
3124
  /**
2991
- * Complete offering specification combining brand reference, product selectors, and optional SI agent endpoint. Provides all context needed for creative generation and/or conversational experiences about what is being promoted. When si_agent_url is present, hosts can connect users to conversational experiences about any of the offerings.
2992
- */
2993
- export interface PromotedOfferings {
2994
- brand: BrandReference;
2995
- /**
2996
- * MCP endpoint URL for the brand's SI agent. When present, hosts can connect users to conversational experiences about any of the offerings. The agent handles si_get_offering lookups and full conversations.
2997
- */
2998
- si_agent_url?: string;
2999
- product_selectors?: PromotedProducts;
3000
- /**
3001
- * Offerings available for promotion. Each offering can include creative assets (via portfolio_ref or inline assets) for traditional ads. When si_agent_url is set at the parent level, hosts can offer conversational experiences about any of these offerings.
3002
- */
3003
- offerings?: Offering[];
3004
- /**
3005
- * Selectors to choose specific assets from the brand's asset library
3006
- */
3007
- asset_selectors?: {
3008
- /**
3009
- * Select assets with specific tags (e.g., ['holiday', 'premium'])
3010
- */
3011
- tags?: string[];
3012
- /**
3013
- * Filter by asset type (e.g., ['image', 'video'])
3014
- */
3015
- asset_types?: ('image' | 'video' | 'audio' | 'vast' | 'daast' | 'text' | 'url' | 'html' | 'css' | 'javascript' | 'webhook')[];
3016
- /**
3017
- * Exclude assets with these tags
3018
- */
3019
- exclude_tags?: string[];
3020
- [k: string]: unknown | undefined;
3021
- };
3022
- [k: string]: unknown | undefined;
3023
- }
3024
- /**
3025
- * Brand reference. Resolved to full brand identity (logos, colors, tone, assets) at execution time for creative generation.
3026
- */
3027
- export interface Offering {
3028
- /**
3029
- * Unique identifier for this offering. Used by hosts to reference specific offerings in si_get_offering calls.
3030
- */
3031
- offering_id: string;
3032
- /**
3033
- * Human-readable offering name (e.g., 'Winter Sale', 'Free Trial', 'Enterprise Platform')
3034
- */
3035
- name: string;
3036
- /**
3037
- * Description of what's being offered
3038
- */
3039
- description?: string;
3040
- /**
3041
- * Short promotional tagline for the offering
3042
- */
3043
- tagline?: string;
3044
- /**
3045
- * When the offering becomes available. If not specified, offering is immediately available.
3046
- */
3047
- valid_from?: string;
3048
- /**
3049
- * When the offering expires. If not specified, offering has no expiration.
3050
- */
3051
- valid_to?: string;
3052
- /**
3053
- * URL for checkout/purchase flow when the brand doesn't support agentic checkout.
3054
- */
3055
- checkout_url?: string;
3056
- /**
3057
- * Landing page URL for this offering.
3058
- */
3059
- landing_url?: string;
3060
- /**
3061
- * Assets specific to this offering (images, videos, copy)
3062
- */
3063
- assets?: {
3064
- [k: string]: unknown | undefined;
3065
- }[];
3066
- /**
3067
- * Reference to a creative portfolio for this offering. Portfolios contain organized creative assets across formats, enabling consistent ad delivery for this specific offering.
3068
- */
3069
- portfolio_ref?: string;
3070
- /**
3071
- * Keywords for matching this offering to user intent. Hosts use these for retrieval/relevance scoring.
3072
- */
3073
- keywords?: string[];
3074
- /**
3075
- * Categories this offering belongs to (e.g., 'measurement', 'identity', 'programmatic')
3076
- */
3077
- categories?: string[];
3078
- ext?: ExtensionObject;
3079
- [k: string]: unknown | undefined;
3080
- }
3081
- /**
3082
- * 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.
3125
+ * URL reference asset
3083
3126
  */
3084
3127
  export interface URLAsset {
3085
3128
  /**
@@ -3094,17 +3137,7 @@ export interface URLAsset {
3094
3137
  [k: string]: unknown | undefined;
3095
3138
  }
3096
3139
  /**
3097
- * Brand reference for this media buy. Resolved to full brand identity at execution time from brand.json or the registry.
3098
- */
3099
- export interface BrandReference1 {
3100
- /**
3101
- * Domain where /.well-known/brand.json is hosted, or the brand's operating domain
3102
- */
3103
- domain: string;
3104
- brand_id?: BrandID;
3105
- }
3106
- /**
3107
- * Optional webhook configuration for automated reporting delivery
3140
+ * 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.
3108
3141
  */
3109
3142
  export interface ReportingWebhook {
3110
3143
  /**
@@ -3160,6 +3193,10 @@ export interface CreateMediaBuySuccess {
3160
3193
  * Buyer's reference identifier for this media buy
3161
3194
  */
3162
3195
  buyer_ref: string;
3196
+ /**
3197
+ * Buyer's campaign reference label, echoed from the request
3198
+ */
3199
+ campaign_ref?: string;
3163
3200
  account?: Account;
3164
3201
  /**
3165
3202
  * ISO 8601 timestamp for creative upload deadline
@@ -3169,6 +3206,10 @@ export interface CreateMediaBuySuccess {
3169
3206
  * Array of created packages with complete state information
3170
3207
  */
3171
3208
  packages: Package[];
3209
+ /**
3210
+ * When true, this response contains simulated data from sandbox mode.
3211
+ */
3212
+ sandbox?: boolean;
3172
3213
  context?: ContextObject;
3173
3214
  ext?: ExtensionObject;
3174
3215
  }
@@ -3227,6 +3268,10 @@ export interface Account {
3227
3268
  amount: number;
3228
3269
  currency: string;
3229
3270
  };
3271
+ /**
3272
+ * When true, this is a sandbox account. All requests using this account_id are treated as sandbox — no real platform calls, no real spend.
3273
+ */
3274
+ sandbox?: boolean;
3230
3275
  ext?: ExtensionObject;
3231
3276
  [k: string]: unknown | undefined;
3232
3277
  }
@@ -3295,7 +3340,7 @@ export interface CreateMediaBuyError {
3295
3340
  * Standard error structure for task-specific errors and warnings
3296
3341
  */
3297
3342
  /**
3298
- * JavaScript module type
3343
+ * Catalog type. Structural types: 'offering' (AdCP Offering objects), 'product' (ecommerce entries), 'inventory' (stock per location), 'store' (physical locations), 'promotion' (deals and pricing). Vertical types: 'hotel', 'flight', 'job', 'vehicle', 'real_estate', 'education', 'destination', 'app' — each with an industry-specific item schema.
3299
3344
  */
3300
3345
  export type ValidationMode = 'strict' | 'lenient';
3301
3346
  /**
@@ -3442,6 +3487,10 @@ export interface SyncCreativesSuccess {
3442
3487
  [k: string]: string;
3443
3488
  };
3444
3489
  }[];
3490
+ /**
3491
+ * When true, this response contains simulated data from sandbox mode.
3492
+ */
3493
+ sandbox?: boolean;
3445
3494
  context?: ContextObject;
3446
3495
  ext?: ExtensionObject;
3447
3496
  }
@@ -3683,6 +3732,10 @@ export interface ListCreativesResponse {
3683
3732
  * When the creative was last modified
3684
3733
  */
3685
3734
  updated_date: string;
3735
+ /**
3736
+ * Catalogs this creative renders, if any
3737
+ */
3738
+ catalogs?: Catalog[];
3686
3739
  /**
3687
3740
  * Assets for this creative, keyed by asset_role
3688
3741
  */
@@ -3691,7 +3744,7 @@ export interface ListCreativesResponse {
3691
3744
  * This interface was referenced by `undefined`'s JSON-Schema definition
3692
3745
  * via the `patternProperty` "^[a-zA-Z0-9_-]+$".
3693
3746
  */
3694
- [k: string]: ImageAsset | VideoAsset | AudioAsset | TextAsset | HTMLAsset | CSSAsset | JavaScriptAsset | VASTAsset | DAASTAsset | PromotedOfferings | URLAsset;
3747
+ [k: string]: ImageAsset | VideoAsset | AudioAsset | TextAsset | HTMLAsset | CSSAsset | JavaScriptAsset | VASTAsset | DAASTAsset | URLAsset;
3695
3748
  };
3696
3749
  /**
3697
3750
  * User-defined tags for organization and searchability
@@ -3794,6 +3847,10 @@ export interface ListCreativesResponse {
3794
3847
  */
3795
3848
  archived?: number;
3796
3849
  };
3850
+ /**
3851
+ * When true, this response contains simulated data from sandbox mode.
3852
+ */
3853
+ sandbox?: boolean;
3797
3854
  context?: ContextObject;
3798
3855
  ext?: ExtensionObject;
3799
3856
  }
@@ -3861,6 +3918,7 @@ export type PackageUpdate = {
3861
3918
  * Pause/resume specific package (true = paused, false = active)
3862
3919
  */
3863
3920
  paused?: boolean;
3921
+ catalog?: Catalog;
3864
3922
  optimization_goal?: OptimizationGoal;
3865
3923
  targeting_overlay?: TargetingOverlay;
3866
3924
  /**
@@ -3906,6 +3964,10 @@ export interface UpdateMediaBuySuccess {
3906
3964
  * Array of packages that were modified with complete state information
3907
3965
  */
3908
3966
  affected_packages?: Package[];
3967
+ /**
3968
+ * When true, this response contains simulated data from sandbox mode.
3969
+ */
3970
+ sandbox?: boolean;
3909
3971
  context?: ContextObject;
3910
3972
  ext?: ExtensionObject;
3911
3973
  }
@@ -3972,10 +4034,6 @@ export type PricingModel = 'cpm' | 'vcpm' | 'cpc' | 'cpcv' | 'cpv' | 'cpp' | 'cp
3972
4034
  /**
3973
4035
  * The event type
3974
4036
  */
3975
- export type PricingModel1 = 'cpm' | 'vcpm' | 'cpc' | 'cpcv' | 'cpv' | 'cpp' | 'cpa' | 'flat_rate' | 'time';
3976
- /**
3977
- * Response payload for get_media_buy_delivery task
3978
- */
3979
4037
  export interface GetMediaBuyDeliveryResponse {
3980
4038
  /**
3981
4039
  * Type of webhook notification (only present in webhook deliveries): scheduled = regular periodic update, final = campaign completed, delayed = data not yet available, adjusted = resending period with updated data
@@ -4072,6 +4130,10 @@ export interface GetMediaBuyDeliveryResponse {
4072
4130
  * Buyer's reference identifier for this media buy
4073
4131
  */
4074
4132
  buyer_ref?: string;
4133
+ /**
4134
+ * Buyer's campaign reference label. Groups related operations under a single campaign for CRM and ad server correlation.
4135
+ */
4136
+ campaign_ref?: string;
4075
4137
  /**
4076
4138
  * Current media buy status. In webhook context, reporting_delayed indicates data temporarily unavailable.
4077
4139
  */
@@ -4107,7 +4169,7 @@ export interface GetMediaBuyDeliveryResponse {
4107
4169
  * Delivery pace (1.0 = on track, <1.0 = behind, >1.0 = ahead)
4108
4170
  */
4109
4171
  pacing_index?: number;
4110
- pricing_model: PricingModel1;
4172
+ pricing_model: PricingModel;
4111
4173
  /**
4112
4174
  * The pricing rate for this package in the specified currency. For fixed-rate pricing, this is the agreed rate (e.g., CPM rate of 12.50 means $12.50 per 1,000 impressions). For auction-based pricing, this represents the effective rate based on actual delivery.
4113
4175
  */
@@ -4124,6 +4186,16 @@ export interface GetMediaBuyDeliveryResponse {
4124
4186
  * Whether this package is currently paused by the buyer
4125
4187
  */
4126
4188
  paused?: boolean;
4189
+ /**
4190
+ * Delivery by catalog item within this package. Available for catalog-driven packages when the seller supports item-level reporting.
4191
+ */
4192
+ by_catalog_item?: (DeliveryMetrics & {
4193
+ /**
4194
+ * Catalog item identifier (e.g., SKU, GTIN, job_id, offering_id)
4195
+ */
4196
+ content_id: string;
4197
+ content_id_type?: ContentIDType;
4198
+ })[];
4127
4199
  /**
4128
4200
  * Metrics broken down by creative within this package. Available when the seller supports creative-level reporting.
4129
4201
  */
@@ -4176,6 +4248,10 @@ export interface GetMediaBuyDeliveryResponse {
4176
4248
  * Task-specific errors and warnings (e.g., missing delivery data, reporting platform issues)
4177
4249
  */
4178
4250
  errors?: Error[];
4251
+ /**
4252
+ * When true, this response contains simulated data from sandbox mode.
4253
+ */
4254
+ sandbox?: boolean;
4179
4255
  context?: ContextObject;
4180
4256
  ext?: ExtensionObject;
4181
4257
  }
@@ -4479,6 +4555,10 @@ export interface ProvidePerformanceFeedbackSuccess {
4479
4555
  * Whether the performance feedback was successfully received
4480
4556
  */
4481
4557
  success: true;
4558
+ /**
4559
+ * When true, this response contains simulated data from sandbox mode.
4560
+ */
4561
+ sandbox?: boolean;
4482
4562
  context?: ContextObject;
4483
4563
  ext?: ExtensionObject;
4484
4564
  }
@@ -4594,6 +4674,10 @@ export interface SyncEventSourcesSuccess {
4594
4674
  */
4595
4675
  errors?: string[];
4596
4676
  }[];
4677
+ /**
4678
+ * When true, this response contains simulated data from sandbox mode.
4679
+ */
4680
+ sandbox?: boolean;
4597
4681
  context?: ContextObject;
4598
4682
  ext?: ExtensionObject;
4599
4683
  }
@@ -4736,11 +4820,11 @@ export interface EventCustomData {
4736
4820
  */
4737
4821
  order_id?: string;
4738
4822
  /**
4739
- * Product or content identifiers
4823
+ * Item identifiers for catalog attribution. Values are matched against catalog items using the identifier type declared by the catalog's content_id_type field (e.g., SKUs, GTINs, or vertical-specific IDs like job_id).
4740
4824
  */
4741
4825
  content_ids?: string[];
4742
4826
  /**
4743
- * Category of content (product, service, etc.)
4827
+ * Category of content associated with the event (e.g., 'product', 'job', 'hotel'). Corresponds to the catalog type when used for catalog attribution.
4744
4828
  */
4745
4829
  content_type?: string;
4746
4830
  /**
@@ -4828,6 +4912,10 @@ export interface LogEventSuccess {
4828
4912
  * Overall match quality score for the batch (0.0 = no matches, 1.0 = all matched)
4829
4913
  */
4830
4914
  match_quality?: number;
4915
+ /**
4916
+ * When true, this response contains simulated data from sandbox mode.
4917
+ */
4918
+ sandbox?: boolean;
4831
4919
  context?: ContextObject;
4832
4920
  ext?: ExtensionObject;
4833
4921
  }
@@ -4985,6 +5073,10 @@ export interface SyncAudiencesSuccess {
4985
5073
  */
4986
5074
  errors?: Error[];
4987
5075
  }[];
5076
+ /**
5077
+ * When true, this response contains simulated data from sandbox mode.
5078
+ */
5079
+ sandbox?: boolean;
4988
5080
  context?: ContextObject;
4989
5081
  ext?: ExtensionObject;
4990
5082
  }
@@ -5000,7 +5092,148 @@ export interface SyncAudiencesError {
5000
5092
  ext?: ExtensionObject;
5001
5093
  }
5002
5094
  /**
5003
- * VAST (Video Ad Serving Template) tag for third-party video ad serving
5095
+ * Catalog type. Structural types: 'offering' (AdCP Offering objects), 'product' (ecommerce entries), 'inventory' (stock per location), 'store' (physical locations), 'promotion' (deals and pricing). Vertical types: 'hotel', 'flight', 'job', 'vehicle', 'real_estate', 'education', 'destination', 'app' — each with an industry-specific item schema.
5096
+ */
5097
+ export interface SyncCatalogsRequest {
5098
+ /**
5099
+ * Account that owns these catalogs. Required if the agent has multiple accounts and the seller cannot route automatically.
5100
+ */
5101
+ account_id?: string;
5102
+ /**
5103
+ * Array of catalog feeds to sync (create or update). When omitted, the call is discovery-only and returns all existing catalogs on the account without modification.
5104
+ *
5105
+ * @maxItems 50
5106
+ */
5107
+ catalogs?: Catalog[];
5108
+ /**
5109
+ * Optional filter to limit sync scope to specific catalog IDs. When provided, only these catalogs will be created/updated. Other catalogs on the account are unaffected.
5110
+ *
5111
+ * @maxItems 50
5112
+ */
5113
+ catalog_ids?: string[];
5114
+ /**
5115
+ * When true, buyer-managed catalogs on the account not included in this sync will be removed. Does not affect seller-managed catalogs. Do not combine with an omitted catalogs array or all buyer-managed catalogs will be deleted.
5116
+ */
5117
+ delete_missing?: boolean;
5118
+ /**
5119
+ * When true, preview changes without applying them. Returns what would be created/updated/deleted.
5120
+ */
5121
+ dry_run?: boolean;
5122
+ validation_mode?: ValidationMode;
5123
+ push_notification_config?: PushNotificationConfig;
5124
+ context?: ContextObject;
5125
+ ext?: ExtensionObject;
5126
+ }
5127
+ /**
5128
+ * A typed data feed. Catalogs carry the items, locations, stock levels, or pricing that publishers use to render ads. They can be synced to a platform via sync_catalogs (managed lifecycle with approval), provided inline, or fetched from an external URL. The catalog type determines the item schema and can be structural (offering, product, inventory, store, promotion) or vertical-specific (hotel, flight, job, vehicle, real_estate, education, destination, app). Selectors (ids, tags, category, query) filter items regardless of sourcing method.
5129
+ */
5130
+ /**
5131
+ * Response from catalog sync operation. Returns either per-catalog results (best-effort processing) OR operation-level errors (complete failure). Platforms may approve, reject, or flag individual items within each catalog (similar to Google Merchant Center product review).
5132
+ */
5133
+ export type SyncCatalogsResponse = SyncCatalogsSuccess | SyncCatalogsError;
5134
+ /**
5135
+ * Action taken for this catalog
5136
+ */
5137
+ export type CatalogAction = 'created' | 'updated' | 'unchanged' | 'failed' | 'deleted';
5138
+ /**
5139
+ * Item review status
5140
+ */
5141
+ export type CatalogItemStatus = 'approved' | 'pending' | 'rejected' | 'warning';
5142
+ /**
5143
+ * Success response - sync operation processed catalogs (may include per-catalog failures)
5144
+ */
5145
+ export interface SyncCatalogsSuccess {
5146
+ /**
5147
+ * Whether this was a dry run (no actual changes made)
5148
+ */
5149
+ dry_run?: boolean;
5150
+ /**
5151
+ * Results for each catalog processed. Items with action='failed' indicate per-catalog validation/processing failures, not operation-level failures.
5152
+ */
5153
+ catalogs: {
5154
+ /**
5155
+ * Catalog ID from the request
5156
+ */
5157
+ catalog_id: string;
5158
+ action: CatalogAction;
5159
+ /**
5160
+ * Platform-specific ID assigned to the catalog
5161
+ */
5162
+ platform_id?: string;
5163
+ /**
5164
+ * Total number of items in the catalog after sync
5165
+ */
5166
+ item_count?: number;
5167
+ /**
5168
+ * Number of items approved by the platform. Populated when the platform performs item-level review.
5169
+ */
5170
+ items_approved?: number;
5171
+ /**
5172
+ * Number of items pending platform review. Common for product catalogs where items must pass content policy checks.
5173
+ */
5174
+ items_pending?: number;
5175
+ /**
5176
+ * Number of items rejected by the platform. Check item_issues for rejection reasons.
5177
+ */
5178
+ items_rejected?: number;
5179
+ /**
5180
+ * Per-item issues reported by the platform (rejections, warnings). Only present when the platform performs item-level review.
5181
+ */
5182
+ item_issues?: {
5183
+ /**
5184
+ * ID of the catalog item with an issue
5185
+ */
5186
+ item_id: string;
5187
+ status: CatalogItemStatus;
5188
+ /**
5189
+ * Reasons for rejection or warning
5190
+ */
5191
+ reasons?: string[];
5192
+ }[];
5193
+ /**
5194
+ * ISO 8601 timestamp of when the most recent sync was accepted by the platform
5195
+ */
5196
+ last_synced_at?: string;
5197
+ /**
5198
+ * ISO 8601 timestamp of when the platform will next fetch the feed URL. Only present for URL-based catalogs with update_frequency.
5199
+ */
5200
+ next_fetch_at?: string;
5201
+ /**
5202
+ * Field names that were modified (only present when action='updated')
5203
+ */
5204
+ changes?: string[];
5205
+ /**
5206
+ * Validation or processing errors (only present when action='failed')
5207
+ */
5208
+ errors?: string[];
5209
+ /**
5210
+ * Non-fatal warnings about this catalog
5211
+ */
5212
+ warnings?: string[];
5213
+ }[];
5214
+ /**
5215
+ * When true, this response contains simulated data from sandbox mode.
5216
+ */
5217
+ sandbox?: boolean;
5218
+ context?: ContextObject;
5219
+ ext?: ExtensionObject;
5220
+ }
5221
+ /**
5222
+ * 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.
5223
+ */
5224
+ export interface SyncCatalogsError {
5225
+ /**
5226
+ * Operation-level errors that prevented processing any catalogs (e.g., authentication failure, service unavailable, invalid request format)
5227
+ */
5228
+ errors: Error[];
5229
+ context?: ContextObject;
5230
+ ext?: ExtensionObject;
5231
+ }
5232
+ /**
5233
+ * Standard error structure for task-specific errors and warnings
5234
+ */
5235
+ /**
5236
+ * Catalog type. Structural types: 'offering' (AdCP Offering objects), 'product' (ecommerce entries), 'inventory' (stock per location), 'store' (physical locations), 'promotion' (deals and pricing). Vertical types: 'hotel', 'flight', 'job', 'vehicle', 'real_estate', 'education', 'destination', 'app' — each with an industry-specific item schema.
5004
5237
  */
5005
5238
  export type HTTPMethod = 'GET' | 'POST';
5006
5239
  /**
@@ -5016,7 +5249,7 @@ export type WebhookSecurityMethod = 'hmac_sha256' | 'api_key' | 'none';
5016
5249
  */
5017
5250
  export type CreativeBriefReference = CreativeBrief | string;
5018
5251
  /**
5019
- * Request to transform or generate a creative manifest. Takes a source manifest (which may be minimal for pure generation) and produces a target manifest in the specified format. The source manifest should include all assets required by the target format (e.g., promoted_offerings for generative formats).
5252
+ * Request to transform or generate a creative manifest. Takes a source manifest (which may be minimal for pure generation) and produces a target manifest in the specified format.
5020
5253
  */
5021
5254
  export interface BuildCreativeRequest {
5022
5255
  /**
@@ -5024,21 +5257,23 @@ export interface BuildCreativeRequest {
5024
5257
  */
5025
5258
  message?: string;
5026
5259
  creative_manifest?: CreativeManifest;
5027
- target_format_id: FormatID1;
5028
- brand?: BrandReference1;
5260
+ target_format_id: FormatID;
5261
+ brand?: BrandReference;
5029
5262
  creative_brief?: CreativeBriefReference;
5030
5263
  context?: ContextObject;
5031
5264
  ext?: ExtensionObject;
5032
5265
  }
5033
5266
  /**
5034
- * Creative manifest to transform or generate from. For pure generation, this should include the target format_id and any required input assets (e.g., promoted_offerings for generative formats). For transformation (e.g., resizing, reformatting), this is the complete creative to adapt.
5267
+ * Creative manifest to transform or generate from. For pure generation, this should include the target format_id and any required input assets. For transformation (e.g., resizing, reformatting), this is the complete creative to adapt.
5035
5268
  */
5036
5269
  export interface CreativeManifest {
5037
5270
  format_id: FormatID;
5038
5271
  /**
5039
- * Product name or offering being advertised. Maps to promoted_offerings in create_media_buy request to associate creative with the product being promoted.
5272
+ * Catalogs this creative renders. Each entry satisfies one of the format's catalog_requirements, matched by type. Tells the creative what data to display product listings for a carousel, job vacancies for a recruitment ad, store locations for a locator. This is a data reference, not a campaign expansion directive; campaign structure and budget allocation are handled by create_media_buy packages. Each catalog can be inline (with items), a reference to a synced catalog (by catalog_id), or a URL to an external feed.
5273
+ *
5274
+ * @minItems 1
5040
5275
  */
5041
- promoted_offering?: string;
5276
+ catalogs?: [Catalog, ...Catalog[]];
5042
5277
  /**
5043
5278
  * Map of asset IDs to actual asset content. Each key MUST match an asset_id from the format's assets array (e.g., 'banner_image', 'clickthrough_url', 'video_file', 'vast_tag'). The asset_id is the technical identifier used to match assets to format requirements.
5044
5279
  *
@@ -5166,10 +5401,14 @@ export interface ReferenceAsset {
5166
5401
  */
5167
5402
  export type BuildCreativeResponse = BuildCreativeSuccess | BuildCreativeError;
5168
5403
  /**
5169
- * VAST (Video Ad Serving Template) tag for third-party video ad serving
5404
+ * Catalog type. Structural types: 'offering' (AdCP Offering objects), 'product' (ecommerce entries), 'inventory' (stock per location), 'store' (physical locations), 'promotion' (deals and pricing). Vertical types: 'hotel', 'flight', 'job', 'vehicle', 'real_estate', 'education', 'destination', 'app' — each with an industry-specific item schema.
5170
5405
  */
5171
5406
  export interface BuildCreativeSuccess {
5172
5407
  creative_manifest: CreativeManifest;
5408
+ /**
5409
+ * When true, this response contains simulated data from sandbox mode.
5410
+ */
5411
+ sandbox?: boolean;
5173
5412
  context?: ContextObject;
5174
5413
  ext?: ExtensionObject;
5175
5414
  }
@@ -5234,7 +5473,7 @@ export type PreviewCreativeRequest = {
5234
5473
  * @maxItems 50
5235
5474
  */
5236
5475
  requests: {
5237
- format_id?: FormatID2;
5476
+ format_id?: FormatID;
5238
5477
  creative_manifest: CreativeManifest1;
5239
5478
  /**
5240
5479
  * Array of input sets for generating multiple preview variants
@@ -5259,9 +5498,9 @@ export type PreviewCreativeRequest = {
5259
5498
  * Specific template ID for custom format rendering
5260
5499
  */
5261
5500
  template_id?: string;
5262
- output_format?: PreviewOutputFormat1;
5501
+ output_format?: PreviewOutputFormat;
5263
5502
  }[];
5264
- output_format?: PreviewOutputFormat2;
5503
+ output_format?: PreviewOutputFormat;
5265
5504
  context?: ContextObject;
5266
5505
  ext?: ExtensionObject;
5267
5506
  } | {
@@ -5277,35 +5516,25 @@ export type PreviewCreativeRequest = {
5277
5516
  * Creative identifier for context
5278
5517
  */
5279
5518
  creative_id?: string;
5280
- output_format?: PreviewOutputFormat3;
5519
+ output_format?: PreviewOutputFormat;
5281
5520
  context?: ContextObject;
5282
5521
  ext?: ExtensionObject;
5283
5522
  };
5284
5523
  /**
5285
- * VAST (Video Ad Serving Template) tag for third-party video ad serving
5524
+ * Catalog type. Structural types: 'offering' (AdCP Offering objects), 'product' (ecommerce entries), 'inventory' (stock per location), 'store' (physical locations), 'promotion' (deals and pricing). Vertical types: 'hotel', 'flight', 'job', 'vehicle', 'real_estate', 'education', 'destination', 'app' — each with an industry-specific item schema.
5286
5525
  */
5287
5526
  export type PreviewOutputFormat = 'url' | 'html';
5288
5527
  /**
5289
5528
  * Output format for this preview. 'url' returns preview_url, 'html' returns preview_html.
5290
5529
  */
5291
- export type PreviewOutputFormat1 = 'url' | 'html';
5292
- /**
5293
- * Default output format for all requests in this batch. Individual requests can override this. 'url' returns preview_url (iframe-embeddable URL), 'html' returns preview_html (raw HTML for direct embedding).
5294
- */
5295
- export type PreviewOutputFormat2 = 'url' | 'html';
5296
- /**
5297
- * Output format for the preview. 'url' returns preview_url (iframe-embeddable URL), 'html' returns preview_html (raw HTML for direct embedding).
5298
- */
5299
- export type PreviewOutputFormat3 = 'url' | 'html';
5300
- /**
5301
- * Format identifier for rendering the preview. Optional — defaults to creative_manifest.format_id if omitted.
5302
- */
5303
5530
  export interface CreativeManifest1 {
5304
- format_id: FormatID1;
5531
+ format_id: FormatID;
5305
5532
  /**
5306
- * Product name or offering being advertised. Maps to promoted_offerings in create_media_buy request to associate creative with the product being promoted.
5533
+ * Catalogs this creative renders. Each entry satisfies one of the format's catalog_requirements, matched by type. Tells the creative what data to display product listings for a carousel, job vacancies for a recruitment ad, store locations for a locator. This is a data reference, not a campaign expansion directive; campaign structure and budget allocation are handled by create_media_buy packages. Each catalog can be inline (with items), a reference to a synced catalog (by catalog_id), or a URL to an external feed.
5534
+ *
5535
+ * @minItems 1
5307
5536
  */
5308
- promoted_offering?: string;
5537
+ catalogs?: [Catalog, ...Catalog[]];
5309
5538
  /**
5310
5539
  * Map of asset IDs to actual asset content. Each key MUST match an asset_id from the format's assets array (e.g., 'banner_image', 'clickthrough_url', 'video_file', 'vast_tag'). The asset_id is the technical identifier used to match assets to format requirements.
5311
5540
  *
@@ -5468,7 +5697,7 @@ export type PreviewRender = {
5468
5697
  [k: string]: unknown | undefined;
5469
5698
  };
5470
5699
  /**
5471
- * VAST (Video Ad Serving Template) tag for third-party video ad serving
5700
+ * Catalog type. Structural types: 'offering' (AdCP Offering objects), 'product' (ecommerce entries), 'inventory' (stock per location), 'store' (physical locations), 'promotion' (deals and pricing). Vertical types: 'hotel', 'flight', 'job', 'vehicle', 'real_estate', 'education', 'destination', 'app' — each with an industry-specific item schema.
5472
5701
  */
5473
5702
  export interface PreviewCreativeSingleResponse {
5474
5703
  /**
@@ -5635,7 +5864,7 @@ export type GetCreativeDeliveryRequest = {
5635
5864
  /**
5636
5865
  * The event type
5637
5866
  */
5638
- export type CreativeVariant = DeliveryMetrics1 & {
5867
+ export type CreativeVariant = DeliveryMetrics & {
5639
5868
  /**
5640
5869
  * Platform-assigned identifier for this variant
5641
5870
  */
@@ -5664,7 +5893,7 @@ export type CreativeVariant = DeliveryMetrics1 & {
5664
5893
  };
5665
5894
  };
5666
5895
  /**
5667
- * VAST (Video Ad Serving Template) tag for third-party video ad serving
5896
+ * Catalog type. Structural types: 'offering' (AdCP Offering objects), 'product' (ecommerce entries), 'inventory' (stock per location), 'store' (physical locations), 'promotion' (deals and pricing). Vertical types: 'hotel', 'flight', 'job', 'vehicle', 'real_estate', 'education', 'destination', 'app' — each with an industry-specific item schema.
5668
5897
  */
5669
5898
  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';
5670
5899
  /**
@@ -5758,221 +5987,6 @@ export interface GetCreativeDeliveryResponse {
5758
5987
  /**
5759
5988
  * Format of this creative
5760
5989
  */
5761
- export interface DeliveryMetrics1 {
5762
- /**
5763
- * Impressions delivered
5764
- */
5765
- impressions?: number;
5766
- /**
5767
- * Amount spent
5768
- */
5769
- spend?: number;
5770
- /**
5771
- * Total clicks
5772
- */
5773
- clicks?: number;
5774
- /**
5775
- * Click-through rate (clicks/impressions)
5776
- */
5777
- ctr?: number;
5778
- /**
5779
- * Views at threshold (for CPV)
5780
- */
5781
- views?: number;
5782
- /**
5783
- * 100% completions (for CPCV)
5784
- */
5785
- completed_views?: number;
5786
- /**
5787
- * Completion rate (completed_views/impressions)
5788
- */
5789
- completion_rate?: number;
5790
- /**
5791
- * Total conversions attributed to this delivery. When by_event_type is present, this equals the sum of all by_event_type[].count entries.
5792
- */
5793
- conversions?: number;
5794
- /**
5795
- * Total monetary value of attributed conversions (in the reporting currency)
5796
- */
5797
- conversion_value?: number;
5798
- /**
5799
- * Return on ad spend (conversion_value / spend)
5800
- */
5801
- roas?: number;
5802
- /**
5803
- * Cost per conversion (spend / conversions)
5804
- */
5805
- cost_per_acquisition?: number;
5806
- /**
5807
- * Fraction of conversions from first-time brand buyers (0 = none, 1 = all)
5808
- */
5809
- new_to_brand_rate?: number;
5810
- /**
5811
- * Leads generated (convenience alias for by_event_type where event_type='lead')
5812
- */
5813
- leads?: number;
5814
- /**
5815
- * Conversion metrics broken down by event type. Spend-derived metrics (ROAS, CPA) are only available at the package/totals level since spend cannot be attributed to individual event types.
5816
- */
5817
- by_event_type?: {
5818
- event_type: EventType;
5819
- /**
5820
- * Event source that produced these conversions (for disambiguation when multiple event sources are configured)
5821
- */
5822
- event_source_id?: string;
5823
- /**
5824
- * Number of events of this type
5825
- */
5826
- count: number;
5827
- /**
5828
- * Total monetary value of events of this type
5829
- */
5830
- value?: number;
5831
- [k: string]: unknown | undefined;
5832
- }[];
5833
- /**
5834
- * Gross Rating Points delivered (for CPP)
5835
- */
5836
- grps?: number;
5837
- /**
5838
- * Unique reach - units depend on measurement provider (e.g., individuals, households, devices, cookies). See delivery_measurement.provider for methodology.
5839
- */
5840
- reach?: number;
5841
- /**
5842
- * Average frequency per individual (typically measured over campaign duration, but can vary by measurement provider)
5843
- */
5844
- frequency?: number;
5845
- /**
5846
- * Video quartile completion data
5847
- */
5848
- quartile_data?: {
5849
- /**
5850
- * 25% completion views
5851
- */
5852
- q1_views?: number;
5853
- /**
5854
- * 50% completion views
5855
- */
5856
- q2_views?: number;
5857
- /**
5858
- * 75% completion views
5859
- */
5860
- q3_views?: number;
5861
- /**
5862
- * 100% completion views
5863
- */
5864
- q4_views?: number;
5865
- };
5866
- /**
5867
- * DOOH-specific metrics (only included for DOOH campaigns)
5868
- */
5869
- dooh_metrics?: {
5870
- /**
5871
- * Number of times ad played in rotation
5872
- */
5873
- loop_plays?: number;
5874
- /**
5875
- * Number of unique screens displaying the ad
5876
- */
5877
- screens_used?: number;
5878
- /**
5879
- * Total display time in seconds
5880
- */
5881
- screen_time_seconds?: number;
5882
- /**
5883
- * Actual share of voice delivered (0.0 to 1.0)
5884
- */
5885
- sov_achieved?: number;
5886
- /**
5887
- * Explanation of how DOOH impressions were calculated
5888
- */
5889
- calculation_notes?: string;
5890
- /**
5891
- * Per-venue performance breakdown
5892
- */
5893
- venue_breakdown?: {
5894
- /**
5895
- * Venue identifier
5896
- */
5897
- venue_id: string;
5898
- /**
5899
- * Human-readable venue name
5900
- */
5901
- venue_name?: string;
5902
- /**
5903
- * Venue type (e.g., 'airport', 'transit', 'retail', 'billboard')
5904
- */
5905
- venue_type?: string;
5906
- /**
5907
- * Impressions delivered at this venue
5908
- */
5909
- impressions: number;
5910
- /**
5911
- * Loop plays at this venue
5912
- */
5913
- loop_plays?: number;
5914
- /**
5915
- * Number of screens used at this venue
5916
- */
5917
- screens_used?: number;
5918
- [k: string]: unknown | undefined;
5919
- }[];
5920
- [k: string]: unknown | undefined;
5921
- };
5922
- /**
5923
- * Viewability metrics. Viewable rate should be calculated as viewable_impressions / measurable_impressions (not total impressions), since some environments cannot measure viewability.
5924
- */
5925
- viewability?: {
5926
- /**
5927
- * Impressions where viewability could be measured. Excludes environments without measurement capability (e.g., non-Intersection Observer browsers, certain app environments).
5928
- */
5929
- measurable_impressions?: number;
5930
- /**
5931
- * Impressions that met the viewability threshold defined by the measurement standard.
5932
- */
5933
- viewable_impressions?: number;
5934
- /**
5935
- * Viewable impression rate (viewable_impressions / measurable_impressions). Range 0.0 to 1.0.
5936
- */
5937
- viewable_rate?: number;
5938
- /**
5939
- * Viewability measurement standard. 'mrc': 50% of pixels in view for 1 second (display) or 2 seconds (video), per MRC/IAB guidelines. 'groupm': 100% of pixels in view for the same durations. These are materially different thresholds and should not be compared across standards.
5940
- */
5941
- standard?: 'mrc' | 'groupm';
5942
- [k: string]: unknown | undefined;
5943
- };
5944
- /**
5945
- * Platform-specific engagement rate (0.0 to 1.0). Definition varies by platform (e.g., likes+comments+shares/impressions on social, interactions/impressions on rich media).
5946
- */
5947
- engagement_rate?: number;
5948
- /**
5949
- * Cost per click (spend / clicks)
5950
- */
5951
- cost_per_click?: number;
5952
- /**
5953
- * Conversion metrics broken down by action source (website, app, in_store, etc.). Useful for omnichannel sellers where conversions occur across digital and physical channels.
5954
- */
5955
- by_action_source?: {
5956
- action_source: ActionSource;
5957
- /**
5958
- * Event source that produced these conversions (for disambiguation when multiple event sources are configured)
5959
- */
5960
- event_source_id?: string;
5961
- /**
5962
- * Number of conversions from this action source
5963
- */
5964
- count: number;
5965
- /**
5966
- * Total monetary value of conversions from this action source
5967
- */
5968
- value?: number;
5969
- [k: string]: unknown | undefined;
5970
- }[];
5971
- [k: string]: unknown | undefined;
5972
- }
5973
- /**
5974
- * The rendered creative manifest for this variant — the actual output that was served, not the input assets. Contains format_id and the resolved assets (specific headline, image, video, etc. the platform selected or generated). For Tier 2, shows which asset combination was picked. For Tier 3, contains the generated assets which may differ entirely from the input brand identity. Pass to preview_creative to re-render.
5975
- */
5976
5990
  export interface Identifier {
5977
5991
  type: PropertyIdentifierTypes;
5978
5992
  /**
@@ -6128,56 +6142,28 @@ export type Deployment = {
6128
6142
  */
6129
6143
  agent_url: string;
6130
6144
  /**
6131
- * Account identifier if applicable
6132
- */
6133
- account?: string;
6134
- /**
6135
- * Whether signal is currently active on this deployment
6136
- */
6137
- is_live: boolean;
6138
- activation_key?: ActivationKey1;
6139
- /**
6140
- * Estimated time to activate if not live, or to complete activation if in progress
6141
- */
6142
- estimated_activation_duration_minutes?: number;
6143
- /**
6144
- * Timestamp when activation completed (if is_live=true)
6145
- */
6146
- deployed_at?: string;
6147
- [k: string]: unknown | undefined;
6148
- };
6149
- /**
6150
- * The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.
6151
- */
6152
- export type ActivationKey = {
6153
- /**
6154
- * Segment ID based targeting
6155
- */
6156
- type: 'segment_id';
6157
- /**
6158
- * The platform-specific segment identifier to use in campaign targeting
6145
+ * Account identifier if applicable
6159
6146
  */
6160
- segment_id: string;
6161
- [k: string]: unknown | undefined;
6162
- } | {
6147
+ account?: string;
6163
6148
  /**
6164
- * Key-value pair based targeting
6149
+ * Whether signal is currently active on this deployment
6165
6150
  */
6166
- type: 'key_value';
6151
+ is_live: boolean;
6152
+ activation_key?: ActivationKey;
6167
6153
  /**
6168
- * The targeting parameter key
6154
+ * Estimated time to activate if not live, or to complete activation if in progress
6169
6155
  */
6170
- key: string;
6156
+ estimated_activation_duration_minutes?: number;
6171
6157
  /**
6172
- * The targeting parameter value
6158
+ * Timestamp when activation completed (if is_live=true)
6173
6159
  */
6174
- value: string;
6160
+ deployed_at?: string;
6175
6161
  [k: string]: unknown | undefined;
6176
6162
  };
6177
6163
  /**
6178
6164
  * The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.
6179
6165
  */
6180
- export type ActivationKey1 = {
6166
+ export type ActivationKey = {
6181
6167
  /**
6182
6168
  * Segment ID based targeting
6183
6169
  */
@@ -6203,7 +6189,7 @@ export type ActivationKey1 = {
6203
6189
  [k: string]: unknown | undefined;
6204
6190
  };
6205
6191
  /**
6206
- * Response payload for get_signals task
6192
+ * The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.
6207
6193
  */
6208
6194
  export interface GetSignalsResponse {
6209
6195
  /**
@@ -6256,6 +6242,10 @@ export interface GetSignalsResponse {
6256
6242
  */
6257
6243
  errors?: Error[];
6258
6244
  pagination?: PaginationResponse;
6245
+ /**
6246
+ * When true, this response contains simulated data from sandbox mode.
6247
+ */
6248
+ sandbox?: boolean;
6259
6249
  context?: ContextObject;
6260
6250
  ext?: ExtensionObject;
6261
6251
  }
@@ -6292,6 +6282,10 @@ export interface ActivateSignalSuccess {
6292
6282
  * Array of deployment results for each deployment target
6293
6283
  */
6294
6284
  deployments: Deployment[];
6285
+ /**
6286
+ * When true, this response contains simulated data from sandbox mode.
6287
+ */
6288
+ sandbox?: boolean;
6295
6289
  context?: ContextObject;
6296
6290
  ext?: ExtensionObject;
6297
6291
  }
@@ -6761,54 +6755,6 @@ export type AssetAccess = {
6761
6755
  /**
6762
6756
  * Authentication for secured URLs
6763
6757
  */
6764
- export type AssetAccess1 = {
6765
- method: 'bearer_token';
6766
- /**
6767
- * OAuth2 bearer token for Authorization header
6768
- */
6769
- token: string;
6770
- } | {
6771
- method: 'service_account';
6772
- /**
6773
- * Cloud provider
6774
- */
6775
- provider: 'gcp' | 'aws';
6776
- /**
6777
- * Service account credentials
6778
- */
6779
- credentials?: {
6780
- [k: string]: unknown | undefined;
6781
- };
6782
- } | {
6783
- method: 'signed_url';
6784
- };
6785
- /**
6786
- * Authentication for secured URLs
6787
- */
6788
- export type AssetAccess2 = {
6789
- method: 'bearer_token';
6790
- /**
6791
- * OAuth2 bearer token for Authorization header
6792
- */
6793
- token: string;
6794
- } | {
6795
- method: 'service_account';
6796
- /**
6797
- * Cloud provider
6798
- */
6799
- provider: 'gcp' | 'aws';
6800
- /**
6801
- * Service account credentials
6802
- */
6803
- credentials?: {
6804
- [k: string]: unknown | undefined;
6805
- };
6806
- } | {
6807
- method: 'signed_url';
6808
- };
6809
- /**
6810
- * A content standards configuration defining brand safety and suitability policies. Standards are scoped by brand, geography, and channel. Multiple standards can be active simultaneously for different scopes.
6811
- */
6812
6758
  export interface ContentStandards {
6813
6759
  /**
6814
6760
  * Unique identifier for this standards configuration
@@ -6931,7 +6877,7 @@ export interface Artifact {
6931
6877
  * Video URL
6932
6878
  */
6933
6879
  url: string;
6934
- access?: AssetAccess1;
6880
+ access?: AssetAccess;
6935
6881
  /**
6936
6882
  * Video duration in milliseconds
6937
6883
  */
@@ -6954,7 +6900,7 @@ export interface Artifact {
6954
6900
  * Audio URL
6955
6901
  */
6956
6902
  url: string;
6957
- access?: AssetAccess2;
6903
+ access?: AssetAccess;
6958
6904
  /**
6959
6905
  * Audio duration in milliseconds
6960
6906
  */
@@ -7130,7 +7076,7 @@ export interface CreateContentStandardsRequest {
7130
7076
  * BCP 47 language tag for content at this URL
7131
7077
  */
7132
7078
  language?: string;
7133
- } | Artifact1)[];
7079
+ } | Artifact)[];
7134
7080
  };
7135
7081
  context?: ContextObject;
7136
7082
  ext?: ExtensionObject;
@@ -7138,184 +7084,6 @@ export interface CreateContentStandardsRequest {
7138
7084
  /**
7139
7085
  * Full artifact with pre-extracted content (text, images, video, audio)
7140
7086
  */
7141
- export interface Artifact1 {
7142
- property_id: Identifier;
7143
- /**
7144
- * Identifier for this artifact within the property. The property owner defines the scheme (e.g., 'article_12345', 'episode_42_segment_3', 'post_abc123').
7145
- */
7146
- artifact_id: string;
7147
- /**
7148
- * Identifies a specific variant of this artifact. Use for A/B tests, translations, or temporal versions. Examples: 'en', 'es-MX', 'v2', 'headline_test_b'. The combination of artifact_id + variant_id must be unique.
7149
- */
7150
- variant_id?: string;
7151
- format_id?: FormatID;
7152
- /**
7153
- * Optional URL for this artifact (web page, podcast feed, video page). Not all artifacts have URLs (e.g., Instagram content, podcast segments, TV scenes).
7154
- */
7155
- url?: string;
7156
- /**
7157
- * When the artifact was published (ISO 8601 format)
7158
- */
7159
- published_time?: string;
7160
- /**
7161
- * When the artifact was last modified (ISO 8601 format)
7162
- */
7163
- last_update_time?: string;
7164
- /**
7165
- * Artifact assets in document flow order - text blocks, images, video, audio
7166
- */
7167
- assets: ({
7168
- type: 'text';
7169
- /**
7170
- * Role of this text in the document. Use 'title' for the main artifact title, 'description' for summaries.
7171
- */
7172
- role?: 'title' | 'paragraph' | 'heading' | 'caption' | 'quote' | 'list_item' | 'description';
7173
- /**
7174
- * Text content
7175
- */
7176
- content: string;
7177
- /**
7178
- * BCP 47 language tag for this text (e.g., 'en', 'es-MX'). Useful when artifact contains mixed-language content.
7179
- */
7180
- language?: string;
7181
- /**
7182
- * Heading level (1-6), only for role=heading
7183
- */
7184
- heading_level?: number;
7185
- } | {
7186
- type: 'image';
7187
- /**
7188
- * Image URL
7189
- */
7190
- url: string;
7191
- access?: AssetAccess;
7192
- /**
7193
- * Alt text or image description
7194
- */
7195
- alt_text?: string;
7196
- /**
7197
- * Image caption
7198
- */
7199
- caption?: string;
7200
- /**
7201
- * Image width in pixels
7202
- */
7203
- width?: number;
7204
- /**
7205
- * Image height in pixels
7206
- */
7207
- height?: number;
7208
- } | {
7209
- type: 'video';
7210
- /**
7211
- * Video URL
7212
- */
7213
- url: string;
7214
- access?: AssetAccess1;
7215
- /**
7216
- * Video duration in milliseconds
7217
- */
7218
- duration_ms?: number;
7219
- /**
7220
- * Video transcript
7221
- */
7222
- transcript?: string;
7223
- /**
7224
- * How the transcript was generated
7225
- */
7226
- transcript_source?: 'original_script' | 'subtitles' | 'closed_captions' | 'dub' | 'generated';
7227
- /**
7228
- * Video thumbnail URL
7229
- */
7230
- thumbnail_url?: string;
7231
- } | {
7232
- type: 'audio';
7233
- /**
7234
- * Audio URL
7235
- */
7236
- url: string;
7237
- access?: AssetAccess2;
7238
- /**
7239
- * Audio duration in milliseconds
7240
- */
7241
- duration_ms?: number;
7242
- /**
7243
- * Audio transcript
7244
- */
7245
- transcript?: string;
7246
- /**
7247
- * How the transcript was generated
7248
- */
7249
- transcript_source?: 'original_script' | 'closed_captions' | 'generated';
7250
- })[];
7251
- /**
7252
- * Rich metadata extracted from the artifact
7253
- */
7254
- metadata?: {
7255
- /**
7256
- * Canonical URL
7257
- */
7258
- canonical?: string;
7259
- /**
7260
- * Artifact author name
7261
- */
7262
- author?: string;
7263
- /**
7264
- * Artifact keywords
7265
- */
7266
- keywords?: string;
7267
- /**
7268
- * Open Graph protocol metadata
7269
- */
7270
- open_graph?: {
7271
- [k: string]: unknown | undefined;
7272
- };
7273
- /**
7274
- * Twitter Card metadata
7275
- */
7276
- twitter_card?: {
7277
- [k: string]: unknown | undefined;
7278
- };
7279
- /**
7280
- * JSON-LD structured data (schema.org)
7281
- */
7282
- json_ld?: {}[];
7283
- [k: string]: unknown | undefined;
7284
- };
7285
- /**
7286
- * Platform-specific identifiers for this artifact
7287
- */
7288
- identifiers?: {
7289
- /**
7290
- * Apple Podcasts ID
7291
- */
7292
- apple_podcast_id?: string;
7293
- /**
7294
- * Spotify show ID
7295
- */
7296
- spotify_show_id?: string;
7297
- /**
7298
- * Podcast GUID (from RSS feed)
7299
- */
7300
- podcast_guid?: string;
7301
- /**
7302
- * YouTube video ID
7303
- */
7304
- youtube_video_id?: string;
7305
- /**
7306
- * RSS feed URL
7307
- */
7308
- rss_url?: string;
7309
- [k: string]: unknown | undefined;
7310
- };
7311
- [k: string]: unknown | undefined;
7312
- }
7313
- /**
7314
- * 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.
7315
- */
7316
- /**
7317
- * Response payload for creating a content standards configuration
7318
- */
7319
7087
  export type CreateContentStandardsResponse = {
7320
7088
  /**
7321
7089
  * Unique identifier for the created standards configuration
@@ -7417,7 +7185,7 @@ export interface UpdateContentStandardsRequest {
7417
7185
  * BCP 47 language tag for content at this URL
7418
7186
  */
7419
7187
  language?: string;
7420
- } | Artifact1)[];
7188
+ } | Artifact)[];
7421
7189
  };
7422
7190
  context?: ContextObject;
7423
7191
  ext?: ExtensionObject;
@@ -7795,7 +7563,7 @@ export type GetMediaBuyArtifactsResponse = {
7795
7563
  */
7796
7564
  export interface SIGetOfferingRequest {
7797
7565
  /**
7798
- * Offering identifier from promoted offerings to get details for
7566
+ * Offering identifier from the catalog to get details for
7799
7567
  */
7800
7568
  offering_id: string;
7801
7569
  /**
@@ -8441,10 +8209,6 @@ export interface GetAdCPCapabilitiesRequest {
8441
8209
  /**
8442
8210
  * Methods for verifying user age for compliance. Does not include 'inferred' as it is not accepted for regulatory compliance.
8443
8211
  */
8444
- 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';
8445
- /**
8446
- * 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.
8447
- */
8448
8212
  export interface GetAdCPCapabilitiesResponse {
8449
8213
  /**
8450
8214
  * Core AdCP protocol information
@@ -8671,7 +8435,7 @@ export interface GetAdCPCapabilitiesResponse {
8671
8435
  * Attribution windows available from this seller. Single-element arrays indicate fixed windows; multi-element arrays indicate configurable options the buyer can choose from via optimization_goal.attribution_window on packages.
8672
8436
  */
8673
8437
  attribution_windows?: {
8674
- event_type?: EventType1;
8438
+ event_type?: EventType;
8675
8439
  /**
8676
8440
  * Available click-through attribution windows (e.g. ["7d"], ["7d", "14d", "30d"])
8677
8441
  */
@@ -8838,6 +8602,10 @@ export interface ListAccountsRequest {
8838
8602
  */
8839
8603
  status?: 'active' | 'pending_approval' | 'payment_required' | 'suspended' | 'closed';
8840
8604
  pagination?: PaginationRequest;
8605
+ /**
8606
+ * Filter by sandbox status. true returns only sandbox accounts, false returns only production accounts. Omit to return all accounts.
8607
+ */
8608
+ sandbox?: boolean;
8841
8609
  context?: ContextObject;
8842
8610
  ext?: ExtensionObject;
8843
8611
  }
@@ -8889,6 +8657,10 @@ export interface SyncAccountsRequest {
8889
8657
  * Who should be invoiced. brand: seller invoices the brand directly. operator: seller invoices the operator (agency). agent: agent consolidates billing across brands. Omit to accept the seller's default.
8890
8658
  */
8891
8659
  billing?: 'brand' | 'operator' | 'agent';
8660
+ /**
8661
+ * When true, provision this as a sandbox account. No real platform calls or billing. Sandbox accounts are identified by account_id in subsequent requests.
8662
+ */
8663
+ sandbox?: boolean;
8892
8664
  }[];
8893
8665
  /**
8894
8666
  * When true, accounts previously synced by this agent but not included in this request will be deactivated. Scoped to the authenticated agent — does not affect accounts managed by other agents. Use with caution.
@@ -8994,6 +8766,10 @@ export interface SyncAccountsSuccess {
8994
8766
  * Non-fatal warnings about this account
8995
8767
  */
8996
8768
  warnings?: string[];
8769
+ /**
8770
+ * Whether this is a sandbox account, echoed from the request.
8771
+ */
8772
+ sandbox?: boolean;
8997
8773
  }[];
8998
8774
  context?: ContextObject;
8999
8775
  ext?: ExtensionObject;