@adcp/sdk 7.10.2 → 7.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. package/compliance/cache/3.1.0-rc.2/domains/brand/index.yaml +160 -0
  2. package/compliance/cache/3.1.0-rc.2/domains/brand/scenarios/distributed_brand_resolution.yaml +415 -0
  3. package/compliance/cache/3.1.0-rc.2/domains/brand/scenarios/single_side_trust_extension.yaml +454 -0
  4. package/compliance/cache/3.1.0-rc.2/domains/creative/index.yaml +339 -0
  5. package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/billing_out_of_band.yaml +153 -0
  6. package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/canonical_supported_formats.yaml +212 -0
  7. package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/creative_lifecycle_webhooks.yaml +389 -0
  8. package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/native_in_feed.yaml +543 -0
  9. package/compliance/cache/3.1.0-rc.2/domains/governance/index.yaml +682 -0
  10. package/compliance/cache/3.1.0-rc.2/domains/media-buy/index.yaml +789 -0
  11. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/audience_buy_flow.yaml +380 -0
  12. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/available_actions.yaml +565 -0
  13. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/billing_finality_delivery.yaml +354 -0
  14. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/canonical_formats.yaml +861 -0
  15. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/clicks_buy_flow.yaml +264 -0
  16. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/completed_views_buy_flow.yaml +344 -0
  17. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/create_media_buy_async.yaml +234 -0
  18. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +419 -0
  19. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/creative_reception.yaml +247 -0
  20. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/delivery_reporting.yaml +357 -0
  21. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/dependency_impairment.yaml +633 -0
  22. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/dependency_impairment_cardinality.yaml +800 -0
  23. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/event_dedup_flow.yaml +399 -0
  24. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/frequency_cap_enforcement.yaml +309 -0
  25. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_approved.yaml +214 -0
  26. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_conditions.yaml +199 -0
  27. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_denied.yaml +204 -0
  28. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_denied_recovery.yaml +252 -0
  29. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/invalid_transitions.yaml +289 -0
  30. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/inventory_list_no_match.yaml +148 -0
  31. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/inventory_list_targeting.yaml +276 -0
  32. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/measurement_accountability.yaml +244 -0
  33. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/measurement_terms_rejected.yaml +203 -0
  34. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/package_correlation_legacy_fallback.yaml +113 -0
  35. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/pending_creatives_to_start.yaml +292 -0
  36. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/per_creative_conversion_attribution.yaml +500 -0
  37. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/performance_buy_flow.yaml +428 -0
  38. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/performance_buy_flow_roas.yaml +470 -0
  39. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/product_signal_targeting.yaml +373 -0
  40. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_finalize.yaml +399 -0
  41. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_finalize_asap_timing.yaml +264 -0
  42. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_not_found_errors.yaml +257 -0
  43. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_audit_observation.yaml +333 -0
  44. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_enforcement.yaml +517 -0
  45. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_truth_of_claim.yaml +294 -0
  46. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/reach_buy_flow.yaml +823 -0
  47. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/refine_finalize_exclusivity.yaml +360 -0
  48. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/refine_products.yaml +148 -0
  49. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_accountability.yaml +293 -0
  50. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +307 -0
  51. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_optimization_flow.yaml +576 -0
  52. package/compliance/cache/3.1.0-rc.2/domains/media-buy/state-machine.yaml +442 -0
  53. package/compliance/cache/3.1.0-rc.2/domains/signals/index.yaml +266 -0
  54. package/compliance/cache/3.1.0-rc.2/domains/sponsored-intelligence/index.yaml +256 -0
  55. package/compliance/cache/3.1.0-rc.2/index.json +356 -0
  56. package/compliance/cache/3.1.0-rc.2/protocols/brand/index.yaml +160 -0
  57. package/compliance/cache/3.1.0-rc.2/protocols/brand/scenarios/distributed_brand_resolution.yaml +415 -0
  58. package/compliance/cache/3.1.0-rc.2/protocols/brand/scenarios/single_side_trust_extension.yaml +454 -0
  59. package/compliance/cache/3.1.0-rc.2/protocols/creative/index.yaml +339 -0
  60. package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/billing_out_of_band.yaml +153 -0
  61. package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/canonical_supported_formats.yaml +212 -0
  62. package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/creative_lifecycle_webhooks.yaml +389 -0
  63. package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/native_in_feed.yaml +543 -0
  64. package/compliance/cache/3.1.0-rc.2/protocols/governance/index.yaml +682 -0
  65. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/index.yaml +789 -0
  66. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/audience_buy_flow.yaml +380 -0
  67. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/available_actions.yaml +565 -0
  68. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/billing_finality_delivery.yaml +354 -0
  69. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/canonical_formats.yaml +861 -0
  70. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/clicks_buy_flow.yaml +264 -0
  71. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/completed_views_buy_flow.yaml +344 -0
  72. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/create_media_buy_async.yaml +234 -0
  73. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +419 -0
  74. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/creative_reception.yaml +247 -0
  75. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/delivery_reporting.yaml +357 -0
  76. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/dependency_impairment.yaml +633 -0
  77. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/dependency_impairment_cardinality.yaml +800 -0
  78. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/event_dedup_flow.yaml +399 -0
  79. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/frequency_cap_enforcement.yaml +309 -0
  80. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_approved.yaml +214 -0
  81. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_conditions.yaml +199 -0
  82. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_denied.yaml +204 -0
  83. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_denied_recovery.yaml +252 -0
  84. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/invalid_transitions.yaml +289 -0
  85. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/inventory_list_no_match.yaml +148 -0
  86. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/inventory_list_targeting.yaml +276 -0
  87. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/measurement_accountability.yaml +244 -0
  88. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +203 -0
  89. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/package_correlation_legacy_fallback.yaml +113 -0
  90. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +292 -0
  91. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/per_creative_conversion_attribution.yaml +500 -0
  92. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/performance_buy_flow.yaml +428 -0
  93. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/performance_buy_flow_roas.yaml +470 -0
  94. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/product_signal_targeting.yaml +373 -0
  95. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_finalize.yaml +399 -0
  96. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_finalize_asap_timing.yaml +264 -0
  97. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_not_found_errors.yaml +257 -0
  98. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_audit_observation.yaml +333 -0
  99. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_enforcement.yaml +517 -0
  100. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_truth_of_claim.yaml +294 -0
  101. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/reach_buy_flow.yaml +823 -0
  102. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/refine_finalize_exclusivity.yaml +360 -0
  103. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/refine_products.yaml +148 -0
  104. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_accountability.yaml +293 -0
  105. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +307 -0
  106. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_optimization_flow.yaml +576 -0
  107. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/state-machine.yaml +442 -0
  108. package/compliance/cache/3.1.0-rc.2/protocols/signals/index.yaml +266 -0
  109. package/compliance/cache/3.1.0-rc.2/protocols/sponsored-intelligence/index.yaml +256 -0
  110. package/compliance/cache/3.1.0-rc.2/specialisms/audience-sync/index.yaml +313 -0
  111. package/compliance/cache/3.1.0-rc.2/specialisms/brand-rights/index.yaml +350 -0
  112. package/compliance/cache/3.1.0-rc.2/specialisms/brand-rights/scenarios/governance_denied.yaml +226 -0
  113. package/compliance/cache/3.1.0-rc.2/specialisms/collection-lists/index.yaml +359 -0
  114. package/compliance/cache/3.1.0-rc.2/specialisms/content-standards/index.yaml +572 -0
  115. package/compliance/cache/3.1.0-rc.2/specialisms/creative-ad-server/index.yaml +409 -0
  116. package/compliance/cache/3.1.0-rc.2/specialisms/creative-generative/generative-seller.yaml +807 -0
  117. package/compliance/cache/3.1.0-rc.2/specialisms/creative-generative/index.yaml +758 -0
  118. package/compliance/cache/3.1.0-rc.2/specialisms/creative-template/index.yaml +510 -0
  119. package/compliance/cache/3.1.0-rc.2/specialisms/governance-aware-seller/index.yaml +143 -0
  120. package/compliance/cache/3.1.0-rc.2/specialisms/governance-aware-seller/scenarios/governance_multi_agent_rejected.yaml +117 -0
  121. package/compliance/cache/3.1.0-rc.2/specialisms/governance-delivery-monitor/index.yaml +441 -0
  122. package/compliance/cache/3.1.0-rc.2/specialisms/governance-spend-authority/denied.yaml +221 -0
  123. package/compliance/cache/3.1.0-rc.2/specialisms/governance-spend-authority/index.yaml +330 -0
  124. package/compliance/cache/3.1.0-rc.2/specialisms/property-lists/index.yaml +482 -0
  125. package/compliance/cache/3.1.0-rc.2/specialisms/sales-broadcast-tv/index.yaml +738 -0
  126. package/compliance/cache/3.1.0-rc.2/specialisms/sales-catalog-driven/index.yaml +840 -0
  127. package/compliance/cache/3.1.0-rc.2/specialisms/sales-guaranteed/index.yaml +601 -0
  128. package/compliance/cache/3.1.0-rc.2/specialisms/sales-non-guaranteed/index.yaml +546 -0
  129. package/compliance/cache/3.1.0-rc.2/specialisms/sales-proposal-mode/index.yaml +586 -0
  130. package/compliance/cache/3.1.0-rc.2/specialisms/sales-social/index.yaml +919 -0
  131. package/compliance/cache/3.1.0-rc.2/specialisms/signal-marketplace/index.yaml +424 -0
  132. package/compliance/cache/3.1.0-rc.2/specialisms/signal-marketplace/scenarios/governance_denied.yaml +210 -0
  133. package/compliance/cache/3.1.0-rc.2/specialisms/signal-owned/index.yaml +317 -0
  134. package/compliance/cache/3.1.0-rc.2/specialisms/sponsored-intelligence/index.yaml +59 -0
  135. package/compliance/cache/3.1.0-rc.2/test-kits/acme-outdoor-live.yaml +78 -0
  136. package/compliance/cache/3.1.0-rc.2/test-kits/acme-outdoor.yaml +223 -0
  137. package/compliance/cache/3.1.0-rc.2/test-kits/billing-gate-runner.yaml +115 -0
  138. package/compliance/cache/3.1.0-rc.2/test-kits/bistro-oranje.yaml +126 -0
  139. package/compliance/cache/3.1.0-rc.2/test-kits/distributed-brand-runner.yaml +281 -0
  140. package/compliance/cache/3.1.0-rc.2/test-kits/nova-motors.yaml +262 -0
  141. package/compliance/cache/3.1.0-rc.2/test-kits/osei-natural.yaml +126 -0
  142. package/compliance/cache/3.1.0-rc.2/test-kits/parallel-dispatch-runner.yaml +196 -0
  143. package/compliance/cache/3.1.0-rc.2/test-kits/rate-limit-trip-runner.yaml +172 -0
  144. package/compliance/cache/3.1.0-rc.2/test-kits/signed-requests-runner.yaml +155 -0
  145. package/compliance/cache/3.1.0-rc.2/test-kits/single-side-trust-runner.yaml +294 -0
  146. package/compliance/cache/3.1.0-rc.2/test-kits/substitution-observer-runner.yaml +688 -0
  147. package/compliance/cache/3.1.0-rc.2/test-kits/summit-foods.yaml +125 -0
  148. package/compliance/cache/3.1.0-rc.2/test-kits/webhook-receiver-runner.yaml +265 -0
  149. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/001-minimal-plan.json +43 -0
  150. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/002-full-plan.json +217 -0
  151. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
  152. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
  153. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
  154. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
  155. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
  156. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
  157. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
  158. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
  159. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
  160. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/README.md +220 -0
  161. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/canonicalization.json +241 -0
  162. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/keys.json +60 -0
  163. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
  164. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
  165. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
  166. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
  167. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
  168. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
  169. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
  170. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
  171. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
  172. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
  173. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
  174. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
  175. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
  176. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
  177. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
  178. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
  179. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
  180. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
  181. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
  182. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
  183. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
  184. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
  185. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
  186. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
  187. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
  188. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
  189. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
  190. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/028-unsigned-protocol-method-required.json +26 -0
  191. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/001-basic-post.json +30 -0
  192. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
  193. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/003-es256-post.json +30 -0
  194. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
  195. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
  196. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
  197. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
  198. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
  199. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
  200. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
  201. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
  202. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
  203. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/README.md +211 -0
  204. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/keys.json +61 -0
  205. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
  206. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
  207. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
  208. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
  209. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
  210. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
  211. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
  212. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
  213. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
  214. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
  215. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
  216. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
  217. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
  218. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
  219. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
  220. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
  221. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
  222. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
  223. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
  224. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
  225. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
  226. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
  227. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
  228. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
  229. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
  230. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
  231. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
  232. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
  233. package/compliance/cache/3.1.0-rc.2/universal/billing-gate-dispatch.yaml +450 -0
  234. package/compliance/cache/3.1.0-rc.2/universal/canonical-format-validate-input.yaml +640 -0
  235. package/compliance/cache/3.1.0-rc.2/universal/capability-discovery.yaml +125 -0
  236. package/compliance/cache/3.1.0-rc.2/universal/collection-lists-pagination-integrity.yaml +306 -0
  237. package/compliance/cache/3.1.0-rc.2/universal/comply-controller-mode-gate.yaml +141 -0
  238. package/compliance/cache/3.1.0-rc.2/universal/content-standards-pagination-integrity.yaml +326 -0
  239. package/compliance/cache/3.1.0-rc.2/universal/deterministic-testing.yaml +1430 -0
  240. package/compliance/cache/3.1.0-rc.2/universal/error-compliance-signals.yaml +377 -0
  241. package/compliance/cache/3.1.0-rc.2/universal/error-compliance.yaml +528 -0
  242. package/compliance/cache/3.1.0-rc.2/universal/fictional-entities.yaml +307 -0
  243. package/compliance/cache/3.1.0-rc.2/universal/get-media-buys-pagination-integrity.yaml +160 -0
  244. package/compliance/cache/3.1.0-rc.2/universal/get-signals-pagination-integrity.yaml +210 -0
  245. package/compliance/cache/3.1.0-rc.2/universal/idempotency.yaml +861 -0
  246. package/compliance/cache/3.1.0-rc.2/universal/notification-config-event-scope.yaml +119 -0
  247. package/compliance/cache/3.1.0-rc.2/universal/notification-config-lifecycle.yaml +337 -0
  248. package/compliance/cache/3.1.0-rc.2/universal/notification-config-rejections.yaml +107 -0
  249. package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity-creative-formats.yaml +265 -0
  250. package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity-list-accounts.yaml +245 -0
  251. package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity.yaml +263 -0
  252. package/compliance/cache/3.1.0-rc.2/universal/property-lists-pagination-integrity.yaml +307 -0
  253. package/compliance/cache/3.1.0-rc.2/universal/read-tool-idempotency.yaml +405 -0
  254. package/compliance/cache/3.1.0-rc.2/universal/runner-output-contract.yaml +1285 -0
  255. package/compliance/cache/3.1.0-rc.2/universal/schema-validation-signals.yaml +181 -0
  256. package/compliance/cache/3.1.0-rc.2/universal/schema-validation.yaml +548 -0
  257. package/compliance/cache/3.1.0-rc.2/universal/security.yaml +539 -0
  258. package/compliance/cache/3.1.0-rc.2/universal/signed-requests.yaml +217 -0
  259. package/compliance/cache/3.1.0-rc.2/universal/stale-response-advisory.yaml +295 -0
  260. package/compliance/cache/3.1.0-rc.2/universal/storyboard-schema.yaml +2194 -0
  261. package/compliance/cache/3.1.0-rc.2/universal/v3-envelope-integrity.yaml +117 -0
  262. package/compliance/cache/3.1.0-rc.2/universal/version-negotiation.yaml +130 -0
  263. package/compliance/cache/3.1.0-rc.2/universal/webhook-emission.yaml +411 -0
  264. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-bulk-webhooks.yaml +82 -0
  265. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-product-webhooks.yaml +83 -0
  266. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-products.yaml +151 -0
  267. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-signal-webhooks.yaml +83 -0
  268. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-signals.yaml +149 -0
  269. package/dist/lib/index.d.ts +1 -1
  270. package/dist/lib/index.d.ts.map +1 -1
  271. package/dist/lib/index.js +9 -5
  272. package/dist/lib/index.js.map +1 -1
  273. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  274. package/dist/lib/testing/storyboard/default-invariants.js +30 -1
  275. package/dist/lib/testing/storyboard/default-invariants.js.map +1 -1
  276. package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
  277. package/dist/lib/testing/storyboard/runner.js +84 -21
  278. package/dist/lib/testing/storyboard/runner.js.map +1 -1
  279. package/dist/lib/testing/storyboard/types.d.ts +21 -0
  280. package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
  281. package/dist/lib/testing/storyboard/types.js.map +1 -1
  282. package/dist/lib/testing/types.d.ts +9 -0
  283. package/dist/lib/testing/types.d.ts.map +1 -1
  284. package/dist/lib/types/schemas.generated.d.ts +6707 -12040
  285. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  286. package/dist/lib/types/schemas.generated.js +1 -1
  287. package/dist/lib/types/schemas.generated.js.map +1 -1
  288. package/dist/lib/utils/signal-id-builders.d.ts +19 -0
  289. package/dist/lib/utils/signal-id-builders.d.ts.map +1 -1
  290. package/dist/lib/utils/signal-id-builders.js +30 -0
  291. package/dist/lib/utils/signal-id-builders.js.map +1 -1
  292. package/dist/lib/utils/tool-request-schemas.d.ts.map +1 -1
  293. package/dist/lib/utils/tool-request-schemas.js +3 -0
  294. package/dist/lib/utils/tool-request-schemas.js.map +1 -1
  295. package/dist/lib/v2/projection/constants.d.ts +28 -0
  296. package/dist/lib/v2/projection/constants.d.ts.map +1 -0
  297. package/dist/lib/v2/projection/constants.js +31 -0
  298. package/dist/lib/v2/projection/constants.js.map +1 -0
  299. package/dist/lib/v2/projection/registry.d.ts.map +1 -1
  300. package/dist/lib/v2/projection/registry.js +9 -4
  301. package/dist/lib/v2/projection/registry.js.map +1 -1
  302. package/dist/lib/version.d.ts +3 -3
  303. package/dist/lib/version.js +3 -3
  304. package/package.json +1 -1
  305. package/skills/SHAPE-GOTCHAS.md +5 -0
