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