@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.
@@ -13,18 +13,10 @@ export type MetroAreaSystem = 'nielsen_dma' | 'uk_itl1' | 'uk_itl2' | 'eurostat_
13
13
  /**
14
14
  * Metro area classification system (e.g., 'nielsen_dma', 'uk_itl2')
15
15
  */
16
- export type MetroAreaSystem1 = 'nielsen_dma' | 'uk_itl1' | 'uk_itl2' | 'eurostat_nuts2' | 'custom';
17
- /**
18
- * Postal code system (e.g., 'us_zip', 'gb_outward'). System name encodes country and precision.
19
- */
20
16
  export type PostalCodeSystem = 'us_zip' | 'us_zip_plus_four' | 'gb_outward' | 'gb_full' | 'ca_fsa' | 'ca_full' | 'de_plz' | 'fr_code_postal' | 'au_postcode';
21
17
  /**
22
18
  * Postal code system (e.g., 'us_zip', 'gb_outward'). System name encodes country and precision.
23
19
  */
24
- export type PostalCodeSystem1 = 'us_zip' | 'us_zip_plus_four' | 'gb_outward' | 'gb_full' | 'ca_fsa' | 'ca_full' | 'de_plz' | 'fr_code_postal' | 'au_postcode';
25
- /**
26
- * Days of the week for daypart targeting
27
- */
28
20
  export type DayOfWeek = 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday';
29
21
  /**
30
22
  * Methods for verifying user age for compliance. Does not include 'inferred' as it is not accepted for regulatory compliance.
@@ -50,12 +42,12 @@ export interface MediaBuy {
50
42
  * Buyer's reference identifier for this media buy
51
43
  */
52
44
  buyer_ref?: string;
53
- account?: Account;
54
- status: MediaBuyStatus;
55
45
  /**
56
- * Description of advertiser and what is being promoted
46
+ * Buyer's campaign reference label. Groups related operations under a single campaign for CRM and ad server correlation.
57
47
  */
58
- promoted_offering: string;
48
+ campaign_ref?: string;
49
+ account?: Account;
50
+ status: MediaBuyStatus;
59
51
  /**
60
52
  * Total budget amount
61
53
  */
@@ -133,6 +125,10 @@ export interface Account {
133
125
  amount: number;
134
126
  currency: string;
135
127
  };
128
+ /**
129
+ * When true, this is a sandbox account. All requests using this account_id are treated as sandbox — no real platform calls, no real spend.
130
+ */
131
+ sandbox?: boolean;
136
132
  ext?: ExtensionObject;
137
133
  [k: string]: unknown | undefined;
138
134
  }
