@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,409 @@
1
+ id: creative_ad_server
2
+ version: "1.1.0"
3
+ title: "Creative ad server"
4
+ protocol: creative
5
+ category: creative_ad_server
6
+ summary: "Stateful ad server with pre-loaded creatives. Generates serving tags per media buy. Optionally bills through AdCP."
7
+ track: creative
8
+ required_tools:
9
+ - build_creative
10
+
11
+ # Cross-step assertion (adcp#2664). status.monotonic rejects resource
12
+ # status transitions observed across steps that aren't on the spec
13
+ # lifecycle graph — e.g. approved → processing on a creative asset.
14
+ #
15
+ # Cross-resource assertion (adcp#2859). impairment.coherence verifies that
16
+ # creative.rejected transitions propagate to any non-terminal media buy
17
+ # that references the creative: the buy's impairments[] MUST list an entry
18
+ # for the rejected creative, and the buy's health MUST be `impaired`.
19
+ # Inverse direction enforced — a buy whose impairment references a creative
20
+ # that is no longer rejected fails the check. Out of scope: terminal-status
21
+ # buys MAY remain unreported; materiality (package_ids minItems:1) is at
22
+ # the schema layer (#2855). Grades not_applicable until the storyboard
23
+ # exercises both a creative transition AND a media-buy snapshot read
24
+ # (#2860).
25
+ invariants:
26
+ - status.monotonic
27
+ - impairment.coherence
28
+
29
+ narrative: |
30
+ You run a creative ad server — think Innovid, Flashtalking, or CM360. Your clients
31
+ have already uploaded their creatives through your UI. Buyers connect to browse your
32
+ creative library and request serving tags for their media buys.
33
+
34
+ Your agent is stateful: creatives already exist in your system. The buyer never pushes
35
+ assets to you. Instead, they browse your library, pick creatives, and ask you to generate
36
+ tags for specific placements. For a campaign with 25 media buys, you'll generate 25 tags.
37
+
38
+ Billing is optional. If you bill through AdCP, the buyer's account drives the
39
+ rate card: list_creatives surfaces pricing_options, build_creative returns the
40
+ applied pricing_option_id and vendor_cost, and report_usage closes the loop
41
+ after delivery. If you bill out of band (flat license, SaaS contract, bundled
42
+ enterprise agreement — CM360 is the canonical example), omit the pricing fields
43
+ and surface report_usage records as not accepted rather than fake-accepting.
44
+ response_schema validates shape in both cases; the specialism doesn't force a
45
+ billing business model on you.
46
+
47
+ This storyboard walks through that flow from the buyer's perspective.
48
+
49
+ agent:
50
+ interaction_model: stateful_preloaded
51
+ capabilities:
52
+ - has_creative_library
53
+ examples:
54
+ - "Innovid"
55
+ - "Flashtalking"
56
+ - "CM360"
57
+
58
+ caller:
59
+ role: buyer_agent
60
+ example: "Scope3 (DSP)"
61
+
62
+ prerequisites:
63
+ description: |
64
+ Creatives must already exist in the ad server's library, loaded through the
65
+ platform's own UI or API. The buyer does not push assets — they browse and
66
+ request tags for what's already there.
67
+
68
+ Pricing is optional. Ad servers that bill through AdCP (rate-carded creative
69
+ serving) expose pricing_options on creatives and pricing_option_id on build
70
+ responses. Ad servers that bill out of band (flat license, SaaS contract, or
71
+ bundled enterprise agreement — e.g. CM360) return creatives and tags without
72
+ those fields. Both shapes are conformant; response_schema validates shape when
73
+ the fields are present.
74
+ controller_seeding: true
75
+
76
+ fixtures:
77
+ creatives:
78
+ - creative_id: "campaign_hero_video"
79
+ status: "approved"
80
+ format_id:
81
+ id: "vast_30s"
82
+ pricing_options:
83
+ - pricing_option_id: "po_vast_30s_cpm"
84
+ model: "cpm"
85
+ cpm: 0.50
86
+ currency: "USD"
87
+
88
+ phases:
89
+ - id: capability_discovery
90
+ title: "Capability discovery"
91
+ narrative: |
92
+ The buyer calls get_adcp_capabilities to confirm the agent supports creative operations before browsing or building creatives.
93
+
94
+ steps:
95
+ - id: get_capabilities
96
+ title: "Check agent capabilities"
97
+ narrative: |
98
+ Verify that the agent declares the expected protocol support before
99
+ proceeding with domain-specific operations.
100
+ task: get_adcp_capabilities
101
+ schema_ref: "protocol/get-adcp-capabilities-request.json"
102
+ response_schema_ref: "protocol/get-adcp-capabilities-response.json"
103
+ doc_ref: "/protocol/get_adcp_capabilities"
104
+ comply_scenario: capability_discovery
105
+ stateful: false
106
+ expected: |
107
+ Return capabilities declaring creative in supported_protocols, confirming the agent handles creative operations.
108
+ sample_request:
109
+ context:
110
+ correlation_id: "creative_ad_server--get_capabilities"
111
+ validations:
112
+ - check: response_schema
113
+ description: "Response matches get-adcp-capabilities-response.json schema"
114
+ - check: field_present
115
+ path: "supported_protocols"
116
+ description: "Agent declares supported protocols"
117
+
118
+ - check: field_present
119
+ path: "context"
120
+ description: "Response echoes back the context object"
121
+ - check: field_value
122
+ path: "context.correlation_id"
123
+ value: "creative_ad_server--get_capabilities"
124
+ description: "Context correlation_id returned unchanged"
125
+ - id: browse_library
126
+ title: "Browse the creative library"
127
+ narrative: |
128
+ The buyer connects to your ad server and wants to see what creatives are
129
+ available for a campaign. They call list_creatives to browse concepts and
130
+ individual creatives in your library.
131
+
132
+ If your agent bills through AdCP and the buyer provides an account, each
133
+ creative includes the applicable rate from the account's rate card. If you
134
+ bill out of band, pricing_options is omitted.
135
+
136
+ steps:
137
+ - id: list_creatives
138
+ title: "Browse available creatives"
139
+ narrative: |
140
+ The buyer asks: "What creatives do you have for this advertiser?" This is
141
+ the primary entry point for ad server interactions.
142
+
143
+ The buyer sends include_pricing=true and an account reference. If your
144
+ agent bills through AdCP, each creative returns pricing_options from the
145
+ account's rate card; vendors may offer multiple options (volume tiers,
146
+ context-specific rates, or different models per product line). If your
147
+ agent bills out of band (flat license, SaaS contract, or bundled
148
+ enterprise agreement), omit pricing_options — response_schema validates
149
+ shape either way.
150
+ task: list_creatives
151
+ schema_ref: "creative/list-creatives-request.json"
152
+ response_schema_ref: "creative/list-creatives-response.json"
153
+ doc_ref: "/creative/task-reference/list_creatives"
154
+ comply_scenario: creative_flow
155
+ stateful: true
156
+ expected: |
157
+ Return creatives from your library. Each creative should include:
158
+ - creative_id (your platform's identifier)
159
+ - format_id referencing the creative's format
160
+ - name and status (approved, pending_review, rejected)
161
+ - concept_id grouping related creatives across sizes
162
+ - pricing_options array with pricing_option_id, model, cpm, currency —
163
+ only when your agent bills through AdCP and include_pricing=true with
164
+ an account provided. Agents that bill out of band omit this field.
165
+
166
+ sample_request:
167
+ account:
168
+ account_id: "acct_acme_creative"
169
+ include_pricing: true
170
+ filters:
171
+ statuses:
172
+ - "approved"
173
+
174
+ context:
175
+ correlation_id: "creative_ad_server--list_creatives"
176
+ validations:
177
+ - check: response_schema
178
+ description: "Response matches list-creatives-response.json schema. Validates pricing_options shape when present; absence is conformant for agents that bill out of band."
179
+
180
+ - check: field_present
181
+ path: "context"
182
+ description: "Response echoes back the context object"
183
+ - check: field_value
184
+ path: "context.correlation_id"
185
+ value: "creative_ad_server--list_creatives"
186
+ description: "Context correlation_id returned unchanged"
187
+ - id: list_output_formats
188
+ title: "Check available output formats"
189
+ narrative: |
190
+ The buyer checks what output formats your ad server supports. For an ad
191
+ server, this is typically the tag formats you can generate — HTML, JavaScript,
192
+ VAST, native. The input formats are less relevant because creatives are already
193
+ in your system.
194
+ task: list_creative_formats
195
+ schema_ref: "creative/list-creative-formats-request.json"
196
+ response_schema_ref: "creative/list-creative-formats-response.json"
197
+ doc_ref: "/creative/task-reference/list_creative_formats"
198
+ comply_scenario: creative_sync
199
+ stateful: false
200
+ expected: |
201
+ Return the output formats you support. For an ad server, these are typically
202
+ tag formats (HTML, JavaScript, VAST) rather than visual ad formats.
203
+
204
+ - id: generate_tags
205
+ title: "Generate serving tags"
206
+ narrative: |
207
+ The buyer has selected creatives from your library and now needs serving tags
208
+ for their media buys. They call build_creative for each media buy/package
209
+ combination, passing the creative_id, account, and the context needed to
210
+ generate the right tag.
211
+
212
+ If your agent bills through AdCP, the response carries pricing_option_id and
213
+ vendor_cost (zero at build time for CPM — cost accrues on impressions). If
214
+ your agent bills out of band, omit these fields; the manifest is the
215
+ required output.
216
+
217
+ steps:
218
+ - id: build_tag
219
+ title: "Generate a tag for a media buy"
220
+ narrative: |
221
+ The buyer requests a serving tag for a specific creative, format, and media
222
+ buy. Your ad server generates a tag scoped to that placement.
223
+
224
+ For Innovid, this produces a VAST tag for a CTV placement. For Flashtalking,
225
+ this might produce an HTML tag for a display placement. The media_buy_id and
226
+ package_id provide the trafficking context.
227
+
228
+ Agents that bill through AdCP return pricing_option_id and vendor_cost so
229
+ the buyer knows which rate applies. Agents that bill out of band omit
230
+ those fields.
231
+ task: build_creative
232
+ schema_ref: "media-buy/build-creative-request.json"
233
+ response_schema_ref: "media-buy/build-creative-response.json"
234
+ doc_ref: "/creative/task-reference/build_creative"
235
+ comply_scenario: creative_flow
236
+ stateful: true
237
+ expected: |
238
+ Return a creative manifest with the serving tag. The output should include:
239
+ - An HTML, JavaScript, or VAST asset containing the tag
240
+ - The format_id matching the target format
241
+ - Macro placeholders (CLICK_URL, CACHEBUSTER) if applicable
242
+ - pricing_option_id, vendor_cost, and currency — only when your agent
243
+ bills through AdCP. Agents billing out of band omit these fields.
244
+
245
+ sample_request:
246
+ creative_id: "campaign_hero_video"
247
+ account:
248
+ account_id: "acct_acme_creative"
249
+ target_format_id:
250
+ agent_url: "https://your-ad-server.example.com"
251
+ id: "vast_30s"
252
+ media_buy_id: "mb_summer_campaign_001"
253
+ package_id: "pkg_ctv_premium"
254
+
255
+ idempotency_key: "$generate:uuid_v4#creative_ad_server_generate_tags_build_tag"
256
+ context:
257
+ correlation_id: "creative_ad_server--build_tag"
258
+ validations:
259
+ - check: response_schema
260
+ description: "Response matches build-creative-response.json schema"
261
+ - check: field_present
262
+ path: "creative_manifest.assets"
263
+ description: "Output includes a serving tag asset"
264
+
265
+ - check: field_present
266
+ path: "context"
267
+ description: "Response echoes back the context object"
268
+ - check: field_value
269
+ path: "context.correlation_id"
270
+ value: "creative_ad_server--build_tag"
271
+ description: "Context correlation_id returned unchanged"
272
+ # Anti-façade: a real ad-server adapter calls its upstream tag-build /
273
+ # creative-trafficking API. An adapter that fabricates a serving tag
274
+ # locally without touching the ad server fails this check. Permissive
275
+ # endpoint pattern because ad-server vendors differ widely (Google
276
+ # Ad Manager, Kevel, Equativ, FreeWheel) — the storyboard asserts
277
+ # "an upstream call happened" rather than naming a platform.
278
+ - check: upstream_traffic
279
+ description: "build_creative caused upstream traffic to the ad server carrying the creative_id"
280
+ min_count: 1
281
+ endpoint_pattern: "POST *"
282
+ identifier_paths:
283
+ - "creative_id"
284
+ - id: track_delivery
285
+ title: "Track creative delivery"
286
+ narrative: |
287
+ After the campaign runs, the buyer checks how each creative performed. They call
288
+ get_creative_delivery to get variant-level delivery data — impressions, spend, and
289
+ breakdowns by creative variant.
290
+
291
+ steps:
292
+ - id: get_delivery
293
+ title: "Get creative delivery metrics"
294
+ narrative: |
295
+ The buyer asks: "How did my creatives perform across the media buys?" Your ad
296
+ server returns delivery data per creative, including impressions, spend, and
297
+ variant-level breakdowns.
298
+ task: get_creative_delivery
299
+ schema_ref: "creative/get-creative-delivery-request.json"
300
+ response_schema_ref: "creative/get-creative-delivery-response.json"
301
+ doc_ref: "/creative/task-reference/get_creative_delivery"
302
+ comply_scenario: creative_flow
303
+ stateful: true
304
+ expected: |
305
+ Return per-creative delivery metrics including:
306
+ - Impressions and spend per creative
307
+ - Variant-level breakdowns (which version of each creative was served)
308
+ - Media buy context (which buys each creative was active on)
309
+
310
+ sample_request:
311
+ account:
312
+ brand:
313
+ domain: "acmeoutdoor.example"
314
+ operator: "pinnacle-agency.example"
315
+ media_buy_ids:
316
+ - "mb_summer_campaign_001"
317
+
318
+ context:
319
+ correlation_id: "creative_ad_server--get_delivery"
320
+ ext:
321
+ test_platform:
322
+ test_run: true
323
+ validations:
324
+ - check: response_schema
325
+ description: "Response matches get-creative-delivery-response.json schema"
326
+
327
+ - check: field_present
328
+ path: "context"
329
+ description: "Response echoes back the context object"
330
+ - check: field_value
331
+ path: "context.correlation_id"
332
+ value: "creative_ad_server--get_delivery"
333
+ description: "Context correlation_id returned unchanged"
334
+ - id: report_billing
335
+ title: "Report usage for billing"
336
+ narrative: |
337
+ After delivery, the buyer reports creative usage to the ad server. The billing
338
+ path is optional at the specialism level — agents that bill through AdCP
339
+ accept the record and reconcile against their rate card; agents that bill
340
+ out of band return accepted: 0 with an entry in the errors array pointing at
341
+ the offending usage record and a message explaining that billing is handled
342
+ out of band for this account. response_schema validates the response shape
343
+ either way.
344
+
345
+ steps:
346
+ - id: report_usage
347
+ title: "Report impressions and cost"
348
+ narrative: |
349
+ The buyer sends a usage report covering a billing period. Each record
350
+ includes the creative_id, pricing_option_id (from the build_creative
351
+ response — omitted by agents that bill out of band), impressions served,
352
+ and the computed vendor_cost. The sample_request below is written for
353
+ the AdCP-billed case; out-of-band agents receive the same request shape
354
+ and decide the response.
355
+
356
+ Agents that bill through AdCP verify the rate and return accepted: 1
357
+ with empty errors. Agents that bill out of band return accepted: 0 and
358
+ populate errors with code `BILLING_OUT_OF_BAND`, a `field` pointing at
359
+ the offending record (e.g. `usage[0]` or `usage[0].pricing_option_id`),
360
+ and a human-readable message. Don't fake-accept records you won't bill
361
+ on — silent acceptance breaks reconciliation for buyers who trust the
362
+ response. Buyers SHOULD pre-filter by reading
363
+ `capabilities.creative.bills_through_adcp` from `get_adcp_capabilities`
364
+ before calling `report_usage`; agents that have not yet declared the
365
+ capability stay in the probe-to-discover mode.
366
+ task: report_usage
367
+ schema_ref: "account/report-usage-request.json"
368
+ response_schema_ref: "account/report-usage-response.json"
369
+ doc_ref: "/accounts/tasks/report_usage"
370
+ comply_scenario: creative_flow
371
+ stateful: true
372
+ expected: |
373
+ Return a response matching the report-usage-response.json schema.
374
+ Agents that bill through AdCP return accepted: 1 and empty errors.
375
+ Agents that bill out of band return accepted: 0 with an errors entry
376
+ pointing at the offending record and explaining that billing is
377
+ handled out of band.
378
+
379
+ sample_request:
380
+ account:
381
+ brand:
382
+ domain: "acmeoutdoor.example"
383
+ operator: "pinnacle-agency.example"
384
+ idempotency_key: "$generate:uuid_v4#creative-ad-server-report-usage"
385
+ reporting_period:
386
+ start: "2026-03-01T00:00:00Z"
387
+ end: "2026-03-31T23:59:59Z"
388
+ usage:
389
+ - account:
390
+ account_id: "acct_acme_creative"
391
+ creative_id: "campaign_hero_video"
392
+ pricing_option_id: "po_vast_30s_cpm"
393
+ impressions: 2400000
394
+ vendor_cost: 1200.00
395
+ currency: "USD"
396
+
397
+ context:
398
+ correlation_id: "creative_ad_server--report_usage"
399
+ validations:
400
+ - check: response_schema
401
+ description: "Response matches report-usage-response.json schema"
402
+
403
+ - check: field_present
404
+ path: "context"
405
+ description: "Response echoes back the context object"
406
+ - check: field_value
407
+ path: "context.correlation_id"
408
+ value: "creative_ad_server--report_usage"
409
+ description: "Context correlation_id returned unchanged"