@adcp/sdk 7.11.0 → 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.
- package/compliance/cache/3.1.0-rc.2/domains/brand/index.yaml +160 -0
- package/compliance/cache/3.1.0-rc.2/domains/brand/scenarios/distributed_brand_resolution.yaml +415 -0
- package/compliance/cache/3.1.0-rc.2/domains/brand/scenarios/single_side_trust_extension.yaml +454 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/index.yaml +339 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/billing_out_of_band.yaml +153 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/canonical_supported_formats.yaml +212 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/creative_lifecycle_webhooks.yaml +389 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/native_in_feed.yaml +543 -0
- package/compliance/cache/3.1.0-rc.2/domains/governance/index.yaml +682 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/index.yaml +789 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/audience_buy_flow.yaml +380 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/available_actions.yaml +565 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/billing_finality_delivery.yaml +354 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/canonical_formats.yaml +861 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/clicks_buy_flow.yaml +264 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/completed_views_buy_flow.yaml +344 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/create_media_buy_async.yaml +234 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +419 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/creative_reception.yaml +247 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/delivery_reporting.yaml +357 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/dependency_impairment.yaml +633 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/dependency_impairment_cardinality.yaml +800 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/event_dedup_flow.yaml +399 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/frequency_cap_enforcement.yaml +309 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_approved.yaml +214 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_conditions.yaml +199 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_denied.yaml +204 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_denied_recovery.yaml +252 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/invalid_transitions.yaml +289 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/inventory_list_no_match.yaml +148 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/inventory_list_targeting.yaml +276 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/measurement_accountability.yaml +244 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/measurement_terms_rejected.yaml +203 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/package_correlation_legacy_fallback.yaml +113 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/pending_creatives_to_start.yaml +292 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/per_creative_conversion_attribution.yaml +500 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/performance_buy_flow.yaml +428 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/performance_buy_flow_roas.yaml +470 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/product_signal_targeting.yaml +373 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_finalize.yaml +399 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_finalize_asap_timing.yaml +264 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_not_found_errors.yaml +257 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_audit_observation.yaml +333 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_enforcement.yaml +517 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_truth_of_claim.yaml +294 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/reach_buy_flow.yaml +823 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/refine_finalize_exclusivity.yaml +360 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_accountability.yaml +293 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +307 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_optimization_flow.yaml +576 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.1.0-rc.2/domains/signals/index.yaml +266 -0
- package/compliance/cache/3.1.0-rc.2/domains/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.1.0-rc.2/index.json +356 -0
- package/compliance/cache/3.1.0-rc.2/protocols/brand/index.yaml +160 -0
- package/compliance/cache/3.1.0-rc.2/protocols/brand/scenarios/distributed_brand_resolution.yaml +415 -0
- package/compliance/cache/3.1.0-rc.2/protocols/brand/scenarios/single_side_trust_extension.yaml +454 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/index.yaml +339 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/billing_out_of_band.yaml +153 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/canonical_supported_formats.yaml +212 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/creative_lifecycle_webhooks.yaml +389 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/native_in_feed.yaml +543 -0
- package/compliance/cache/3.1.0-rc.2/protocols/governance/index.yaml +682 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/index.yaml +789 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/audience_buy_flow.yaml +380 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/available_actions.yaml +565 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/billing_finality_delivery.yaml +354 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/canonical_formats.yaml +861 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/clicks_buy_flow.yaml +264 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/completed_views_buy_flow.yaml +344 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/create_media_buy_async.yaml +234 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +419 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/creative_reception.yaml +247 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/delivery_reporting.yaml +357 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/dependency_impairment.yaml +633 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/dependency_impairment_cardinality.yaml +800 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/event_dedup_flow.yaml +399 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/frequency_cap_enforcement.yaml +309 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_approved.yaml +214 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_conditions.yaml +199 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_denied.yaml +204 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_denied_recovery.yaml +252 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/invalid_transitions.yaml +289 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/inventory_list_no_match.yaml +148 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/inventory_list_targeting.yaml +276 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/measurement_accountability.yaml +244 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +203 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/package_correlation_legacy_fallback.yaml +113 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +292 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/per_creative_conversion_attribution.yaml +500 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/performance_buy_flow.yaml +428 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/performance_buy_flow_roas.yaml +470 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/product_signal_targeting.yaml +373 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_finalize.yaml +399 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_finalize_asap_timing.yaml +264 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_not_found_errors.yaml +257 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_audit_observation.yaml +333 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_enforcement.yaml +517 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_truth_of_claim.yaml +294 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/reach_buy_flow.yaml +823 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/refine_finalize_exclusivity.yaml +360 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_accountability.yaml +293 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +307 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_optimization_flow.yaml +576 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.1.0-rc.2/protocols/signals/index.yaml +266 -0
- package/compliance/cache/3.1.0-rc.2/protocols/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/audience-sync/index.yaml +313 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/brand-rights/index.yaml +350 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/brand-rights/scenarios/governance_denied.yaml +226 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/collection-lists/index.yaml +359 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/content-standards/index.yaml +572 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/creative-ad-server/index.yaml +409 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/creative-generative/generative-seller.yaml +807 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/creative-generative/index.yaml +758 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/creative-template/index.yaml +510 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-aware-seller/index.yaml +143 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-aware-seller/scenarios/governance_multi_agent_rejected.yaml +117 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-delivery-monitor/index.yaml +441 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-spend-authority/denied.yaml +221 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-spend-authority/index.yaml +330 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/property-lists/index.yaml +482 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-broadcast-tv/index.yaml +738 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-catalog-driven/index.yaml +840 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-guaranteed/index.yaml +601 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-non-guaranteed/index.yaml +546 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-proposal-mode/index.yaml +586 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-social/index.yaml +919 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/signal-marketplace/index.yaml +424 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/signal-marketplace/scenarios/governance_denied.yaml +210 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/signal-owned/index.yaml +317 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sponsored-intelligence/index.yaml +59 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/acme-outdoor-live.yaml +78 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/acme-outdoor.yaml +223 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/billing-gate-runner.yaml +115 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/bistro-oranje.yaml +126 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/distributed-brand-runner.yaml +281 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/nova-motors.yaml +262 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/osei-natural.yaml +126 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/parallel-dispatch-runner.yaml +196 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/rate-limit-trip-runner.yaml +172 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/signed-requests-runner.yaml +155 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/single-side-trust-runner.yaml +294 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/substitution-observer-runner.yaml +688 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/summit-foods.yaml +125 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/webhook-receiver-runner.yaml +265 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/001-minimal-plan.json +43 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/002-full-plan.json +217 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/README.md +220 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/canonicalization.json +241 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/keys.json +60 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/028-unsigned-protocol-method-required.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/001-basic-post.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/003-es256-post.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/README.md +211 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/keys.json +61 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
- package/compliance/cache/3.1.0-rc.2/universal/billing-gate-dispatch.yaml +450 -0
- package/compliance/cache/3.1.0-rc.2/universal/canonical-format-validate-input.yaml +640 -0
- package/compliance/cache/3.1.0-rc.2/universal/capability-discovery.yaml +125 -0
- package/compliance/cache/3.1.0-rc.2/universal/collection-lists-pagination-integrity.yaml +306 -0
- package/compliance/cache/3.1.0-rc.2/universal/comply-controller-mode-gate.yaml +141 -0
- package/compliance/cache/3.1.0-rc.2/universal/content-standards-pagination-integrity.yaml +326 -0
- package/compliance/cache/3.1.0-rc.2/universal/deterministic-testing.yaml +1430 -0
- package/compliance/cache/3.1.0-rc.2/universal/error-compliance-signals.yaml +377 -0
- package/compliance/cache/3.1.0-rc.2/universal/error-compliance.yaml +528 -0
- package/compliance/cache/3.1.0-rc.2/universal/fictional-entities.yaml +307 -0
- package/compliance/cache/3.1.0-rc.2/universal/get-media-buys-pagination-integrity.yaml +160 -0
- package/compliance/cache/3.1.0-rc.2/universal/get-signals-pagination-integrity.yaml +210 -0
- package/compliance/cache/3.1.0-rc.2/universal/idempotency.yaml +861 -0
- package/compliance/cache/3.1.0-rc.2/universal/notification-config-event-scope.yaml +119 -0
- package/compliance/cache/3.1.0-rc.2/universal/notification-config-lifecycle.yaml +337 -0
- package/compliance/cache/3.1.0-rc.2/universal/notification-config-rejections.yaml +107 -0
- package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity-creative-formats.yaml +265 -0
- package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity-list-accounts.yaml +245 -0
- package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity.yaml +263 -0
- package/compliance/cache/3.1.0-rc.2/universal/property-lists-pagination-integrity.yaml +307 -0
- package/compliance/cache/3.1.0-rc.2/universal/read-tool-idempotency.yaml +405 -0
- package/compliance/cache/3.1.0-rc.2/universal/runner-output-contract.yaml +1285 -0
- package/compliance/cache/3.1.0-rc.2/universal/schema-validation-signals.yaml +181 -0
- package/compliance/cache/3.1.0-rc.2/universal/schema-validation.yaml +548 -0
- package/compliance/cache/3.1.0-rc.2/universal/security.yaml +539 -0
- package/compliance/cache/3.1.0-rc.2/universal/signed-requests.yaml +217 -0
- package/compliance/cache/3.1.0-rc.2/universal/stale-response-advisory.yaml +295 -0
- package/compliance/cache/3.1.0-rc.2/universal/storyboard-schema.yaml +2194 -0
- package/compliance/cache/3.1.0-rc.2/universal/v3-envelope-integrity.yaml +117 -0
- package/compliance/cache/3.1.0-rc.2/universal/version-negotiation.yaml +130 -0
- package/compliance/cache/3.1.0-rc.2/universal/webhook-emission.yaml +411 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-bulk-webhooks.yaml +82 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-product-webhooks.yaml +83 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-products.yaml +151 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-signal-webhooks.yaml +83 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-signals.yaml +149 -0
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/testing/storyboard/default-invariants.js +23 -0
- package/dist/lib/testing/storyboard/default-invariants.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +84 -21
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/testing/storyboard/types.d.ts +21 -0
- package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/types.js.map +1 -1
- package/dist/lib/testing/types.d.ts +9 -0
- package/dist/lib/testing/types.d.ts.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/package.json +1 -1
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
id: creative_lifecycle
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Creative lifecycle"
|
|
4
|
+
category: creative_lifecycle
|
|
5
|
+
summary: "Baseline creative lifecycle on a stateful platform: sync display creatives, list with filtering, and preview renderings."
|
|
6
|
+
track: creative
|
|
7
|
+
required_tools:
|
|
8
|
+
- list_creative_formats
|
|
9
|
+
|
|
10
|
+
narrative: |
|
|
11
|
+
You run a creative platform with a persistent library — an ad server, creative management
|
|
12
|
+
platform, or publisher that accepts and stores creative assets. A buyer agent pushes
|
|
13
|
+
display creatives, queries the library, and previews renderings before launch.
|
|
14
|
+
|
|
15
|
+
This storyboard covers the complete creative lifecycle from the buyer's perspective:
|
|
16
|
+
uploading a display asset, browsing the library, and previewing the deliverable.
|
|
17
|
+
|
|
18
|
+
The individual creative storyboards (template, ad server, native, sales agent) cover
|
|
19
|
+
specific interaction models and sub-modalities. This storyboard keeps the generic
|
|
20
|
+
creative baseline display-safe; video tag generation is covered by the
|
|
21
|
+
creative-ad-server specialism.
|
|
22
|
+
|
|
23
|
+
agent:
|
|
24
|
+
interaction_model: stateful_push
|
|
25
|
+
capabilities:
|
|
26
|
+
- has_creative_library
|
|
27
|
+
examples:
|
|
28
|
+
- "Publisher creative intake platforms"
|
|
29
|
+
- "Retail media creative libraries"
|
|
30
|
+
- "Display ad management platforms"
|
|
31
|
+
|
|
32
|
+
caller:
|
|
33
|
+
role: buyer_agent
|
|
34
|
+
example: "Pinnacle Agency (buyer)"
|
|
35
|
+
|
|
36
|
+
prerequisites:
|
|
37
|
+
description: |
|
|
38
|
+
The caller needs display creative assets and a brand identity. The test kit provides
|
|
39
|
+
sample assets at standard ad dimensions.
|
|
40
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
41
|
+
|
|
42
|
+
phases:
|
|
43
|
+
- id: capability_discovery
|
|
44
|
+
title: "Capability discovery"
|
|
45
|
+
narrative: |
|
|
46
|
+
The buyer calls get_adcp_capabilities to confirm the agent supports creative operations before browsing or previewing creatives.
|
|
47
|
+
|
|
48
|
+
steps:
|
|
49
|
+
- id: get_capabilities
|
|
50
|
+
title: "Check agent capabilities"
|
|
51
|
+
narrative: |
|
|
52
|
+
Verify that the agent declares the expected protocol support before
|
|
53
|
+
proceeding with domain-specific operations.
|
|
54
|
+
task: get_adcp_capabilities
|
|
55
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
56
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
57
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
58
|
+
comply_scenario: capability_discovery
|
|
59
|
+
stateful: false
|
|
60
|
+
expected: |
|
|
61
|
+
Return capabilities declaring creative in supported_protocols, confirming the agent handles creative operations.
|
|
62
|
+
sample_request:
|
|
63
|
+
context:
|
|
64
|
+
correlation_id: "creative_lifecycle--get_capabilities"
|
|
65
|
+
validations:
|
|
66
|
+
- check: response_schema
|
|
67
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
68
|
+
- check: field_present
|
|
69
|
+
path: "supported_protocols"
|
|
70
|
+
description: "Agent declares supported protocols"
|
|
71
|
+
|
|
72
|
+
- check: field_present
|
|
73
|
+
path: "context"
|
|
74
|
+
description: "Response echoes back the context object"
|
|
75
|
+
- check: field_value
|
|
76
|
+
path: "context.correlation_id"
|
|
77
|
+
value: "creative_lifecycle--get_capabilities"
|
|
78
|
+
description: "Context correlation_id returned unchanged"
|
|
79
|
+
- id: discover_formats
|
|
80
|
+
title: "Discover accepted formats"
|
|
81
|
+
narrative: |
|
|
82
|
+
Before pushing any creatives, the buyer discovers what formats your platform accepts.
|
|
83
|
+
This determines which assets to prepare and what dimensions and specs to target.
|
|
84
|
+
|
|
85
|
+
steps:
|
|
86
|
+
- id: list_formats
|
|
87
|
+
title: "List creative formats"
|
|
88
|
+
narrative: |
|
|
89
|
+
The buyer calls list_creative_formats to discover what your platform accepts.
|
|
90
|
+
The response defines format specs: dimensions, asset requirements, mime types,
|
|
91
|
+
and any platform-specific constraints.
|
|
92
|
+
task: list_creative_formats
|
|
93
|
+
schema_ref: "creative/list-creative-formats-request.json"
|
|
94
|
+
response_schema_ref: "creative/list-creative-formats-response.json"
|
|
95
|
+
doc_ref: "/creative/task-reference/list_creative_formats"
|
|
96
|
+
comply_scenario: creative_lifecycle
|
|
97
|
+
stateful: false
|
|
98
|
+
expected: |
|
|
99
|
+
Return the first page of creative formats your platform accepts:
|
|
100
|
+
- format_id with your agent_url and unique id
|
|
101
|
+
- Asset requirements (dimensions, file sizes, mime types)
|
|
102
|
+
- Render dimensions
|
|
103
|
+
- Up to five formats on this compliance request; callers paginate for the rest when needed
|
|
104
|
+
|
|
105
|
+
sample_request:
|
|
106
|
+
pagination:
|
|
107
|
+
max_results: 5
|
|
108
|
+
context:
|
|
109
|
+
correlation_id: "creative_lifecycle--list_formats"
|
|
110
|
+
|
|
111
|
+
validations:
|
|
112
|
+
- check: response_schema
|
|
113
|
+
description: "Response matches list-creative-formats-response.json schema"
|
|
114
|
+
- check: field_present
|
|
115
|
+
path: "formats"
|
|
116
|
+
description: "Response contains formats array"
|
|
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_lifecycle--list_formats"
|
|
124
|
+
description: "Context correlation_id returned unchanged"
|
|
125
|
+
- check: field_present
|
|
126
|
+
path: "formats[0].format_id.agent_url"
|
|
127
|
+
description: "Format IDs include agent_url"
|
|
128
|
+
- check: field_present
|
|
129
|
+
path: "formats[0].format_id.id"
|
|
130
|
+
description: "Format IDs include id — must match those in get_products"
|
|
131
|
+
- id: sync_multiple
|
|
132
|
+
title: "Sync display creative"
|
|
133
|
+
narrative: |
|
|
134
|
+
The buyer pushes a display banner to your platform. Your platform validates the
|
|
135
|
+
creative against its format specs and returns per-creative status.
|
|
136
|
+
|
|
137
|
+
steps:
|
|
138
|
+
- id: sync_creatives
|
|
139
|
+
title: "Push a display creative"
|
|
140
|
+
narrative: |
|
|
141
|
+
The buyer syncs a 300x250 display banner. Your platform validates it against
|
|
142
|
+
its format specs and returns per-creative action and status.
|
|
143
|
+
task: sync_creatives
|
|
144
|
+
schema_ref: "creative/sync-creatives-request.json"
|
|
145
|
+
response_schema_ref: "creative/sync-creatives-response.json"
|
|
146
|
+
doc_ref: "/creative/task-reference/sync_creatives"
|
|
147
|
+
comply_scenario: creative_lifecycle
|
|
148
|
+
stateful: true
|
|
149
|
+
expected: |
|
|
150
|
+
Accept and validate the display creative:
|
|
151
|
+
- Per-creative action: created
|
|
152
|
+
- Per-creative status: accepted or pending_review
|
|
153
|
+
- Validation results for the creative
|
|
154
|
+
- Platform-assigned IDs if applicable
|
|
155
|
+
|
|
156
|
+
sample_request:
|
|
157
|
+
account:
|
|
158
|
+
brand:
|
|
159
|
+
domain: "acmeoutdoor.example"
|
|
160
|
+
operator: "pinnacle-agency.example"
|
|
161
|
+
creatives:
|
|
162
|
+
- creative_id: "display_trail_pro_300x250"
|
|
163
|
+
name: "Trail Pro 3000 - Display 300x250"
|
|
164
|
+
format_id:
|
|
165
|
+
agent_url: "https://your-platform.example.com"
|
|
166
|
+
id: "display_300x250"
|
|
167
|
+
assets:
|
|
168
|
+
image:
|
|
169
|
+
asset_type: "image"
|
|
170
|
+
url: "https://cdn.pinnacle-agency.example/trail-pro-300x250.png"
|
|
171
|
+
width: 300
|
|
172
|
+
height: 250
|
|
173
|
+
mime_type: "image/png"
|
|
174
|
+
idempotency_key: "$generate:uuid_v4#creative_lifecycle_sync_multiple_sync_creatives"
|
|
175
|
+
context:
|
|
176
|
+
correlation_id: "creative_lifecycle--sync_creatives"
|
|
177
|
+
validations:
|
|
178
|
+
- check: response_schema
|
|
179
|
+
description: "Response matches sync-creatives-response.json schema"
|
|
180
|
+
- check: field_present
|
|
181
|
+
path: "creatives"
|
|
182
|
+
description: "Response contains per-creative results"
|
|
183
|
+
|
|
184
|
+
- check: field_present
|
|
185
|
+
path: "context"
|
|
186
|
+
description: "Response echoes back the context object"
|
|
187
|
+
- check: field_value
|
|
188
|
+
path: "context.correlation_id"
|
|
189
|
+
value: "creative_lifecycle--sync_creatives"
|
|
190
|
+
description: "Context correlation_id returned unchanged"
|
|
191
|
+
- id: list_and_filter
|
|
192
|
+
title: "List creatives with filtering"
|
|
193
|
+
narrative: |
|
|
194
|
+
The buyer queries the creative library to see their synced creatives. First a broad
|
|
195
|
+
list, then filtered by format. This verifies the library correctly stores and indexes
|
|
196
|
+
the pushed creatives.
|
|
197
|
+
|
|
198
|
+
steps:
|
|
199
|
+
- id: list_all
|
|
200
|
+
title: "List all creatives in library"
|
|
201
|
+
narrative: |
|
|
202
|
+
The buyer calls list_creatives with no filters to see all creatives in the
|
|
203
|
+
library for their account. The response includes the display creative synced
|
|
204
|
+
in the previous phase.
|
|
205
|
+
task: list_creatives
|
|
206
|
+
schema_ref: "creative/list-creatives-request.json"
|
|
207
|
+
response_schema_ref: "creative/list-creatives-response.json"
|
|
208
|
+
doc_ref: "/creative/task-reference/list_creatives"
|
|
209
|
+
comply_scenario: creative_lifecycle
|
|
210
|
+
stateful: true
|
|
211
|
+
expected: |
|
|
212
|
+
Return creatives in the library:
|
|
213
|
+
- creatives array containing the synced items
|
|
214
|
+
- Each creative includes: creative_id, name, format_id, status
|
|
215
|
+
- At least one creative from the sync phase
|
|
216
|
+
|
|
217
|
+
sample_request:
|
|
218
|
+
account:
|
|
219
|
+
brand:
|
|
220
|
+
domain: "acmeoutdoor.example"
|
|
221
|
+
operator: "pinnacle-agency.example"
|
|
222
|
+
|
|
223
|
+
context:
|
|
224
|
+
correlation_id: "creative_lifecycle--list_all"
|
|
225
|
+
validations:
|
|
226
|
+
- check: response_schema
|
|
227
|
+
description: "Response matches list-creatives-response.json schema"
|
|
228
|
+
- check: field_present
|
|
229
|
+
path: "creatives"
|
|
230
|
+
description: "Response contains creatives array"
|
|
231
|
+
|
|
232
|
+
- check: field_present
|
|
233
|
+
path: "context"
|
|
234
|
+
description: "Response echoes back the context object"
|
|
235
|
+
- check: field_value
|
|
236
|
+
path: "context.correlation_id"
|
|
237
|
+
value: "creative_lifecycle--list_all"
|
|
238
|
+
description: "Context correlation_id returned unchanged"
|
|
239
|
+
- id: list_filtered
|
|
240
|
+
title: "List creatives filtered by format"
|
|
241
|
+
narrative: |
|
|
242
|
+
The buyer lists creatives filtered to a specific format (display only). The
|
|
243
|
+
response should only include creatives matching that format.
|
|
244
|
+
task: list_creatives
|
|
245
|
+
schema_ref: "creative/list-creatives-request.json"
|
|
246
|
+
response_schema_ref: "creative/list-creatives-response.json"
|
|
247
|
+
doc_ref: "/creative/task-reference/list_creatives"
|
|
248
|
+
comply_scenario: creative_lifecycle
|
|
249
|
+
stateful: true
|
|
250
|
+
expected: |
|
|
251
|
+
Return only creatives matching the format filter:
|
|
252
|
+
- creatives array filtered to display format
|
|
253
|
+
- Should include display_trail_pro_300x250
|
|
254
|
+
|
|
255
|
+
sample_request:
|
|
256
|
+
account:
|
|
257
|
+
brand:
|
|
258
|
+
domain: "acmeoutdoor.example"
|
|
259
|
+
operator: "pinnacle-agency.example"
|
|
260
|
+
filters:
|
|
261
|
+
format_ids:
|
|
262
|
+
- agent_url: "https://your-platform.example.com"
|
|
263
|
+
id: "display_300x250"
|
|
264
|
+
|
|
265
|
+
context:
|
|
266
|
+
correlation_id: "creative_lifecycle--list_filtered"
|
|
267
|
+
validations:
|
|
268
|
+
- check: response_schema
|
|
269
|
+
description: "Response matches list-creatives-response.json schema"
|
|
270
|
+
- check: field_present
|
|
271
|
+
path: "creatives"
|
|
272
|
+
description: "Response contains filtered creatives"
|
|
273
|
+
|
|
274
|
+
- check: field_present
|
|
275
|
+
path: "context"
|
|
276
|
+
description: "Response echoes back the context object"
|
|
277
|
+
- check: field_value
|
|
278
|
+
path: "context.correlation_id"
|
|
279
|
+
value: "creative_lifecycle--list_filtered"
|
|
280
|
+
description: "Context correlation_id returned unchanged"
|
|
281
|
+
- id: build_and_preview
|
|
282
|
+
title: "Preview display creative"
|
|
283
|
+
narrative: |
|
|
284
|
+
The buyer previews renderings for the synced display creative. Video/VAST tag
|
|
285
|
+
generation is covered by the creative-ad-server specialism, where the agent has
|
|
286
|
+
explicitly claimed that sub-modality.
|
|
287
|
+
|
|
288
|
+
steps:
|
|
289
|
+
- id: preview_display
|
|
290
|
+
title: "Preview the display creative"
|
|
291
|
+
narrative: |
|
|
292
|
+
The buyer calls preview_creative for the display banner to see how it renders
|
|
293
|
+
in the platform's environment before going live.
|
|
294
|
+
task: preview_creative
|
|
295
|
+
schema_ref: "creative/preview-creative-request.json"
|
|
296
|
+
response_schema_ref: "creative/preview-creative-response.json"
|
|
297
|
+
doc_ref: "/creative/task-reference/preview_creative"
|
|
298
|
+
comply_scenario: creative_flow
|
|
299
|
+
stateful: true
|
|
300
|
+
expected: |
|
|
301
|
+
Return a preview of the display creative:
|
|
302
|
+
- preview_url: rendered preview the buyer can inspect
|
|
303
|
+
- render_dimensions: matches the 300x250 format
|
|
304
|
+
- status: preview available
|
|
305
|
+
|
|
306
|
+
sample_request:
|
|
307
|
+
account:
|
|
308
|
+
brand:
|
|
309
|
+
domain: "acmeoutdoor.example"
|
|
310
|
+
operator: "pinnacle-agency.example"
|
|
311
|
+
request_type: "single"
|
|
312
|
+
creative_manifest:
|
|
313
|
+
creative_id: "display_trail_pro_300x250"
|
|
314
|
+
format_id:
|
|
315
|
+
agent_url: "https://your-platform.example.com"
|
|
316
|
+
id: "display_300x250"
|
|
317
|
+
assets:
|
|
318
|
+
image:
|
|
319
|
+
asset_type: "image"
|
|
320
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/banner_300x250.jpg"
|
|
321
|
+
width: 300
|
|
322
|
+
height: 250
|
|
323
|
+
click_url:
|
|
324
|
+
asset_type: "url"
|
|
325
|
+
url: "https://acmeoutdoor.example/trail-pro"
|
|
326
|
+
|
|
327
|
+
context:
|
|
328
|
+
correlation_id: "creative_lifecycle--preview_display"
|
|
329
|
+
validations:
|
|
330
|
+
- check: response_schema
|
|
331
|
+
description: "Response matches preview-creative-response.json schema"
|
|
332
|
+
|
|
333
|
+
- check: field_present
|
|
334
|
+
path: "context"
|
|
335
|
+
description: "Response echoes back the context object"
|
|
336
|
+
- check: field_value
|
|
337
|
+
path: "context.correlation_id"
|
|
338
|
+
value: "creative_lifecycle--preview_display"
|
|
339
|
+
description: "Context correlation_id returned unchanged"
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
id: creative/billing_out_of_band
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Creative report_usage rejects out-of-band billing"
|
|
4
|
+
category: creative
|
|
5
|
+
summary: "Verifies that a creative agent declaring bills_through_adcp: false rejects report_usage records with accepted: 0 and BILLING_OUT_OF_BAND."
|
|
6
|
+
track: creative
|
|
7
|
+
introduced_in: "3.1"
|
|
8
|
+
required_tools:
|
|
9
|
+
- get_adcp_capabilities
|
|
10
|
+
- report_usage
|
|
11
|
+
|
|
12
|
+
narrative: |
|
|
13
|
+
Creative agents that bill through an offline contract, SaaS license, or
|
|
14
|
+
bundled enterprise agreement should declare `creative.bills_through_adcp:
|
|
15
|
+
false`. Buyers use that capability as a pre-call discriminator and should
|
|
16
|
+
avoid sending AdCP billing records. If a buyer still probes with
|
|
17
|
+
`report_usage`, the agent must not silently accept a record it will not bill
|
|
18
|
+
on. It returns `accepted: 0` with `errors[0].code: BILLING_OUT_OF_BAND`.
|
|
19
|
+
|
|
20
|
+
`BILLING_OUT_OF_BAND` is terminal. The buyer must not auto-retry the same
|
|
21
|
+
`report_usage` record, because no request mutation will move the account onto
|
|
22
|
+
an AdCP billing surface. The recovery path is buyer-side routing: mark the
|
|
23
|
+
creative agent/account as out-of-band and reconcile from the native billing
|
|
24
|
+
export or offline contract.
|
|
25
|
+
|
|
26
|
+
agent:
|
|
27
|
+
interaction_model: creative_agent
|
|
28
|
+
capabilities:
|
|
29
|
+
- has_creative_library
|
|
30
|
+
- bills_out_of_band
|
|
31
|
+
examples:
|
|
32
|
+
- "Ad servers licensed by flat SaaS contract"
|
|
33
|
+
- "Creative platforms bundled into an enterprise agreement"
|
|
34
|
+
|
|
35
|
+
caller:
|
|
36
|
+
role: buyer_agent
|
|
37
|
+
example: "Pinnacle Agency (buyer)"
|
|
38
|
+
|
|
39
|
+
prerequisites:
|
|
40
|
+
description: |
|
|
41
|
+
The creative agent declares `creative.bills_through_adcp: false` in
|
|
42
|
+
`get_adcp_capabilities`. Agents that declare `true` are not exercising this
|
|
43
|
+
storyboard path; the rejection phase is skipped for them.
|
|
44
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
45
|
+
|
|
46
|
+
phases:
|
|
47
|
+
- id: capability_discovery
|
|
48
|
+
title: "Discover creative billing mode"
|
|
49
|
+
narrative: |
|
|
50
|
+
The buyer reads `creative.bills_through_adcp` before sending usage
|
|
51
|
+
records. A false value means billing is out of band and `report_usage`
|
|
52
|
+
is not the billing source of truth.
|
|
53
|
+
|
|
54
|
+
steps:
|
|
55
|
+
- id: get_capabilities
|
|
56
|
+
title: "Read creative billing discriminator"
|
|
57
|
+
task: get_adcp_capabilities
|
|
58
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
59
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
60
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
61
|
+
comply_scenario: capability_discovery
|
|
62
|
+
stateful: false
|
|
63
|
+
expected: |
|
|
64
|
+
Return a creative capability block with `bills_through_adcp`
|
|
65
|
+
declared. The report_usage rejection path below only runs when the
|
|
66
|
+
value is false.
|
|
67
|
+
sample_request:
|
|
68
|
+
context:
|
|
69
|
+
correlation_id: "creative_billing_out_of_band--get_capabilities"
|
|
70
|
+
context_outputs:
|
|
71
|
+
- key: "bills_through_adcp"
|
|
72
|
+
path: "creative.bills_through_adcp"
|
|
73
|
+
validations:
|
|
74
|
+
- check: response_schema
|
|
75
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
76
|
+
- check: field_present
|
|
77
|
+
path: "creative.bills_through_adcp"
|
|
78
|
+
description: "Creative billing discriminator is declared"
|
|
79
|
+
- check: field_value
|
|
80
|
+
path: "context.correlation_id"
|
|
81
|
+
value: "creative_billing_out_of_band--get_capabilities"
|
|
82
|
+
description: "Context correlation_id returned unchanged"
|
|
83
|
+
|
|
84
|
+
- id: reject_out_of_band_usage
|
|
85
|
+
title: "Reject report_usage for out-of-band billing"
|
|
86
|
+
optional: true
|
|
87
|
+
skip_if: "context.bills_through_adcp != false"
|
|
88
|
+
narrative: |
|
|
89
|
+
The buyer sends a well-formed creative usage record despite the declared
|
|
90
|
+
out-of-band billing mode. The creative agent returns a successful task
|
|
91
|
+
response with zero accepted records and a per-record
|
|
92
|
+
`BILLING_OUT_OF_BAND` error. This is not a transport failure and should
|
|
93
|
+
not use `expect_error: true`.
|
|
94
|
+
|
|
95
|
+
steps:
|
|
96
|
+
- id: report_usage_out_of_band
|
|
97
|
+
title: "Submit creative usage to an out-of-band agent"
|
|
98
|
+
task: report_usage
|
|
99
|
+
schema_ref: "account/report-usage-request.json"
|
|
100
|
+
response_schema_ref: "account/report-usage-response.json"
|
|
101
|
+
doc_ref: "/accounts/tasks/report_usage"
|
|
102
|
+
negative_path: payload_well_formed
|
|
103
|
+
stateful: true
|
|
104
|
+
expected: |
|
|
105
|
+
Return:
|
|
106
|
+
- accepted: 0
|
|
107
|
+
- errors[0].code: BILLING_OUT_OF_BAND
|
|
108
|
+
- errors[0].recovery: terminal
|
|
109
|
+
|
|
110
|
+
The terminal recovery classification is the machine-readable
|
|
111
|
+
no-retry assertion: buyers must not re-issue the same report_usage
|
|
112
|
+
after this response.
|
|
113
|
+
sample_request:
|
|
114
|
+
account:
|
|
115
|
+
brand:
|
|
116
|
+
domain: "acmeoutdoor.example"
|
|
117
|
+
operator: "pinnacle-agency.example"
|
|
118
|
+
idempotency_key: "$generate:uuid_v4#creative_billing_out_of_band_report_usage"
|
|
119
|
+
reporting_period:
|
|
120
|
+
start: "2026-07-01T00:00:00Z"
|
|
121
|
+
end: "2026-07-31T23:59:59Z"
|
|
122
|
+
usage:
|
|
123
|
+
- account:
|
|
124
|
+
account_id: "acct_acme_creative"
|
|
125
|
+
creative_id: "campaign_hero_video"
|
|
126
|
+
pricing_option_id: "po_vast_30s_cpm"
|
|
127
|
+
impressions: 2400000
|
|
128
|
+
vendor_cost: 1200.00
|
|
129
|
+
currency: "USD"
|
|
130
|
+
context:
|
|
131
|
+
correlation_id: "creative_billing_out_of_band--report_usage"
|
|
132
|
+
validations:
|
|
133
|
+
- check: response_schema
|
|
134
|
+
description: "Response matches report-usage-response.json schema"
|
|
135
|
+
- check: field_value
|
|
136
|
+
path: "accepted"
|
|
137
|
+
value: 0
|
|
138
|
+
description: "No out-of-band creative usage records are accepted"
|
|
139
|
+
- check: field_value
|
|
140
|
+
path: "errors[0].code"
|
|
141
|
+
value: "BILLING_OUT_OF_BAND"
|
|
142
|
+
description: "Per-record error code is BILLING_OUT_OF_BAND"
|
|
143
|
+
- check: field_value
|
|
144
|
+
path: "errors[0].recovery"
|
|
145
|
+
value: "terminal"
|
|
146
|
+
description: "Terminal recovery tells buyers not to auto-retry report_usage"
|
|
147
|
+
- check: field_absent
|
|
148
|
+
path: "errors[0].details"
|
|
149
|
+
description: "BILLING_OUT_OF_BAND is discriminator-by-code; no details payload is defined"
|
|
150
|
+
- check: field_value
|
|
151
|
+
path: "context.correlation_id"
|
|
152
|
+
value: "creative_billing_out_of_band--report_usage"
|
|
153
|
+
description: "Context correlation_id returned unchanged"
|