@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,546 @@
1
+ id: sales_non_guaranteed
2
+ version: "1.0.0"
3
+ title: "Non-guaranteed auction-based media buy"
4
+ protocol: media-buy
5
+ category: sales_non_guaranteed
6
+ summary: "Seller agent for auction-based, non-guaranteed buying where the buyer sets bid prices and budgets."
7
+ track: media_buy
8
+ required_tools:
9
+ - sync_governance
10
+ - get_products
11
+ - create_media_buy
12
+ requires_scenarios:
13
+ - media_buy_seller/audience_buy_flow
14
+ - media_buy_seller/clicks_buy_flow
15
+ - media_buy_seller/completed_views_buy_flow
16
+ - media_buy_seller/delivery_reporting
17
+ - media_buy_seller/event_dedup_flow
18
+ - media_buy_seller/frequency_cap_enforcement
19
+ - media_buy_seller/inventory_list_no_match
20
+ - media_buy_seller/inventory_list_targeting
21
+ - media_buy_seller/invalid_transitions
22
+ - media_buy_seller/pending_creatives_to_start
23
+ - media_buy_seller/per_creative_conversion_attribution
24
+ - media_buy_seller/performance_buy_flow
25
+ - media_buy_seller/performance_buy_flow_roas
26
+ - media_buy_seller/reach_buy_flow
27
+ - governance_aware_seller/governance_multi_agent_rejected
28
+
29
+ # Cross-step assertion (adcp#2664). status.monotonic rejects resource
30
+ # status transitions observed across steps that aren't on the spec
31
+ # lifecycle graph — e.g. active → pending_creatives on a media_buy.
32
+ invariants:
33
+ - status.monotonic
34
+
35
+ context:
36
+ governance_agent_url: "https://test-agent.adcontextprotocol.org"
37
+
38
+ narrative: |
39
+ You run a sell-side platform with auction-based inventory. Non-guaranteed buys don't
40
+ require IOs or human approval — the buyer sets a bid price and budget, and your platform
41
+ runs the auction. Delivery is best-effort based on bid competitiveness.
42
+
43
+ The buyer discovers products with bid guidance and any declared floors, creates a buy
44
+ with bid prices per package, monitors win rates and pacing, and adjusts bids or budgets
45
+ in-flight to optimize performance.
46
+
47
+ This storyboard covers the non-guaranteed buying path — fast setup, no human approval,
48
+ real-time optimization through bid and budget adjustments.
49
+
50
+ agent:
51
+ interaction_model: media_buy_seller
52
+ capabilities:
53
+ - sells_media
54
+ - supports_non_guaranteed
55
+ - auction_based
56
+ examples:
57
+ - "SSP with programmatic auction inventory"
58
+ - "Exchange-based publisher platform"
59
+ - "Open marketplace seller"
60
+
61
+ caller:
62
+ role: buyer_agent
63
+ example: "Scope3 (DSP)"
64
+
65
+ prerequisites:
66
+ description: |
67
+ The caller needs a brand identity and operator credentials. Non-guaranteed buys
68
+ typically have lower barriers to entry — no IO signing required. The test kit
69
+ provides a sample brand (Acme Outdoor) with bid parameters suitable for testing
70
+ the auction-based flow.
71
+ test_kit: "test-kits/acme-outdoor.yaml"
72
+ controller_seeding: true
73
+
74
+ fixtures:
75
+ products:
76
+ - product_id: "sports_display_auction"
77
+ delivery_type: "non_guaranteed"
78
+ channels: ["display"]
79
+ format_ids:
80
+ - id: "display_300x250"
81
+ - product_id: "outdoor_video_auction"
82
+ delivery_type: "non_guaranteed"
83
+ channels: ["video"]
84
+ format_ids:
85
+ - id: "video_30s"
86
+ pricing_options:
87
+ - product_id: "sports_display_auction"
88
+ pricing_option_id: "cpm_auction"
89
+ pricing_model: "cpm"
90
+ currency: "USD"
91
+ floor_price: 5.0
92
+ price_guidance:
93
+ p50: 6.0
94
+ p75: 7.0
95
+ - product_id: "outdoor_video_auction"
96
+ pricing_option_id: "cpm_auction"
97
+ pricing_model: "cpm"
98
+ currency: "USD"
99
+ floor_price: 15.0
100
+ price_guidance:
101
+ p50: 16.0
102
+ p75: 18.0
103
+
104
+ phases:
105
+ - id: capability_discovery
106
+ title: "Capability discovery"
107
+ narrative: |
108
+ The buyer calls get_adcp_capabilities to confirm the agent supports media buying before sending briefs or creating buys.
109
+
110
+ steps:
111
+ - id: get_capabilities
112
+ title: "Check agent capabilities"
113
+ narrative: |
114
+ Verify that the agent declares the expected protocol support before
115
+ proceeding with domain-specific operations.
116
+ task: get_adcp_capabilities
117
+ schema_ref: "protocol/get-adcp-capabilities-request.json"
118
+ response_schema_ref: "protocol/get-adcp-capabilities-response.json"
119
+ doc_ref: "/protocol/get_adcp_capabilities"
120
+ comply_scenario: capability_discovery
121
+ stateful: false
122
+ expected: |
123
+ Return capabilities declaring media_buy in supported_protocols, confirming the agent sells media.
124
+ sample_request:
125
+ context:
126
+ correlation_id: "sales_non_guaranteed--get_capabilities"
127
+ validations:
128
+ - check: response_schema
129
+ description: "Response matches get-adcp-capabilities-response.json schema"
130
+ - check: field_present
131
+ path: "supported_protocols"
132
+ description: "Agent declares supported protocols"
133
+
134
+ - check: field_present
135
+ path: "context"
136
+ description: "Response echoes back the context object"
137
+ - check: field_value
138
+ path: "context.correlation_id"
139
+ value: "sales_non_guaranteed--get_capabilities"
140
+ description: "Context correlation_id returned unchanged"
141
+ - id: product_discovery
142
+ title: "Discover auction-based products"
143
+ narrative: |
144
+ The buyer sends a brief to discover your non-guaranteed inventory. Products
145
+ come back with delivery_type: non_guaranteed, bid guidance, and any declared floors
146
+ that helps the buyer set competitive bids.
147
+
148
+ steps:
149
+ - id: get_products_brief
150
+ title: "Send a brief for non-guaranteed inventory"
151
+ narrative: |
152
+ The buyer describes what they want. Your platform returns non-guaranteed
153
+ products with auction mechanics: floor prices, recommended bid ranges,
154
+ estimated win rates at different bid levels, and available audience segments.
155
+ task: get_products
156
+ schema_ref: "media-buy/get-products-request.json"
157
+ response_schema_ref: "media-buy/get-products-response.json"
158
+ doc_ref: "/media-buy/task-reference/get_products"
159
+ comply_scenario: full_sales_flow
160
+ stateful: false
161
+ expected: |
162
+ Return non-guaranteed products matching the brief. Each product should include:
163
+ - product_id: unique identifier
164
+ - name and description
165
+ - delivery_type: non_guaranteed
166
+ - pricing_models: auction-based pricing with bid guidance and any declared floor_price
167
+ - forecast: estimated impressions at different bid levels (best-effort)
168
+ - creative_format_ids: required creative formats
169
+ - targeting: available audiences and contexts
170
+
171
+ sample_request:
172
+ buying_mode: "brief"
173
+ brief: "Display and video inventory across sports and outdoor lifestyle sites. Q2 flight, $25K budget. Adults 25-54, US. Auction-based, looking for competitive CPMs."
174
+ filters:
175
+ delivery_type: "non_guaranteed"
176
+ is_fixed_price: false
177
+ account:
178
+ brand:
179
+ domain: "acmeoutdoor.example"
180
+ operator: "pinnacle-agency.example"
181
+
182
+ context:
183
+ correlation_id: "sales_non_guaranteed--get_products_brief"
184
+ context_outputs:
185
+ - path: "products[0].product_id"
186
+ key: "first_product_id"
187
+ - path: "products[0].pricing_options[0].pricing_option_id"
188
+ key: "first_pricing_option_id"
189
+ - path: "products[0].pricing_options[0].price_guidance.p50"
190
+ key: "first_bid_price"
191
+ - path: "products[0].pricing_options[0].price_guidance.p75"
192
+ key: "first_updated_bid_price"
193
+ - path: "products[1].product_id"
194
+ key: "second_product_id"
195
+ - path: "products[1].pricing_options[0].pricing_option_id"
196
+ key: "second_pricing_option_id"
197
+ - path: "products[1].pricing_options[0].price_guidance.p50"
198
+ key: "second_bid_price"
199
+ - path: "products[1].pricing_options[0].price_guidance.p75"
200
+ key: "second_updated_bid_price"
201
+ validations:
202
+ - check: response_schema
203
+ description: "Response matches get-products-response.json schema"
204
+ - check: field_present
205
+ path: "products"
206
+ description: "Response contains a products array"
207
+ - check: field_present
208
+ path: "products[0].product_id"
209
+ description: "Each product has a product_id"
210
+ - check: field_present
211
+ path: "products[0].delivery_type"
212
+ description: "Each product declares delivery_type: non_guaranteed"
213
+ - check: field_present
214
+ path: "products[1].product_id"
215
+ description: "At least two auction products are available for the multi-package buy"
216
+ - check: field_present
217
+ path: "products[0].pricing_options[0].price_guidance.p50"
218
+ description: "First auction pricing option declares median bid guidance used as the initial bid"
219
+ - check: field_present
220
+ path: "products[0].pricing_options[0].price_guidance.p75"
221
+ description: "First auction pricing option declares higher bid guidance used for the update"
222
+ - check: field_present
223
+ path: "products[1].pricing_options[0].price_guidance.p50"
224
+ description: "Second auction pricing option declares median bid guidance used as the initial bid"
225
+ - check: field_present
226
+ path: "products[1].pricing_options[0].price_guidance.p75"
227
+ description: "Second auction pricing option declares higher bid guidance used for the update"
228
+
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: "sales_non_guaranteed--get_products_brief"
235
+ description: "Context correlation_id returned unchanged"
236
+ - check: field_present
237
+ path: "products[0].format_ids"
238
+ description: "Products include format_ids for creative requirements"
239
+ - check: field_present
240
+ path: "products[0].format_ids[0].agent_url"
241
+ description: "Format IDs include agent_url — must match this agent's URL"
242
+ - check: field_present
243
+ path: "products[0].format_ids[0].id"
244
+ description: "Format IDs include id — must be accepted back in sync_creatives"
245
+ - id: create_buy
246
+ title: "Create non-guaranteed buy"
247
+ narrative: |
248
+ The buyer creates a media buy with bid prices per package. Since this is
249
+ non-guaranteed, no IO is required and no human approval is needed. The response
250
+ comes back as completed — the buy is immediately active and your platform starts
251
+ bidding in auctions on the buyer's behalf.
252
+
253
+ steps:
254
+ - id: sync_governance
255
+ title: "Register governance agent"
256
+ narrative: |
257
+ The buyer registers the configured governance agent on the account before
258
+ creating the auction-based media buy.
259
+ task: sync_governance
260
+ schema_ref: "account/sync-governance-request.json"
261
+ response_schema_ref: "account/sync-governance-response.json"
262
+ doc_ref: "/accounts/tasks/sync_governance"
263
+ stateful: true
264
+ expected: |
265
+ Acknowledge governance registration for the account:
266
+ - status: synced
267
+ - governance_agents[0].url echoes the configured governance agent
268
+
269
+ sample_request:
270
+ accounts:
271
+ - account:
272
+ brand:
273
+ domain: "acmeoutdoor.example"
274
+ operator: "pinnacle-agency.example"
275
+ governance_agents:
276
+ - url: "$context.governance_agent_url"
277
+ authentication:
278
+ schemes: ["Bearer"]
279
+ credentials: "gov-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
280
+
281
+ idempotency_key: "$generate:uuid_v4#sales_non_guaranteed_create_buy_sync_governance"
282
+ context:
283
+ correlation_id: "sales_non_guaranteed--sync_governance"
284
+ validations:
285
+ - check: response_schema
286
+ description: "Response matches sync-governance-response.json schema"
287
+ - check: field_value
288
+ path: "accounts[0].status"
289
+ value: "synced"
290
+ description: "Governance agent is registered on the account"
291
+ - check: field_present
292
+ path: "context"
293
+ description: "Response echoes back the context object"
294
+ - check: field_value
295
+ path: "context.correlation_id"
296
+ value: "sales_non_guaranteed--sync_governance"
297
+ description: "Context correlation_id returned unchanged"
298
+ - id: create_media_buy
299
+ title: "Create a media buy with bid prices"
300
+ narrative: |
301
+ The buyer commits to non-guaranteed products with bid prices and budgets.
302
+ Your platform validates the bids against floor prices, confirms the buy
303
+ immediately (completed status), and begins auction participation.
304
+
305
+ Each package includes a bid_price that the buyer is willing to pay per unit
306
+ (CPM, CPC, etc.). The platform uses this to compete in auctions.
307
+ task: create_media_buy
308
+ schema_ref: "media-buy/create-media-buy-request.json"
309
+ response_schema_ref: "media-buy/create-media-buy-response.json"
310
+ doc_ref: "/media-buy/task-reference/create_media_buy"
311
+ comply_scenario: create_media_buy
312
+ stateful: true
313
+ expected: |
314
+ Return the media buy in completed status:
315
+ - media_buy_id: your platform's identifier
316
+ - status: active (no async approval needed)
317
+ - confirmed_at: timestamp
318
+ - packages: confirmed line items with bid prices acknowledged
319
+ - valid_actions: pause, update_bid, get_delivery
320
+
321
+ Bids below floor_price should be rejected with a clear error when the
322
+ pricing option declares a floor_price.
323
+
324
+ sample_request:
325
+ brand:
326
+ domain: "acmeoutdoor.example"
327
+ account:
328
+ brand:
329
+ domain: "acmeoutdoor.example"
330
+ operator: "pinnacle-agency.example"
331
+ start_time: "2026-04-01T00:00:00Z"
332
+ end_time: "2026-06-30T23:59:59Z"
333
+ packages:
334
+ - product_id: "$context.first_product_id"
335
+ budget: 10000
336
+ bid_price: "$context.first_bid_price"
337
+ pricing_option_id: "$context.first_pricing_option_id"
338
+ creative_assignments:
339
+ - creative_id: "display_trail_pro_300x250"
340
+ - product_id: "$context.second_product_id"
341
+ budget: 15000
342
+ bid_price: "$context.second_bid_price"
343
+ pricing_option_id: "$context.second_pricing_option_id"
344
+ creative_assignments:
345
+ - creative_id: "video_30s_trail_pro"
346
+
347
+ idempotency_key: "$generate:uuid_v4#sales_non_guaranteed_create_buy_create_media_buy"
348
+ context:
349
+ correlation_id: "sales_non_guaranteed--create_media_buy"
350
+ context_outputs:
351
+ - name: media_buy_id
352
+ path: "media_buy_id"
353
+ - name: first_package_id
354
+ path: "packages[0].package_id"
355
+ - name: second_package_id
356
+ path: "packages[1].package_id"
357
+ validations:
358
+ - check: response_schema
359
+ description: "Response matches create-media-buy-response.json schema"
360
+
361
+ - check: field_present
362
+ path: "context"
363
+ description: "Response echoes back the context object"
364
+ - check: field_value
365
+ path: "context.correlation_id"
366
+ value: "sales_non_guaranteed--create_media_buy"
367
+ description: "Context correlation_id returned unchanged"
368
+ - check: field_present
369
+ path: "packages[0].package_id"
370
+ description: "Seller assigns package_id — must be echoed in update_media_buy"
371
+ # Anti-façade: a real non-guaranteed buy creates line items / orders /
372
+ # campaigns in the seller's adserver or DSP. An adapter returning a
373
+ # shape-valid response with a fabricated media_buy_id but no upstream
374
+ # campaign created fails this check. Storyboards stay platform-agnostic —
375
+ # the assertion is "any upstream POST happened during this step",
376
+ # leaving the specific endpoint to the adopter's upstream stack.
377
+ - check: upstream_traffic
378
+ description: "create_media_buy caused upstream traffic creating the campaign"
379
+ min_count: 1
380
+ endpoint_pattern: "POST *"
381
+ - id: monitor_pacing
382
+ title: "Monitor win rates and pacing"
383
+ narrative: |
384
+ The non-guaranteed buy is live and bidding in auctions. The buyer checks
385
+ pacing to understand how competitive their bids are and whether the budget
386
+ is spending at the desired rate.
387
+
388
+ steps:
389
+ - id: get_media_buys_pacing
390
+ title: "Check buy status and pacing"
391
+ narrative: |
392
+ The buyer polls for the media buy status. Your platform returns the active
393
+ buy with pacing data — how much budget has been spent, win rates, and whether
394
+ the buy is on pace to exhaust the budget by the end of the flight.
395
+ task: get_media_buys
396
+ schema_ref: "media-buy/get-media-buys-request.json"
397
+ response_schema_ref: "media-buy/get-media-buys-response.json"
398
+ doc_ref: "/media-buy/task-reference/get_media_buys"
399
+ comply_scenario: media_buy_lifecycle
400
+ stateful: true
401
+ expected: |
402
+ Return the media buy with pacing data:
403
+ - media_buy_id: matches the buy created earlier
404
+ - status: active
405
+ - packages: line items with current spend, win rate, and pacing status
406
+ - valid_actions: update, pause, get_delivery
407
+
408
+ sample_request:
409
+ account:
410
+ brand:
411
+ domain: "acmeoutdoor.example"
412
+ operator: "pinnacle-agency.example"
413
+ media_buy_ids:
414
+ - "$context.media_buy_id"
415
+
416
+ context:
417
+ correlation_id: "sales_non_guaranteed--get_media_buys_pacing"
418
+ validations:
419
+ - check: response_schema
420
+ description: "Response matches get-media-buys-response.json schema"
421
+ - check: field_present
422
+ path: "media_buys[0].status"
423
+ description: "Media buy has a status"
424
+
425
+ - check: field_present
426
+ path: "context"
427
+ description: "Response echoes back the context object"
428
+ - check: field_value
429
+ path: "context.correlation_id"
430
+ value: "sales_non_guaranteed--get_media_buys_pacing"
431
+ description: "Context correlation_id returned unchanged"
432
+ - id: adjust_bids
433
+ title: "Adjust bids and budget"
434
+ narrative: |
435
+ Based on pacing data, the buyer adjusts bids or budgets in-flight. If a package
436
+ is underspending (low win rate), the buyer increases the bid. If a package is
437
+ overspending, the buyer decreases the bid or caps the daily budget.
438
+
439
+ steps:
440
+ - id: update_media_buy
441
+ title: "Update bid prices and budget"
442
+ narrative: |
443
+ The buyer modifies the active media buy — adjusting bid prices, reallocating
444
+ budget between packages, or changing daily spend caps. Your platform applies
445
+ the updates immediately to the live auction participation.
446
+ task: update_media_buy
447
+ schema_ref: "media-buy/update-media-buy-request.json"
448
+ response_schema_ref: "media-buy/update-media-buy-response.json"
449
+ doc_ref: "/media-buy/task-reference/update_media_buy"
450
+ comply_scenario: media_buy_lifecycle
451
+ stateful: true
452
+ expected: |
453
+ Apply the updates and return the modified media buy:
454
+ - media_buy_id: matches the existing buy
455
+ - status: active (still running)
456
+ - packages: updated line items reflecting new bids and budgets
457
+ - Changes take effect immediately for subsequent auctions
458
+
459
+ sample_request:
460
+ account:
461
+ brand:
462
+ domain: "acmeoutdoor.example"
463
+ operator: "pinnacle-agency.example"
464
+ media_buy_id: "$context.media_buy_id"
465
+ packages:
466
+ - package_id: "$context.first_package_id"
467
+ bid_price: "$context.first_updated_bid_price"
468
+ budget: 12000
469
+ - package_id: "$context.second_package_id"
470
+ bid_price: "$context.second_updated_bid_price"
471
+ budget: 13000
472
+
473
+ idempotency_key: "$generate:uuid_v4#sales_non_guaranteed_adjust_bids_update_media_buy"
474
+ context:
475
+ correlation_id: "sales_non_guaranteed--update_media_buy"
476
+ validations:
477
+ - check: response_schema
478
+ description: "Response matches update-media-buy-response.json schema"
479
+
480
+ - check: field_present
481
+ path: "context"
482
+ description: "Response echoes back the context object"
483
+ - check: field_value
484
+ path: "context.correlation_id"
485
+ value: "sales_non_guaranteed--update_media_buy"
486
+ description: "Context correlation_id returned unchanged"
487
+ # Anti-façade: a real update propagates bid/budget changes to the upstream
488
+ # auction platform. An adapter returning shape-valid responses without touching
489
+ # upstream fails this check. No identifier_paths here — media_buy_id is
490
+ # seller-assigned (dynamic context variable, not a buyer-supplied literal).
491
+ - check: upstream_traffic
492
+ description: "update_media_buy caused upstream traffic applying the bid/budget changes"
493
+ min_count: 1
494
+ endpoint_pattern: "POST *"
495
+ - id: delivery
496
+ title: "Delivery and auction metrics"
497
+ narrative: |
498
+ The buyer reviews delivery data including auction-specific metrics: win rates,
499
+ average clearing prices, and bid competitiveness across packages.
500
+
501
+ steps:
502
+ - id: get_delivery
503
+ title: "Check delivery with auction metrics"
504
+ narrative: |
505
+ The buyer requests delivery data for the active non-guaranteed media buy.
506
+ Your platform returns standard delivery metrics plus auction-specific data:
507
+ win rates, average clearing prices, bid-to-win ratios, and budget pacing.
508
+ task: get_media_buy_delivery
509
+ schema_ref: "media-buy/get-media-buy-delivery-request.json"
510
+ response_schema_ref: "media-buy/get-media-buy-delivery-response.json"
511
+ doc_ref: "/media-buy/task-reference/get_media_buy_delivery"
512
+ comply_scenario: reporting_flow
513
+ stateful: true
514
+ expected: |
515
+ Return delivery metrics for the non-guaranteed media buy:
516
+ - Per-package delivery: impressions, clicks, spend
517
+ - Win rate: percentage of auctions won per package
518
+ - Average clearing price: what the buyer actually paid vs. bid price
519
+ - Pacing: on track, ahead, behind relative to budget and flight dates
520
+ - Budget utilization: spent vs. committed
521
+
522
+ sample_request:
523
+ account:
524
+ brand:
525
+ domain: "acmeoutdoor.example"
526
+ operator: "pinnacle-agency.example"
527
+ media_buy_ids:
528
+ - "$context.media_buy_id"
529
+ include_package_daily_breakdown: true
530
+
531
+ context:
532
+ correlation_id: "sales_non_guaranteed--get_delivery"
533
+ validations:
534
+ - check: response_schema
535
+ description: "Response matches get-media-buy-delivery-response.json schema"
536
+ - check: field_present
537
+ path: "media_buy_deliveries"
538
+ description: "Response contains media buy delivery data"
539
+
540
+ - check: field_present
541
+ path: "context"
542
+ description: "Response echoes back the context object"
543
+ - check: field_value
544
+ path: "context.correlation_id"
545
+ value: "sales_non_guaranteed--get_delivery"
546
+ description: "Context correlation_id returned unchanged"