@adcp/client 2.7.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/bin/adcp-async-handler.js +10 -8
  2. package/bin/adcp-config.js +13 -6
  3. package/bin/adcp.js +113 -40
  4. package/dist/lib/advanced.d.ts +41 -0
  5. package/dist/lib/advanced.d.ts.map +1 -0
  6. package/dist/lib/advanced.js +49 -0
  7. package/dist/lib/advanced.js.map +1 -0
  8. package/dist/lib/auth/index.d.ts +4 -0
  9. package/dist/lib/auth/index.d.ts.map +1 -1
  10. package/dist/lib/auth/index.js +13 -14
  11. package/dist/lib/auth/index.js.map +1 -1
  12. package/dist/lib/core/ADCPMultiAgentClient.d.ts +54 -7
  13. package/dist/lib/core/ADCPMultiAgentClient.d.ts.map +1 -1
  14. package/dist/lib/core/ADCPMultiAgentClient.js +84 -10
  15. package/dist/lib/core/ADCPMultiAgentClient.js.map +1 -1
  16. package/dist/lib/core/AgentClient.d.ts +11 -2
  17. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  18. package/dist/lib/core/AgentClient.js +57 -13
  19. package/dist/lib/core/AgentClient.js.map +1 -1
  20. package/dist/lib/core/AsyncHandler.d.ts +2 -1
  21. package/dist/lib/core/AsyncHandler.d.ts.map +1 -1
  22. package/dist/lib/core/AsyncHandler.js +3 -3
  23. package/dist/lib/core/AsyncHandler.js.map +1 -1
  24. package/dist/lib/core/ConfigurationManager.d.ts.map +1 -1
  25. package/dist/lib/core/ConfigurationManager.js +8 -17
  26. package/dist/lib/core/ConfigurationManager.js.map +1 -1
  27. package/dist/lib/core/ConversationTypes.d.ts.map +1 -1
  28. package/dist/lib/core/CreativeAgentClient.d.ts +5 -5
  29. package/dist/lib/core/CreativeAgentClient.d.ts.map +1 -1
  30. package/dist/lib/core/CreativeAgentClient.js +6 -6
  31. package/dist/lib/core/CreativeAgentClient.js.map +1 -1
  32. package/dist/lib/core/ProtocolResponseParser.d.ts +1 -1
  33. package/dist/lib/core/ProtocolResponseParser.d.ts.map +1 -1
  34. package/dist/lib/core/ProtocolResponseParser.js +4 -4
  35. package/dist/lib/core/ProtocolResponseParser.js.map +1 -1
  36. package/dist/lib/core/ResponseValidator.d.ts.map +1 -1
  37. package/dist/lib/core/ResponseValidator.js +1 -1
  38. package/dist/lib/core/ResponseValidator.js.map +1 -1
  39. package/dist/lib/core/{ADCPClient.d.ts → SingleAgentClient.d.ts} +22 -13
  40. package/dist/lib/core/SingleAgentClient.d.ts.map +1 -0
  41. package/dist/lib/core/{ADCPClient.js → SingleAgentClient.js} +125 -105
  42. package/dist/lib/core/SingleAgentClient.js.map +1 -0
  43. package/dist/lib/core/TaskEventTypes.js +1 -1
  44. package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
  45. package/dist/lib/core/TaskExecutor.js +76 -57
  46. package/dist/lib/core/TaskExecutor.js.map +1 -1
  47. package/dist/lib/discovery/property-crawler.d.ts.map +1 -1
  48. package/dist/lib/discovery/property-crawler.js +24 -21
  49. package/dist/lib/discovery/property-crawler.js.map +1 -1
  50. package/dist/lib/discovery/property-index.d.ts.map +1 -1
  51. package/dist/lib/discovery/property-index.js +5 -5
  52. package/dist/lib/discovery/property-index.js.map +1 -1
  53. package/dist/lib/discovery/types.d.ts.map +1 -1
  54. package/dist/lib/errors/index.d.ts.map +1 -1
  55. package/dist/lib/errors/index.js +3 -3
  56. package/dist/lib/errors/index.js.map +1 -1
  57. package/dist/lib/handlers/types.d.ts.map +1 -1
  58. package/dist/lib/handlers/types.js.map +1 -1
  59. package/dist/lib/index.d.ts +18 -42
  60. package/dist/lib/index.d.ts.map +1 -1
  61. package/dist/lib/index.js +14 -50
  62. package/dist/lib/index.js.map +1 -1
  63. package/dist/lib/protocols/a2a.js +20 -20
  64. package/dist/lib/protocols/a2a.js.map +1 -1
  65. package/dist/lib/protocols/index.d.ts.map +1 -1
  66. package/dist/lib/protocols/index.js +5 -5
  67. package/dist/lib/protocols/index.js.map +1 -1
  68. package/dist/lib/protocols/mcp.d.ts.map +1 -1
  69. package/dist/lib/protocols/mcp.js +30 -69
  70. package/dist/lib/protocols/mcp.js.map +1 -1
  71. package/dist/lib/storage/MemoryStorage.d.ts.map +1 -1
  72. package/dist/lib/storage/MemoryStorage.js +4 -4
  73. package/dist/lib/storage/MemoryStorage.js.map +1 -1
  74. package/dist/lib/storage/interfaces.d.ts.map +1 -1
  75. package/dist/lib/testing/index.d.ts +2 -0
  76. package/dist/lib/testing/index.d.ts.map +1 -0
  77. package/dist/lib/testing/index.js +22 -0
  78. package/dist/lib/testing/index.js.map +1 -0
  79. package/dist/lib/testing/test-helpers.d.ts +217 -0
  80. package/dist/lib/testing/test-helpers.d.ts.map +1 -0
  81. package/dist/lib/testing/test-helpers.js +258 -0
  82. package/dist/lib/testing/test-helpers.js.map +1 -0
  83. package/dist/lib/types/adcp.d.ts.map +1 -1
  84. package/dist/lib/types/core.generated.d.ts +146 -58
  85. package/dist/lib/types/core.generated.d.ts.map +1 -1
  86. package/dist/lib/types/core.generated.js +1 -1
  87. package/dist/lib/types/index.d.ts +1 -1
  88. package/dist/lib/types/index.d.ts.map +1 -1
  89. package/dist/lib/types/schemas.generated.d.ts +2608 -1536
  90. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  91. package/dist/lib/types/schemas.generated.js +361 -259
  92. package/dist/lib/types/schemas.generated.js.map +1 -1
  93. package/dist/lib/types/tools.generated.d.ts +688 -359
  94. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  95. package/dist/lib/types/tools.generated.js +1 -1
  96. package/dist/lib/types/tools.generated.js.map +1 -1
  97. package/dist/lib/utils/index.d.ts +1 -0
  98. package/dist/lib/utils/index.d.ts.map +1 -1
  99. package/dist/lib/utils/index.js +15 -10
  100. package/dist/lib/utils/index.js.map +1 -1
  101. package/dist/lib/utils/logger.js +6 -6
  102. package/dist/lib/utils/preview-utils.d.ts +87 -0
  103. package/dist/lib/utils/preview-utils.d.ts.map +1 -0
  104. package/dist/lib/utils/preview-utils.js +322 -0
  105. package/dist/lib/utils/preview-utils.js.map +1 -0
  106. package/dist/lib/utils/protocol-detection.d.ts.map +1 -1
  107. package/dist/lib/utils/protocol-detection.js +4 -4
  108. package/dist/lib/utils/protocol-detection.js.map +1 -1
  109. package/dist/lib/validation/index.d.ts.map +1 -1
  110. package/dist/lib/validation/index.js +5 -5
  111. package/dist/lib/validation/index.js.map +1 -1
  112. package/dist/lib/version.d.ts +3 -3
  113. package/dist/lib/version.js +3 -3
  114. package/package.json +18 -5
  115. package/dist/lib/core/ADCPClient.d.ts.map +0 -1
  116. package/dist/lib/core/ADCPClient.js.map +0 -1
