> ## Documentation Index
> Fetch the complete documentation index at: https://docs.adcontextprotocol.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Reference Test Vectors

> Machine-readable fixtures SDKs and implementations diff against to confirm wire-format agreement. Versioned alongside the spec; frozen at each release.

**Status**: Request for Comments
**Last Updated**: August 25, 2026

## What these are

Reference test vectors are machine-readable JSON fixtures pinned to specific wire-format rules in the spec. An SDK whose output matches a vector's `expected_*` field byte-for-byte has agreed with the reference on that rule's wire format — not a conformance claim (only [storyboards](/dist/docs/3.2.0-beta.7/building/verification/conformance) decide that), but a necessary precondition for interop. An SDK that diverges has an interop bug, even if its own tests pass.

Vectors complement [storyboards](/dist/docs/3.2.0-beta.7/building/verification/conformance). Storyboards exercise an agent end-to-end to produce a pass/fail verdict; vectors exercise a library in isolation against frozen inputs. A vector tells a signer "this 9421 request MUST produce this signature base"; a storyboard tells an agent "when the buyer sends this request, you MUST respond with a result shaped like this." Most conformant stacks need both — vectors catch canonicalization drift inside a library; storyboards catch behavior drift at the wire.

Vectors are not the conformance specification — the [storyboards](/dist/docs/3.2.0-beta.7/building/verification/conformance) are. Vectors are reference inputs the storyboards and SDK unit tests consume.

## Versioning

Every set under `static/compliance/source/test-vectors/` is versioned alongside the spec. The copy served at `/compliance/{version}/test-vectors/{set}/` is frozen at the GA release of that version; fixes that change a vector's bytes ship in the next AdCP minor release. `/compliance/latest/test-vectors/{set}/` follows the current development snapshot and can move ahead of the most recent GA, so production consumers should pin an immutable version path.

Vector sets served under `/test-vectors/` are currently unversioned: each file is overwritten in place when it changes. SDKs that consume these fixtures SHOULD vendor a commit-pinned copy, for example fetching from `https://raw.githubusercontent.com/adcontextprotocol/adcp/<sha>/static/test-vectors/<name>.json` and recording `<sha>` in their lockfile, until these files are rolled into the versioned compliance tree.

SDKs SHOULD fetch versioned paths where available and record the version under test. For pinned versions, the CDN copy at `/compliance/{version}/...` is the source of truth; `/compliance/latest/...` is a convenience alias, not a stable pin.

## Published sets