@@ -0,0 +1,807 @@
1
+ id: creative_generative/seller
2
+ version: "1.0.0"
3
+ title: "Generative seller agent"
4
+ category: creative_generative
5
+ summary: "Seller agent that generates creatives from briefs at buy time — no pre-built assets required."
6
+ track: media_buy
7
+ required_tools:
8
+ - sync_governance
9
+ - get_products
10
+ - create_media_buy
11
+ - list_creative_formats
12
+ - sync_creatives
13
+ - get_media_buy_delivery
14
+ requires_scenarios:
15
+ - media_buy_seller/refine_products
16
+ - media_buy_seller/delivery_reporting
17
+ - governance_aware_seller/governance_multi_agent_rejected
18
+
19
+ # Cross-step assertion (adcp#2664). status.monotonic rejects resource
20
+ # status transitions observed across steps that aren't on the spec
21
+ # lifecycle graph — e.g. active → pending_creatives on a media_buy or
22
+ # approved → processing on a creative asset.
23
+ invariants:
24
+ - status.monotonic
25
+
26
+ narrative: |
27
+ You run a generative sell-side platform — an AI ad network, generative DSP, or any system that
28
+ both sells inventory and generates creatives from a brief. The buyer doesn't upload finished
29
+ assets. Instead, they describe what they want via a creative brief, point you at a brand.json,
30
+ and your platform produces finished creatives ready for delivery.
31
+
32
+ This is the media buy seller flow with generative creative capabilities. Your platform handles
33
+ the full lifecycle from brief to reporting, but the creative sync step accepts briefs instead
34
+ of static assets. Your formats declare what brief inputs they accept, and your platform
35
+ generates the creative — potentially asynchronously.
36
+
37
+ A programmatic seller with generative capabilities should also support standard IAB formats
38
+ (display, video, VAST, etc.) for buyers who bring their own assets. A platform that sells
39
+ programmatic inventory but can't accept a pre-built VAST tag or display banner is incoherent.
40
+ The generative capability is additive to standard programmatic creative acceptance.
41
+
42
+ This storyboard focuses on the generative creative delta. The account setup includes
43
+ governance agent registration before the buy flow; proposal refinement works identically
44
+ to the base media_buy_seller storyboard.
45
+
46
+ context:
47
+ governance_agent_url: "https://test-agent.adcontextprotocol.org"
48
+
49
+ agent:
50
+ interaction_model: media_buy_seller
51
+ capabilities:
52
+ - sells_media
53
+ - accepts_briefs
54
+ - supports_generation
55
+ - supports_guaranteed
56
+ - supports_non_guaranteed
57
+ examples:
58
+ - "OpenAds"
59
+ - "AI ad networks"
60
+ - "Generative DSPs"
61
+
62
+ caller:
63
+ role: buyer_agent
64
+ example: "Scope3 (DSP)"
65
+
66
+ prerequisites:
67
+ description: |
68
+ The caller needs a brand identity hosted at the brand's domain (brand.json) or resolvable
69
+ via AgenticAdvertising.org. The brand.json provides visual identity — logos, colors, fonts,
70
+ tone — that the generative seller uses to produce on-brand creatives. The test kit provides
71
+ a sample brand with campaign parameters.
72
+ test_kit: "test-kits/acme-outdoor.yaml"
73
+ controller_seeding: true
74
+
75
+ fixtures:
76
+ products:
77
+ - product_id: "outdoor_display_q2"
78
+ delivery_type: "guaranteed"
79
+ channels: ["display"]
80
+ format_ids:
81
+ - id: "display_300x250"
82
+ - product_id: "outdoor_video_q2"
83
+ delivery_type: "guaranteed"
84
+ channels: ["video"]
85
+ format_ids:
86
+ - id: "video_15s"
87
+ pricing_options:
88
+ - product_id: "outdoor_display_q2"
89
+ pricing_option_id: "cpm_guaranteed"
90
+ pricing_model: "cpm"
91
+ currency: "USD"
92
+ fixed_price: 12.0
93
+ - product_id: "outdoor_video_q2"
94
+ pricing_option_id: "cpm_standard"
95
+ pricing_model: "cpm"
96
+ currency: "USD"
97
+ fixed_price: 12.0
98
+
99
+ phases:
100
+ - id: capability_discovery
101
+ title: "Capability discovery"
102
+ narrative: |
103
+ The buyer calls get_adcp_capabilities to confirm the agent supports media buying before sending briefs or creating buys.
104
+
105
+ steps:
106
+ - id: get_capabilities
107
+ title: "Check agent capabilities"
108
+ narrative: |
109
+ Verify that the agent declares the expected protocol support before
110
+ proceeding with domain-specific operations.
111
+ task: get_adcp_capabilities
112
+ schema_ref: "protocol/get-adcp-capabilities-request.json"
113
+ response_schema_ref: "protocol/get-adcp-capabilities-response.json"
114
+ doc_ref: "/protocol/get_adcp_capabilities"
115
+ comply_scenario: capability_discovery
116
+ stateful: false
117
+ expected: |
118
+ Return capabilities declaring media_buy in supported_protocols, confirming the agent sells media.
119
+ sample_request:
120
+ context:
121
+ correlation_id: "creative_generative--seller--get_capabilities"
122
+ validations:
123
+ - check: response_schema
124
+ description: "Response matches get-adcp-capabilities-response.json schema"
125
+ - check: field_present
126
+ path: "supported_protocols"
127
+ description: "Agent declares supported protocols"
128
+
129
+ - check: field_present
130
+ path: "context"
131
+ description: "Response echoes back the context object"
132
+ - check: field_value
133
+ path: "context.correlation_id"
134
+ value: "creative_generative--seller--get_capabilities"
135
+ description: "Context correlation_id returned unchanged"
136
+ - id: account_setup
137
+ title: "Account setup"
138
+ narrative: |
139
+ Before buying anything, the buyer establishes an account relationship with your platform.
140
+ This is the same handshake as any media buy seller — the buyer identifies the brand and
141
+ operator, and you provision the account.
142
+
143
+ steps:
144
+ - id: sync_accounts
145
+ title: "Establish account relationship"
146
+ narrative: |
147
+ The buyer registers their brand and operator with your platform. Your platform should
148
+ resolve the brand via AgenticAdvertising.org to pull brand identity for creative
149
+ generation. If the brand domain doesn't resolve, return an error — don't generate
150
+ creatives for unknown brands.
151
+ task: sync_accounts
152
+ schema_ref: "account/sync-accounts-request.json"
153
+ response_schema_ref: "account/sync-accounts-response.json"
154
+ doc_ref: "/accounts/tasks/sync_accounts"
155
+ stateful: true
156
+ expected: |
157
+ Return the account with:
158
+ - account_id: your platform's identifier for this relationship
159
+ - action: created or updated
160
+ - status: active (instant approval) or pending_approval (requires human review)
161
+ - account_scope: operator, brand, operator_brand, or agent
162
+ - setup: URL and message if pending_approval
163
+
164
+ sample_request:
165
+ accounts:
166
+ - brand:
167
+ domain: "acmeoutdoor.example"
168
+ operator: "pinnacle-agency.example"
169
+ billing: "operator"
170
+ payment_terms: "net_30"
171
+
172
+ idempotency_key: "$generate:uuid_v4#creative_generative_seller_account_setup_sync_accounts"
173
+ context:
174
+ correlation_id: "creative_generative--seller--sync_accounts"
175
+ validations:
176
+ - check: response_schema
177
+ description: "Response matches sync-accounts-response.json schema"
178
+ - check: field_present
179
+ path: "accounts[0].account_id"
180
+ description: "Account has a platform-assigned ID"
181
+ - check: field_present
182
+ path: "accounts[0].status"
183
+ description: "Account has a status (active or pending_approval)"
184
+
185
+ - check: field_present
186
+ path: "context"
187
+ description: "Response echoes back the context object"
188
+ - check: field_value
189
+ path: "context.correlation_id"
190
+ value: "creative_generative--seller--sync_accounts"
191
+ description: "Context correlation_id returned unchanged"
192
+ - id: sync_governance
193
+ title: "Register governance agent"
194
+ narrative: |
195
+ The buyer registers the configured governance agent on the account before
196
+ creating the media buy with generative creative support.
197
+ task: sync_governance
198
+ schema_ref: "account/sync-governance-request.json"
199
+ response_schema_ref: "account/sync-governance-response.json"
200
+ doc_ref: "/accounts/tasks/sync_governance"
201
+ stateful: true
202
+ expected: |
203
+ Acknowledge governance registration for the account:
204
+ - status: synced
205
+ - governance_agents[0].url echoes the configured governance agent
206
+
207
+ sample_request:
208
+ accounts:
209
+ - account:
210
+ brand:
211
+ domain: "acmeoutdoor.example"
212
+ operator: "pinnacle-agency.example"
213
+ governance_agents:
214
+ - url: "$context.governance_agent_url"
215
+ authentication:
216
+ schemes: ["Bearer"]
217
+ credentials: "gov-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
218
+
219
+ idempotency_key: "$generate:uuid_v4#creative_generative_seller_account_setup_sync_governance"
220
+ context:
221
+ correlation_id: "creative_generative--seller--sync_governance"
222
+ validations:
223
+ - check: response_schema
224
+ description: "Response matches sync-governance-response.json schema"
225
+ - check: field_value
226
+ path: "accounts[0].status"
227
+ value: "synced"
228
+ description: "Governance agent is registered on the account"
229
+ - check: field_present
230
+ path: "context"
231
+ description: "Response echoes back the context object"
232
+ - check: field_value
233
+ path: "context.correlation_id"
234
+ value: "creative_generative--seller--sync_governance"
235
+ description: "Context correlation_id returned unchanged"
236
+ - id: format_discovery
237
+ title: "Format discovery"
238
+ narrative: |
239
+ The buyer discovers what your platform can accept. A generative seller's format catalog
240
+ has two parts: generative formats that accept briefs as inputs, and standard IAB formats
241
+ that accept pre-built assets.
242
+
243
+ Generative formats declare brief asset slots. Standard formats declare image, video, or
244
+ HTML asset slots. The buyer uses this to decide whether to send a brief or upload finished
245
+ assets for each package.
246
+
247
+ A platform selling programmatic inventory should support both. Generative-only is fine for
248
+ a pure creative agent, but a seller that takes media buys needs to accept pre-built assets
249
+ from buyers who already have creatives.
250
+
251
+ steps:
252
+ - id: list_formats
253
+ title: "Discover creative formats"
254
+ narrative: |
255
+ The buyer asks what formats your platform supports. Your response should include both
256
+ generative formats (accepting brief inputs) and standard IAB formats (accepting image,
257
+ video, VAST, etc.).
258
+
259
+ A programmatic seller that only returns generative formats means the buyer can never
260
+ bring their own assets. If you sell inventory, you should accept pre-built creatives
261
+ too — the generative capability is additive.
262
+ task: list_creative_formats
263
+ schema_ref: "creative/list-creative-formats-request.json"
264
+ response_schema_ref: "creative/list-creative-formats-response.json"
265
+ doc_ref: "/creative/task-reference/list_creative_formats"
266
+ comply_scenario: creative_lifecycle
267
+ stateful: false
268
+ expected: |
269
+ Return your format catalog. It should include:
270
+
271
+ Generative formats:
272
+ - format_id with your agent_url and a unique id (e.g., "display_300x250_generative")
273
+ - Asset slots accepting brief asset types
274
+ - Render dimensions for the output
275
+ - Description indicating this is a generative format
276
+
277
+ Standard formats:
278
+ - Standard IAB display formats (300x250, 728x90, etc.)
279
+ - Video formats (VAST, pre-roll, etc.) if applicable
280
+ - Asset slots accepting image, video, html, etc.
281
+
282
+ Both types should be present for a programmatic seller. Buyers who already
283
+ have creatives need to be able to upload them directly.
284
+
285
+ sample_request:
286
+ context:
287
+ correlation_id: "creative_generative--seller--list_formats"
288
+
289
+ validations:
290
+ - check: response_schema
291
+ description: "Response matches list-creative-formats-response.json schema"
292
+ - check: field_present
293
+ path: "formats"
294
+ description: "Response contains a formats array"
295
+ - check: field_present
296
+ path: "formats[0].format_id.agent_url"
297
+ description: "Each format has a format_id with agent_url"
298
+
299
+ - check: field_present
300
+ path: "context"
301
+ description: "Response echoes back the context object"
302
+ - check: field_value
303
+ path: "context.correlation_id"
304
+ value: "creative_generative--seller--list_formats"
305
+ description: "Context correlation_id returned unchanged"
306
+ - id: product_discovery
307
+ title: "Product discovery"
308
+ narrative: |
309
+ The buyer sends a natural-language brief describing what they want to buy. Your platform
310
+ interprets the brief against your inventory and returns products with pricing, delivery
311
+ forecasts, and creative format requirements.
312
+
313
+ Products from a generative seller should reference generative format IDs — telling the
314
+ buyer that this product accepts a brief rather than requiring pre-built assets. Products
315
+ may also reference standard formats for buyers who prefer to supply their own creatives.
316
+
317
+ steps:
318
+ - id: get_products_brief
319
+ title: "Send a brief"
320
+ narrative: |
321
+ The buyer describes what they want. Your platform returns products. Each product's
322
+ creative_format_ids should reference formats from the catalog — some generative,
323
+ some standard. The buyer uses this to decide the creative approach per product.
324
+ task: get_products
325
+ schema_ref: "media-buy/get-products-request.json"
326
+ response_schema_ref: "media-buy/get-products-response.json"
327
+ doc_ref: "/media-buy/task-reference/get_products"
328
+ comply_scenario: full_sales_flow
329
+ stateful: false
330
+ expected: |
331
+ Return products matching the brief. Each product should include:
332
+ - product_id: unique identifier
333
+ - name and description
334
+ - delivery_type: guaranteed or non_guaranteed
335
+ - pricing_models: available pricing options
336
+ - forecast: estimated impressions, reach
337
+ - creative_format_ids: formats this product accepts (including generative formats)
338
+
339
+ sample_request:
340
+ buying_mode: "brief"
341
+ brief: "Premium display and video inventory on outdoor lifestyle content. Q2 flight, $50K budget. Adults 25-54, US. We want your platform to generate the creatives from our brand brief."
342
+ account:
343
+ brand:
344
+ domain: "acmeoutdoor.example"
345
+ operator: "pinnacle-agency.example"
346
+
347
+ context:
348
+ correlation_id: "creative_generative--seller--get_products_brief"
349
+ validations:
350
+ - check: response_schema
351
+ description: "Response matches get-products-response.json schema"
352
+ - check: field_present
353
+ path: "products"
354
+ description: "Response contains a products array"
355
+ - check: field_present
356
+ path: "products[0].product_id"
357
+ description: "Each product has a product_id"
358
+
359
+ - check: field_present
360
+ path: "context"
361
+ description: "Response echoes back the context object"
362
+ - check: field_value
363
+ path: "context.correlation_id"
364
+ value: "creative_generative--seller--get_products_brief"
365
+ description: "Context correlation_id returned unchanged"
366
+ - check: field_present
367
+ path: "products[0].format_ids"
368
+ description: "Products include format_ids for creative requirements"
369
+ - check: field_present
370
+ path: "products[0].format_ids[0].agent_url"
371
+ description: "Format IDs include agent_url — must match this agent's URL"
372
+ - check: field_present
373
+ path: "products[0].format_ids[0].id"
374
+ description: "Format IDs include id — must be accepted back in sync_creatives"
375
+ - id: create_buy
376
+ title: "Create the media buy"
377
+ narrative: |
378
+ The buyer commits to specific products with budgets and flight dates. This is the same
379
+ create_media_buy flow as any seller — the generative aspect doesn't change the buy
380
+ creation. The buy may return pending_creatives status, indicating the buyer needs to
381
+ sync creatives (via brief) before the campaign can go live.
382
+
383
+ steps:
384
+ - id: create_media_buy
385
+ title: "Create a media buy"
386
+ narrative: |
387
+ The buyer commits to products. The response may include pending_creatives status
388
+ for packages that require creative sync before activation.
389
+ task: create_media_buy
390
+ schema_ref: "media-buy/create-media-buy-request.json"
391
+ response_schema_ref: "media-buy/create-media-buy-response.json"
392
+ doc_ref: "/media-buy/task-reference/create_media_buy"
393
+ comply_scenario: create_media_buy
394
+ stateful: true
395
+ expected: |
396
+ Process the media buy request and return one of:
397
+ - completed: buy confirmed, packages may be pending_creatives
398
+ - working: platform is processing (poll for status)
399
+ - submitted: long-running async (approval workflow, IO signing)
400
+ - input-required: need more information
401
+
402
+ sample_request:
403
+ brand:
404
+ domain: "acmeoutdoor.example"
405
+ account:
406
+ brand:
407
+ domain: "acmeoutdoor.example"
408
+ operator: "pinnacle-agency.example"
409
+ start_time: "2026-04-01T00:00:00Z"
410
+ end_time: "2026-06-30T23:59:59Z"
411
+ packages:
412
+ - product_id: "outdoor_display_q2"
413
+ budget: 30000
414
+ pricing_option_id: "cpm_guaranteed"
415
+ - product_id: "outdoor_video_q2"
416
+ budget: 20000
417
+ pricing_option_id: "cpm_standard"
418
+ push_notification_config:
419
+ url: "https://buyer.example/webhooks/adcp"
420
+ authentication:
421
+ schemes:
422
+ - "HMAC-SHA256"
423
+ credentials: "creative-generative-seller-webhook-secret-token"
424
+
425
+ idempotency_key: "$generate:uuid_v4#creative_generative_seller_create_buy_create_media_buy"
426
+ context:
427
+ correlation_id: "creative_generative--seller--create_media_buy"
428
+ context_outputs:
429
+ - name: media_buy_id
430
+ path: "media_buy_id"
431
+ validations:
432
+ - check: response_schema
433
+ description: "Response matches create-media-buy-response.json schema"
434
+
435
+ - check: field_present
436
+ path: "context"
437
+ description: "Response echoes back the context object"
438
+ - check: field_value
439
+ path: "context.correlation_id"
440
+ value: "creative_generative--seller--create_media_buy"
441
+ description: "Context correlation_id returned unchanged"
442
+ - id: creative_brief_sync
443
+ title: "Creative brief sync"
444
+ narrative: |
445
+ This is where a generative seller diverges from the standard flow. Instead of the buyer
446
+ uploading finished assets, they send a creative brief through sync_creatives. The brief
447
+ describes campaign messaging, tone, audience, and compliance requirements. The format_id
448
+ points to a generative format that accepts brief asset types.
449
+
450
+ Your platform resolves the brand via AgenticAdvertising.org (using the account's brand
451
+ domain), pulls brand.json for visual identity, and generates the creative. This may be
452
+ synchronous (accepted immediately) or asynchronous (pending_review while generation
453
+ completes). The buyer polls or waits for a webhook to know when the creative is ready.
454
+
455
+ steps:
456
+ - id: sync_creatives_brief
457
+ title: "Send creative brief via sync_creatives"
458
+ narrative: |
459
+ The buyer sends a creative brief through sync_creatives, using a generative format_id
460
+ that accepts brief asset types. The account's brand domain tells your platform where
461
+ to resolve brand identity for generation.
462
+
463
+ Your platform should actually read the operator and brand from the request — not
464
+ ignore them. If the brand domain is invalid or unresolvable, return a rejection
465
+ with a clear error rather than generating with defaults.
466
+ task: sync_creatives
467
+ schema_ref: "creative/sync-creatives-request.json"
468
+ response_schema_ref: "creative/sync-creatives-response.json"
469
+ doc_ref: "/creative/task-reference/sync_creatives"
470
+ comply_scenario: creative_sync
471
+ stateful: true
472
+ expected: |
473
+ Accept the creative brief and begin generation:
474
+ - Per-creative action: created
475
+ - Per-creative status: pending_review (generation in progress) or accepted (instant)
476
+ - The brand domain from the account should be resolved via AgenticAdvertising.org
477
+ - If the brand domain is invalid, reject with a clear error
478
+ - If the brief references a non-generative format, reject with format mismatch error
479
+
480
+ sample_request:
481
+ account:
482
+ brand:
483
+ domain: "acmeoutdoor.example"
484
+ operator: "pinnacle-agency.example"
485
+ creatives:
486
+ - creative_id: "gen_display_summer_sale"
487
+ name: "Summer Sale - Generated Display 300x250"
488
+ format_id:
489
+ agent_url: "https://your-platform.example.com"
490
+ id: "display_300x250_generative"
491
+ assets:
492
+ brief:
493
+ asset_type: "brief"
494
+ name: "Acme Outdoor Summer Sale Q2"
495
+ objective: "conversion"
496
+ tone: "Bold, adventurous, urgent"
497
+ audience: "Active adults 25-54, outdoor enthusiasts"
498
+ territory: "Summer gear clearance"
499
+ messaging:
500
+ headline: "Summer Sale — 40% Off All Gear"
501
+ tagline: "Gear up for less"
502
+ cta: "Shop Now"
503
+ key_messages:
504
+ - "40% off all trail running and hiking gear"
505
+ - "Free shipping on orders over $75"
506
+ compliance:
507
+ required_disclosures:
508
+ - text: "Sale ends June 30, 2026. Exclusions apply."
509
+ position: "footer"
510
+ jurisdictions: ["US"]
511
+ prohibited_claims:
512
+ - "Best price guaranteed"
513
+ - creative_id: "gen_video_summer_sale"
514
+ name: "Summer Sale - Generated Video 30s"
515
+ format_id:
516
+ agent_url: "https://your-platform.example.com"
517
+ id: "video_30s_generative"
518
+ assets:
519
+ brief:
520
+ asset_type: "brief"
521
+ name: "Acme Outdoor Summer Sale Q2 - Video"
522
+ objective: "awareness"
523
+ tone: "Cinematic, energetic"
524
+ audience: "Active adults 25-54"
525
+ territory: "Summer adventure"
526
+ messaging:
527
+ headline: "Your Next Adventure Starts Here"
528
+ tagline: "Acme Outdoor — Gear up for less"
529
+ cta: "Shop the Sale"
530
+ key_messages:
531
+ - "40% off all gear this summer"
532
+ compliance:
533
+ required_disclosures:
534
+ - text: "Sale ends June 30, 2026. Exclusions apply."
535
+ position: "audio"
536
+ jurisdictions: ["US"]
537
+ assignments:
538
+ - creative_id: "gen_display_summer_sale"
539
+ package_id: "outdoor_display_q2"
540
+ - creative_id: "gen_video_summer_sale"
541
+ package_id: "outdoor_video_q2"
542
+
543
+ idempotency_key: "$generate:uuid_v4#creative_generative_seller_creative_brief_sync_sync_creatives_brief"
544
+ context:
545
+ correlation_id: "creative_generative--seller--sync_creatives_brief"
546
+ validations:
547
+ - check: response_schema
548
+ description: "Response matches sync-creatives-response.json schema"
549
+ - check: field_present
550
+ path: "creatives[0].action"
551
+ description: "Each creative has an action (created/updated)"
552
+ - check: field_present
553
+ path: "creatives[0].action"
554
+ description: "Each creative has a status (pending_review or accepted)"
555
+
556
+ - check: field_present
557
+ path: "context"
558
+ description: "Response echoes back the context object"
559
+ - check: field_value
560
+ path: "context.correlation_id"
561
+ value: "creative_generative--seller--sync_creatives_brief"
562
+ description: "Context correlation_id returned unchanged"
563
+ - id: sync_creatives_standard
564
+ title: "Sync standard creatives alongside generative"
565
+ narrative: |
566
+ The buyer sends a pre-built creative using a standard format — verifying that this
567
+ programmatic seller also accepts traditional asset uploads alongside generative briefs.
568
+ task: sync_creatives
569
+ schema_ref: "creative/sync-creatives-request.json"
570
+ response_schema_ref: "creative/sync-creatives-response.json"
571
+ doc_ref: "/creative/task-reference/sync_creatives"
572
+ comply_scenario: creative_sync
573
+ stateful: true
574
+ expected: |
575
+ Accept the standard creative:
576
+ - Per-creative action: created
577
+ - Per-creative status: accepted or pending_review
578
+ - Standard asset validation (dimensions, file size, mime type)
579
+
580
+ sample_request:
581
+ account:
582
+ brand:
583
+ domain: "acmeoutdoor.example"
584
+ operator: "pinnacle-agency.example"
585
+ creatives:
586
+ - creative_id: "static_display_300x250"
587
+ name: "Trail Pro 3000 - Pre-built Display 300x250"
588
+ format_id:
589
+ agent_url: "https://your-platform.example.com"
590
+ id: "display_300x250"
591
+ assets:
592
+ image:
593
+ asset_type: "image"
594
+ url: "https://cdn.pinnacle-agency.example/trail-pro-300x250.png"
595
+ format: "png"
596
+ width: 300
597
+ height: 250
598
+
599
+ idempotency_key: "$generate:uuid_v4#creative_generative_seller_creative_brief_sync_sync_creatives_standard"
600
+ context:
601
+ correlation_id: "creative_generative--seller--sync_creatives_standard"
602
+ validations:
603
+ - check: response_schema
604
+ description: "Response matches sync-creatives-response.json schema"
605
+ - check: field_present
606
+ path: "creatives[0].action"
607
+ description: "Standard creative has an action"
608
+
609
+ - check: field_present
610
+ path: "context"
611
+ description: "Response echoes back the context object"
612
+ - check: field_value
613
+ path: "context.correlation_id"
614
+ value: "creative_generative--seller--sync_creatives_standard"
615
+ description: "Context correlation_id returned unchanged"
616
+ - id: sync_creatives_invalid_brand
617
+ title: "Reject brief with invalid brand"
618
+ narrative: |
619
+ The buyer sends a brief referencing a brand domain that doesn't exist in
620
+ AgenticAdvertising.org. The seller should reject the creative rather than
621
+ generating with unknown brand identity.
622
+ task: sync_creatives
623
+ schema_ref: "creative/sync-creatives-request.json"
624
+ response_schema_ref: "creative/sync-creatives-response.json"
625
+ doc_ref: "/creative/task-reference/sync_creatives"
626
+ comply_scenario: creative_sync
627
+ stateful: true
628
+ expected: |
629
+ Reject the creative with a clear error:
630
+ - Per-creative status: rejected
631
+ - Validation error indicating the brand domain could not be resolved
632
+ - The seller should not generate creatives for unknown brands
633
+
634
+ sample_request:
635
+ account:
636
+ brand:
637
+ domain: "nonexistent-brand-xyz.example"
638
+ operator: "pinnacle-agency.example"
639
+ creatives:
640
+ - creative_id: "gen_invalid_brand"
641
+ name: "Invalid Brand Test"
642
+ format_id:
643
+ agent_url: "https://your-platform.example.com"
644
+ id: "display_300x250_generative"
645
+ assets:
646
+ brief:
647
+ asset_type: "brief"
648
+ name: "Test brief"
649
+ objective: "awareness"
650
+ tone: "Neutral"
651
+ messaging:
652
+ headline: "Test"
653
+ cta: "Click"
654
+
655
+ idempotency_key: "$generate:uuid_v4#creative_generative_seller_creative_brief_sync_sync_creatives_invalid_brand"
656
+ context:
657
+ correlation_id: "creative_generative--seller--sync_creatives_invalid_brand"
658
+ validations:
659
+ - check: response_schema
660
+ description: "Response matches sync-creatives-response.json schema"
661
+ - check: field_present
662
+ path: "creatives[0].action"
663
+ description: "Creative has a status (expected: rejected)"
664
+
665
+ - check: field_present
666
+ path: "context"
667
+ description: "Response echoes back the context object"
668
+ - check: field_value
669
+ path: "context.correlation_id"
670
+ value: "creative_generative--seller--sync_creatives_invalid_brand"
671
+ description: "Context correlation_id returned unchanged"
672
+ - id: creative_generation_lifecycle
673
+ title: "Creative generation lifecycle"
674
+ narrative: |
675
+ If creative generation is asynchronous, the buyer monitors progress. The seller
676
+ transitions creatives through processing → pending_review → approved as generation
677
+ completes. The comply_test_controller can force these transitions for deterministic
678
+ testing via force_creative_status.
679
+
680
+ The buyer polls by re-calling sync_creatives with the same creatives. Because
681
+ sync_creatives has upsert semantics, re-sending the same brief is idempotent — the
682
+ seller returns the current status without restarting generation.
683
+
684
+ steps:
685
+ - id: check_creative_status
686
+ title: "Poll creative generation status"
687
+ narrative: |
688
+ The buyer re-sends the same creatives via sync_creatives. Because sync has upsert
689
+ semantics, this is idempotent — the seller returns updated statuses without
690
+ restarting generation. If the creative was pending_review after the initial sync,
691
+ it should transition to approved once generation completes. In testing, the
692
+ comply_test_controller forces this transition via force_creative_status.
693
+ task: sync_creatives
694
+ schema_ref: "creative/sync-creatives-request.json"
695
+ response_schema_ref: "creative/sync-creatives-response.json"
696
+ doc_ref: "/creative/task-reference/sync_creatives"
697
+ comply_scenario: creative_sync
698
+ stateful: true
699
+ expected: |
700
+ Return updated creative statuses:
701
+ - Generative creatives should transition from pending_review to approved
702
+ - Approved creatives should include generated assets (image URLs, VAST tags, etc.)
703
+ - The generated output should reflect the brand identity from the original brief
704
+
705
+ sample_request:
706
+ account:
707
+ brand:
708
+ domain: "acmeoutdoor.example"
709
+ operator: "pinnacle-agency.example"
710
+ creatives:
711
+ - creative_id: "gen_display_summer_sale"
712
+ name: "Summer Sale - Generated Display 300x250"
713
+ format_id:
714
+ agent_url: "https://your-platform.example.com"
715
+ id: "display_300x250_generative"
716
+ assets:
717
+ brief:
718
+ asset_type: "brief"
719
+ name: "Acme Outdoor Summer Sale Q2"
720
+ objective: "conversion"
721
+ tone: "Bold, adventurous, urgent"
722
+ messaging:
723
+ headline: "Summer Sale — 40% Off All Gear"
724
+ cta: "Shop Now"
725
+ - creative_id: "gen_video_summer_sale"
726
+ name: "Summer Sale - Generated Video 30s"
727
+ format_id:
728
+ agent_url: "https://your-platform.example.com"
729
+ id: "video_30s_generative"
730
+ assets:
731
+ brief:
732
+ asset_type: "brief"
733
+ name: "Acme Outdoor Summer Sale Q2 - Video"
734
+ objective: "awareness"
735
+ tone: "Cinematic, energetic"
736
+ messaging:
737
+ headline: "Your Next Adventure Starts Here"
738
+ cta: "Shop the Sale"
739
+
740
+ idempotency_key: "$generate:uuid_v4#creative_generative_seller_creative_generation_lifecycle_check_creative_status"
741
+ context:
742
+ correlation_id: "creative_generative--seller--check_creative_status"
743
+ validations:
744
+ - check: response_schema
745
+ description: "Response matches sync-creatives-response.json schema"
746
+ - check: field_present
747
+ path: "creatives[0].action"
748
+ description: "Each creative has a current status"
749
+
750
+ - check: field_present
751
+ path: "context"
752
+ description: "Response echoes back the context object"
753
+ - check: field_value
754
+ path: "context.correlation_id"
755
+ value: "creative_generative--seller--check_creative_status"
756
+ description: "Context correlation_id returned unchanged"
757
+ - id: delivery_monitoring
758
+ title: "Delivery and reporting"
759
+ narrative: |
760
+ The campaign is live. Delivery monitoring is identical to any media buy seller —
761
+ the generative aspect doesn't change how delivery is reported. The buyer monitors
762
+ impressions, clicks, spend, and pacing.
763
+
764
+ steps:
765
+ - id: get_delivery
766
+ title: "Check delivery metrics"
767
+ narrative: |
768
+ The buyer requests delivery data for the active media buy. Reporting is the same
769
+ regardless of whether creatives were generated or uploaded.
770
+ task: get_media_buy_delivery
771
+ schema_ref: "media-buy/get-media-buy-delivery-request.json"
772
+ response_schema_ref: "media-buy/get-media-buy-delivery-response.json"
773
+ doc_ref: "/media-buy/task-reference/get_media_buy_delivery"
774
+ comply_scenario: reporting_flow
775
+ stateful: true
776
+ expected: |
777
+ Return delivery metrics for the media buy:
778
+ - Per-package delivery: impressions, clicks, spend, completion rates
779
+ - Daily breakdown if requested
780
+ - Pacing information
781
+ - Budget utilization
782
+
783
+ sample_request:
784
+ account:
785
+ brand:
786
+ domain: "acmeoutdoor.example"
787
+ operator: "pinnacle-agency.example"
788
+ media_buy_ids:
789
+ - "$context.media_buy_id"
790
+ include_package_daily_breakdown: true
791
+
792
+ context:
793
+ correlation_id: "creative_generative--seller--get_delivery"
794
+ validations:
795
+ - check: response_schema
796
+ description: "Response matches get-media-buy-delivery-response.json schema"
797
+ - check: field_present
798
+ path: "media_buy_deliveries"
799
+ description: "Response contains media buy delivery data"
800
+
801
+ - check: field_present
802
+ path: "context"
803
+ description: "Response echoes back the context object"
804
+ - check: field_value
805
+ path: "context.correlation_id"
806
+ value: "creative_generative--seller--get_delivery"
807
+ description: "Context correlation_id returned unchanged"