@@ -403,6 +403,30 @@ export interface Product {
403
403
  * Expiration timestamp for custom products
404
404
  */
405
405
  expires_at?: string;
406
+ /**
407
+ * Optional standard visual card (300x400px) for displaying this product in user interfaces. Can be rendered via preview_creative or pre-generated.
408
+ */
409
+ product_card?: {
410
+ format_id: FormatID1;
411
+ /**
412
+ * Asset manifest for rendering the card, structure defined by the format
413
+ */
414
+ manifest: {
415
+ [k: string]: unknown;
416
+ };
417
+ };
418
+ /**
419
+ * Optional detailed card with carousel and full specifications. Provides rich product presentation similar to media kit pages.
420
+ */
421
+ product_card_detailed?: {
422
+ format_id: FormatID2;
423
+ /**
424
+ * Asset manifest for rendering the detailed card, structure defined by the format
425
+ */
426
+ manifest: {
427
+ [k: string]: unknown;
428
+ };
429
+ };
406
430
  }
407
431
  /**
408
432
  * Structured format identifier with agent URL and format name
@@ -820,6 +844,32 @@ export interface CreativePolicy {
820
844
  */
821
845
  templates_available: boolean;
822
846
  }
847
+ /**
848
+ * Structured format identifier with agent URL and format name
849
+ */
850
+ export interface FormatID1 {
851
+ /**
852
+ * 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)
853
+ */
854
+ agent_url: string;
855
+ /**
856
+ * Format identifier within the agent's namespace (e.g., 'display_300x250', 'video_standard_30s')
857
+ */
858
+ id: string;
859
+ }
860
+ /**
861
+ * Structured format identifier with agent URL and format name
862
+ */
863
+ export interface FormatID2 {
864
+ /**
865
+ * 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)
866
+ */
867
+ agent_url: string;
868
+ /**
869
+ * Format identifier within the agent's namespace (e.g., 'display_300x250', 'video_standard_30s')
870
+ */
871
+ id: string;
872
+ }
823
873
  /**
824
874
  * Standard error structure for task-specific errors and warnings
825
875
  */