| Set                                                                                                                                                                       | What it pins                                                                                                                                                                                                                                                                                                                                                                                                                  | Source                                                                          | CDN                                                                                                                                                                                                                                            |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`request-signing`](https://github.com/adcontextprotocol/adcp/tree/main/static/compliance/source/test-vectors/request-signing)                                            | RFC 9421 request-signing profile: canonical signature base, covered components, signature params, tag namespace, alg allowlist, `adcp_use` discriminator, replay dedup, revocation, content-digest semantics, and URL canonicalization                                                                                                                                                                                        | `static/compliance/source/test-vectors/request-signing/`                        | `/compliance/latest/test-vectors/request-signing/`                                                                                                                                                                                             |
| [`webhook-signing`](https://github.com/adcontextprotocol/adcp/tree/main/static/compliance/source/test-vectors/webhook-signing)                                            | RFC 9421 webhook-signing profile: required covered components (content-digest mandatory — no `forbidden` opt-out), `adcp/webhook-signing/v1` tag, webhook-valid `adcp_use` set (`request-signing` plus deprecated `webhook-signing`), `webhook_signature_*` error taxonomy; shares `@target-uri` canonicalization with `request-signing`                                                                                      | `static/compliance/source/test-vectors/webhook-signing/`                        | `/compliance/latest/test-vectors/webhook-signing/`                                                                                                                                                                                             |
| [`plan-hash`](https://github.com/adcontextprotocol/adcp/tree/main/static/compliance/source/test-vectors/plan-hash)                                                        | JCS canonicalization of the `plan_hash` preimage: required-only baseline, full-optional, bookkeeping-stripped, omitted-vs-explicit-null, array-order sensitivity, `ext.trace_id` distinctness, Unicode non-normalization (RFC 8785 §3.2.5)                                                                                                                                                                                    | `static/compliance/source/test-vectors/plan-hash/`                              | `/compliance/latest/test-vectors/plan-hash/`                                                                                                                                                                                                   |
| [`governance-authorization`](https://github.com/adcontextprotocol/adcp/blob/main/static/compliance/source/test-vectors/governance-authorization.json)                     | Cross-role governed-payload JCS/SHA-256 hashes, authorization decisions, and 27 byte-exact Ed25519 compact-JWS fixtures. Signed cases cover critical headers, audience/caller/task/payload bindings, commitment currency and ceiling, time bounds, replay identifiers, signature tampering, and zero-cost authorization. The published private component is test-only and MUST NOT be installed as a production trust anchor. | `static/compliance/source/test-vectors/governance-authorization.json`           | `/compliance/latest/test-vectors/governance-authorization.json`                                                                                                                                                                                |
| [`webhook-receiver-envelope`](https://github.com/adcontextprotocol/adcp/blob/main/static/compliance/source/test-vectors/webhook-receiver-envelope.json)                   | Receiver-side replay vectors for full MCP webhook POST envelopes: canonical delivery-report envelope acceptance, retry idempotency preservation, and rejection of bare result payloads or malformed envelopes                                                                                                                                                                                                                 | `static/compliance/source/test-vectors/webhook-receiver-envelope.json`          | `/compliance/latest/test-vectors/webhook-receiver-envelope.json`                                                                                                                                                                               |
| [`catalog-macro-substitution`](https://github.com/adcontextprotocol/adcp/blob/main/static/compliance/source/test-vectors/catalog-macro-substitution.json)                 | Catalog-item macro substitution safety: NFC normalization, RFC 3986 percent-encoding, nested-expansion preservation, CRLF neutralization, bidi override neutralization, and URL-scheme injection neutralization                                                                                                                                                                                                               | `static/compliance/source/test-vectors/catalog-macro-substitution.json`         | `/compliance/latest/test-vectors/catalog-macro-substitution.json`                                                                                                                                                                              |
| [`universal-macro-translation`](https://github.com/adcontextprotocol/adcp/blob/main/static/compliance/source/test-vectors/universal-macro-translation.json)               | Producer-side universal-macro translation: RFC 3986 unreserved-whitelist value encoding, verbatim native insertion, unmapped-macro param dropping, privacy/consent macro advisory, suspect native-value detection, single-pass substitution, and control-character rejection in native mappings                                                                                                                               | `static/compliance/source/test-vectors/universal-macro-translation.json`        | `/compliance/latest/test-vectors/universal-macro-translation.json`                                                                                                                                                                             |
| [`creative-representation-resolution`](https://github.com/adcontextprotocol/adcp/blob/main/static/compliance/source/test-vectors/creative-representation-resolution.json) | Deterministic creative-representation selection across product and seller capability intersections: paired redirects, highest-compatible VAST selection, representation-order tie breaking, retained alternatives, and exhaustive rejection output when no representation is compatible                                                                                                                                       | `static/compliance/source/test-vectors/creative-representation-resolution.json` | `/compliance/latest/test-vectors/creative-representation-resolution.json`                                                                                                                                                                      |
| [`macro-processing`](https://github.com/adcontextprotocol/adcp/blob/main/static/compliance/source/test-vectors/macro-processing.json)                                     | Creative macro-processing capability matching: byte-preserving unknown tokens, exact dialect/namespace/registry-revision/operation/context/owner/depth checks, seller-side universal-token translation, and the required two RFC 3986 encoding passes for nested click values                                                                                                                                                 | `static/compliance/source/test-vectors/macro-processing.json`                   | `/compliance/latest/test-vectors/macro-processing.json`                                                                                                                                                                                        |
| [`tracker-execution-contracts`](https://github.com/adcontextprotocol/adcp/blob/main/static/compliance/source/test-vectors/tracker-execution-contracts.json)               | Product and package tracker execution commitments: normalized pixel/VAST/DAAST selectors, exact event/version/actor/path matching, completeness semantics, package snapshot digests, and narrowing rules                                                                                                                                                                                                                      | `static/compliance/source/test-vectors/tracker-execution-contracts.json`        | `/compliance/latest/test-vectors/tracker-execution-contracts.json`                                                                                                                                                                             |
| [`attestations`](https://github.com/adcontextprotocol/adcp/tree/main/static/compliance/source/test-vectors/attestations)                                                  | Portable attestation trust and resolution: allowlist checks, delivery selection, validity windows, revocation, subject and digest comparison, stable outcomes, and the no-network rule for off-policy inputs. Uses a fictional proof format; cryptographic verification bytes are format-specific and tested by each format's own suite                                                                                       | `static/compliance/source/test-vectors/attestations/`                           | `/compliance/latest/test-vectors/attestations/`                                                                                                                                                                                                |
| [`rights-attestations`](https://github.com/adcontextprotocol/adcp/tree/main/static/compliance/source/test-vectors/rights-attestations)                                    | Rights-grant profile composed with portable attestations: holder/claim/resolver policy, rights-subject checks, JWKS purpose binding, issuer-bound status evidence, constraint-digest comparison, and fail-closed outcomes for paused, revoked, stale, or untrusted grants                                                                                                                                                     | `static/compliance/source/test-vectors/rights-attestations/`                    | `/compliance/latest/test-vectors/rights-attestations/`                                                                                                                                                                                         |
| [`governance-runtime-attestations`](https://github.com/adcontextprotocol/adcp/tree/main/static/compliance/source/test-vectors/governance-runtime-attestations)            | `check_governance` signal-activation with portable attestations: normalized outcome and governance verdict, binding-digest computation, deactivation negative-policy, and cache-reuse validity constraints                                                                                                                                                                                                                    | `static/compliance/source/test-vectors/governance-runtime-attestations/`        | `/compliance/latest/test-vectors/governance-runtime-attestations/`                                                                                                                                                                             |
| [`audience-evidence`](https://github.com/adcontextprotocol/adcp/tree/main/static/compliance/source/test-vectors/audience-evidence)                                        | Population-level audience-evidence contract: product evidence snapshot validation, RFC 8785 content-digest recomputation, requirement-mode enforcement (`required` excludes, `preferred` ranks), `when_available` presence handling, and provider/methodology exclusion lists                                                                                                                                                 | `static/compliance/source/test-vectors/audience-evidence/`                      | `/compliance/latest/test-vectors/audience-evidence/`                                                                                                                                                                                           |
| [`brand-response-signing`](https://github.com/adcontextprotocol/adcp/tree/main/static/compliance/source/test-vectors/brand-response-signing)                              | Brand-authorization cross-check for `verify_brand_claim` and `verify_brand_claims` envelopes: advisory binding produces verifier-local untrusted results without hard-rejecting the response or rewriting signer-asserted `verification_status`. Mandatory cryptographic brand authorization is deferred to 4.0                                                                                                               | `static/compliance/source/test-vectors/brand-response-signing/`                 | `/compliance/latest/test-vectors/brand-response-signing/`                                                                                                                                                                                      |
| [`oauth-setup`](https://github.com/adcontextprotocol/adcp/tree/main/static/compliance/source/test-vectors/oauth-setup)                                                    | OAuth metadata-graph conformance: deterministic network fixtures for `oauth_metadata_graph` checks, redirect validation, graph-budget enforcement, and fail-closed behavior for missing fixture responses. No live network access permitted                                                                                                                                                                                   | `static/compliance/source/test-vectors/oauth-setup/`                            | `/compliance/latest/test-vectors/oauth-setup/`                                                                                                                                                                                                 |
| [`trusted-match-context-merge`](https://github.com/adcontextprotocol/adcp/tree/main/static/compliance/source/test-vectors/trusted-match-context-merge)                    | Context Match targeting key-value merge: router attribution from publisher-controlled provider registration, bucket-key derivation, provider `signals.targeting_kvs` pass-through, shared-key multi-provider contribution, and dropped unmapped/case-mismatched tuples                                                                                                                                                        | `static/compliance/source/test-vectors/trusted-match-context-merge/`            | `/compliance/latest/test-vectors/trusted-match-context-merge/`                                                                                                                                                                                 |
| [`products-only-brief-compatibility`](https://github.com/adcontextprotocol/adcp/tree/main/static/compliance/source/test-vectors/products-only-brief-compatibility)        | Products-only brief flow across AdCP 2.5, 3.0, 3.1: compact projection without invented proposals, fail-closed legacy-create continuation with named fences, seller-fenced `listed_purchase` feed/pricing propagation, and 3.2 reverse-compatibility facades                                                                                                                                                                  | `static/compliance/source/test-vectors/products-only-brief-compatibility/`      | `/compliance/latest/test-vectors/products-only-brief-compatibility/`                                                                                                                                                                           |
| [`relationship-scoped-indicators`](https://github.com/adcontextprotocol/adcp/blob/main/static/compliance/source/test-vectors/relationship-scoped-indicators.json)         | Indicator snapshot semantics and invalidation lifecycle: scope containment validation, snapshot freshness, and relationship-scoped invalidation behavior                                                                                                                                                                                                                                                                      | `static/compliance/source/test-vectors/relationship-scoped-indicators.json`     | `/compliance/latest/test-vectors/relationship-scoped-indicators.json`                                                                                                                                                                          |
| [`transport-error-mapping`](https://github.com/adcontextprotocol/adcp/blob/main/static/test-vectors/transport-error-mapping.json)                                         | Transport-layer error envelope shapes: the JSON-RPC (`error.code` / `data`) and A2A (task `status.message`) carriers for each documented AdCP transport error                                                                                                                                                                                                                                                                 | `static/test-vectors/transport-error-mapping.json`                              | [`/test-vectors/transport-error-mapping.json`](https://adcontextprotocol.org/test-vectors/transport-error-mapping.json)                                                                                                                        |
| [`mcp-response-extraction`](https://github.com/adcontextprotocol/adcp/blob/main/static/test-vectors/mcp-response-extraction.json)                                         | Client extraction of the AdCP payload from MCP `tools/call` envelopes                                                                                                                                                                                                                                                                                                                                                         | `static/test-vectors/mcp-response-extraction.json`                              | [`/test-vectors/mcp-response-extraction.json`](https://adcontextprotocol.org/test-vectors/mcp-response-extraction.json)                                                                                                                        |
| [`a2a-response-extraction`](https://github.com/adcontextprotocol/adcp/blob/main/static/test-vectors/a2a-response-extraction.json)                                         | Client extraction of the AdCP payload from A2A task statuses and artifacts                                                                                                                                                                                                                                                                                                                                                    | `static/test-vectors/a2a-response-extraction.json`                              | [`/test-vectors/a2a-response-extraction.json`](https://adcontextprotocol.org/test-vectors/a2a-response-extraction.json)                                                                                                                        |
| [`a2a-profile-extension-v3`](https://github.com/adcontextprotocol/adcp/blob/main/static/test-vectors/a2a-profile-extension-v3.json)                                       | A2A 1.0 profile advertisement and activation, `{ skill, input }` invocation, advisory TextParts, completed-Task mapping for AdCP Submitted responses, metadata-duplication rejection, and `get_task_status` polling                                                                                                                                                                                                           | `static/test-vectors/a2a-profile-extension-v3.json`                             | [`/test-vectors/a2a-profile-extension-v3.json`](https://adcontextprotocol.org/test-vectors/a2a-profile-extension-v3.json)                                                                                                                      |
| [`webhook-payload-extraction`](https://github.com/adcontextprotocol/adcp/blob/main/static/test-vectors/webhook-payload-extraction.json)                                   | Receiver-side format detection and payload extraction for inbound AdCP webhooks                                                                                                                                                                                                                                                                                                                                               | `static/test-vectors/webhook-payload-extraction.json`                           | [`/test-vectors/webhook-payload-extraction.json`](https://adcontextprotocol.org/test-vectors/webhook-payload-extraction.json)                                                                                                                  |
| [`webhook-hmac-sha256`](https://github.com/adcontextprotocol/adcp/blob/main/static/test-vectors/webhook-hmac-sha256.json) *(legacy)*                                      | HMAC-SHA-256 signature computation and byte-equality invariants for the legacy HMAC webhook profile. Deprecated in 3.x, removed in 4.0 per [Webhook callbacks](/dist/docs/3.2.0-beta.7/building/by-layer/L3/webhooks#legacy-hmac-sha256-fallback-deprecated); new integrations use `webhook-signing`                                                                                                                          | `static/test-vectors/webhook-hmac-sha256.json`                                  | [`/test-vectors/webhook-hmac-sha256.json`](https://adcontextprotocol.org/test-vectors/webhook-hmac-sha256.json)                                                                                                                                |
| [`canonical-image-pixel-ratio`](https://github.com/adcontextprotocol/adcp/blob/main/static/test-vectors/canonical-image-pixel-ratio.json)                                 | Canonical image logical-size versus intrinsic-pixel validation, top-level/slot density intersection, accepted and required rendition sets, mismatch failures, and parameterized legacy projection                                                                                                                                                                                                                             | `static/test-vectors/canonical-image-pixel-ratio.json`                          | [`/test-vectors/canonical-image-pixel-ratio.json`](https://adcontextprotocol.org/test-vectors/canonical-image-pixel-ratio.json)                                                                                                                |
| [`v1-canonical-mapping`](https://github.com/adcontextprotocol/adcp/blob/main/static/test-vectors/v1-canonical-mapping.json)                                               | Literal v1 format-ID projection plus positive and negative vectors for the normative one-way v2-narrows-v1 relation                                                                                                                                                                                                                                                                                                           | `static/test-vectors/v1-canonical-mapping.json`                                 | [`/test-vectors/v1-canonical-mapping.json`](https://adcontextprotocol.org/test-vectors/v1-canonical-mapping.json)                                                                                                                              |
| [`adagents-discovery-redirects`](https://github.com/adcontextprotocol/adcp/blob/main/static/test-vectors/adagents-discovery-redirects.json)                               | `adagents.json` discovery redirect handling: same-registrable-domain following with eTLD+1 (including PSL private section), HTTPS preservation, per-hop SSRF revalidation, 3-hop cap, cross-registrable-domain refusal, and zero-redirect `authoritative_location` policy                                                                                                                                                     | `static/test-vectors/adagents-discovery-redirects.json`                         | [`/test-vectors/adagents-discovery-redirects.json`](https://adcontextprotocol.org/test-vectors/adagents-discovery-redirects.json)                                                                                                              |
| [`canonical-format-classification`](https://github.com/adcontextprotocol/adcp/blob/main/static/test-vectors/canonical-format-classification.json)                         | Canonical format classification from realistic publisher-spec descriptions: classification follows creative payload and rendering responsibility, not placement behavior richness                                                                                                                                                                                                                                             | `static/test-vectors/canonical-format-classification.json`                      | [`/test-vectors/canonical-format-classification.json`](https://adcontextprotocol.org/test-vectors/canonical-format-classification.json)                                                                                                        |
| [`media-buy`](https://github.com/adcontextprotocol/adcp/tree/main/static/test-vectors/media-buy)                                                                          | Media-buy lifecycle vectors: package-status targeting-overlay echo and `status_as_of` temporal query semantics                                                                                                                                                                                                                                                                                                                | `static/test-vectors/media-buy/`                                                | [`package-status-targeting-overlay-echo.json`](https://adcontextprotocol.org/test-vectors/media-buy/package-status-targeting-overlay-echo.json), [`status-as-of.json`](https://adcontextprotocol.org/test-vectors/media-buy/status-as-of.json) |

**Start here**: where a set includes a `README.md`, it documents file layout, key material, preconditions (e.g., runner state required for replay vectors), and how to wire the set into an SDK test loop. The source tree is authoritative; the index on this page is a catalog, not an integration guide.

Directory CDN paths in the table are base paths for programmatic use — the CDN serves individual files, not directory listings. Browse the tree via the source column.

## Test keys are public

Every signing vector set ships private key material in `keys.json` so libraries can exercise signer and verifier roles against identical inputs. These keys are **valid only for grading against this suite**.

Any production verifier that trusts a `kid` declared in one of the published `keys.json` files is exploitable — the private key is on the public CDN and anyone can forge signatures under that kid. At time of writing this includes `test-ed25519-2026`, `test-es256-2026`, `test-gov-2026`, `test-revoked-2026` (request-signing) and `test-ed25519-webhook-2026`, `test-es256-webhook-2026`, `test-wrong-purpose-2026`, `test-response-purpose-2026`, `test-revoked-webhook-2026` (webhook-signing vectors). Treat every `kid` that appears in any suite `keys.json` as untrusted outside grading, present or future.

Production signers mint their own keypairs and publish under their own `jwks_uri`; production verifiers MUST NOT register any test `kid` in a trust store exposed to live traffic.

## Scope

The sets above cover both cross-surface wire rules — transport, signing, canonicalization, and discovery — and selected protocol behaviors where deterministic fixtures add value, such as attestation resolution, compatibility projections, and media-buy readback semantics. They complement rather than duplicate the other machine authorities: vectors pin exact inputs, outputs, or edge-case decisions for SDK and library code; [conformance storyboards](https://adcontextprotocol.org/compliance/latest/) grade agent behavior end to end; and [JSON Schemas](https://github.com/adcontextprotocol/adcp/tree/main/static/schemas/source) define request and response shapes.

The catalog does not aim to provide generic golden request/response pairs for every task. Implementers derive ordinary shapes from the schemas and confirm wire behavior by running the storyboards against their agent. Task-specific vectors are published only where a stable machine-readable fixture tests semantics that schemas alone cannot express or supports compatibility across SDKs.
