@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,543 @@
|
|
|
1
|
+
id: creative/native_in_feed
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Native in-feed creative lifecycle"
|
|
4
|
+
category: creative
|
|
5
|
+
summary: "End-to-end native_in_feed conformance: format discovery, full 12-slot asset bundle submission with pixel trackers, per-constraint validation rejection paths, and feed-rendered preview."
|
|
6
|
+
track: creative
|
|
7
|
+
required_tools:
|
|
8
|
+
- sync_creatives
|
|
9
|
+
|
|
10
|
+
narrative: |
|
|
11
|
+
You run a native ad platform or content-recommendation network that accepts buyer-supplied
|
|
12
|
+
native asset bundles. A buyer agent discovers your native format, submits a full asset bundle
|
|
13
|
+
(title, body text, image, CTA, advertiser name, trackers), tests how you reject assets that
|
|
14
|
+
violate declared format constraints, and previews the assembled feed unit.
|
|
15
|
+
|
|
16
|
+
This storyboard exercises the native_in_feed canonical end-to-end, referencing format
|
|
17
|
+
constraints typical of a content-recommendation product (title_max_chars, main_image_sizes,
|
|
18
|
+
cta_values closed enum). Phase 3 isolates each validation failure case to a separate
|
|
19
|
+
sync_creatives call so that per-constraint error codes can be asserted cleanly.
|
|
20
|
+
|
|
21
|
+
agent:
|
|
22
|
+
interaction_model: stateful_push
|
|
23
|
+
capabilities:
|
|
24
|
+
- has_creative_library
|
|
25
|
+
examples:
|
|
26
|
+
- "Content recommendation networks"
|
|
27
|
+
- "Native ad platforms"
|
|
28
|
+
- "In-feed publisher ad servers"
|
|
29
|
+
|
|
30
|
+
caller:
|
|
31
|
+
role: buyer_agent
|
|
32
|
+
example: "Pinnacle Agency (buyer)"
|
|
33
|
+
|
|
34
|
+
prerequisites:
|
|
35
|
+
description: |
|
|
36
|
+
The seller platform supports at least one native_in_feed creative format with declared
|
|
37
|
+
constraints: title_max_chars, body_text_max_chars, main_image_sizes, and a cta_values
|
|
38
|
+
closed enum. The test kit provides sample native assets at standard native dimensions.
|
|
39
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
40
|
+
|
|
41
|
+
phases:
|
|
42
|
+
- id: capability_discovery
|
|
43
|
+
title: "Capability discovery"
|
|
44
|
+
narrative: |
|
|
45
|
+
Confirm the platform supports creative operations before pushing assets.
|
|
46
|
+
|
|
47
|
+
steps:
|
|
48
|
+
- id: get_capabilities
|
|
49
|
+
title: "Check agent capabilities"
|
|
50
|
+
narrative: |
|
|
51
|
+
Verify the agent declares creative support before format discovery.
|
|
52
|
+
task: get_adcp_capabilities
|
|
53
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
54
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
55
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
56
|
+
comply_scenario: capability_discovery
|
|
57
|
+
stateful: false
|
|
58
|
+
expected: |
|
|
59
|
+
Return capabilities including creative in supported_protocols.
|
|
60
|
+
sample_request:
|
|
61
|
+
context:
|
|
62
|
+
correlation_id: "creative_native_in_feed--get_capabilities"
|
|
63
|
+
validations:
|
|
64
|
+
- check: response_schema
|
|
65
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
66
|
+
- check: field_present
|
|
67
|
+
path: "supported_protocols"
|
|
68
|
+
description: "Agent declares supported protocols"
|
|
69
|
+
- check: field_present
|
|
70
|
+
path: "context"
|
|
71
|
+
description: "Response echoes back the context object"
|
|
72
|
+
- check: field_value
|
|
73
|
+
path: "context.correlation_id"
|
|
74
|
+
value: "creative_native_in_feed--get_capabilities"
|
|
75
|
+
description: "Context correlation_id returned unchanged"
|
|
76
|
+
|
|
77
|
+
- id: discover_native_formats
|
|
78
|
+
title: "Discover native creative formats"
|
|
79
|
+
narrative: |
|
|
80
|
+
The buyer queries for formats that accept text and image assets — the combination
|
|
81
|
+
that characterises native in-feed units. The seller returns its native_in_feed
|
|
82
|
+
format declaration including declared slot constraints.
|
|
83
|
+
|
|
84
|
+
steps:
|
|
85
|
+
- id: list_native_formats
|
|
86
|
+
title: "List formats accepting text and image assets"
|
|
87
|
+
narrative: |
|
|
88
|
+
The buyer calls list_creative_formats filtered to asset_types ["text", "image"].
|
|
89
|
+
There is no format_kind filter in the protocol; the buyer identifies the
|
|
90
|
+
native_in_feed format from the returned format metadata (name, slots, params).
|
|
91
|
+
The test validates that at least one format is returned and that the response
|
|
92
|
+
is schema-valid — sellers surface their native format here so buyers can
|
|
93
|
+
discover slot requirements before submitting creatives.
|
|
94
|
+
|
|
95
|
+
Note: the `format_id` used in later phases (`id: "native_in_feed"`,
|
|
96
|
+
`agent_url: "https://your-platform.example.com"`) is a placeholder the
|
|
97
|
+
implementer substitutes with an actual format_id from this response.
|
|
98
|
+
This follows the established pattern for storyboard format references.
|
|
99
|
+
task: list_creative_formats
|
|
100
|
+
schema_ref: "creative/list-creative-formats-request.json"
|
|
101
|
+
response_schema_ref: "creative/list-creative-formats-response.json"
|
|
102
|
+
doc_ref: "/creative/task-reference/list_creative_formats"
|
|
103
|
+
comply_scenario: creative_lifecycle
|
|
104
|
+
stateful: false
|
|
105
|
+
expected: |
|
|
106
|
+
Return at least one format that accepts text and image assets, with declared
|
|
107
|
+
slot constraints (title_max_chars, main_image_sizes, cta_values) visible in
|
|
108
|
+
the format's parameter block so the buyer can prepare a compliant asset bundle.
|
|
109
|
+
sample_request:
|
|
110
|
+
asset_types:
|
|
111
|
+
- "text"
|
|
112
|
+
- "image"
|
|
113
|
+
context:
|
|
114
|
+
correlation_id: "creative_native_in_feed--list_native_formats"
|
|
115
|
+
validations:
|
|
116
|
+
- check: response_schema
|
|
117
|
+
description: "Response matches list-creative-formats-response.json schema"
|
|
118
|
+
- check: field_present
|
|
119
|
+
path: "formats"
|
|
120
|
+
description: "Response contains formats array"
|
|
121
|
+
- check: field_present
|
|
122
|
+
path: "context"
|
|
123
|
+
description: "Response echoes back the context object"
|
|
124
|
+
- check: field_value
|
|
125
|
+
path: "context.correlation_id"
|
|
126
|
+
value: "creative_native_in_feed--list_native_formats"
|
|
127
|
+
description: "Context correlation_id returned unchanged"
|
|
128
|
+
|
|
129
|
+
- id: sync_native_creative
|
|
130
|
+
title: "Sync a full native asset bundle"
|
|
131
|
+
narrative: |
|
|
132
|
+
The buyer submits a native creative with all 12 slots populated: title, body_text,
|
|
133
|
+
main_image (1200×627), CTA from the declared cta_values enum, advertiser_name,
|
|
134
|
+
sponsored_label, landing_page_url, display_url, rating, and three pixel_tracker
|
|
135
|
+
entries for impression, viewability (MRC 50%), and click. The seller validates the
|
|
136
|
+
bundle against canonical slot requirements and any product narrowing parameters.
|
|
137
|
+
|
|
138
|
+
steps:
|
|
139
|
+
- id: sync_full_bundle
|
|
140
|
+
title: "Submit native creative with all 12 slots and pixel trackers"
|
|
141
|
+
narrative: |
|
|
142
|
+
Full native asset bundle using values compliant with a typical content-recommendation
|
|
143
|
+
format: title within 80 chars, main_image at 1200×627, CTA from a closed enum,
|
|
144
|
+
and pixel_tracker entries for all three standard measurement events. The seller
|
|
145
|
+
must accept all required slots (title, main_image, advertiser_name, landing_page_url)
|
|
146
|
+
and return action: created with a non-rejected status.
|
|
147
|
+
task: sync_creatives
|
|
148
|
+
schema_ref: "creative/sync-creatives-request.json"
|
|
149
|
+
response_schema_ref: "creative/sync-creatives-response.json"
|
|
150
|
+
doc_ref: "/creative/task-reference/sync_creatives"
|
|
151
|
+
comply_scenario: creative_lifecycle
|
|
152
|
+
stateful: true
|
|
153
|
+
expected: |
|
|
154
|
+
Accept the full 12-slot native bundle:
|
|
155
|
+
- action: created
|
|
156
|
+
- status: accepted or pending_review (not rejected)
|
|
157
|
+
- All pixel_tracker assets stored with correct event bindings
|
|
158
|
+
sample_request:
|
|
159
|
+
account:
|
|
160
|
+
brand:
|
|
161
|
+
domain: "acmeoutdoor.example"
|
|
162
|
+
operator: "pinnacle-agency.example"
|
|
163
|
+
creatives:
|
|
164
|
+
- creative_id: "native_trail_pro_full_bundle"
|
|
165
|
+
name: "Trail Pro 3000 — Native Content Recommendation"
|
|
166
|
+
format_id:
|
|
167
|
+
agent_url: "https://your-platform.example.com"
|
|
168
|
+
id: "native_in_feed"
|
|
169
|
+
assets:
|
|
170
|
+
title:
|
|
171
|
+
asset_type: "text"
|
|
172
|
+
content: "Trail Pro 3000 — Built for the Summit"
|
|
173
|
+
body_text:
|
|
174
|
+
asset_type: "text"
|
|
175
|
+
content: "Tested at altitude. Trusted by expedition teams. Built for the summit."
|
|
176
|
+
main_image:
|
|
177
|
+
asset_type: "image"
|
|
178
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/trail-pro-1200x627.jpg"
|
|
179
|
+
width: 1200
|
|
180
|
+
height: 627
|
|
181
|
+
mime_type: "image/jpeg"
|
|
182
|
+
cta:
|
|
183
|
+
asset_type: "text"
|
|
184
|
+
content: "LEARN_MORE"
|
|
185
|
+
advertiser_name:
|
|
186
|
+
asset_type: "text"
|
|
187
|
+
content: "Acme Outdoor"
|
|
188
|
+
sponsored_label:
|
|
189
|
+
asset_type: "text"
|
|
190
|
+
content: "Sponsored"
|
|
191
|
+
landing_page_url:
|
|
192
|
+
asset_type: "url"
|
|
193
|
+
url: "https://acmeoutdoor.example/trail-pro-3000"
|
|
194
|
+
display_url:
|
|
195
|
+
asset_type: "text"
|
|
196
|
+
content: "acmeoutdoor.example"
|
|
197
|
+
rating:
|
|
198
|
+
asset_type: "text"
|
|
199
|
+
content: "4.8"
|
|
200
|
+
impression_tracker:
|
|
201
|
+
asset_type: "pixel_tracker"
|
|
202
|
+
event: "impression"
|
|
203
|
+
method: "img"
|
|
204
|
+
url: "https://measurement.example.com/imp?cb={CACHEBUSTER}&cid={CREATIVE_ID}"
|
|
205
|
+
viewability_tracker:
|
|
206
|
+
asset_type: "pixel_tracker"
|
|
207
|
+
event: "viewable_mrc_50"
|
|
208
|
+
method: "img"
|
|
209
|
+
url: "https://measurement.example.com/mrc50?cid={CREATIVE_ID}"
|
|
210
|
+
click_tracker:
|
|
211
|
+
asset_type: "pixel_tracker"
|
|
212
|
+
event: "click"
|
|
213
|
+
method: "img"
|
|
214
|
+
url: "https://measurement.example.com/click?cb={CACHEBUSTER}&cid={CREATIVE_ID}"
|
|
215
|
+
idempotency_key: "$generate:uuid_v4#creative_native_in_feed_sync_native_creative_sync_full_bundle"
|
|
216
|
+
context:
|
|
217
|
+
correlation_id: "creative_native_in_feed--sync_full_bundle"
|
|
218
|
+
validations:
|
|
219
|
+
- check: response_schema
|
|
220
|
+
description: "Response matches sync-creatives-response.json schema"
|
|
221
|
+
- check: field_present
|
|
222
|
+
path: "creatives"
|
|
223
|
+
description: "Response contains per-creative results"
|
|
224
|
+
- check: field_present
|
|
225
|
+
path: "creatives[0].action"
|
|
226
|
+
description: "Each creative result has an action"
|
|
227
|
+
- check: field_present
|
|
228
|
+
path: "context"
|
|
229
|
+
description: "Response echoes back the context object"
|
|
230
|
+
- check: field_value
|
|
231
|
+
path: "context.correlation_id"
|
|
232
|
+
value: "creative_native_in_feed--sync_full_bundle"
|
|
233
|
+
description: "Context correlation_id returned unchanged"
|
|
234
|
+
|
|
235
|
+
- id: validation_failures
|
|
236
|
+
title: "Validation rejection paths"
|
|
237
|
+
narrative: |
|
|
238
|
+
Each step submits a single invalid native creative and asserts the seller returns
|
|
239
|
+
the correct error code. Steps are isolated (separate sync_creatives calls, separate
|
|
240
|
+
idempotency keys) so that per-constraint error codes can be checked independently.
|
|
241
|
+
The validation_mode is strict (default); the seller stops on the first violation.
|
|
242
|
+
|
|
243
|
+
Constraint map for a typical content-recommendation format:
|
|
244
|
+
- title must not exceed title_max_chars (e.g., 80)
|
|
245
|
+
- main_image width×height must be a declared pair (e.g., 1200×627 or 1080×1080)
|
|
246
|
+
- cta content must be a value from the declared cta_values closed enum
|
|
247
|
+
- pixel_tracker with event=custom MUST also carry custom_event_name (schema constraint)
|
|
248
|
+
|
|
249
|
+
steps:
|
|
250
|
+
- id: reject_title_too_long
|
|
251
|
+
title: "Reject: title exceeds title_max_chars"
|
|
252
|
+
narrative: |
|
|
253
|
+
Title is 200 characters, far exceeding the typical title_max_chars constraint
|
|
254
|
+
(80 for a content-recommendation format). Seller MUST reject with a validation error.
|
|
255
|
+
Because no dedicated error code exists for char-count overflow, either
|
|
256
|
+
VALIDATION_ERROR or INVALID_REQUEST is conformant.
|
|
257
|
+
task: sync_creatives
|
|
258
|
+
schema_ref: "creative/sync-creatives-request.json"
|
|
259
|
+
response_schema_ref: "creative/sync-creatives-response.json"
|
|
260
|
+
doc_ref: "/creative/task-reference/sync_creatives"
|
|
261
|
+
comply_scenario: creative_lifecycle
|
|
262
|
+
stateful: false
|
|
263
|
+
expect_error: true
|
|
264
|
+
expected: |
|
|
265
|
+
Seller MUST reject because the title exceeds title_max_chars.
|
|
266
|
+
Error code: VALIDATION_ERROR or INVALID_REQUEST.
|
|
267
|
+
sample_request:
|
|
268
|
+
account:
|
|
269
|
+
brand:
|
|
270
|
+
domain: "acmeoutdoor.example"
|
|
271
|
+
operator: "pinnacle-agency.example"
|
|
272
|
+
creatives:
|
|
273
|
+
- creative_id: "native_reject_title_long"
|
|
274
|
+
name: "Reject — title too long"
|
|
275
|
+
format_id:
|
|
276
|
+
agent_url: "https://your-platform.example.com"
|
|
277
|
+
id: "native_in_feed"
|
|
278
|
+
assets:
|
|
279
|
+
title:
|
|
280
|
+
asset_type: "text"
|
|
281
|
+
content: "Trail Pro 3000 — The Ultimate Summit Companion for Serious Mountaineers Who Demand Peak Performance in Every Altitude — Built for the Summit and Beyond by Acme Outdoor"
|
|
282
|
+
main_image:
|
|
283
|
+
asset_type: "image"
|
|
284
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/trail-pro-1200x627.jpg"
|
|
285
|
+
width: 1200
|
|
286
|
+
height: 627
|
|
287
|
+
mime_type: "image/jpeg"
|
|
288
|
+
advertiser_name:
|
|
289
|
+
asset_type: "text"
|
|
290
|
+
content: "Acme Outdoor"
|
|
291
|
+
landing_page_url:
|
|
292
|
+
asset_type: "url"
|
|
293
|
+
url: "https://acmeoutdoor.example/trail-pro-3000"
|
|
294
|
+
idempotency_key: "$generate:uuid_v4#creative_native_in_feed_validation_failures_reject_title_too_long"
|
|
295
|
+
context:
|
|
296
|
+
correlation_id: "creative_native_in_feed--reject_title_long"
|
|
297
|
+
validations:
|
|
298
|
+
- check: error_code
|
|
299
|
+
allowed_values:
|
|
300
|
+
- "VALIDATION_ERROR"
|
|
301
|
+
- "INVALID_REQUEST"
|
|
302
|
+
description: "Seller rejects title exceeding title_max_chars"
|
|
303
|
+
|
|
304
|
+
- id: reject_image_wrong_size
|
|
305
|
+
title: "Reject: main_image not in declared main_image_sizes"
|
|
306
|
+
narrative: |
|
|
307
|
+
main_image is 640×480, a size not declared in main_image_sizes for a
|
|
308
|
+
content-recommendation format (typical: 1200×627 and 1080×1080). Seller
|
|
309
|
+
MUST reject. Either VALIDATION_ERROR or INVALID_REQUEST is conformant.
|
|
310
|
+
task: sync_creatives
|
|
311
|
+
schema_ref: "creative/sync-creatives-request.json"
|
|
312
|
+
response_schema_ref: "creative/sync-creatives-response.json"
|
|
313
|
+
doc_ref: "/creative/task-reference/sync_creatives"
|
|
314
|
+
comply_scenario: creative_lifecycle
|
|
315
|
+
stateful: false
|
|
316
|
+
expect_error: true
|
|
317
|
+
expected: |
|
|
318
|
+
Seller MUST reject because 640×480 is not in the declared main_image_sizes.
|
|
319
|
+
Error code: VALIDATION_ERROR or INVALID_REQUEST.
|
|
320
|
+
sample_request:
|
|
321
|
+
account:
|
|
322
|
+
brand:
|
|
323
|
+
domain: "acmeoutdoor.example"
|
|
324
|
+
operator: "pinnacle-agency.example"
|
|
325
|
+
creatives:
|
|
326
|
+
- creative_id: "native_reject_image_size"
|
|
327
|
+
name: "Reject — image wrong size"
|
|
328
|
+
format_id:
|
|
329
|
+
agent_url: "https://your-platform.example.com"
|
|
330
|
+
id: "native_in_feed"
|
|
331
|
+
assets:
|
|
332
|
+
title:
|
|
333
|
+
asset_type: "text"
|
|
334
|
+
content: "Trail Pro 3000 — Built for the Summit"
|
|
335
|
+
main_image:
|
|
336
|
+
asset_type: "image"
|
|
337
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/trail-pro-640x480.jpg"
|
|
338
|
+
width: 640
|
|
339
|
+
height: 480
|
|
340
|
+
mime_type: "image/jpeg"
|
|
341
|
+
advertiser_name:
|
|
342
|
+
asset_type: "text"
|
|
343
|
+
content: "Acme Outdoor"
|
|
344
|
+
landing_page_url:
|
|
345
|
+
asset_type: "url"
|
|
346
|
+
url: "https://acmeoutdoor.example/trail-pro-3000"
|
|
347
|
+
idempotency_key: "$generate:uuid_v4#creative_native_in_feed_validation_failures_reject_image_wrong_size"
|
|
348
|
+
context:
|
|
349
|
+
correlation_id: "creative_native_in_feed--reject_image_size"
|
|
350
|
+
validations:
|
|
351
|
+
- check: error_code
|
|
352
|
+
allowed_values:
|
|
353
|
+
- "VALIDATION_ERROR"
|
|
354
|
+
- "INVALID_REQUEST"
|
|
355
|
+
description: "Seller rejects main_image not in declared main_image_sizes"
|
|
356
|
+
|
|
357
|
+
- id: reject_cta_not_in_enum
|
|
358
|
+
title: "Reject: CTA value not in declared cta_values"
|
|
359
|
+
narrative: |
|
|
360
|
+
The cta slot carries a value not present in the product's declared cta_values
|
|
361
|
+
closed enum. This is a closed-set constraint violation — the seller has published
|
|
362
|
+
the complete list of acceptable CTA values and any value outside that list MUST
|
|
363
|
+
be rejected with CREATIVE_VALUE_NOT_ALLOWED. This code is distinct from
|
|
364
|
+
CREATIVE_REJECTED (generic content-policy failure) because the buyer can resolve
|
|
365
|
+
mechanically by selecting a value from the published list.
|
|
366
|
+
task: sync_creatives
|
|
367
|
+
schema_ref: "creative/sync-creatives-request.json"
|
|
368
|
+
response_schema_ref: "creative/sync-creatives-response.json"
|
|
369
|
+
doc_ref: "/creative/task-reference/sync_creatives"
|
|
370
|
+
comply_scenario: creative_lifecycle
|
|
371
|
+
stateful: false
|
|
372
|
+
expect_error: true
|
|
373
|
+
expected: |
|
|
374
|
+
Seller MUST reject with CREATIVE_VALUE_NOT_ALLOWED because "EXPLORE_MORE" is
|
|
375
|
+
not in the declared cta_values list. The error SHOULD include the field path
|
|
376
|
+
and the list of allowed values so the buyer can re-prompt with constrained sampling.
|
|
377
|
+
sample_request:
|
|
378
|
+
account:
|
|
379
|
+
brand:
|
|
380
|
+
domain: "acmeoutdoor.example"
|
|
381
|
+
operator: "pinnacle-agency.example"
|
|
382
|
+
creatives:
|
|
383
|
+
- creative_id: "native_reject_cta_enum"
|
|
384
|
+
name: "Reject — CTA not in enum"
|
|
385
|
+
format_id:
|
|
386
|
+
agent_url: "https://your-platform.example.com"
|
|
387
|
+
id: "native_in_feed"
|
|
388
|
+
assets:
|
|
389
|
+
title:
|
|
390
|
+
asset_type: "text"
|
|
391
|
+
content: "Trail Pro 3000 — Built for the Summit"
|
|
392
|
+
main_image:
|
|
393
|
+
asset_type: "image"
|
|
394
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/trail-pro-1200x627.jpg"
|
|
395
|
+
width: 1200
|
|
396
|
+
height: 627
|
|
397
|
+
mime_type: "image/jpeg"
|
|
398
|
+
cta:
|
|
399
|
+
asset_type: "text"
|
|
400
|
+
content: "EXPLORE_MORE"
|
|
401
|
+
advertiser_name:
|
|
402
|
+
asset_type: "text"
|
|
403
|
+
content: "Acme Outdoor"
|
|
404
|
+
landing_page_url:
|
|
405
|
+
asset_type: "url"
|
|
406
|
+
url: "https://acmeoutdoor.example/trail-pro-3000"
|
|
407
|
+
idempotency_key: "$generate:uuid_v4#creative_native_in_feed_validation_failures_reject_cta_not_in_enum"
|
|
408
|
+
context:
|
|
409
|
+
correlation_id: "creative_native_in_feed--reject_cta_enum"
|
|
410
|
+
validations:
|
|
411
|
+
- check: error_code
|
|
412
|
+
value: "CREATIVE_VALUE_NOT_ALLOWED"
|
|
413
|
+
description: "Seller returns CREATIVE_VALUE_NOT_ALLOWED for CTA outside the declared cta_values closed enum"
|
|
414
|
+
|
|
415
|
+
- id: reject_pixel_tracker_custom_missing_name
|
|
416
|
+
title: "Reject: pixel_tracker event=custom without custom_event_name"
|
|
417
|
+
narrative: |
|
|
418
|
+
pixel-tracker-asset.json requires custom_event_name when event is "custom"
|
|
419
|
+
(allOf conditional — MUST be present). Sending event=custom without
|
|
420
|
+
custom_event_name is a schema constraint violation that sellers MUST reject
|
|
421
|
+
at sync_creatives time.
|
|
422
|
+
task: sync_creatives
|
|
423
|
+
schema_ref: "creative/sync-creatives-request.json"
|
|
424
|
+
response_schema_ref: "creative/sync-creatives-response.json"
|
|
425
|
+
doc_ref: "/creative/task-reference/sync_creatives"
|
|
426
|
+
comply_scenario: creative_lifecycle
|
|
427
|
+
stateful: false
|
|
428
|
+
expect_error: true
|
|
429
|
+
expected: |
|
|
430
|
+
Seller MUST reject because pixel_tracker event=custom requires custom_event_name
|
|
431
|
+
(schema constraint). Error code: INVALID_REQUEST or VALIDATION_ERROR.
|
|
432
|
+
sample_request:
|
|
433
|
+
account:
|
|
434
|
+
brand:
|
|
435
|
+
domain: "acmeoutdoor.example"
|
|
436
|
+
operator: "pinnacle-agency.example"
|
|
437
|
+
creatives:
|
|
438
|
+
- creative_id: "native_reject_custom_tracker"
|
|
439
|
+
name: "Reject — pixel_tracker custom without name"
|
|
440
|
+
format_id:
|
|
441
|
+
agent_url: "https://your-platform.example.com"
|
|
442
|
+
id: "native_in_feed"
|
|
443
|
+
assets:
|
|
444
|
+
title:
|
|
445
|
+
asset_type: "text"
|
|
446
|
+
content: "Trail Pro 3000 — Built for the Summit"
|
|
447
|
+
main_image:
|
|
448
|
+
asset_type: "image"
|
|
449
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/trail-pro-1200x627.jpg"
|
|
450
|
+
width: 1200
|
|
451
|
+
height: 627
|
|
452
|
+
mime_type: "image/jpeg"
|
|
453
|
+
advertiser_name:
|
|
454
|
+
asset_type: "text"
|
|
455
|
+
content: "Acme Outdoor"
|
|
456
|
+
landing_page_url:
|
|
457
|
+
asset_type: "url"
|
|
458
|
+
url: "https://acmeoutdoor.example/trail-pro-3000"
|
|
459
|
+
impression_tracker:
|
|
460
|
+
asset_type: "pixel_tracker"
|
|
461
|
+
event: "custom"
|
|
462
|
+
method: "img"
|
|
463
|
+
url: "https://measurement.example.com/custom?cid={CREATIVE_ID}"
|
|
464
|
+
idempotency_key: "$generate:uuid_v4#creative_native_in_feed_validation_failures_reject_pixel_tracker_custom_missing_name"
|
|
465
|
+
context:
|
|
466
|
+
correlation_id: "creative_native_in_feed--reject_custom_tracker"
|
|
467
|
+
validations:
|
|
468
|
+
- check: error_code
|
|
469
|
+
allowed_values:
|
|
470
|
+
- "INVALID_REQUEST"
|
|
471
|
+
- "VALIDATION_ERROR"
|
|
472
|
+
description: "Seller rejects pixel_tracker with event=custom and no custom_event_name"
|
|
473
|
+
|
|
474
|
+
- id: preview_native
|
|
475
|
+
title: "Preview the native creative"
|
|
476
|
+
narrative: |
|
|
477
|
+
The buyer calls preview_creative for the accepted native bundle. The seller's
|
|
478
|
+
renderer composes the native unit — assembling title, image, body, CTA, and
|
|
479
|
+
advertiser attribution into the publisher's feed look-and-feel — and returns a
|
|
480
|
+
preview URL. The buyer can inspect the assembled render before activating.
|
|
481
|
+
|
|
482
|
+
steps:
|
|
483
|
+
- id: preview_native_creative
|
|
484
|
+
title: "Preview assembled native feed unit"
|
|
485
|
+
narrative: |
|
|
486
|
+
The buyer previews the native_trail_pro_full_bundle creative synced in Phase 3.
|
|
487
|
+
The seller composes the full asset bundle into its feed rendering and returns
|
|
488
|
+
a preview URL showing the assembled unit with the publisher's native chrome applied.
|
|
489
|
+
task: preview_creative
|
|
490
|
+
schema_ref: "creative/preview-creative-request.json"
|
|
491
|
+
response_schema_ref: "creative/preview-creative-response.json"
|
|
492
|
+
doc_ref: "/creative/task-reference/preview_creative"
|
|
493
|
+
comply_scenario: creative_flow
|
|
494
|
+
stateful: true
|
|
495
|
+
expected: |
|
|
496
|
+
Return a preview of the assembled native unit:
|
|
497
|
+
- preview_url showing the feed render with native chrome applied
|
|
498
|
+
- The assembled unit uses the synced assets (title, image, CTA, trackers)
|
|
499
|
+
sample_request:
|
|
500
|
+
account:
|
|
501
|
+
brand:
|
|
502
|
+
domain: "acmeoutdoor.example"
|
|
503
|
+
operator: "pinnacle-agency.example"
|
|
504
|
+
request_type: "single"
|
|
505
|
+
creative_manifest:
|
|
506
|
+
creative_id: "native_trail_pro_full_bundle"
|
|
507
|
+
format_id:
|
|
508
|
+
agent_url: "https://your-platform.example.com"
|
|
509
|
+
id: "native_in_feed"
|
|
510
|
+
assets:
|
|
511
|
+
title:
|
|
512
|
+
asset_type: "text"
|
|
513
|
+
content: "Trail Pro 3000 — Built for the Summit"
|
|
514
|
+
body_text:
|
|
515
|
+
asset_type: "text"
|
|
516
|
+
content: "Tested at altitude. Trusted by expedition teams."
|
|
517
|
+
main_image:
|
|
518
|
+
asset_type: "image"
|
|
519
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/trail-pro-1200x627.jpg"
|
|
520
|
+
width: 1200
|
|
521
|
+
height: 627
|
|
522
|
+
mime_type: "image/jpeg"
|
|
523
|
+
cta:
|
|
524
|
+
asset_type: "text"
|
|
525
|
+
content: "LEARN_MORE"
|
|
526
|
+
advertiser_name:
|
|
527
|
+
asset_type: "text"
|
|
528
|
+
content: "Acme Outdoor"
|
|
529
|
+
landing_page_url:
|
|
530
|
+
asset_type: "url"
|
|
531
|
+
url: "https://acmeoutdoor.example/trail-pro-3000"
|
|
532
|
+
context:
|
|
533
|
+
correlation_id: "creative_native_in_feed--preview_native"
|
|
534
|
+
validations:
|
|
535
|
+
- check: response_schema
|
|
536
|
+
description: "Response matches preview-creative-response.json schema"
|
|
537
|
+
- check: field_present
|
|
538
|
+
path: "context"
|
|
539
|
+
description: "Response echoes back the context object"
|
|
540
|
+
- check: field_value
|
|
541
|
+
path: "context.correlation_id"
|
|
542
|
+
value: "creative_native_in_feed--preview_native"
|
|
543
|
+
description: "Context correlation_id returned unchanged"
|