@@ -939,7 +989,7 @@ export interface Format {
939
989
  */
940
990
  description?: string;
941
991
  /**
942
- * Optional preview image URL for format browsing/discovery UI. Should be 400x300px (4:3 aspect ratio) PNG or JPG. Used as thumbnail/card image in format browsers.
992
+ * DEPRECATED: Use format_card instead. Optional preview image URL for format browsing/discovery UI. Should be 400x300px (4:3 aspect ratio) PNG or JPG. Used as thumbnail/card image in format browsers. This field is maintained for backward compatibility but format_card provides a more flexible, structured approach.
943
993
  */
944
994
  preview_image?: string;
945
995
  /**
@@ -1068,7 +1118,7 @@ export interface Format {
1068
1118
  /**
1069
1119
  * Type of asset
1070
1120
  */
1071
- asset_type: 'image' | 'video' | 'audio' | 'vast' | 'daast' | 'text' | 'html' | 'css' | 'javascript' | 'url' | 'webhook' | 'promoted_offerings';
1121
+ asset_type: 'image' | 'video' | 'audio' | 'vast' | 'daast' | 'text' | 'markdown' | 'html' | 'css' | 'javascript' | 'url' | 'webhook' | 'promoted_offerings';
1072
1122
  /**
1073
1123
  * Optional descriptive label for this asset's purpose (e.g., 'hero_image', 'logo'). Not used for referencing assets in manifests—use asset_id instead. This field is for human-readable documentation and UI display only.
1074
1124
  */
@@ -1111,7 +1161,7 @@ export interface Format {
1111
1161
  /**
1112
1162
  * Type of asset
1113
1163
  */
1114
- asset_type: 'image' | 'video' | 'audio' | 'vast' | 'daast' | 'text' | 'html' | 'css' | 'javascript' | 'url' | 'webhook' | 'promoted_offerings';
1164
+ asset_type: 'image' | 'video' | 'audio' | 'vast' | 'daast' | 'text' | 'markdown' | 'html' | 'css' | 'javascript' | 'url' | 'webhook' | 'promoted_offerings';
1115
1165
  /**
1116
1166
  * Optional descriptive label for this asset's purpose (e.g., 'hero_image', 'logo'). Not used for referencing assets in manifests—use asset_id instead. This field is for human-readable documentation and UI display only.
1117
1167
  */
@@ -1142,11 +1192,35 @@ export interface Format {
1142
1192
  * For generative formats: array of format IDs that this format can generate. When a format accepts inputs like brand_manifest and message, this specifies what concrete output formats can be produced (e.g., a generative banner format might output standard image banner formats).
1143
1193
  */
1144
1194
  output_format_ids?: FormatID1[];
1195
+ /**
1196
+ * Optional standard visual card (300x400px) for displaying this format in user interfaces. Can be rendered via preview_creative or pre-generated.
1197
+ */
1198
+ format_card?: {
1199
+ format_id: FormatID2;
1200
+ /**
1201
+ * Asset manifest for rendering the card, structure defined by the format
1202
+ */
1203
+ manifest: {
1204
+ [k: string]: unknown;
1205
+ };
1206
+ };
1207
+ /**
1208
+ * Optional detailed card with carousel and full specifications. Provides rich format documentation similar to ad spec pages.
1209
+ */
1210
+ format_card_detailed?: {
1211
+ format_id: FormatID3;
1212
+ /**
1213
+ * Asset manifest for rendering the detailed card, structure defined by the format
1214
+ */
1215
+ manifest: {
1216
+ [k: string]: unknown;
1217
+ };
1218
+ };
1145
1219
  }
1146
1220
  /**
1147
1221
  * Structured format identifier with agent URL and format name
1148
1222
  */
1149
- export interface FormatID1 {
1223
+ export interface FormatID3 {
1150
1224
  /**
1151
1225
  * 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)
1152
1226
  */
@@ -1166,20 +1240,110 @@ export type Pacing = 'even' | 'asap' | 'front_loaded';
1166
1240
  /**
1167
1241
  * VAST (Video Ad Serving Template) tag for third-party video ad serving
1168
1242
  */
1169
- export type VASTAsset = VASTAsset1 & VASTAsset2;
1170
- export type VASTAsset2 = {
1171
- [k: string]: unknown;
1243
+ export type VASTAsset = {
1244
+ /**
1245
+ * Discriminator indicating VAST is delivered via URL endpoint
1246
+ */
1247
+ delivery_type: 'url';
1248
+ /**
1249
+ * URL endpoint that returns VAST XML
1250
+ */
1251
+ url: string;
1252
+ /**
1253
+ * VAST specification version
1254
+ */
1255
+ vast_version?: '2.0' | '3.0' | '4.0' | '4.1' | '4.2';
1256
+ /**
1257
+ * Whether VPAID (Video Player-Ad Interface Definition) is supported
1258
+ */
1259
+ vpaid_enabled?: boolean;
1260
+ /**
1261
+ * Expected video duration in milliseconds (if known)
1262
+ */
1263
+ duration_ms?: number;
1264
+ /**
1265
+ * Tracking events supported by this VAST tag
1266
+ */
1267
+ tracking_events?: ('start' | 'firstQuartile' | 'midpoint' | 'thirdQuartile' | 'complete' | 'impression' | 'click' | 'pause' | 'resume' | 'skip' | 'mute' | 'unmute' | 'fullscreen' | 'exitFullscreen' | 'playerExpand' | 'playerCollapse')[];
1172
1268
  } | {
1173
- [k: string]: unknown;
1269
+ /**
1270
+ * Discriminator indicating VAST is delivered as inline XML content
1271
+ */
1272
+ delivery_type: 'inline';
1273
+ /**
1274
+ * Inline VAST XML content
1275
+ */
1276
+ content: string;
1277
+ /**
1278
+ * VAST specification version
1279
+ */
1280
+ vast_version?: '2.0' | '3.0' | '4.0' | '4.1' | '4.2';
1281
+ /**
1282
+ * Whether VPAID (Video Player-Ad Interface Definition) is supported
1283
+ */
1284
+ vpaid_enabled?: boolean;
1285
+ /**
1286
+ * Expected video duration in milliseconds (if known)
1287
+ */
1288
+ duration_ms?: number;
1289
+ /**
1290
+ * Tracking events supported by this VAST tag
1291
+ */
1292
+ tracking_events?: ('start' | 'firstQuartile' | 'midpoint' | 'thirdQuartile' | 'complete' | 'impression' | 'click' | 'pause' | 'resume' | 'skip' | 'mute' | 'unmute' | 'fullscreen' | 'exitFullscreen' | 'playerExpand' | 'playerCollapse')[];
1174
1293
  };
1175
1294
  /**
1176
1295
  * DAAST (Digital Audio Ad Serving Template) tag for third-party audio ad serving
1177
1296
  */
1178
- export type DAASTAsset = DAASTAsset1 & DAASTAsset2;
1179
- export type DAASTAsset2 = {
1180
- [k: string]: unknown;
1297
+ export type DAASTAsset = {
1298
+ /**
1299
+ * Discriminator indicating DAAST is delivered via URL endpoint
1300
+ */
1301
+ delivery_type: 'url';
1302
+ /**
1303
+ * URL endpoint that returns DAAST XML
1304
+ */
1305
+ url: string;
1306
+ /**
1307
+ * DAAST specification version
1308
+ */
1309
+ daast_version?: '1.0' | '1.1';
1310
+ /**
1311
+ * Expected audio duration in milliseconds (if known)
1312
+ */
1313
+ duration_ms?: number;
1314
+ /**
1315
+ * Tracking events supported by this DAAST tag
1316
+ */
1317
+ tracking_events?: ('start' | 'firstQuartile' | 'midpoint' | 'thirdQuartile' | 'complete' | 'impression' | 'pause' | 'resume' | 'skip' | 'mute' | 'unmute')[];
1318
+ /**
1319
+ * Whether companion display ads are included
1320
+ */
1321
+ companion_ads?: boolean;
1181
1322
  } | {
1182
- [k: string]: unknown;
1323
+ /**
1324
+ * Discriminator indicating DAAST is delivered as inline XML content
1325
+ */
1326
+ delivery_type: 'inline';
1327
+ /**
1328
+ * Inline DAAST XML content
1329
+ */
1330
+ content: string;
1331
+ /**
1332
+ * DAAST specification version
1333
+ */
1334
+ daast_version?: '1.0' | '1.1';
1335
+ /**
1336
+ * Expected audio duration in milliseconds (if known)
1337
+ */
1338
+ duration_ms?: number;
1339
+ /**
1340
+ * Tracking events supported by this DAAST tag
1341
+ */
1342
+ tracking_events?: ('start' | 'firstQuartile' | 'midpoint' | 'thirdQuartile' | 'complete' | 'impression' | 'pause' | 'resume' | 'skip' | 'mute' | 'unmute')[];
1343
+ /**
1344
+ * Whether companion display ads are included
1345
+ */
1346
+ companion_ads?: boolean;
1183
1347
  };
1184
1348
  /**
1185
1349
  * Brand information manifest containing assets, themes, and guidelines. Can be provided inline or as a URL reference to a hosted manifest.
@@ -1474,58 +1638,6 @@ export interface JavaScriptAsset {
1474
1638
  */
1475
1639
  module_type?: 'esm' | 'commonjs' | 'script';
1476
1640
  }
1477
- export interface VASTAsset1 {
1478
- /**
1479
- * URL endpoint that returns VAST XML
1480
- */
1481
- url?: string;
1482
- /**
1483
- * Inline VAST XML content
1484
- */
1485
- content?: string;
1486
- /**
1487
- * VAST specification version
1488
- */
1489
- vast_version?: '2.0' | '3.0' | '4.0' | '4.1' | '4.2';
1490
- /**
1491
- * Whether VPAID (Video Player-Ad Interface Definition) is supported
1492
- */
1493
- vpaid_enabled?: boolean;
1494
- /**
1495
- * Expected video duration in milliseconds (if known)
1496
- */
1497
- duration_ms?: number;
1498
- /**
1499
- * Tracking events supported by this VAST tag
1500
- */
1501
- tracking_events?: ('start' | 'firstQuartile' | 'midpoint' | 'thirdQuartile' | 'complete' | 'impression' | 'click' | 'pause' | 'resume' | 'skip' | 'mute' | 'unmute' | 'fullscreen' | 'exitFullscreen' | 'playerExpand' | 'playerCollapse')[];
1502
- }
1503
- export interface DAASTAsset1 {
1504
- /**
1505
- * URL endpoint that returns DAAST XML
1506
- */
1507
- url?: string;
1508
- /**
1509
- * Inline DAAST XML content
1510
- */
1511
- content?: string;
1512
- /**
1513
- * DAAST specification version
1514
- */
1515
- daast_version?: '1.0' | '1.1';
1516
- /**
1517
- * Expected audio duration in milliseconds (if known)
1518
- */
1519
- duration_ms?: number;
1520
- /**
1521
- * Tracking events supported by this DAAST tag
1522
- */
1523
- tracking_events?: ('start' | 'firstQuartile' | 'midpoint' | 'thirdQuartile' | 'complete' | 'impression' | 'pause' | 'resume' | 'skip' | 'mute' | 'unmute')[];
1524
- /**
1525
- * Whether companion display ads are included
1526
- */
1527
- companion_ads?: boolean;
1528
- }
1529
1641
  /**
1530
1642
  * Complete offering specification combining brand manifest, product selectors, and asset filters. Provides all context needed for creative generation about what is being promoted.
1531
1643
  */
@@ -1634,13 +1746,13 @@ export interface PushNotificationConfig {
1634
1746
  };
1635
1747
  }
1636
1748
  /**
1637
- * Response payload for create_media_buy task
1749
+ * Response payload for create_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the media buy is either fully created or not created at all.
1638
1750
  */
1639
- export interface CreateMediaBuyResponse {
1751
+ export type CreateMediaBuyResponse = {
1640
1752
  /**
1641
1753
  * Publisher's unique identifier for the created media buy
1642
1754
  */
1643
- media_buy_id?: string;
1755
+ media_buy_id: string;
1644
1756
  /**
1645
1757
  * Buyer's reference identifier for this media buy
1646
1758
  */
@@ -1652,7 +1764,7 @@ export interface CreateMediaBuyResponse {
1652
1764
  /**
1653
1765
  * Array of created packages
1654
1766
  */
1655
- packages?: {
1767
+ packages: {
1656
1768
  /**
1657
1769
  * Publisher's unique identifier for the package
1658
1770
  */
@@ -1662,11 +1774,14 @@ export interface CreateMediaBuyResponse {
1662
1774
  */
1663
1775
  buyer_ref: string;
1664
1776
  }[];
1777
+ } | {
1665
1778
  /**
1666
- * Task-specific errors and warnings (e.g., partial package creation failures)
1779
+ * Array of errors explaining why the operation failed
1780
+ *
1781
+ * @minItems 1
1667
1782
  */
1668
- errors?: Error[];
1669
- }
1783
+ errors: [Error, ...Error[]];
1784
+ };
1670
1785
  /**
1671
1786
  * Standard error structure for task-specific errors and warnings
1672
1787
  */
@@ -1714,15 +1829,15 @@ export interface SyncCreativesRequest {
1714
1829
  * Creative asset for upload to library - supports static assets, generative formats, and third-party snippets
1715
1830
  */
1716
1831
  /**
1717
- * Response from creative sync operation with results for each creative
1832
+ * Response from creative sync operation. Returns either per-creative results (best-effort processing) OR operation-level errors (complete failure). This enforces atomic semantics at the operation level while allowing per-item failures within successful operations.
1718
1833
  */
1719
- export interface SyncCreativesResponse {
1834
+ export type SyncCreativesResponse = {
1720
1835
  /**
1721
1836
  * Whether this was a dry run (no actual changes made)
1722
1837
  */
1723
1838
  dry_run?: boolean;
1724
1839
  /**
1725
- * Results for each creative processed
1840
+ * Results for each creative processed. Items with action='failed' indicate per-item validation/processing failures, not operation-level failures.
1726
1841
  */
1727
1842
  creatives: {
1728
1843
  /**
@@ -1774,7 +1889,17 @@ export interface SyncCreativesResponse {
1774
1889
  [k: string]: string;
1775
1890
  };
1776
1891
  }[];
1777
- }
1892
+ } | {
1893
+ /**
1894
+ * Operation-level errors that prevented processing any creatives (e.g., authentication failure, service unavailable, invalid request format)
1895
+ *
1896
+ * @minItems 1
1897
+ */
1898
+ errors: [Error, ...Error[]];
1899
+ };
1900
+ /**
1901
+ * Standard error structure for task-specific errors and warnings
1902
+ */
1778
1903
  /**
1779
1904
  * Filter by creative approval status
1780
1905
  */
@@ -1901,11 +2026,40 @@ export interface ListCreativesRequest {
1901
2026
  /**
1902
2027
  * Current approval status of the creative
1903
2028
  */
1904
- export type SubAsset = SubAsset1 & SubAsset2;
1905
- export type SubAsset2 = {
1906
- [k: string]: unknown;
2029
+ export type SubAsset = {
2030
+ /**
2031
+ * Discriminator indicating this is a media asset with content_uri
2032
+ */
2033
+ asset_kind: 'media';
2034
+ /**
2035
+ * Type of asset. Common types: thumbnail_image, product_image, featured_image, logo
2036
+ */
2037
+ asset_type: string;
2038
+ /**
2039
+ * Unique identifier for the asset within the creative
2040
+ */
2041
+ asset_id: string;
2042
+ /**
2043
+ * URL for media assets (images, videos, etc.)
2044
+ */
2045
+ content_uri: string;
1907
2046
  } | {
1908
- [k: string]: unknown;
2047
+ /**
2048
+ * Discriminator indicating this is a text asset with content
2049
+ */
2050
+ asset_kind: 'text';
2051
+ /**
2052
+ * Type of asset. Common types: headline, body_text, cta_text, price_text, sponsor_name, author_name, click_url
2053
+ */
2054
+ asset_type: string;
2055
+ /**
2056
+ * Unique identifier for the asset within the creative
2057
+ */
2058
+ asset_id: string;
2059
+ /**
2060
+ * Text content for text-based assets like headlines, body text, CTA text, etc.
2061
+ */
2062
+ content: string | string[];
1909
2063
  };
1910
2064
  /**
1911
2065
  * Response from creative library query with filtered results, metadata, and optional enriched data
@@ -2117,24 +2271,6 @@ export interface ListCreativesResponse {
2117
2271
  /**
2118
2272
  * Format identifier specifying which format this creative conforms to
2119
2273
  */
2120
- export interface SubAsset1 {
2121
- /**
2122
- * Type of asset. Common types: headline, body_text, thumbnail_image, product_image, featured_image, logo, cta_text, price_text, sponsor_name, author_name, click_url
2123
- */
2124
- asset_type?: string;
2125
- /**
2126
- * Unique identifier for the asset within the creative
2127
- */
2128
- asset_id?: string;
2129
- /**
2130
- * URL for media assets (images, videos, etc.)
2131
- */
2132
- content_uri?: string;
2133
- /**
2134
- * Text content for text-based assets like headlines, body text, CTA text, etc.
2135
- */
2136
- content?: string | string[];
2137
- }
2138
2274
  /**
2139
2275
  * Request parameters for updating campaign and package settings
2140
2276
  */
@@ -2177,9 +2313,9 @@ export interface UpdateMediaBuyRequest1 {
2177
2313
  * Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time.
2178
2314
  */
2179
2315
  /**
2180
- * Response payload for update_media_buy task
2316
+ * Response payload for update_media_buy task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - updates are either fully applied or not applied at all.
2181
2317
  */
2182
- export interface UpdateMediaBuyResponse {
2318
+ export type UpdateMediaBuyResponse = {
2183
2319
  /**
2184
2320
  * Publisher's identifier for the media buy
2185
2321
  */
@@ -2205,11 +2341,14 @@ export interface UpdateMediaBuyResponse {
2205
2341
  */
2206
2342
  buyer_ref: string;
2207
2343
  }[];
2344
+ } | {
2208
2345
  /**
2209
- * Task-specific errors and warnings (e.g., partial update failures)
2346
+ * Array of errors explaining why the operation failed
2347
+ *
2348
+ * @minItems 1
2210
2349
  */
2211
- errors?: Error[];
2212
- }
2350
+ errors: [Error, ...Error[]];
2351
+ };
2213
2352
  /**
2214
2353
  * Standard error structure for task-specific errors and warnings
2215
2354
  */
@@ -2611,18 +2750,21 @@ export interface ProvidePerformanceFeedbackRequest {
2611
2750
  feedback_source?: 'buyer_attribution' | 'third_party_measurement' | 'platform_analytics' | 'verification_partner';
2612
2751
  }
2613
2752
  /**
2614
- * Response payload for provide_performance_feedback task
2753
+ * Response payload for provide_performance_feedback task. Returns either success confirmation OR error information, never both.
2615
2754
  */
2616
- export interface ProvidePerformanceFeedbackResponse {
2755
+ export type ProvidePerformanceFeedbackResponse = {
2617
2756
  /**
2618
2757
  * Whether the performance feedback was successfully received
2619
2758
  */
2620
- success: boolean;
2759
+ success: true;
2760
+ } | {
2621
2761
  /**
2622
- * Task-specific errors and warnings (e.g., invalid measurement period, missing campaign data)
2762
+ * Array of errors explaining why feedback was rejected (e.g., invalid measurement period, missing campaign data)
2763
+ *
2764
+ * @minItems 1
2623
2765
  */
2624
- errors?: Error[];
2625
- }
2766
+ errors: [Error, ...Error[]];
2767
+ };
2626
2768
  /**
2627
2769
  * Standard error structure for task-specific errors and warnings
2628
2770
  */
@@ -2709,22 +2851,25 @@ export interface WebhookAsset {
2709
2851
  * CSS stylesheet asset
2710
2852
  */
2711
2853
  /**
2712
- * VAST (Video Ad Serving Template) tag for third-party video ad serving
2854
+ * Response containing the transformed or generated creative manifest, ready for use with preview_creative or sync_creatives. Returns either the complete creative manifest OR error information, never both.
2713
2855
  */
2714
- export interface BuildCreativeResponse {
2856
+ export type BuildCreativeResponse = {
2715
2857
  creative_manifest: CreativeManifest;
2858
+ } | {
2716
2859
  /**
2717
- * Task-specific errors and warnings
2860
+ * Array of errors explaining why creative generation failed
2861
+ *
2862
+ * @minItems 1
2718
2863
  */
2719
- errors?: Error[];
2720
- }
2864
+ errors: [Error, ...Error[]];
2865
+ };
2721
2866
  /**
2722
- * The generated or transformed creative manifest
2867
+ * VAST (Video Ad Serving Template) tag for third-party video ad serving
2723
2868
  */
2724
2869
  /**
2725
- * VAST (Video Ad Serving Template) tag for third-party video ad serving
2870
+ * Request to generate previews of one or more creative manifests. Accepts either a single creative request or an array of requests for batch processing.
2726
2871
  */
2727
- export interface PreviewCreativeRequest {
2872
+ export type PreviewCreativeRequest = {
2728
2873
  format_id: FormatID;
2729
2874
  creative_manifest: CreativeManifest;
2730
2875
  /**
@@ -2750,14 +2895,112 @@ export interface PreviewCreativeRequest {
2750
2895
  * Specific template ID for custom format rendering
2751
2896
  */
2752
2897
  template_id?: string;
2753
- }
2898
+ /**
2899
+ * Output format for previews. 'url' returns preview_url (iframe-embeddable URL), 'html' returns preview_html (raw HTML for direct embedding). Default: 'url' for backward compatibility.
2900
+ */
2901
+ output_format?: 'url' | 'html';
2902
+ } | {
2903
+ /**
2904
+ * Array of preview requests (1-50 items). Each follows the single request structure.
2905
+ *
2906
+ * @minItems 1
2907
+ * @maxItems 50
2908
+ */
2909
+ requests: [
2910
+ {
2911
+ format_id: FormatID2;
2912
+ creative_manifest: CreativeManifest1;
2913
+ /**
2914
+ * Array of input sets for generating multiple preview variants
2915
+ */
2916
+ inputs?: {
2917
+ /**
2918
+ * Human-readable name for this input set
2919
+ */
2920
+ name: string;
2921
+ /**
2922
+ * Macro values to use for this preview
2923
+ */
2924
+ macros?: {
2925
+ [k: string]: string;
2926
+ };
2927
+ /**
2928
+ * Natural language description of the context for AI-generated content
2929
+ */
2930
+ context_description?: string;
2931
+ }[];
2932
+ /**
2933
+ * Specific template ID for custom format rendering
2934
+ */
2935
+ template_id?: string;
2936
+ /**
2937
+ * Output format for this preview. 'url' returns preview_url, 'html' returns preview_html.
2938
+ */
2939
+ output_format?: 'url' | 'html';
2940
+ },
2941
+ ...{
2942
+ format_id: FormatID2;
2943
+ creative_manifest: CreativeManifest1;
2944
+ /**
2945
+ * Array of input sets for generating multiple preview variants
2946
+ */
2947
+ inputs?: {
2948
+ /**
2949
+ * Human-readable name for this input set
2950
+ */
2951
+ name: string;
2952
+ /**
2953
+ * Macro values to use for this preview
2954
+ */
2955
+ macros?: {
2956
+ [k: string]: string;
2957
+ };
2958
+ /**
2959
+ * Natural language description of the context for AI-generated content
2960
+ */
2961
+ context_description?: string;
2962
+ }[];
2963
+ /**
2964
+ * Specific template ID for custom format rendering
2965
+ */
2966
+ template_id?: string;
2967
+ /**
2968
+ * Output format for this preview. 'url' returns preview_url, 'html' returns preview_html.
2969
+ */
2970
+ output_format?: 'url' | 'html';
2971
+ }[]
2972
+ ];
2973
+ /**
2974
+ * 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).
2975
+ */
2976
+ output_format?: 'url' | 'html';
2977
+ };
2754
2978
  /**
2755
- * Format identifier for rendering the preview
2979
+ * VAST (Video Ad Serving Template) tag for third-party video ad serving
2756
2980
  */
2981
+ export interface CreativeManifest1 {
2982
+ format_id: FormatID1;
2983
+ /**
2984
+ * Product name or offering being advertised. Maps to promoted_offerings in create_media_buy request to associate creative with the product being promoted.
2985
+ */
2986
+ promoted_offering?: string;
2987
+ /**
2988
+ * Map of asset IDs to actual asset content. Each key MUST match an asset_id from the format's assets_required 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.
2989
+ *
2990
+ * IMPORTANT: Creative manifest validation MUST be performed in the context of the format specification. The format defines what type each asset_id should be, which eliminates any validation ambiguity.
2991
+ */
2992
+ assets: {
2993
+ /**
2994
+ * This interface was referenced by `undefined`'s JSON-Schema definition
2995
+ * via the `patternProperty` "^[a-z0-9_]+$".
2996
+ */
2997
+ [k: string]: ImageAsset | VideoAsset | AudioAsset | VASTAsset | TextAsset | URLAsset | HTMLAsset | JavaScriptAsset | WebhookAsset | CSSAsset | DAASTAsset | PromotedOfferings;
2998
+ };
2999
+ }
2757
3000
  /**
2758
- * Response containing preview links for a creative. Each preview URL returns an HTML page that can be embedded in an iframe to display the rendered creative.
3001
+ * Response containing preview links for one or more creatives. Format matches the request: single preview response for single requests, batch results for batch requests.
2759
3002
  */
2760
- export interface PreviewCreativeResponse {
3003
+ export type PreviewCreativeResponse = {
2761
3004
  /**
2762
3005
  * Array of preview variants. Each preview corresponds to an input set from the request. If no inputs were provided, returns a single default preview.
2763
3006
  *
@@ -2774,92 +3017,7 @@ export interface PreviewCreativeResponse {
2774
3017
  *
2775
3018
  * @minItems 1
2776
3019
  */
2777
- renders: [
2778
- {
2779
- /**
2780
- * Unique identifier for this rendered piece within the variant
2781
- */
2782
- render_id: string;
2783
- /**
2784
- * URL to an HTML page that renders this piece. Can be embedded in an iframe. Handles all rendering complexity internally (images, video players, audio players, interactive content, etc.).
2785
- */
2786
- preview_url: string;
2787
- /**
2788
- * Semantic role of this rendered piece. Use 'primary' for main content, 'companion' for associated banners, descriptive strings for device variants or custom roles.
2789
- */
2790
- role: string;
2791
- /**
2792
- * Dimensions for this rendered piece. For companion ads with multiple sizes, this specifies which size this piece is.
2793
- */
2794
- dimensions?: {
2795
- width: number;
2796
- height: number;
2797
- };
2798
- /**
2799
- * Optional security and embedding metadata for safe iframe integration
2800
- */
2801
- embedding?: {
2802
- /**
2803
- * Recommended iframe sandbox attribute value (e.g., 'allow-scripts allow-same-origin')
2804
- */
2805
- recommended_sandbox?: string;
2806
- /**
2807
- * Whether this output requires HTTPS for secure embedding
2808
- */
2809
- requires_https?: boolean;
2810
- /**
2811
- * Whether this output supports fullscreen mode
2812
- */
2813
- supports_fullscreen?: boolean;
2814
- /**
2815
- * Content Security Policy requirements for embedding
2816
- */
2817
- csp_policy?: string;
2818
- };
2819
- },
2820
- ...{
2821
- /**
2822
- * Unique identifier for this rendered piece within the variant
2823
- */
2824
- render_id: string;
2825
- /**
2826
- * URL to an HTML page that renders this piece. Can be embedded in an iframe. Handles all rendering complexity internally (images, video players, audio players, interactive content, etc.).
2827
- */
2828
- preview_url: string;
2829
- /**
2830
- * Semantic role of this rendered piece. Use 'primary' for main content, 'companion' for associated banners, descriptive strings for device variants or custom roles.
2831
- */
2832
- role: string;
2833
- /**
2834
- * Dimensions for this rendered piece. For companion ads with multiple sizes, this specifies which size this piece is.
2835
- */
2836
- dimensions?: {
2837
- width: number;
2838
- height: number;
2839
- };
2840
- /**
2841
- * Optional security and embedding metadata for safe iframe integration
2842
- */
2843
- embedding?: {
2844
- /**
2845
- * Recommended iframe sandbox attribute value (e.g., 'allow-scripts allow-same-origin')
2846
- */
2847
- recommended_sandbox?: string;
2848
- /**
2849
- * Whether this output requires HTTPS for secure embedding
2850
- */
2851
- requires_https?: boolean;
2852
- /**
2853
- * Whether this output supports fullscreen mode
2854
- */
2855
- supports_fullscreen?: boolean;
2856
- /**
2857
- * Content Security Policy requirements for embedding
2858
- */
2859
- csp_policy?: string;
2860
- };
2861
- }[]
2862
- ];
3020
+ renders: [PreviewRender, ...PreviewRender[]];
2863
3021
  /**
2864
3022
  * The input parameters that generated this preview variant. Echoes back the request input or shows defaults used.
2865
3023
  */
@@ -2890,92 +3048,7 @@ export interface PreviewCreativeResponse {
2890
3048
  *
2891
3049
  * @minItems 1
2892
3050
  */
2893
- renders: [
2894
- {
2895
- /**
2896
- * Unique identifier for this rendered piece within the variant
2897
- */
2898
- render_id: string;
2899
- /**
2900
- * URL to an HTML page that renders this piece. Can be embedded in an iframe. Handles all rendering complexity internally (images, video players, audio players, interactive content, etc.).
2901
- */
2902
- preview_url: string;
2903
- /**
2904
- * Semantic role of this rendered piece. Use 'primary' for main content, 'companion' for associated banners, descriptive strings for device variants or custom roles.
2905
- */
2906
- role: string;
2907
- /**
2908
- * Dimensions for this rendered piece. For companion ads with multiple sizes, this specifies which size this piece is.
2909
- */
2910
- dimensions?: {
2911
- width: number;
2912
- height: number;
2913
- };
2914
- /**
2915
- * Optional security and embedding metadata for safe iframe integration
2916
- */
2917
- embedding?: {
2918
- /**
2919
- * Recommended iframe sandbox attribute value (e.g., 'allow-scripts allow-same-origin')
2920
- */
2921
- recommended_sandbox?: string;
2922
- /**
2923
- * Whether this output requires HTTPS for secure embedding
2924
- */
2925
- requires_https?: boolean;
2926
- /**
2927
- * Whether this output supports fullscreen mode
2928
- */
2929
- supports_fullscreen?: boolean;
2930
- /**
2931
- * Content Security Policy requirements for embedding
2932
- */
2933
- csp_policy?: string;
2934
- };
2935
- },
2936
- ...{
2937
- /**
2938
- * Unique identifier for this rendered piece within the variant
2939
- */
2940
- render_id: string;
2941
- /**
2942
- * URL to an HTML page that renders this piece. Can be embedded in an iframe. Handles all rendering complexity internally (images, video players, audio players, interactive content, etc.).
2943
- */
2944
- preview_url: string;
2945
- /**
2946
- * Semantic role of this rendered piece. Use 'primary' for main content, 'companion' for associated banners, descriptive strings for device variants or custom roles.
2947
- */
2948
- role: string;
2949
- /**
2950
- * Dimensions for this rendered piece. For companion ads with multiple sizes, this specifies which size this piece is.
2951
- */
2952
- dimensions?: {
2953
- width: number;
2954
- height: number;
2955
- };
2956
- /**
2957
- * Optional security and embedding metadata for safe iframe integration
2958
- */
2959
- embedding?: {
2960
- /**
2961
- * Recommended iframe sandbox attribute value (e.g., 'allow-scripts allow-same-origin')
2962
- */
2963
- recommended_sandbox?: string;
2964
- /**
2965
- * Whether this output requires HTTPS for secure embedding
2966
- */
2967
- requires_https?: boolean;
2968
- /**
2969
- * Whether this output supports fullscreen mode
2970
- */
2971
- supports_fullscreen?: boolean;
2972
- /**
2973
- * Content Security Policy requirements for embedding
2974
- */
2975
- csp_policy?: string;
2976
- };
2977
- }[]
2978
- ];
3051
+ renders: [PreviewRender, ...PreviewRender[]];
2979
3052
  /**
2980
3053
  * The input parameters that generated this preview variant. Echoes back the request input or shows defaults used.
2981
3054
  */
@@ -3005,7 +3078,198 @@ export interface PreviewCreativeResponse {
3005
3078
  * ISO 8601 timestamp when preview links expire
3006
3079
  */
3007
3080
  expires_at: string;
3008
- }
3081
+ } | {
3082
+ /**
3083
+ * Array of preview results corresponding to each request in the same order. results[0] is the result for requests[0], results[1] for requests[1], etc. Order is guaranteed even when some requests fail. Each result contains either a successful preview response or an error.
3084
+ *
3085
+ * @minItems 1
3086
+ */
3087
+ results: [
3088
+ ({
3089
+ success?: true;
3090
+ } | {
3091
+ success?: false;
3092
+ }),
3093
+ ...({
3094
+ success?: true;
3095
+ } | {
3096
+ success?: false;
3097
+ })[]
3098
+ ];
3099
+ };
3100
+ /**
3101
+ * A single rendered piece of a creative preview with discriminated output format
3102
+ */
3103
+ export type PreviewRender = {
3104
+ /**
3105
+ * Unique identifier for this rendered piece within the variant
3106
+ */
3107
+ render_id: string;
3108
+ /**
3109
+ * Discriminator indicating preview_url is provided
3110
+ */
3111
+ output_format: 'url';
3112
+ /**
3113
+ * URL to an HTML page that renders this piece. Can be embedded in an iframe.
3114
+ */
3115
+ preview_url: string;
3116
+ /**
3117
+ * Semantic role of this rendered piece. Use 'primary' for main content, 'companion' for associated banners, descriptive strings for device variants or custom roles.
3118
+ */
3119
+ role: string;
3120
+ /**
3121
+ * Dimensions for this rendered piece
3122
+ */
3123
+ dimensions?: {
3124
+ width: number;
3125
+ height: number;
3126
+ };
3127
+ /**
3128
+ * Optional security and embedding metadata for safe iframe integration
3129
+ */
3130
+ embedding?: {
3131
+ /**
3132
+ * Recommended iframe sandbox attribute value (e.g., 'allow-scripts allow-same-origin')
3133
+ */
3134
+ recommended_sandbox?: string;
3135
+ /**
3136
+ * Whether this output requires HTTPS for secure embedding
3137
+ */
3138
+ requires_https?: boolean;
3139
+ /**
3140
+ * Whether this output supports fullscreen mode
3141
+ */
3142
+ supports_fullscreen?: boolean;
3143
+ /**
3144
+ * Content Security Policy requirements for embedding
3145
+ */
3146
+ csp_policy?: string;
3147
+ };
3148
+ } | {
3149
+ /**
3150
+ * Unique identifier for this rendered piece within the variant
3151
+ */
3152
+ render_id: string;
3153
+ /**
3154
+ * Discriminator indicating preview_html is provided
3155
+ */
3156
+ output_format: 'html';
3157
+ /**
3158
+ * Raw HTML for this rendered piece. Can be embedded directly in the page without iframe. Security warning: Only use with trusted creative agents as this bypasses iframe sandboxing.
3159
+ */
3160
+ preview_html: string;
3161
+ /**
3162
+ * Semantic role of this rendered piece. Use 'primary' for main content, 'companion' for associated banners, descriptive strings for device variants or custom roles.
3163
+ */
3164
+ role: string;
3165
+ /**
3166
+ * Dimensions for this rendered piece
3167
+ */
3168
+ dimensions?: {
3169
+ width: number;
3170
+ height: number;
3171
+ };
3172
+ /**
3173
+ * Optional security and embedding metadata
3174
+ */
3175
+ embedding?: {
3176
+ /**
3177
+ * Recommended iframe sandbox attribute value (e.g., 'allow-scripts allow-same-origin')
3178
+ */
3179
+ recommended_sandbox?: string;
3180
+ /**
3181
+ * Whether this output requires HTTPS for secure embedding
3182
+ */
3183
+ requires_https?: boolean;
3184
+ /**
3185
+ * Whether this output supports fullscreen mode
3186
+ */
3187
+ supports_fullscreen?: boolean;
3188
+ /**
3189
+ * Content Security Policy requirements for embedding
3190
+ */
3191
+ csp_policy?: string;
3192
+ };
3193
+ } | {
3194
+ /**
3195
+ * Unique identifier for this rendered piece within the variant
3196
+ */
3197
+ render_id: string;
3198
+ /**
3199
+ * Discriminator indicating both preview_url and preview_html are provided
3200
+ */
3201
+ output_format: 'both';
3202
+ /**
3203
+ * URL to an HTML page that renders this piece. Can be embedded in an iframe.
3204
+ */
3205
+ preview_url: string;
3206
+ /**
3207
+ * Raw HTML for this rendered piece. Can be embedded directly in the page without iframe. Security warning: Only use with trusted creative agents as this bypasses iframe sandboxing.
3208
+ */
3209
+ preview_html: string;
3210
+ /**
3211
+ * Semantic role of this rendered piece. Use 'primary' for main content, 'companion' for associated banners, descriptive strings for device variants or custom roles.
3212
+ */
3213
+ role: string;
3214
+ /**
3215
+ * Dimensions for this rendered piece
3216
+ */
3217
+ dimensions?: {
3218
+ width: number;
3219
+ height: number;
3220
+ };
3221
+ /**
3222
+ * Optional security and embedding metadata for safe iframe integration
3223
+ */
3224
+ embedding?: {
3225
+ /**
3226
+ * Recommended iframe sandbox attribute value (e.g., 'allow-scripts allow-same-origin')
3227
+ */
3228
+ recommended_sandbox?: string;
3229
+ /**
3230
+ * Whether this output requires HTTPS for secure embedding
3231
+ */
3232
+ requires_https?: boolean;
3233
+ /**
3234
+ * Whether this output supports fullscreen mode
3235
+ */
3236
+ supports_fullscreen?: boolean;
3237
+ /**
3238
+ * Content Security Policy requirements for embedding
3239
+ */
3240
+ csp_policy?: string;
3241
+ };
3242
+ };
3243
+ /**
3244
+ * A destination platform where signals can be activated (DSP, sales agent, etc.)
3245
+ */
3246
+ export type Destination = {
3247
+ /**
3248
+ * Discriminator indicating this is a platform-based destination
3249
+ */
3250
+ type: 'platform';
3251
+ /**
3252
+ * Platform identifier for DSPs (e.g., 'the-trade-desk', 'amazon-dsp')
3253
+ */
3254
+ platform: string;
3255
+ /**
3256
+ * Optional account identifier on the platform
3257
+ */
3258
+ account?: string;
3259
+ } | {
3260
+ /**
3261
+ * Discriminator indicating this is an agent URL-based destination
3262
+ */
3263
+ type: 'agent';
3264
+ /**
3265
+ * URL identifying the destination agent (for sales agents, etc.)
3266
+ */
3267
+ agent_url: string;
3268
+ /**
3269
+ * Optional account identifier on the agent
3270
+ */
3271
+ account?: string;
3272
+ };
3009
3273
  /**
3010
3274
  * Request parameters for discovering signals based on description
3011
3275
  */
@@ -3015,26 +3279,15 @@ export interface GetSignalsRequest {
3015
3279
  */
3016
3280
  signal_spec: string;
3017
3281
  /**
3018
- * Where the signals need to be delivered
3282
+ * Destination platforms where signals need to be activated
3019
3283
  */
3020
3284
  deliver_to: {
3021
3285
  /**
3022
- * Target platforms for signal deployment
3023
- */
3024
- platforms: 'all' | string[];
3025
- /**
3026
- * Specific platform-account combinations
3286
+ * List of destination platforms (DSPs, sales agents, etc.). If the authenticated caller matches one of these destinations, activation keys will be included in the response.
3287
+ *
3288
+ * @minItems 1
3027
3289
  */
3028
- accounts?: {
3029
- /**
3030
- * Platform identifier
3031
- */
3032
- platform: string;
3033
- /**
3034
- * Account identifier on that platform
3035
- */
3036
- account: string;
3037
- }[];
3290
+ destinations: [Destination, ...Destination[]];
3038
3291
  /**
3039
3292
  * Countries where signals will be used (ISO codes)
3040
3293
  */
@@ -3066,6 +3319,114 @@ export interface GetSignalsRequest {
3066
3319
  */
3067
3320
  max_results?: number;
3068
3321
  }
3322
+ /**
3323
+ * A signal deployment to a specific destination platform with activation status and key
3324
+ */
3325
+ export type Deployment = {
3326
+ /**
3327
+ * Discriminator indicating this is a platform-based deployment
3328
+ */
3329
+ type: 'platform';
3330
+ /**
3331
+ * Platform identifier for DSPs
3332
+ */
3333
+ platform: string;
3334
+ /**
3335
+ * Account identifier if applicable
3336
+ */
3337
+ account?: string;
3338
+ /**
3339
+ * Whether signal is currently active on this destination
3340
+ */
3341
+ is_live: boolean;
3342
+ activation_key?: ActivationKey;
3343
+ /**
3344
+ * Estimated time to activate if not live, or to complete activation if in progress
3345
+ */
3346
+ estimated_activation_duration_minutes?: number;
3347
+ /**
3348
+ * Timestamp when activation completed (if is_live=true)
3349
+ */
3350
+ deployed_at?: string;
3351
+ } | {
3352
+ /**
3353
+ * Discriminator indicating this is an agent URL-based deployment
3354
+ */
3355
+ type: 'agent';
3356
+ /**
3357
+ * URL identifying the destination agent
3358
+ */
3359
+ agent_url: string;
3360
+ /**
3361
+ * Account identifier if applicable
3362
+ */
3363
+ account?: string;
3364
+ /**
3365
+ * Whether signal is currently active on this destination
3366
+ */
3367
+ is_live: boolean;
3368
+ activation_key?: ActivationKey1;
3369
+ /**
3370
+ * Estimated time to activate if not live, or to complete activation if in progress
3371
+ */
3372
+ estimated_activation_duration_minutes?: number;
3373
+ /**
3374
+ * Timestamp when activation completed (if is_live=true)
3375
+ */
3376
+ deployed_at?: string;
3377
+ };
3378
+ /**
3379
+ * The key to use for targeting. Only present if is_live=true AND requester has access to this destination.
3380
+ */
3381
+ export type ActivationKey = {
3382
+ /**
3383
+ * Segment ID based targeting
3384
+ */
3385
+ type: 'segment_id';
3386
+ /**
3387
+ * The platform-specific segment identifier to use in campaign targeting
3388
+ */
3389
+ segment_id: string;
3390
+ } | {
3391
+ /**
3392
+ * Key-value pair based targeting
3393
+ */
3394
+ type: 'key_value';
3395
+ /**
3396
+ * The targeting parameter key
3397
+ */
3398
+ key: string;
3399
+ /**
3400
+ * The targeting parameter value
3401
+ */
3402
+ value: string;
3403
+ };
3404
+ /**
3405
+ * The key to use for targeting. Only present if is_live=true AND requester has access to this destination.
3406
+ */
3407
+ export type ActivationKey1 = {
3408
+ /**
3409
+ * Segment ID based targeting
3410
+ */
3411
+ type: 'segment_id';
3412
+ /**
3413
+ * The platform-specific segment identifier to use in campaign targeting
3414
+ */
3415
+ segment_id: string;
3416
+ } | {
3417
+ /**
3418
+ * Key-value pair based targeting
3419
+ */
3420
+ type: 'key_value';
3421
+ /**
3422
+ * The targeting parameter key
3423
+ */
3424
+ key: string;
3425
+ /**
3426
+ * The targeting parameter value
3427
+ */
3428
+ value: string;
3429
+ };
3069
3430
  /**
3070
3431
  * Response payload for get_signals task
3071
3432
  */
@@ -3099,34 +3460,9 @@ export interface GetSignalsResponse {
3099
3460
  */
3100
3461
  coverage_percentage: number;
3101
3462
  /**
3102
- * Array of platform deployments
3463
+ * Array of destination deployments
3103
3464
  */
3104
- deployments: {
3105
- /**
3106
- * Platform name
3107
- */
3108
- platform: string;
3109
- /**
3110
- * Specific account if applicable
3111
- */
3112
- account?: string | null;
3113
- /**
3114
- * Whether signal is currently active
3115
- */
3116
- is_live: boolean;
3117
- /**
3118
- * Deployment scope
3119
- */
3120
- scope: 'platform-wide' | 'account-specific';
3121
- /**
3122
- * Platform-specific segment ID
3123
- */
3124
- decisioning_platform_segment_id?: string;
3125
- /**
3126
- * Time to activate if not live
3127
- */
3128
- estimated_activation_duration_minutes?: number;
3129
- }[];
3465
+ deployments: Deployment[];
3130
3466
  /**
3131
3467
  * Pricing information
3132
3468
  */
@@ -3150,7 +3486,7 @@ export interface GetSignalsResponse {
3150
3486
  * Standard error structure for task-specific errors and warnings
3151
3487
  */
3152
3488
  /**
3153
- * Request parameters for activating a signal on a specific platform/account
3489
+ * A destination platform where signals can be activated (DSP, sales agent, etc.)
3154
3490
  */
3155
3491
  export interface ActivateSignalRequest {
3156
3492
  /**
@@ -3158,36 +3494,29 @@ export interface ActivateSignalRequest {
3158
3494
  */
3159
3495
  signal_agent_segment_id: string;
3160
3496
  /**
3161
- * The target platform for activation
3162
- */
3163
- platform: string;
3164
- /**
3165
- * Account identifier (required for account-specific activation)
3497
+ * Target destination(s) for activation. If the authenticated caller matches one of these destinations, activation keys will be included in the response.
3498
+ *
3499
+ * @minItems 1
3166
3500
  */
3167
- account?: string;
3501
+ destinations: [Destination, ...Destination[]];
3168
3502
  }
3169
3503
  /**
3170
- * Response payload for activate_signal task
3504
+ * Response payload for activate_signal task. Returns either complete success data OR error information, never both. This enforces atomic operation semantics - the signal is either fully activated or not activated at all.
3171
3505
  */
3172
- export interface ActivateSignalResponse {
3173
- /**
3174
- * The platform-specific ID to use once activated
3175
- */
3176
- decisioning_platform_segment_id?: string;
3177
- /**
3178
- * Estimated time to complete (optional)
3179
- */
3180
- estimated_activation_duration_minutes?: number;
3506
+ export type ActivateSignalResponse = {
3181
3507
  /**
3182
- * Timestamp when activation completed (optional)
3508
+ * Array of deployment results for each destination
3183
3509
  */
3184
- deployed_at?: string;
3510
+ deployments: Deployment[];
3511
+ } | {
3185
3512
  /**
3186
- * Task-specific errors and warnings (e.g., activation failures, platform issues)
3513
+ * Array of errors explaining why activation failed (e.g., platform connectivity issues, signal definition problems, authentication failures)
3514
+ *
3515
+ * @minItems 1
3187
3516
  */
3188
- errors?: Error[];
3189
- }
3517
+ errors: [Error, ...Error[]];
3518
+ };
3190
3519
  /**
3191
- * Standard error structure for task-specific errors and warnings
3520
+ * A signal deployment to a specific destination platform with activation status and key
3192
3521
  */
3193
3522
  //# sourceMappingURL=tools.generated.d.ts.map