@@ -252,7 +248,7 @@ export interface TargetingOverlay {
252
248
  */
253
249
  geo_metros_exclude?: [
254
250
  {
255
- system: MetroAreaSystem1;
251
+ system: MetroAreaSystem;
256
252
  /**
257
253
  * Metro codes to exclude within the system (e.g., ['501', '602'] for Nielsen DMAs)
258
254
  *
@@ -261,7 +257,7 @@ export interface TargetingOverlay {
261
257
  values: [string, ...string[]];
262
258
  },
263
259
  ...{
264
- system: MetroAreaSystem1;
260
+ system: MetroAreaSystem;
265
261
  /**
266
262
  * Metro codes to exclude within the system (e.g., ['501', '602'] for Nielsen DMAs)
267
263
  *
@@ -302,7 +298,7 @@ export interface TargetingOverlay {
302
298
  */
303
299
  geo_postal_areas_exclude?: [
304
300
  {
305
- system: PostalCodeSystem1;
301
+ system: PostalCodeSystem;
306
302
  /**
307
303
  * Postal codes to exclude within the system (e.g., ['10001', '10002'] for us_zip)
308
304
  *
@@ -311,7 +307,7 @@ export interface TargetingOverlay {
311
307
  values: [string, ...string[]];
312
308
  },
313
309
  ...{
314
- system: PostalCodeSystem1;
310
+ system: PostalCodeSystem;
315
311
  /**
316
312
  * Postal codes to exclude within the system (e.g., ['10001', '10002'] for us_zip)
317
313
  *
@@ -373,6 +369,51 @@ export interface TargetingOverlay {
373
369
  * @minItems 1
374
370
  */
375
371
  device_platform?: [DevicePlatform, ...DevicePlatform[]];
372
+ /**
373
+ * 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.
374
+ *
375
+ * @minItems 1
376
+ */
377
+ store_catchments?: [
378
+ {
379
+ /**
380
+ * Synced store-type catalog ID from sync_catalogs.
381
+ */
382
+ catalog_id: string;
383
+ /**
384
+ * Filter to specific stores within the catalog. Omit to target all stores.
385
+ *
386
+ * @minItems 1
387
+ */
388
+ store_ids?: [string, ...string[]];
389
+ /**
390
+ * Catchment zone IDs to target (e.g., 'walk', 'drive'). Omit to target all catchment zones.
391
+ *
392
+ * @minItems 1
393
+ */
394
+ catchment_ids?: [string, ...string[]];
395
+ [k: string]: unknown | undefined;
396
+ },
397
+ ...{
398
+ /**
399
+ * Synced store-type catalog ID from sync_catalogs.
400
+ */
401
+ catalog_id: string;
402
+ /**
403
+ * Filter to specific stores within the catalog. Omit to target all stores.
404
+ *
405
+ * @minItems 1
406
+ */
407
+ store_ids?: [string, ...string[]];
408
+ /**
409
+ * Catchment zone IDs to target (e.g., 'walk', 'drive'). Omit to target all catchment zones.
410
+ *
411
+ * @minItems 1
412
+ */
413
+ catchment_ids?: [string, ...string[]];
414
+ [k: string]: unknown | undefined;
415
+ }[]
416
+ ];
376
417
  /**
377
418
  * Restrict to users with specific language preferences. ISO 639-1 codes (e.g., 'en', 'es', 'fr').
378
419
  *
@@ -510,6 +551,22 @@ export interface OptimizationGoal {
510
551
  };
511
552
  [k: string]: unknown | undefined;
512
553
  }
554
+ /**
555
+ * 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.
556
+ */
557
+ export type CatalogType = 'offering' | 'product' | 'inventory' | 'store' | 'promotion' | 'hotel' | 'flight' | 'job' | 'vehicle' | 'real_estate' | 'education' | 'destination' | 'app';
558
+ /**
559
+ * 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.
560
+ */
561
+ export type FeedFormat = 'google_merchant_center' | 'facebook_catalog' | 'shopify' | 'linkedin_jobs' | 'custom';
562
+ /**
563
+ * 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.
564
+ */
565
+ export type UpdateFrequency = 'realtime' | 'hourly' | 'daily' | 'weekly';
566
+ /**
567
+ * Standard marketing event types for event logging, aligned with IAB ECAPI
568
+ */
569
+ 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';
513
570
  /**
514
571
  * JavaScript module type
515
572
  */
@@ -557,7 +614,7 @@ export type VASTAsset = {
557
614
  * Inline VAST XML content
558
615
  */
559
616
  content: string;
560
- vast_version?: VASTVersion1;
617
+ vast_version?: VASTVersion;
561
618
  /**
562
619
  * Whether VPAID (Video Player-Ad Interface Definition) is supported
563
620
  */
@@ -591,10 +648,6 @@ export type VASTTrackingEvent = 'start' | 'firstQuartile' | 'midpoint' | 'thirdQ
591
648
  /**
592
649
  * VAST specification version
593
650
  */
594
- export type VASTVersion1 = '2.0' | '3.0' | '4.0' | '4.1' | '4.2';
595
- /**
596
- * DAAST (Digital Audio Ad Serving Template) tag for third-party audio ad serving
597
- */
598
651
  export type DAASTAsset = {
599
652
  /**
600
653
  * Discriminator indicating DAAST is delivered via URL endpoint
@@ -631,7 +684,7 @@ export type DAASTAsset = {
631
684
  * Inline DAAST XML content
632
685
  */
633
686
  content: string;
634
- daast_version?: DAASTVersion1;
687
+ daast_version?: DAASTVersion;
635
688
  /**
636
689
  * Expected audio duration in milliseconds (if known)
637
690
  */
@@ -661,14 +714,6 @@ export type DAASTTrackingEvent = 'start' | 'firstQuartile' | 'midpoint' | 'third
661
714
  /**
662
715
  * DAAST specification version
663
716
  */
664
- export type DAASTVersion1 = '1.0' | '1.1';
665
- /**
666
- * Brand identifier within the house portfolio. Optional for single-brand domains.
667
- */
668
- export type BrandID = string;
669
- /**
670
- * Type of URL asset: 'clickthrough' for user click destination (landing page), 'tracker_pixel' for impression/event tracking via HTTP request (fires GET, expects pixel/204 response), 'tracker_script' for measurement SDKs that must load as <script> tag (OMID verification, native event trackers using method:2)
671
- */
672
717
  export type URLAssetType = 'clickthrough' | 'tracker_pixel' | 'tracker_script';
673
718
  /**
674
719
  * 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).
@@ -687,6 +732,10 @@ export interface CreativeAsset {
687
732
  */
688
733
  name: string;
689
734
  format_id: FormatID;
735
+ /**
736
+ * 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.
737
+ */
738
+ catalogs?: Catalog[];
690
739
  /**
691
740
  * Assets required by the format, keyed by asset_role
692
741
  */
@@ -695,7 +744,7 @@ export interface CreativeAsset {
695
744
  * This interface was referenced by `undefined`'s JSON-Schema definition
696
745
  * via the `patternProperty` "^[a-zA-Z0-9_-]+$".
697
746
  */
698
- [k: string]: ImageAsset | VideoAsset | AudioAsset | TextAsset | HTMLAsset | CSSAsset | JavaScriptAsset | VASTAsset | DAASTAsset | PromotedOfferings | URLAsset;
747
+ [k: string]: ImageAsset | VideoAsset | AudioAsset | TextAsset | HTMLAsset | CSSAsset | JavaScriptAsset | VASTAsset | DAASTAsset | URLAsset;
699
748
  };
700
749
  /**
701
750
  * Preview contexts for generative formats - defines what scenarios to generate previews for
@@ -733,6 +782,66 @@ export interface CreativeAsset {
733
782
  /**
734
783
  * Format identifier specifying which format this creative conforms to. Can be: (1) concrete format_id referencing a format with fixed dimensions, (2) template format_id referencing a template format, or (3) parameterized format_id with dimensions/duration parameters for template formats.
735
784
  */
785
+ export interface Catalog {
786
+ /**
787
+ * Buyer's identifier for this catalog. Required when syncing via sync_catalogs. When used in creatives, references a previously synced catalog on the account.
788
+ */
789
+ catalog_id?: string;
790
+ /**
791
+ * Human-readable name for this catalog (e.g., 'Summer Products 2025', 'Amsterdam Store Locations').
792
+ */
793
+ name?: string;
794
+ type: CatalogType;
795
+ /**
796
+ * 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.
797
+ */
798
+ url?: string;
799
+ feed_format?: FeedFormat;
800
+ update_frequency?: UpdateFrequency;
801
+ /**
802
+ * 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.
803
+ *
804
+ * @minItems 1
805
+ */
806
+ items?: [{}, ...{}[]];
807
+ /**
808
+ * Filter catalog to specific item IDs. For offering-type catalogs, these are offering_id values. For product-type catalogs, these are SKU identifiers.
809
+ *
810
+ * @minItems 1
811
+ */
812
+ ids?: [string, ...string[]];
813
+ /**
814
+ * 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'.
815
+ *
816
+ * @minItems 1
817
+ */
818
+ gtins?: [string, ...string[]];
819
+ /**
820
+ * Filter catalog to items with these tags. Tags are matched using OR logic — items matching any tag are included.
821
+ *
822
+ * @minItems 1
823
+ */
824
+ tags?: [string, ...string[]];
825
+ /**
826
+ * Filter catalog to items in this category (e.g., 'beverages/soft-drinks', 'chef-positions').
827
+ */
828
+ category?: string;
829
+ /**
830
+ * Natural language filter for catalog items (e.g., 'all pasta sauces under $5', 'amsterdam vacancies').
831
+ */
832
+ query?: string;
833
+ /**
834
+ * 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.
835
+ *
836
+ * @minItems 1
837
+ */
838
+ conversion_events?: [EventType, ...EventType[]];
839
+ content_id_type?: ContentIDType;
840
+ [k: string]: unknown | undefined;
841
+ }
842
+ /**
843
+ * Image asset with URL and dimensions
844
+ */
736
845
  export interface ImageAsset {
737
846
  /**
738
847
  * URL to the image asset
@@ -1028,134 +1137,7 @@ export interface JavaScriptAsset {
1028
1137
  [k: string]: unknown | undefined;
1029
1138
  }
1030
1139
  /**
1031
- * 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.
1032
- */
1033
- export interface PromotedOfferings {
1034
- brand: BrandReference;
1035
- /**
1036
- * 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.
1037
- */
1038
- si_agent_url?: string;
1039
- product_selectors?: PromotedProducts;
1040
- /**
1041
- * 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.
1042
- */
1043
- offerings?: Offering[];
1044
- /**
1045
- * Selectors to choose specific assets from the brand's asset library
1046
- */
1047
- asset_selectors?: {
1048
- /**
1049
- * Select assets with specific tags (e.g., ['holiday', 'premium'])
1050
- */
1051
- tags?: string[];
1052
- /**
1053
- * Filter by asset type (e.g., ['image', 'video'])
1054
- */
1055
- asset_types?: ('image' | 'video' | 'audio' | 'vast' | 'daast' | 'text' | 'url' | 'html' | 'css' | 'javascript' | 'webhook')[];
1056
- /**
1057
- * Exclude assets with these tags
1058
- */
1059
- exclude_tags?: string[];
1060
- [k: string]: unknown | undefined;
1061
- };
1062
- [k: string]: unknown | undefined;
1063
- }
1064
- /**
1065
- * Brand reference. Resolved to full brand identity (logos, colors, tone, assets) at execution time for creative generation.
1066
- */
1067
- export interface BrandReference {
1068
- /**
1069
- * Domain where /.well-known/brand.json is hosted, or the brand's operating domain
1070
- */
1071
- domain: string;
1072
- brand_id?: BrandID;
1073
- }
1074
- /**
1075
- * Selectors to choose which products/offerings from the brand's product catalog to promote
1076
- */
1077
- export interface PromotedProducts {
1078
- /**
1079
- * GTIN product identifiers for cross-retailer catalog matching. Accepts standard GTIN formats (GTIN-8, UPC-A/GTIN-12, EAN-13/GTIN-13, GTIN-14).
1080
- */
1081
- manifest_gtins?: string[];
1082
- /**
1083
- * Direct product SKU references from the brand's product catalog
1084
- */
1085
- manifest_skus?: string[];
1086
- /**
1087
- * Select products by tags from the brand's product catalog (e.g., 'organic', 'sauces', 'holiday')
1088
- */
1089
- manifest_tags?: string[];
1090
- /**
1091
- * Select products from a specific category in the brand's product catalog (e.g., 'beverages/soft-drinks', 'food/sauces')
1092
- */
1093
- manifest_category?: string;
1094
- /**
1095
- * Natural language query to select products from the brand's catalog (e.g., 'all pasta sauces', 'organic products under $20')
1096
- */
1097
- manifest_query?: string;
1098
- [k: string]: unknown | undefined;
1099
- }
1100
- /**
1101
- * A promotable offering from a brand. Can represent a campaign, product promotion, service, or any other thing the brand wants to make available. Offerings can be promoted via traditional creatives (using portfolio_ref or assets) or conversational SI experiences (via si_agent_url at the promoted-offerings level).
1102
- */
1103
- export interface Offering {
1104
- /**
1105
- * Unique identifier for this offering. Used by hosts to reference specific offerings in si_get_offering calls.
1106
- */
1107
- offering_id: string;
1108
- /**
1109
- * Human-readable offering name (e.g., 'Winter Sale', 'Free Trial', 'Enterprise Platform')
1110
- */
1111
- name: string;
1112
- /**
1113
- * Description of what's being offered
1114
- */
1115
- description?: string;
1116
- /**
1117
- * Short promotional tagline for the offering
1118
- */
1119
- tagline?: string;
1120
- /**
1121
- * When the offering becomes available. If not specified, offering is immediately available.
1122
- */
1123
- valid_from?: string;
1124
- /**
1125
- * When the offering expires. If not specified, offering has no expiration.
1126
- */
1127
- valid_to?: string;
1128
- /**
1129
- * URL for checkout/purchase flow when the brand doesn't support agentic checkout.
1130
- */
1131
- checkout_url?: string;
1132
- /**
1133
- * Landing page URL for this offering.
1134
- */
1135
- landing_url?: string;
1136
- /**
1137
- * Assets specific to this offering (images, videos, copy)
1138
- */
1139
- assets?: {
1140
- [k: string]: unknown | undefined;
1141
- }[];
1142
- /**
1143
- * Reference to a creative portfolio for this offering. Portfolios contain organized creative assets across formats, enabling consistent ad delivery for this specific offering.
1144
- */
1145
- portfolio_ref?: string;
1146
- /**
1147
- * Keywords for matching this offering to user intent. Hosts use these for retrieval/relevance scoring.
1148
- */
1149
- keywords?: string[];
1150
- /**
1151
- * Categories this offering belongs to (e.g., 'measurement', 'identity', 'programmatic')
1152
- */
1153
- categories?: string[];
1154
- ext?: ExtensionObject;
1155
- [k: string]: unknown | undefined;
1156
- }
1157
- /**
1158
- * 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.
1140
+ * URL reference asset
1159
1141
  */
1160
1142
  export interface URLAsset {
1161
1143
  /**
@@ -1250,10 +1232,6 @@ export type ForecastMethod = 'estimate' | 'modeled' | 'guaranteed';
1250
1232
  /**
1251
1233
  * Measurement system for the demographic field. Ensures buyer and seller agree on demographic notation.
1252
1234
  */
1253
- export type DemographicSystem1 = 'nielsen' | 'barb' | 'agf' | 'oztam' | 'mediametrie' | 'custom';
1254
- /**
1255
- * Unit of measurement for reach and audience_size metrics in this forecast. Required for cross-channel forecast comparison.
1256
- */
1257
1235
  export type ReachUnit = 'individuals' | 'households' | 'devices' | 'accounts' | 'cookies' | 'custom';
1258
1236
  /**
1259
1237
  * Available frequencies for delivery reports and metrics updates
@@ -1318,7 +1296,7 @@ export type DataProviderSignalSelector = {
1318
1296
  [k: string]: unknown | undefined;
1319
1297
  };
1320
1298
  /**
1321
- * Where the conversion event originated
1299
+ * 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.
1322
1300
  */
1323
1301
  export type ActionSource = 'website' | 'app' | 'offline' | 'phone_call' | 'chat' | 'email' | 'in_store' | 'system_generated' | 'other';
1324
1302
  /**
@@ -1391,6 +1369,10 @@ export interface Product {
1391
1369
  * 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.
1392
1370
  */
1393
1371
  signal_targeting_allowed?: boolean;
1372
+ /**
1373
+ * 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.
1374
+ */
1375
+ catalog_types?: CatalogType[];
1394
1376
  /**
1395
1377
  * 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.
1396
1378
  */
@@ -1409,19 +1391,23 @@ export interface Product {
1409
1391
  platform_managed?: boolean;
1410
1392
  };
1411
1393
  /**
1412
- * 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.
1394
+ * 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).
1413
1395
  */
1414
1396
  catalog_match?: {
1415
1397
  /**
1416
- * 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).
1398
+ * 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.
1417
1399
  */
1418
1400
  matched_gtins?: string[];
1419
1401
  /**
1420
- * 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.
1402
+ * 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).
1403
+ */
1404
+ matched_ids?: string[];
1405
+ /**
1406
+ * Number of catalog items that matched this product's inventory.
1421
1407
  */
1422
- matched_skus?: string[];
1408
+ matched_count?: number;
1423
1409
  /**
1424
- * Total catalog items evaluated from the buyer's feed.
1410
+ * Total catalog items evaluated from the buyer's catalog.
1425
1411
  */
1426
1412
  submitted_count: number;
1427
1413
  };
@@ -1437,7 +1423,7 @@ export interface Product {
1437
1423
  * Optional standard visual card (300x400px) for displaying this product in user interfaces. Can be rendered via preview_creative or pre-generated.
1438
1424
  */
1439
1425
  product_card?: {
1440
- format_id: FormatID1;
1426
+ format_id: FormatID;
1441
1427
  /**
1442
1428
  * Asset manifest for rendering the card, structure defined by the format
1443
1429
  */
@@ -1447,7 +1433,7 @@ export interface Product {
1447
1433
  * Optional detailed card with carousel and full specifications. Provides rich product presentation similar to media kit pages.
1448
1434
  */
1449
1435
  product_card_detailed?: {
1450
- format_id: FormatID2;
1436
+ format_id: FormatID;
1451
1437
  /**
1452
1438
  * Asset manifest for rendering the detailed card, structure defined by the format
1453
1439
  */
@@ -1556,7 +1542,7 @@ export interface VCPMPricingOption {
1556
1542
  * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
1557
1543
  */
1558
1544
  floor_price?: number;
1559
- price_guidance?: PriceGuidance1;
1545
+ price_guidance?: PriceGuidance;
1560
1546
  /**
1561
1547
  * Minimum spend requirement per package using this pricing option, in the specified currency
1562
1548
  */
@@ -1566,28 +1552,6 @@ export interface VCPMPricingOption {
1566
1552
  /**
1567
1553
  * Optional pricing guidance for auction-based bidding
1568
1554
  */
1569
- export interface PriceGuidance1 {
1570
- /**
1571
- * 25th percentile of recent winning bids
1572
- */
1573
- p25?: number;
1574
- /**
1575
- * Median of recent winning bids
1576
- */
1577
- p50?: number;
1578
- /**
1579
- * 75th percentile of recent winning bids
1580
- */
1581
- p75?: number;
1582
- /**
1583
- * 90th percentile of recent winning bids
1584
- */
1585
- p90?: number;
1586
- [k: string]: unknown | undefined;
1587
- }
1588
- /**
1589
- * Cost Per Click pricing. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
1590
- */
1591
1555
  export interface CPCPricingOption {
1592
1556
  /**
1593
1557
  * Unique identifier for this pricing option within the product
@@ -1609,7 +1573,7 @@ export interface CPCPricingOption {
1609
1573
  * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
1610
1574
  */
1611
1575
  floor_price?: number;
1612
- price_guidance?: PriceGuidance2;
1576
+ price_guidance?: PriceGuidance;
1613
1577
  /**
1614
1578
  * Minimum spend requirement per package using this pricing option, in the specified currency
1615
1579
  */
@@ -1619,28 +1583,6 @@ export interface CPCPricingOption {
1619
1583
  /**
1620
1584
  * Optional pricing guidance for auction-based bidding
1621
1585
  */
1622
- export interface PriceGuidance2 {
1623
- /**
1624
- * 25th percentile of recent winning bids
1625
- */
1626
- p25?: number;
1627
- /**
1628
- * Median of recent winning bids
1629
- */
1630
- p50?: number;
1631
- /**
1632
- * 75th percentile of recent winning bids
1633
- */
1634
- p75?: number;
1635
- /**
1636
- * 90th percentile of recent winning bids
1637
- */
1638
- p90?: number;
1639
- [k: string]: unknown | undefined;
1640
- }
1641
- /**
1642
- * Cost Per Completed View (100% video/audio completion) pricing. If fixed_price is present, it's fixed pricing. If absent, it's auction-based.
1643
- */
1644
1586
  export interface CPCVPricingOption {
1645
1587
  /**
1646
1588
  * Unique identifier for this pricing option within the product
@@ -1662,7 +1604,7 @@ export interface CPCVPricingOption {
1662
1604
  * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
1663
1605
  */
1664
1606
  floor_price?: number;
1665
- price_guidance?: PriceGuidance3;
1607
+ price_guidance?: PriceGuidance;
1666
1608
  /**
1667
1609
  * Minimum spend requirement per package using this pricing option, in the specified currency
1668
1610
  */
@@ -1672,28 +1614,6 @@ export interface CPCVPricingOption {
1672
1614
  /**
1673
1615
  * Optional pricing guidance for auction-based bidding
1674
1616
  */
1675
- export interface PriceGuidance3 {
1676
- /**
1677
- * 25th percentile of recent winning bids
1678
- */
1679
- p25?: number;
1680
- /**
1681
- * Median of recent winning bids
1682
- */
1683
- p50?: number;
1684
- /**
1685
- * 75th percentile of recent winning bids
1686
- */
1687
- p75?: number;
1688
- /**
1689
- * 90th percentile of recent winning bids
1690
- */
1691
- p90?: number;
1692
- [k: string]: unknown | undefined;
1693
- }
1694
- /**
1695
- * 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.
1696
- */
1697
1617
  export interface CPVPricingOption {
1698
1618
  /**
1699
1619
  * Unique identifier for this pricing option within the product
@@ -1715,7 +1635,7 @@ export interface CPVPricingOption {
1715
1635
  * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
1716
1636
  */
1717
1637
  floor_price?: number;
1718
- price_guidance?: PriceGuidance4;
1638
+ price_guidance?: PriceGuidance;
1719
1639
  /**
1720
1640
  * CPV-specific parameters defining the view threshold
1721
1641
  */
@@ -1738,50 +1658,28 @@ export interface CPVPricingOption {
1738
1658
  /**
1739
1659
  * Optional pricing guidance for auction-based bidding
1740
1660
  */
1741
- export interface PriceGuidance4 {
1661
+ export interface CPPPricingOption {
1742
1662
  /**
1743
- * 25th percentile of recent winning bids
1663
+ * Unique identifier for this pricing option within the product
1744
1664
  */
1745
- p25?: number;
1665
+ pricing_option_id: string;
1746
1666
  /**
1747
- * Median of recent winning bids
1667
+ * Cost per Gross Rating Point
1748
1668
  */
1749
- p50?: number;
1669
+ pricing_model: 'cpp';
1750
1670
  /**
1751
- * 75th percentile of recent winning bids
1671
+ * ISO 4217 currency code
1752
1672
  */
1753
- p75?: number;
1673
+ currency: string;
1754
1674
  /**
1755
- * 90th percentile of recent winning bids
1756
- */
1757
- p90?: number;
1758
- [k: string]: unknown | undefined;
1759
- }
1760
- /**
1761
- * 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.
1762
- */
1763
- export interface CPPPricingOption {
1764
- /**
1765
- * Unique identifier for this pricing option within the product
1766
- */
1767
- pricing_option_id: string;
1768
- /**
1769
- * Cost per Gross Rating Point
1770
- */
1771
- pricing_model: 'cpp';
1772
- /**
1773
- * ISO 4217 currency code
1774
- */
1775
- currency: string;
1776
- /**
1777
- * Fixed price per rating point. If present, this is fixed pricing. If absent, auction-based.
1675
+ * Fixed price per rating point. If present, this is fixed pricing. If absent, auction-based.
1778
1676
  */
1779
1677
  fixed_price?: number;
1780
1678
  /**
1781
1679
  * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
1782
1680
  */
1783
1681
  floor_price?: number;
1784
- price_guidance?: PriceGuidance5;
1682
+ price_guidance?: PriceGuidance;
1785
1683
  /**
1786
1684
  * CPP-specific parameters for demographic targeting
1787
1685
  */
@@ -1806,28 +1704,6 @@ export interface CPPPricingOption {
1806
1704
  /**
1807
1705
  * Optional pricing guidance for auction-based bidding
1808
1706
  */
1809
- export interface PriceGuidance5 {
1810
- /**
1811
- * 25th percentile of recent winning bids
1812
- */
1813
- p25?: number;
1814
- /**
1815
- * Median of recent winning bids
1816
- */
1817
- p50?: number;
1818
- /**
1819
- * 75th percentile of recent winning bids
1820
- */
1821
- p75?: number;
1822
- /**
1823
- * 90th percentile of recent winning bids
1824
- */
1825
- p90?: number;
1826
- [k: string]: unknown | undefined;
1827
- }
1828
- /**
1829
- * 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).
1830
- */
1831
1707
  export interface CPAPricingOption {
1832
1708
  /**
1833
1709
  * Unique identifier for this pricing option within the product
@@ -1887,7 +1763,7 @@ export interface FlatRatePricingOption {
1887
1763
  * Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
1888
1764
  */
1889
1765
  floor_price?: number;
1890
- price_guidance?: PriceGuidance6;
1766
+ price_guidance?: PriceGuidance;
1891
1767
  /**
1892
1768
  * Flat rate parameters for DOOH and time-based campaigns
1893
1769
  */
@@ -1931,28 +1807,6 @@ export interface FlatRatePricingOption {
1931
1807
  /**
1932
1808
  * Optional pricing guidance for auction-based bidding
1933
1809
  */
1934
- export interface PriceGuidance6 {
1935
- /**
1936
- * 25th percentile of recent winning bids
1937
- */
1938
- p25?: number;
1939
- /**
1940
- * Median of recent winning bids
1941
- */
1942
- p50?: number;
1943
- /**
1944
- * 75th percentile of recent winning bids
1945
- */
1946
- p75?: number;
1947
- /**
1948
- * 90th percentile of recent winning bids
1949
- */
1950
- p90?: number;
1951
- [k: string]: unknown | undefined;
1952
- }
1953
- /**
1954
- * 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.
1955
- */
1956
1810
  export interface TimeBasedPricingOption {
1957
1811
  /**
1958
1812
  * Unique identifier for this pricing option within the product
@@ -1974,7 +1828,7 @@ export interface TimeBasedPricingOption {
1974
1828
  * Minimum acceptable bid per time unit for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.
1975
1829
  */
1976
1830
  floor_price?: number;
1977
- price_guidance?: PriceGuidance7;
1831
+ price_guidance?: PriceGuidance;
1978
1832
  /**
1979
1833
  * Time-based pricing parameters
1980
1834
  */
@@ -2002,28 +1856,6 @@ export interface TimeBasedPricingOption {
2002
1856
  /**
2003
1857
  * Optional pricing guidance for auction-based bidding
2004
1858
  */
2005
- export interface PriceGuidance7 {
2006
- /**
2007
- * 25th percentile of recent winning bids
2008
- */
2009
- p25?: number;
2010
- /**
2011
- * Median of recent winning bids
2012
- */
2013
- p50?: number;
2014
- /**
2015
- * 75th percentile of recent winning bids
2016
- */
2017
- p75?: number;
2018
- /**
2019
- * 90th percentile of recent winning bids
2020
- */
2021
- p90?: number;
2022
- [k: string]: unknown | undefined;
2023
- }
2024
- /**
2025
- * Forecasted delivery metrics for this product. Gives buyers an estimate of expected performance before requesting a proposal.
2026
- */
2027
1859
  export interface DeliveryForecast {
2028
1860
  /**
2029
1861
  * 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.
@@ -2037,7 +1869,7 @@ export interface DeliveryForecast {
2037
1869
  * ISO 4217 currency code for monetary values in this forecast (spend, budget)
2038
1870
  */
2039
1871
  currency: string;
2040
- demographic_system?: DemographicSystem1;
1872
+ demographic_system?: DemographicSystem;
2041
1873
  /**
2042
1874
  * 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.
2043
1875
  */
@@ -2161,61 +1993,6 @@ export interface CreativePolicy {
2161
1993
  /**
2162
1994
  * 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.
2163
1995
  */
2164
- export interface FormatID1 {
2165
- /**
2166
- * 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)
2167
- */
2168
- agent_url: string;
2169
- /**
2170
- * 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.
2171
- */
2172
- id: string;
2173
- /**
2174
- * 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.
2175
- */
2176
- width?: number;
2177
- /**
2178
- * 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.
2179
- */
2180
- height?: number;
2181
- /**
2182
- * Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters.
2183
- */
2184
- duration_ms?: number;
2185
- [k: string]: unknown | undefined;
2186
- }
2187
- /**
2188
- * 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.
2189
- */
2190
- export interface FormatID2 {
2191
- /**
2192
- * 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)
2193
- */
2194
- agent_url: string;
2195
- /**
2196
- * 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.
2197
- */
2198
- id: string;
2199
- /**
2200
- * 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.
2201
- */
2202
- width?: number;
2203
- /**
2204
- * 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.
2205
- */
2206
- height?: number;
2207
- /**
2208
- * Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters.
2209
- */
2210
- duration_ms?: number;
2211
- [k: string]: unknown | undefined;
2212
- }
2213
- /**
2214
- * Metro area classification system (e.g., 'nielsen_dma', 'uk_itl2')
2215
- */
2216
- /**
2217
- * Unique identifier for this property (optional). Enables referencing properties by ID instead of repeating full objects.
2218
- */
2219
1996
  export type PropertyType = 'website' | 'mobile_app' | 'ctv_app' | 'desktop_app' | 'dooh' | 'podcast' | 'radio' | 'streaming_audio';
2220
1997
  /**
2221
1998
  * Type of identifier for this property
@@ -2257,7 +2034,7 @@ export interface Property {
2257
2034
  /**
2258
2035
  * Type of AdCP operation that triggered this webhook. Enables webhook handlers to route to appropriate processing logic.
2259
2036
  */
2260
- export type TaskType = 'create_media_buy' | 'update_media_buy' | 'sync_creatives' | 'activate_signal' | 'get_signals' | 'create_property_list' | 'update_property_list' | 'get_property_list' | 'list_property_lists' | 'delete_property_list' | 'sync_accounts' | 'get_creative_delivery' | 'sync_event_sources' | 'sync_audiences' | 'log_event';
2037
+ export type TaskType = 'create_media_buy' | 'update_media_buy' | 'sync_creatives' | 'activate_signal' | 'get_signals' | 'create_property_list' | 'update_property_list' | 'get_property_list' | 'list_property_lists' | 'delete_property_list' | 'sync_accounts' | 'get_creative_delivery' | 'sync_event_sources' | 'sync_audiences' | 'sync_catalogs' | 'log_event';
2261
2038
  /**
2262
2039
  * AdCP domain this task belongs to. Helps classify the operation type at a high level.
2263
2040
  */
@@ -2269,7 +2046,7 @@ export type TaskStatus = 'submitted' | 'working' | 'input-required' | 'completed
2269
2046
  /**
2270
2047
  * Task-specific payload matching the status. For completed/failed, contains the full task response. For working/input-required/submitted, contains status-specific data. This is the data layer that AdCP specs - same structure used in A2A status.message.parts[].data.
2271
2048
  */
2272
- export type AdCPAsyncResponseData = GetProductsResponse | GetProductsAsyncWorking | GetProductsAsyncInputRequired | GetProductsAsyncSubmitted | CreateMediaBuyResponse | CreateMediaBuyAsyncWorking | CreateMediaBuyAsyncInputRequired | CreateMediaBuyAsyncSubmitted | UpdateMediaBuyResponse | UpdateMediaBuyAsyncWorking | UpdateMediaBuyAsyncInputRequired | UpdateMediaBuyAsyncSubmitted | SyncCreativesResponse | SyncCreativesAsyncWorking | SyncCreativesAsyncInputRequired | SyncCreativesAsyncSubmitted;
2049
+ export type AdCPAsyncResponseData = GetProductsResponse | GetProductsAsyncWorking | GetProductsAsyncInputRequired | GetProductsAsyncSubmitted | CreateMediaBuyResponse | CreateMediaBuyAsyncWorking | CreateMediaBuyAsyncInputRequired | CreateMediaBuyAsyncSubmitted | UpdateMediaBuyResponse | UpdateMediaBuyAsyncWorking | UpdateMediaBuyAsyncInputRequired | UpdateMediaBuyAsyncSubmitted | SyncCreativesResponse | SyncCreativesAsyncWorking | SyncCreativesAsyncInputRequired | SyncCreativesAsyncSubmitted | SyncCatalogsResponse | SyncCatalogsAsyncWorking | SyncCatalogsAsyncInputRequired | SyncCatalogsAsyncSubmitted;
2273
2050
  /**
2274
2051
  * Selects properties from a publisher's adagents.json. Used for both product definitions and agent authorization. Supports three selection patterns: all properties, specific IDs, or by tags.
2275
2052
  */
@@ -2277,10 +2054,6 @@ export type CreateMediaBuyResponse = CreateMediaBuySuccess | CreateMediaBuyError
2277
2054
  /**
2278
2055
  * Budget pacing strategy
2279
2056
  */
2280
- 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';
2281
- /**
2282
- * Response for completed or failed update_media_buy
2283
- */
2284
2057
  export type UpdateMediaBuyResponse = UpdateMediaBuySuccess | UpdateMediaBuyError;
2285
2058
  /**
2286
2059
  * Response for completed or failed sync_creatives
@@ -2290,6 +2063,18 @@ export type SyncCreativesResponse = SyncCreativesSuccess | SyncCreativesError;
2290
2063
  * Action taken for this creative
2291
2064
  */
2292
2065
  export type CreativeAction = 'created' | 'updated' | 'unchanged' | 'failed' | 'deleted';
2066
+ /**
2067
+ * Response for completed or failed sync_catalogs
2068
+ */
2069
+ export type SyncCatalogsResponse = SyncCatalogsSuccess | SyncCatalogsError;
2070
+ /**
2071
+ * Action taken for this catalog
2072
+ */
2073
+ export type CatalogAction = 'created' | 'updated' | 'unchanged' | 'failed' | 'deleted';
2074
+ /**
2075
+ * Item review status
2076
+ */
2077
+ export type CatalogItemStatus = 'approved' | 'pending' | 'rejected' | 'warning';
2293
2078
  /**
2294
2079
  * Standard envelope for HTTP-based push notifications (MCP). This defines the wire format sent to the URL configured in `pushNotificationConfig`. NOTE: This envelope is NOT used in A2A integration, which uses native Task/TaskStatusUpdateEvent messages with the AdCP payload nested in `status.message.parts[].data`.
2295
2080
  */
@@ -2340,10 +2125,14 @@ export interface GetProductsResponse {
2340
2125
  */
2341
2126
  property_list_applied?: boolean;
2342
2127
  /**
2343
- * 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.
2128
+ * 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.
2344
2129
  */
2345
- product_selectors_applied?: boolean;
2130
+ catalog_applied?: boolean;
2346
2131
  pagination?: PaginationResponse;
2132
+ /**
2133
+ * When true, this response contains simulated data from sandbox mode.
2134
+ */
2135
+ sandbox?: boolean;
2347
2136
  context?: ContextObject;
2348
2137
  ext?: ExtensionObject;
2349
2138
  [k: string]: unknown | undefined;
@@ -2400,7 +2189,7 @@ export interface Proposal {
2400
2189
  * Explanation of how this proposal aligns with the campaign brief
2401
2190
  */
2402
2191
  brief_alignment?: string;
2403
- forecast?: DeliveryForecast2;
2192
+ forecast?: DeliveryForecast;
2404
2193
  ext?: ExtensionObject;
2405
2194
  [k: string]: unknown | undefined;
2406
2195
  }
@@ -2438,79 +2227,13 @@ export interface ProductAllocation {
2438
2227
  * @minItems 1
2439
2228
  */
2440
2229
  daypart_targets?: [DaypartTarget, ...DaypartTarget[]];
2441
- forecast?: DeliveryForecast1;
2230
+ forecast?: DeliveryForecast;
2442
2231
  ext?: ExtensionObject;
2443
2232
  [k: string]: unknown | undefined;
2444
2233
  }
2445
2234
  /**
2446
2235
  * A time window for daypart targeting. Specifies days of week and an hour range. start_hour is inclusive, end_hour is exclusive (e.g., 6-10 = 6:00am to 10:00am). Follows the Google Ads AdScheduleInfo / DV360 DayPartTargeting pattern.
2447
2236
  */
2448
- export interface DeliveryForecast1 {
2449
- /**
2450
- * 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.
2451
- *
2452
- * @minItems 1
2453
- */
2454
- points: [ForecastPoint, ...ForecastPoint[]];
2455
- forecast_range_unit?: ForecastRangeUnit;
2456
- method: ForecastMethod;
2457
- /**
2458
- * ISO 4217 currency code for monetary values in this forecast (spend, budget)
2459
- */
2460
- currency: string;
2461
- demographic_system?: DemographicSystem1;
2462
- /**
2463
- * 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.
2464
- */
2465
- demographic?: string;
2466
- reach_unit?: ReachUnit;
2467
- /**
2468
- * When this forecast was computed
2469
- */
2470
- generated_at?: string;
2471
- /**
2472
- * When this forecast expires. After this time, the forecast should be refreshed. Forecast expiry does not affect proposal executability.
2473
- */
2474
- valid_until?: string;
2475
- ext?: ExtensionObject;
2476
- [k: string]: unknown | undefined;
2477
- }
2478
- /**
2479
- * 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.
2480
- */
2481
- export interface DeliveryForecast2 {
2482
- /**
2483
- * 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.
2484
- *
2485
- * @minItems 1
2486
- */
2487
- points: [ForecastPoint, ...ForecastPoint[]];
2488
- forecast_range_unit?: ForecastRangeUnit;
2489
- method: ForecastMethod;
2490
- /**
2491
- * ISO 4217 currency code for monetary values in this forecast (spend, budget)
2492
- */
2493
- currency: string;
2494
- demographic_system?: DemographicSystem1;
2495
- /**
2496
- * 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.
2497
- */
2498
- demographic?: string;
2499
- reach_unit?: ReachUnit;
2500
- /**
2501
- * When this forecast was computed
2502
- */
2503
- generated_at?: string;
2504
- /**
2505
- * When this forecast expires. After this time, the forecast should be refreshed. Forecast expiry does not affect proposal executability.
2506
- */
2507
- valid_until?: string;
2508
- ext?: ExtensionObject;
2509
- [k: string]: unknown | undefined;
2510
- }
2511
- /**
2512
- * Standard error structure for task-specific errors and warnings
2513
- */
2514
2237
  export interface Error {
2515
2238
  /**
2516
2239
  * Error code for programmatic handling
@@ -2631,6 +2354,10 @@ export interface CreateMediaBuySuccess {
2631
2354
  * Buyer's reference identifier for this media buy
2632
2355
  */
2633
2356
  buyer_ref: string;
2357
+ /**
2358
+ * Buyer's campaign reference label, echoed from the request
2359
+ */
2360
+ campaign_ref?: string;
2634
2361
  account?: Account;
2635
2362
  /**
2636
2363
  * ISO 8601 timestamp for creative upload deadline
@@ -2640,6 +2367,10 @@ export interface CreateMediaBuySuccess {
2640
2367
  * Array of created packages with complete state information
2641
2368
  */
2642
2369
  packages: Package[];
2370
+ /**
2371
+ * When true, this response contains simulated data from sandbox mode.
2372
+ */
2373
+ sandbox?: boolean;
2643
2374
  context?: ContextObject;
2644
2375
  ext?: ExtensionObject;
2645
2376
  [k: string]: unknown | undefined;
@@ -2726,6 +2457,10 @@ export interface UpdateMediaBuySuccess {
2726
2457
  * Array of packages that were modified with complete state information
2727
2458
  */
2728
2459
  affected_packages?: Package[];
2460
+ /**
2461
+ * When true, this response contains simulated data from sandbox mode.
2462
+ */
2463
+ sandbox?: boolean;
2729
2464
  context?: ContextObject;
2730
2465
  ext?: ExtensionObject;
2731
2466
  [k: string]: unknown | undefined;
@@ -2804,7 +2539,7 @@ export interface SyncCreativesSuccess {
2804
2539
  * Creative ID from the request
2805
2540
  */
2806
2541
  creative_id: string;
2807
- account?: Account1;
2542
+ account?: Account;
2808
2543
  action: CreativeAction;
2809
2544
  /**
2810
2545
  * Platform-specific ID assigned to the creative
@@ -2842,6 +2577,10 @@ export interface SyncCreativesSuccess {
2842
2577
  };
2843
2578
  [k: string]: unknown | undefined;
2844
2579
  }[];
2580
+ /**
2581
+ * When true, this response contains simulated data from sandbox mode.
2582
+ */
2583
+ sandbox?: boolean;
2845
2584
  context?: ContextObject;
2846
2585
  ext?: ExtensionObject;
2847
2586
  [k: string]: unknown | undefined;
@@ -2849,67 +2588,157 @@ export interface SyncCreativesSuccess {
2849
2588
  /**
2850
2589
  * Account that owns this creative
2851
2590
  */
2852
- export interface Account1 {
2853
- /**
2854
- * Unique identifier for this account
2855
- */
2856
- account_id: string;
2591
+ export interface SyncCreativesError {
2857
2592
  /**
2858
- * Human-readable account name (e.g., 'Acme', 'Acme c/o Pinnacle')
2593
+ * Operation-level errors that prevented processing any creatives (e.g., authentication failure, service unavailable, invalid request format)
2594
+ *
2595
+ * @minItems 1
2859
2596
  */
2860
- name: string;
2597
+ errors: [Error, ...Error[]];
2598
+ context?: ContextObject;
2599
+ ext?: ExtensionObject;
2600
+ [k: string]: unknown | undefined;
2601
+ }
2602
+ /**
2603
+ * Progress data for working sync_creatives
2604
+ */
2605
+ export interface SyncCreativesAsyncWorking {
2861
2606
  /**
2862
- * The advertiser whose rates apply to this account
2607
+ * Completion percentage (0-100)
2863
2608
  */
2864
- advertiser?: string;
2609
+ percentage?: number;
2865
2610
  /**
2866
- * Optional intermediary who receives invoices on behalf of the advertiser (e.g., agency)
2611
+ * Current step or phase of the operation
2867
2612
  */
2868
- billing_proxy?: string;
2613
+ current_step?: string;
2869
2614
  /**
2870
- * Account status. pending_approval: seller reviewing (credit, contracts). payment_required: credit limit reached or funds depleted. suspended: was active, now paused. closed: terminated.
2615
+ * Total number of steps in the operation
2871
2616
  */
2872
- status: 'active' | 'pending_approval' | 'payment_required' | 'suspended' | 'closed';
2617
+ total_steps?: number;
2873
2618
  /**
2874
- * House domain where brand.json is hosted. Canonical identity anchor for the brand.
2619
+ * Current step number
2875
2620
  */
2876
- house?: string;
2621
+ step_number?: number;
2877
2622
  /**
2878
- * Brand ID within the house portfolio (from brand.json)
2623
+ * Number of creatives processed so far
2879
2624
  */
2880
- brand_id?: string;
2625
+ creatives_processed?: number;
2881
2626
  /**
2882
- * Domain of the entity operating this account
2627
+ * Total number of creatives to process
2883
2628
  */
2884
- operator?: string;
2629
+ creatives_total?: number;
2630
+ context?: ContextObject;
2631
+ ext?: ExtensionObject;
2632
+ [k: string]: unknown | undefined;
2633
+ }
2634
+ /**
2635
+ * Input requirements for sync_creatives needing user input
2636
+ */
2637
+ export interface SyncCreativesAsyncInputRequired {
2885
2638
  /**
2886
- * Who is invoiced on this account. brand: seller invoices the brand directly. operator: seller invoices the operator (agency). agent: agent consolidates billing.
2639
+ * Reason code indicating why buyer input is needed
2887
2640
  */
2888
- billing?: 'brand' | 'operator' | 'agent';
2641
+ reason?: 'APPROVAL_REQUIRED' | 'ASSET_CONFIRMATION' | 'FORMAT_CLARIFICATION';
2642
+ context?: ContextObject;
2643
+ ext?: ExtensionObject;
2644
+ [k: string]: unknown | undefined;
2645
+ }
2646
+ /**
2647
+ * Acknowledgment for submitted sync_creatives
2648
+ */
2649
+ export interface SyncCreativesAsyncSubmitted {
2650
+ context?: ContextObject;
2651
+ ext?: ExtensionObject;
2652
+ [k: string]: unknown | undefined;
2653
+ }
2654
+ /**
2655
+ * Success response - sync operation processed catalogs (may include per-catalog failures)
2656
+ */
2657
+ export interface SyncCatalogsSuccess {
2889
2658
  /**
2890
- * Identifier for the rate card applied to this account
2659
+ * Whether this was a dry run (no actual changes made)
2891
2660
  */
2892
- rate_card?: string;
2661
+ dry_run?: boolean;
2893
2662
  /**
2894
- * Payment terms (e.g., 'net_30', 'prepay')
2663
+ * Results for each catalog processed. Items with action='failed' indicate per-catalog validation/processing failures, not operation-level failures.
2895
2664
  */
2896
- payment_terms?: string;
2665
+ catalogs: {
2666
+ /**
2667
+ * Catalog ID from the request
2668
+ */
2669
+ catalog_id: string;
2670
+ action: CatalogAction;
2671
+ /**
2672
+ * Platform-specific ID assigned to the catalog
2673
+ */
2674
+ platform_id?: string;
2675
+ /**
2676
+ * Total number of items in the catalog after sync
2677
+ */
2678
+ item_count?: number;
2679
+ /**
2680
+ * Number of items approved by the platform. Populated when the platform performs item-level review.
2681
+ */
2682
+ items_approved?: number;
2683
+ /**
2684
+ * Number of items pending platform review. Common for product catalogs where items must pass content policy checks.
2685
+ */
2686
+ items_pending?: number;
2687
+ /**
2688
+ * Number of items rejected by the platform. Check item_issues for rejection reasons.
2689
+ */
2690
+ items_rejected?: number;
2691
+ /**
2692
+ * Per-item issues reported by the platform (rejections, warnings). Only present when the platform performs item-level review.
2693
+ */
2694
+ item_issues?: {
2695
+ /**
2696
+ * ID of the catalog item with an issue
2697
+ */
2698
+ item_id: string;
2699
+ status: CatalogItemStatus;
2700
+ /**
2701
+ * Reasons for rejection or warning
2702
+ */
2703
+ reasons?: string[];
2704
+ [k: string]: unknown | undefined;
2705
+ }[];
2706
+ /**
2707
+ * ISO 8601 timestamp of when the most recent sync was accepted by the platform
2708
+ */
2709
+ last_synced_at?: string;
2710
+ /**
2711
+ * ISO 8601 timestamp of when the platform will next fetch the feed URL. Only present for URL-based catalogs with update_frequency.
2712
+ */
2713
+ next_fetch_at?: string;
2714
+ /**
2715
+ * Field names that were modified (only present when action='updated')
2716
+ */
2717
+ changes?: string[];
2718
+ /**
2719
+ * Validation or processing errors (only present when action='failed')
2720
+ */
2721
+ errors?: string[];
2722
+ /**
2723
+ * Non-fatal warnings about this catalog
2724
+ */
2725
+ warnings?: string[];
2726
+ [k: string]: unknown | undefined;
2727
+ }[];
2897
2728
  /**
2898
- * Maximum outstanding balance allowed
2729
+ * When true, this response contains simulated data from sandbox mode.
2899
2730
  */
2900
- credit_limit?: {
2901
- amount: number;
2902
- currency: string;
2903
- };
2731
+ sandbox?: boolean;
2732
+ context?: ContextObject;
2904
2733
  ext?: ExtensionObject;
2905
2734
  [k: string]: unknown | undefined;
2906
2735
  }
2907
2736
  /**
2908
- * Error response - operation failed completely, no creatives were processed
2737
+ * Error response - operation failed completely, no catalogs were processed
2909
2738
  */
2910
- export interface SyncCreativesError {
2739
+ export interface SyncCatalogsError {
2911
2740
  /**
2912
- * Operation-level errors that prevented processing any creatives (e.g., authentication failure, service unavailable, invalid request format)
2741
+ * Operation-level errors that prevented processing any catalogs (e.g., authentication failure, service unavailable, invalid request format)
2913
2742
  *
2914
2743
  * @minItems 1
2915
2744
  */
@@ -2919,15 +2748,15 @@ export interface SyncCreativesError {
2919
2748
  [k: string]: unknown | undefined;
2920
2749
  }
2921
2750
  /**
2922
- * Progress data for working sync_creatives
2751
+ * Progress data for working sync_catalogs
2923
2752
  */
2924
- export interface SyncCreativesAsyncWorking {
2753
+ export interface SyncCatalogsAsyncWorking {
2925
2754
  /**
2926
2755
  * Completion percentage (0-100)
2927
2756
  */
2928
2757
  percentage?: number;
2929
2758
  /**
2930
- * Current step or phase of the operation
2759
+ * Current step or phase of the operation (e.g., 'Fetching product feed', 'Validating items', 'Platform review')
2931
2760
  */
2932
2761
  current_step?: string;
2933
2762
  /**
@@ -2939,33 +2768,41 @@ export interface SyncCreativesAsyncWorking {
2939
2768
  */
2940
2769
  step_number?: number;
2941
2770
  /**
2942
- * Number of creatives processed so far
2771
+ * Number of catalogs processed so far
2943
2772
  */
2944
- creatives_processed?: number;
2773
+ catalogs_processed?: number;
2945
2774
  /**
2946
- * Total number of creatives to process
2775
+ * Total number of catalogs to process
2947
2776
  */
2948
- creatives_total?: number;
2777
+ catalogs_total?: number;
2778
+ /**
2779
+ * Total number of catalog items processed across all catalogs
2780
+ */
2781
+ items_processed?: number;
2782
+ /**
2783
+ * Total number of catalog items to process across all catalogs
2784
+ */
2785
+ items_total?: number;
2949
2786
  context?: ContextObject;
2950
2787
  ext?: ExtensionObject;
2951
2788
  [k: string]: unknown | undefined;
2952
2789
  }
2953
2790
  /**
2954
- * Input requirements for sync_creatives needing user input
2791
+ * Input requirements for sync_catalogs needing buyer input
2955
2792
  */
2956
- export interface SyncCreativesAsyncInputRequired {
2793
+ export interface SyncCatalogsAsyncInputRequired {
2957
2794
  /**
2958
- * Reason code indicating why buyer input is needed
2795
+ * Reason code indicating why buyer input is needed. APPROVAL_REQUIRED: platform requires explicit approval before activating the catalog. FEED_VALIDATION: feed URL returned unexpected format or schema errors. ITEM_REVIEW: platform flagged items for manual review. FEED_ACCESS: platform cannot access the feed URL (authentication, CORS, etc.).
2959
2796
  */
2960
- reason?: 'APPROVAL_REQUIRED' | 'ASSET_CONFIRMATION' | 'FORMAT_CLARIFICATION';
2797
+ reason?: 'APPROVAL_REQUIRED' | 'FEED_VALIDATION' | 'ITEM_REVIEW' | 'FEED_ACCESS';
2961
2798
  context?: ContextObject;
2962
2799
  ext?: ExtensionObject;
2963
2800
  [k: string]: unknown | undefined;
2964
2801
  }
2965
2802
  /**
2966
- * Acknowledgment for submitted sync_creatives
2803
+ * Acknowledgment for submitted sync_catalogs
2967
2804
  */
2968
- export interface SyncCreativesAsyncSubmitted {
2805
+ export interface SyncCatalogsAsyncSubmitted {
2969
2806
  context?: ContextObject;
2970
2807
  ext?: ExtensionObject;
2971
2808
  [k: string]: unknown | undefined;