The required Reliable Reporting tier: obligations, immutable closes, seller status, and an optional buyer-to-seller status loop — over the transports you already have.
Reliable Reporting is experimental in 3.2. reporting.core is its required
tier; managed_delivery and reconciled_billing are separately advertised
optional tiers.The consumer-status loop is additive and opt-in in 3.2, and it stays opt-in
until the notice window closes on October 24, 2026. Sellers advertise
consumer_status_task only when implemented. The active notice makes it
required Core no earlier than the first minor after that date. Check the public
training seller’s advertised capabilities before testing this extension.
Every buyer eventually asks one question: “do I have definitive reporting
for this period — and if not, whose problem is it?”reporting.core makes
that question machine-answerable. Core is the required operational reporting
baseline: a seller must retain immutable revision evidence and expose its exact
binding over existing reporting transports. A seller that advertises the
consumer-status extension additionally records what the authenticated buyer
could actually consume. Core requires no destination, manifest, external
materialization, billing receipt, bespoke webhook, or outbound push code. It does require the
fixed revision-binding digest over canonical rows; this is distinct from the
Managed Delivery external-materialization canonicalization contract. Core carries
the operational cost of durable obligations, revision retention, and repair.For an exact Core revision read, call get_media_buy_delivery with
reporting_revision_id and, optionally, an account selector. The returned reporting_revision_binding
must echo that ID and bind { reporting_revision_id, row_count, control_totals, reporting_rows } with RFC 8785 JCS and SHA-256. Exact reads are cursor-paginated:
every page repeats identical revision metadata and binding, and a consumer hashes
the concatenated rows in cursor order only after exhausting the frozen walk. Do
not substitute a fresh date-range pull for this read: it may have changed since
the immutable revision was published.
Obligations exist before reports. For every active delivery
configuration and period, the seller records what should exist — so a
missing first report is detectable, not silent.
A zero-row report differs from no report. An empty period commits a
revision like any other; absence means something is wrong.
Revisions are immutable logical content. A provisional restatement is a
new snapshot revision superseding the old snapshot, never an edit. An
official revision is immutable billing-purpose evidence and cannot be
superseded; later corrections are explicit accounting adjustments.
get_reporting_status
exposes seller state — one authoritative read over the obligation ledger,
summarized by five health states.
When consumer_status_task is advertised,
sync_reporting_status
closes the loop — the buyer tells the seller whether an expected period
was received, omitted, missing, unreadable, or contradictory. Both
attributed histories stay visible; neither overwrites the other.
Health
Meaning
healthy
Everything due has been produced.
waiting
Nothing is due yet.
delayed
Something due is late, automated recovery is still running.
action_required
A human on the named responsible_party must act.
complete
The queried scope is closed and every final obligation is satisfied.
The reporting configuration creates the clock. Accepting a media buy does not
start a separate reporting SLA. Before a period closes, both sides can derive
its boundary and next_expected_at, but the seller cannot freeze an
all_media_buys denominator yet. At the period boundary, the obligation
becomes part of the authoritative ledger whether or not source data exists.A closed, complete summary can still have an active configuration schedule.
The seller MUST populate next_expected_at with the nearest future period
start across its active in-scope delivery_config_generations when such a
period exists outside the evaluated scope, and omit it when none exists.
This summary projection preserves both complete-health scope guards and MUST
NOT create, expose, lease, count, or alter an open-period obligation or change
the scope’s coverage. See
future expectations on complete summaries
for the selection rule and its distinction from obligation and webhook deadlines.This gives each side a distinct responsibility:
Seller: commit every elapsed eligible period before taking a ledger
snapshot after period.end, independently of source availability and before
committing a revision. A matching periods view includes it in the
paginated record set.
Buyer: retain the accepted configuration generation, derive the same
expected periods, and treat a missing obligation as a protocol failure rather
than evidence that no activity occurred. When the seller advertises
consumer_status_task, sync the resulting consumer status back and update it
whenever consumption state changes.
Both: calculate expected_at as period.end + delivery_sla. The
obligation is committed at period close and appears in the first ledger
snapshot strictly after it; the report becomes late only at
expected_at.
For example, a configuration activated at 00:20Z with hourly aligned periods
starts at the next full boundary. Its first period is [01:00Z, 02:00Z). The
obligation appears in the first ledger snapshot strictly after 02:00Z; with
delivery_sla: PT1H, it stays waiting through 03:00Z and becomes
delayed after that if no revision has been produced. A snapshot exactly at
02:00Z does not expose it.
No push requirement. Polling get_reporting_status is the
authoritative recovery path; a seller with no outbound push is fully
conformant. When advertised, sync_reporting_status is an ordinary inbound
task call, not a seller push or a buyer-hosted callback.
If you do offer push, Core’s doorbell is reporting.status_changed — an
invalidation for health transitions in either direction, with stable
issue_ids. reporting.ledger_changed is the separate optional invalidation
for every new revision or adjustment, including changes that leave health
untouched. reporting.delivery_ready belongs to the managed-delivery tier
and never fires for Core configurations.
No delivery machinery. Core offerings omit method: the status ledger
and its immutable revision metadata are required, while any existing
get_media_buy_delivery read or legacy reporting webhook remains an
optional data transport. Core never requires push. Destinations, manifests,
and provisioning belong to the managed_delivery tier.
No Managed canonicalization or billing receipts.reconciliation_mode is
delivery_only, offering profiles omit the external-materialization
canonicalization_* contract, and sync_reporting_receipts does not exist
for you. The opt-in sync_reporting_status extension instead echoes only the
fixed revision-binding SHA-256 when reporting was received; it carries no row
totals, Managed evidence, or billing acceptance. Receipts and Managed
external materialization machinery belong to the reconciled_billing tier.
The boundary is executable: the reporting-core fixture test in the
protocol repository implements a complete polling-only seller and asserts
its source contains none of
destination | manifest | billing receipt | readiness | webhook (the Core binding
digest is intentionally retained).
Advertise the tier. In get_adcp_capabilities, add
media_buy.reporting_delivery with supported: true, configuration_task,
status_task, at least one offering, automated_recovery_window_seconds,
and status_retention_days — and add media_buy.reporting_delivery to
experimental_features. Do not set managed_delivery or
reconciled_billing until you implement them.
Define one Core offering. Feed purpose, an immutable
report_definition_id, a content-addressed reporting profile (schema URI
SHA-256, grain, primary keys), a schedule (period_duration,
alignment, delivery_sla), supported finality, and
reconciliation_mode: "delivery_only". No method.
Generate obligations. When an account installs a delivery
configuration through sync_accounts,
derive its future period boundaries and next_expected_at. At each eligible
period.end, freeze the media-buy scope and commit that obligation
independently of source availability and before committing its first
revision. Every later ledger snapshot must record it, and a
matching get_reporting_statusperiods view must return it, even when the
first report never arrives. Campaign starts, stops, and configuration
generations change future obligations, never past ones.
Commit revisions. When a period’s data is final enough for its
declared finality, record an immutable revision — including zero-row
periods. Snapshot restatements create superseding revisions. Official
revisions are terminal; publish any later source correction as a signed
delta in a reporting-adjustment record applied to an open accounting
period.
Opt in to consumer status. When implemented, advertise
consumer_status_task: "sync_reporting_status" and accept it idempotently.
Validate the expected period from the authenticated caller’s immutable
configuration generation even when no seller obligation exists. Retain
superseded history and expose only that caller’s statements back through the
periods ledger.
Project status. Serve get_reporting_status: summary and periods
views over a consistent ledger snapshot, health computed from obligations
versus revisions versus the clock and current consumer status, issues[] carrying the typed code,
responsible_party, and recommended_action whenever health is
delayed or action_required.
Escalate honestly. A due obligation stays delayed while automated
recovery runs, for at most automated_recovery_window_seconds; after
that it is action_required. Never park a dead feed in delayed. A
CONSUMER_STATUS_MISMATCH follows the same discipline: every conflict is
action_required immediately except a received status made stale only by
your own restatement, which is delayed until the first superseding
revision’s created_at + delivery_sla (or
automated_recovery_window_seconds when that SLA resolves to zero) and
action_required after. Later restatements do not restart that window. Carry
one issue_id and one opened_at across the transition. If you advertise
consumer_mismatch_escalation_seconds, also advertise operations_contact
and switch recommended_action to a contact_* value once the window
elapses; that boundary wins when it overlaps the grace window. Resolve a
mismatch only when the underlying conflict ends. Waive one only after an
explicit bilateral agreement covering that exact caller/account issue and
causing status. A valid waiver retires the issue, restores the underlying
seller health while retaining the immutable consumer statement, and triggers
an offered reporting.status_changed recovery fire when health changes.
Count silence; do not act on it. A buyer that misses its
expected_at + automated_recovery_window_seconds status deadline is counted
in obligation_counts.consumer_status_pending and nothing else. Missing
buyer status never changes your health, your reliability statistics, or
another caller’s view.
Save the contract. Persist every accepted reporting configuration
generation, including its schedule, activation boundary, scope, report
definition, coverage requirement, and required finality. Do not reconstruct
historical expectations from a seller’s current configuration.
Derive expected periods. Calculate the same half-open intervals and
expected_at timestamps. A mid-period configuration activation begins at
the next full boundary; deactivation still owes a period that already
started.
Use your own denominator. For each elapsed expected period, require a
matching obligation in the complete paginated periods view. The seller’s
returned obligation list cannot prove that the first one was not omitted.
Close the history. Keep one ledger_snapshot_id across every page,
deduplicate immutable IDs, match the returned record counts, and distinguish
a zero-row revision from no revision. An external billing system MAY retain
an exact official reporting_revision_id as supporting evidence and apply
later adjustments under its own controls. Apply managed-resource and receipt checks only when the selected
tier requires them.
Checkpoint repair. After consuming every page, persist
changes_checkpoint; send it as changes_after on the next periods read.
Deduplicate safely replayed records by immutable ID.
Sync consumer status when advertised. If the seller declares
consumer_status_task, call sync_reporting_status after bounded repair
with the exact configuration generation, report definition, and period.
Failures are sent promptly; later state changes use a new immutable status ID
that supersedes the current leaf. Post a current status for every elapsed
expected period by expected_at + automated_recovery_window_seconds — not
only before closing the scope — and still have one for every elapsed period at
scope close. If reporting arrives but contradicts the accepted generation
(a frozen media buy with no rows, a promised metric missing, the wrong
currency), that is content_mismatch with a closed mismatch_code, not a
measurement argument. When a seller restatement makes your received stale,
re-read and supersede within the grace window rather than waiting for the
escalation.
Treat push as a wake-up.reporting.ledger_changed starts a
changes_after repair. Because a clock-only health transition may commit no
ledger record, reporting.status_changed starts a non-incremental current
summary or periods read. Poll periodically even when notifications are enabled.
The reporting-core-declaration universal storyboard grades the
proper-name Reliable Reporting 1.0 declaration and Core boundary. The
capability-gated reliable-reporting-managed-delivery and
reliable-reporting-reconciled-billing storyboards grade the optional
tiers. The lifecycle-focused
reporting-core storyboard uses reporting_core_lifecycle_probe to
verify an obligation-before-report, clock-derived delayed health, and
explicit zero-row publication. Sellers advertising consumer_status_task
additionally run the capability-gated reporting-consumer-status
storyboard for missing-obligation identity, mismatch, and supersession.
The reporting-core fixture test is the tier boundary stated as code —
copy its Core capability block and offering as your starting fixtures.
Buyers verify the contract the same way with or without webhooks: they poll
get_reporting_status and reconcile obligations against what they
received.
Reliable Reporting 1.0 and the opt-in consumer-status loop are part of the
AdCP 3.2 wire bundle. The public training sales agent serves "3.2". Read the
advertised version from get_adcp_capabilities and put that exact negotiated
value on every sync_accounts, controller, and get_reporting_status request.First read the version the public sales sandbox advertises, then call
comply_test_controller with
scenario: "reporting_core_lifecycle_probe" and operation: "prepare". Use
the returned account and stable identifiers in a get_reporting_statusperiods read. Then run advance_time with target_health: "delayed", read
the summary, run publish_zero_row, and read the periods view again. The
controller reference
contains the exact request shapes.
Nothing in Core obligates you to climb, and each rung is separately
advertised:
managed_delivery: true adds offerings with a method —
file transfer, dataset shares, warehouse materialization — plus
exact-resource retention and authorization-revocation bounds, bound to
principal-layer destinations (sync_principal).
reconciled_billing: true adds receipt_task
(sync_reporting_receipts),
consumer_receipt reconciliation, and the canonical-digest contract —
bilateral agreement on exact logical content, for billing.
Start with Core. It solves the problem everyone actually has.
Reliable Reporting answers “did the report I was promised arrive, intact, on
time?” It does not answer “whose number governs the invoice?” That second
question is answered by measurement_terms.billing_measurement on the media
buy — see Billing Authority
for how a deal names the seller’s ad server, the buyer’s third-party ad server,
or a measurement vendor as the authoritative counter.The two models are deliberately separate today, and a buyer can be green on
both surfaces while the invoice is still disputed: Reliable Reporting proves
the seller’s feed was delivered and read, not that its counts match the
authoritative party’s. Until they are unified, keep the distinction explicit:
Reliable Reporting is the operational contract for the seller-produced
feed: obligations, immutable revisions, health, and — when advertised —
consumer status.
report_usage is the predecessor path for media-buy billing when the
authoritative counter is the buyer or a vendor. It has no obligations, no
immutable revisions, no binding digest, and no status surface. Treat it as
the pre-Reliable-Reporting path for that case, not as a second reporting
ledger.
content_mismatch on sync_reporting_status covers contract facts the
accepted configuration generation already fixed. It is not the channel for
“your count and mine differ by 12%”; that is max_variance_percent and
makegood_policy.
reporting-delivery-config.json reserves an authoritative_party field for
the eventual unification. In 3.2 the only accepted value is seller (the
default); a seller MUST reject consumer with UNSUPPORTED_FEATURE because no
released minor defines the buyer-deposited revision task. Reserving the field
now keeps that work additive instead of breaking the billing-feed constraints.
Tracked in #7440.
For Managed Delivery file transfers, every manifest files[] entry carries a
credential-free, destination-relative object_ref. For an S3 destination,
that means the decoded object key relative to the configured destination — not
an s3:// URI and not a key with ?versionId= appended. The object key has a
1,024-character schema bound, which accommodates S3’s 1,024-UTF-8-byte key
limit; JSON Schema measures characters, not bytes.When a provider has an immutable object version, place its decoded native
value in the entry’s optional native_version_ref, separately from the key.
This covers S3 VersionIds as well as GCS generations and provider-native
snapshots. A VersionId can include characters such as +, /, and = that
expand when URI encoded. Keep the decoded value in the manifest and encode it
only while constructing the provider request. The same destination-relative
object_ref is used by physical_checksums[], so it identifies the same
object without carrying credentials, signed URLs, or query parameters.reporting-file-manifest.json contains the files[] entries:
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/schema.json","name":"AdCP - Ad Context Protocol","description":"AdCP (Ad Context Protocol) is the open standard for agentic advertising. It defines how AI agents buy media, generate creatives, activate audiences, and enforce governance across platforms. Current stable documentation index: https://docs.adcontextprotocol.org/llms-current.md.","colors":{"primary":"#047857","light":"#34D399","dark":"#065F46"},"logo":{"light":"https://mintcdn.com/agenticadvertisingorg/cnoy0Xiq2i_jSWzz/logo/sage.svg?fit=max\u0026auto=format\u0026n=cnoy0Xiq2i_jSWzz\u0026q=85\u0026s=f393829d8ccdabe856cf9c8362e66b96","dark":"https://mintcdn.com/agenticadvertisingorg/cnoy0Xiq2i_jSWzz/logo/sage.svg?fit=max\u0026auto=format\u0026n=cnoy0Xiq2i_jSWzz\u0026q=85\u0026s=f393829d8ccdabe856cf9c8362e66b96","href":"https://agenticadvertising.org"},"favicon":"https://mintcdn.com/agenticadvertisingorg/cnoy0Xiq2i_jSWzz/logo/sage.svg?fit=max\u0026auto=format\u0026n=cnoy0Xiq2i_jSWzz\u0026q=85\u0026s=f393829d8ccdabe856cf9c8362e66b96","api":{},"navbar":{"links":[{"href":"https://adcontextprotocol.org","label":"AdCP Home"},{"href":"https://agenticadvertising.org/members","label":"Members"},{"href":"https://agenticadvertising.org/perspectives","label":"Perspectives"},{"href":"https://agenticadvertising.org","label":"Join"}],"primary":{"type":"github","href":"https://github.com/adcontextprotocol/adcp"}},"footer":{"links":[{"header":"Legal","items":[{"label":"Privacy Policy","href":"https://agenticadvertising.org/api/agreement?type=privacy_policy"},{"label":"Terms of Use","href":"https://agenticadvertising.org/api/agreement?type=terms_of_service"}]},{"header":"Transparency","items":[{"label":"AI Disclosure","href":"/docs/ai-disclosure"},{"label":"Governance Charter","href":"https://github.com/adcontextprotocol/adcp/blob/main/CHARTER.md"},{"label":"Working Group","href":"/docs/community/working-group"}]}]},"seo":{},"banner":{"content":"AdCP 3.3 beta is open: scheduled, human-gated, and offline media in the same buy as programmatic — [see what's new →](/3.3)","dismissible":true},"metadata":{"timestamp":false},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"agenticadvertisingorg","hasAudioNarration":false,"actualSubdomain":"agenticadvertisingorg","customDomains":["docs.adcontextprotocol.org"],"gitSource":{"type":"github","owner":"adcontextprotocol","repo":"adcp","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adc13b6c8fac8fb63b0e787","collectionId":"1ec7d179-1da6-4f95-9d5a-a423a89aeacd","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adc13b6c8fac8fb63b0e787"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{},"buildId":"6adc13b6c8fac8fb63b0e787","clientVersion":"0.0.3964","searchFilterCounts":[{"language":"default","tag":"Protocol","count":716},{"language":"default","tag":"Reference","count":639},{"language":"default","tag":"Registry API","count":405},{"language":"default","tag":"Building with AdCP","count":392},{"language":"default","tag":"Media Buy","count":199},{"language":"default","tag":"Creative","count":182},{"language":"default","tag":"Governance","count":169},{"language":"default","tag":"Concepts","count":136},{"language":"default","tag":"Build by layer","count":125},{"language":"default","tag":"Certification","count":116}]},"assistantConfig":{"enableAskAiButton":true,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"apps/web/src/styles/app.css","content":"@import \"tailwindcss\";@import \"tw-animate-css\";@source \"../\";@source \"../../.ladle\";:root{--radius:0.25rem;--background:var(--color-white);--foreground:var(--color-neutral-950);--card:var(--color-white);--card-foreground:var(--color-neutral-950);--popover:var(--color-white);--popover-foreground:var(--color-neutral-950);--primary:var(--color-blue-600);--primary-foreground:var(--color-white);--secondary:oklch(from var(--color-slate-900) l c h / 6%);--secondary-foreground:var(--color-neutral-900);--muted:var(--color-slate-100);--muted-foreground:var(--color-slate-500);--body-foreground:var(--color-neutral-600);--accent:var(--color-slate-100);--accent-foreground:var(--color-slate-900);--destructive:var(--color-red-600);--destructive-foreground:var(--color-red-700);--destructive-on-color:var(--color-white);--success:var(--color-emerald-600);--success-foreground:var(--color-emerald-700);--warning:var(--color-yellow-400);--warning-foreground:var(--color-yellow-700);--info:var(--color-blue-600);--info-foreground:var(--color-blue-700);--border:var(--color-neutral-200);--input:var(--color-neutral-200);--ring:var(--color-neutral-400);--chart-1:var(--color-orange-500);--chart-2:var(--color-cyan-500);--chart-3:var(--color-blue-700);--chart-4:var(--color-yellow-400);--chart-5:var(--color-amber-500)}@media (prefers-color-scheme:dark){:root{--background:var(--color-slate-950);--foreground:var(--color-slate-50);--card:var(--color-slate-900);--card-foreground:var(--color-slate-50);--popover:var(--color-slate-900);--popover-foreground:var(--color-slate-50);--primary:var(--color-blue-600);--primary-foreground:var(--color-white);--secondary:oklch(1 0 0 / 12%);--secondary-foreground:var(--color-slate-50);--muted:var(--color-slate-800);--muted-foreground:var(--color-slate-400);--body-foreground:var(--color-slate-300);--accent:var(--color-slate-800);--accent-foreground:var(--color-slate-50);--destructive:var(--color-red-400);--destructive-foreground:var(--color-red-400);--destructive-on-color:var(--color-white);--success:var(--color-emerald-400);--success-foreground:var(--color-emerald-300);--warning:var(--color-yellow-400);--warning-foreground:var(--color-yellow-300);--info:var(--color-blue-400);--info-foreground:var(--color-blue-300);--border:oklch(1 0 0 / 10%);--input:oklch(1 0 0 / 15%);--ring:var(--color-slate-500)}}:root[data-theme=dark],:root[data-theme=light]{--primary:var(--color-blue-600);--primary-foreground:var(--color-white);--destructive-on-color:var(--color-white);--warning:var(--color-yellow-400)}:root[data-theme=light]{--background:var(--color-white);--foreground:var(--color-neutral-950);--card:var(--color-white);--card-foreground:var(--color-neutral-950);--popover:var(--color-white);--popover-foreground:var(--color-neutral-950);--secondary:oklch(from var(--color-slate-900) l c h / 6%);--secondary-foreground:var(--color-neutral-900);--muted:var(--color-slate-100);--muted-foreground:var(--color-slate-500);--body-foreground:var(--color-neutral-600);--accent:var(--color-slate-100);--accent-foreground:var(--color-slate-900);--destructive:var(--color-red-600);--destructive-foreground:var(--color-red-700);--success:var(--color-emerald-600);--success-foreground:var(--color-emerald-700);--warning-foreground:var(--color-yellow-700);--info:var(--color-blue-600);--info-foreground:var(--color-blue-700);--border:var(--color-neutral-200);--input:var(--color-neutral-200);--ring:var(--color-neutral-400)}:root[data-theme=dark]{--background:var(--color-slate-950);--foreground:var(--color-slate-50);--card:var(--color-slate-900);--card-foreground:var(--color-slate-50);--popover:var(--color-slate-900);--popover-foreground:var(--color-slate-50);--secondary:oklch(1 0 0 / 12%);--secondary-foreground:var(--color-slate-50);--muted:var(--color-slate-800);--muted-foreground:var(--color-slate-400);--body-foreground:var(--color-slate-300);--accent:var(--color-slate-800);--accent-foreground:var(--color-slate-50);--destructive:var(--color-red-400);--destructive-foreground:var(--color-red-400);--success:var(--color-emerald-400);--success-foreground:var(--color-emerald-300);--warning-foreground:var(--color-yellow-300);--info:var(--color-blue-400);--info-foreground:var(--color-blue-300);--border:oklch(1 0 0 / 10%);--input:oklch(1 0 0 / 15%);--ring:var(--color-slate-500)}@theme{--font-sans:'Inter Variable', 'Inter', -apple-system, BlinkMacSystemFont,\n 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;--font-mono:'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas,\n monospace;--color-blue-50:oklch(0.970 0.012 258);--color-blue-100:oklch(0.928 0.028 260);--color-blue-200:oklch(0.878 0.055 262);--color-blue-300:oklch(0.802 0.100 264);--color-blue-400:oklch(0.700 0.175 266);--color-blue-500:oklch(0.620 0.215 267);--color-blue-600:oklch(0.5358 0.2447 266.97);--color-blue-700:oklch(0.465 0.225 268);--color-blue-800:oklch(0.395 0.190 268);--color-blue-900:oklch(0.330 0.145 268);--color-blue-950:oklch(0.270 0.120 268);--color-blue-1000:oklch(0.2102 0.0975 268.06);--color-slate-1000:oklch(0.069 0.038 265);--color-gray-1000:oklch(0.070 0.026 261);--color-neutral-1000:oklch(0.080 0 0);--color-cyan-1000:oklch(0.242 0.045 230);--color-green-1000:oklch(0.206 0.052 153);--color-emerald-1000:oklch(0.205 0.030 173);--color-red-1000:oklch(0.198 0.074 26);--color-orange-1000:oklch(0.206 0.063 36);--color-amber-1000:oklch(0.219 0.048 46);--color-yellow-1000:oklch(0.226 0.053 54)}@theme inline{--color-background:var(--background);--color-foreground:var(--foreground);--color-card:var(--card);--color-card-foreground:var(--card-foreground);--color-popover:var(--popover);--color-popover-foreground:var(--popover-foreground);--color-primary:var(--primary);--color-primary-foreground:var(--primary-foreground);--color-secondary:var(--secondary);--color-secondary-foreground:var(--secondary-foreground);--color-muted:var(--muted);--color-muted-foreground:var(--muted-foreground);--color-body-foreground:var(--body-foreground);--color-accent:var(--accent);--color-accent-foreground:var(--accent-foreground);--color-destructive:var(--destructive);--color-destructive-foreground:var(--destructive-foreground);--color-destructive-on-color:var(--destructive-on-color);--color-success:var(--success);--color-success-foreground:var(--success-foreground);--color-warning:var(--warning);--color-warning-foreground:var(--warning-foreground);--color-info:var(--info);--color-info-foreground:var(--info-foreground);--color-border:var(--border);--color-input:var(--input);--color-ring:var(--ring);--color-chart-1:var(--chart-1);--color-chart-2:var(--chart-2);--color-chart-3:var(--chart-3);--color-chart-4:var(--chart-4);--color-chart-5:var(--chart-5);--radius-sm:max(0px, calc(var(--radius) - 4px));--radius-md:var(--radius);--radius-lg:calc(var(--radius) + 4px);--radius-xl:calc(var(--radius) + 8px)}@layer base{*,::after,::backdrop,::before,::file-selector-button{border-color:var(--color-border, currentColor)}body{background:var(--color-background);color:var(--color-foreground);font-family:var(--font-sans)}[data-sonner-toast][data-styled=true] [data-description]{color:var(--body-foreground)}}"}],"page":{"pagePath":"dist/docs/3.2.6/media-buy/reporting-core-implementation-guide","slug":"/dist/docs/3.2.6/media-buy/reporting-core-implementation-guide","pageMetadata":{"title":"Reliable Reporting: implementing reporting.core","description":"The required Reliable Reporting tier: obligations, immutable closes, seller status, and an optional buyer-to-seller status loop — over the transports you already have.","og:title":"AdCP — Reliable Reporting with reporting.core","href":"/dist/docs/3.2.6/media-buy/reporting-core-implementation-guide"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"The required Reliable Reporting tier: obligations, immutable closes, seller status, and an optional buyer-to-seller status loop — over the transports you already have.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Mermaid,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(Warning,{children:[_jsxs(_components.p,{children:[`Reliable Reporting is experimental in 3.2. `,_jsx(_components.code,{children:`reporting.core`}),` is its required\ntier; `,_jsx(_components.code,{children:`managed_delivery`}),` and `,_jsx(_components.code,{children:`reconciled_billing`}),` are separately advertised\noptional tiers.`]}),_jsxs(_components.p,{children:[`The consumer-status loop is additive and opt-in in 3.2, and it stays opt-in\nuntil the notice window closes on October 24, 2026. Sellers advertise\n`,_jsx(_components.code,{children:`consumer_status_task`}),` only when implemented. The active notice makes it\nrequired Core no earlier than the first minor after that date. Check the public\ntraining seller’s advertised capabilities before testing this extension.`]})]}),`\n`,_jsxs(_components.p,{children:[`Every buyer eventually asks one question: `,_jsx(_components.strong,{children:`“do I have definitive reporting\nfor this period — and if not, whose problem is it?”`}),` `,_jsx(_components.code,{children:`reporting.core`}),` makes\nthat question machine-answerable. Core is the required operational reporting\nbaseline: a seller must retain immutable revision evidence and expose its exact\nbinding over existing reporting transports. A seller that advertises the\nconsumer-status extension additionally records what the authenticated buyer\ncould actually consume. Core requires no destination, manifest, external\nmaterialization, billing receipt, bespoke webhook, or outbound push code. It does require the\nfixed revision-binding digest over canonical rows; this is distinct from the\nManaged Delivery external-materialization canonicalization contract. Core carries\nthe operational cost of durable obligations, revision retention, and repair.`]}),`\n`,_jsxs(_components.p,{children:[`For an exact Core revision read, call `,_jsx(_components.code,{children:`get_media_buy_delivery`}),` with\n`,_jsx(_components.code,{children:`reporting_revision_id`}),` and, optionally, an account selector. The returned `,_jsx(_components.code,{children:`reporting_revision_binding`}),`\nmust echo that ID and bind `,_jsx(_components.code,{children:`{ reporting_revision_id, row_count, control_totals, reporting_rows }`}),` with RFC 8785 JCS and SHA-256. Exact reads are cursor-paginated:\nevery page repeats identical revision metadata and binding, and a consumer hashes\nthe concatenated rows in cursor order only after exhausting the frozen walk. Do\nnot substitute a fresh date-range pull for this read: it may have changed since\nthe immutable revision was published.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-core-is`,children:`What Core is`}),`\n`,_jsx(_components.p,{children:`Four Core ideas, plus one opt-in status loop:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Obligations exist before reports.`}),` For every active delivery\nconfiguration and period, the seller records what `,_jsx(_components.em,{children:`should`}),` exist — so a\nmissing first report is detectable, not silent.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`A zero-row report differs from no report.`}),` An empty period commits a\nrevision like any other; absence means something is wrong.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Revisions are immutable logical content.`}),` A provisional restatement is a\nnew snapshot revision superseding the old snapshot, never an edit. An\n`,_jsx(_components.code,{children:`official`}),` revision is immutable billing-purpose evidence and cannot be\nsuperseded; later corrections are explicit accounting adjustments.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[_jsx(_components.a,{href:`/dist/docs/3.2.6/media-buy/task-reference/get_reporting_status`,children:_jsx(_components.code,{children:`get_reporting_status`})}),`\nexposes seller state`]}),` — one authoritative read over the obligation ledger,\nsummarized by five health states.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`When `,_jsx(_components.code,{children:`consumer_status_task`}),` is advertised,\n`,_jsx(_components.a,{href:`/dist/docs/3.2.6/media-buy/task-reference/sync_reporting_status`,children:_jsx(_components.code,{children:`sync_reporting_status`})}),`\ncloses the loop`]}),` — the buyer tells the seller whether an expected period\nwas received, omitted, missing, unreadable, or contradictory. Both\nattributed histories stay visible; neither overwrites the other.`]}),`\n`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Health`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`healthy`})}),_jsx(_components.td,{children:`Everything due has been produced.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`waiting`})}),_jsx(_components.td,{children:`Nothing is due yet.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`delayed`})}),_jsx(_components.td,{children:`Something due is late, automated recovery is still running.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`action_required`})}),_jsxs(_components.td,{children:[`A human on the named `,_jsx(_components.code,{children:`responsible_party`}),` must act.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`complete`})}),_jsx(_components.td,{children:`The queried scope is closed and every final obligation is satisfied.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`lifecycle-at-a-glance`,children:`Lifecycle at a glance`}),`\n`,_jsxs(_components.p,{children:[`The reporting configuration creates the clock. Accepting a media buy does not\nstart a separate reporting SLA. Before a period closes, both sides can derive\nits boundary and `,_jsx(_components.code,{children:`next_expected_at`}),`, but the seller cannot freeze an\n`,_jsx(_components.code,{children:`all_media_buys`}),` denominator yet. At the period boundary, the obligation\nbecomes part of the authoritative ledger whether or not source data exists.`]}),`\n`,_jsxs(_components.p,{children:[`A closed, complete summary can still have an active configuration schedule.\nThe seller MUST populate `,_jsx(_components.code,{children:`next_expected_at`}),` with the nearest future period\nstart across its active in-scope `,_jsx(_components.code,{children:`delivery_config_generations`}),` when such a\nperiod exists outside the evaluated scope, and omit it when none exists.\nThis summary projection preserves both complete-health scope guards and MUST\nNOT create, expose, lease, count, or alter an open-period obligation or change\nthe scope’s coverage. See\n`,_jsx(_components.a,{href:`/dist/docs/3.2.6/media-buy/task-reference/get_reporting_status#future-expectation-on-a-complete-summary`,children:`future expectations on complete summaries`}),`\nfor the selection rule and its distinction from obligation and webhook deadlines.`]}),`\n`,_jsx(Mermaid,{chart:`%%{init: {\"sequence\": {\"showSequenceNumbers\": true}}}%%\nsequenceDiagram\n accTitle: Reporting Core obligation and revision lifecycle\n accDescr: A buyer installs a reporting configuration. At period end the seller commits an obligation before acquiring source data, then commits an immutable revision. Managed delivery can optionally materialize and notify; status reads remain authoritative.\n participant Buyer as Buyer agent\n participant Seller as Seller agent\n participant Ledger as Reporting ledger\n participant Source as Reporting source\n participant Destination as Managed destination\n\n Buyer->>Seller: sync_accounts(reporting_delivery_configs)\n Seller-->>Buyer: Ready configuration + resolved schedule\n Note over Buyer,Seller: Both derive the next full period and expected_at\n\n Note over Seller,Ledger: period.end — freeze scope_resolved_at and media_buy_ids\n Seller->>Ledger: Commit obligation independently of source availability\n Buyer->>Seller: get_reporting_status\n Seller-->>Buyer: Obligation is visible (usually waiting)\n\n Seller->>Source: Acquire and normalize period data\n Source-->>Seller: Rows, including a valid zero-row result\n Seller->>Ledger: Commit immutable revision\n\n opt Source corrects an official revision later\n Seller->>Ledger: Commit immutable adjustment into an open accounting period\n Seller-->>Buyer: reporting.ledger_changed (optional)\n end\n\n alt Core\n Seller-->>Buyer: Revision readable through reporting API\n else Managed delivery\n Seller->>Destination: Materialize and verify revision\n Seller->>Ledger: Commit verified materialization\n Seller-->>Buyer: reporting.delivery_ready (optional)\n end\n\n opt Nothing satisfies the obligation by expected_at\n Seller->>Ledger: waiting → delayed\n Seller-->>Buyer: reporting.status_changed (optional)\n end\n\n Buyer->>Seller: get_reporting_status (authoritative repair)\n opt Seller advertises consumer_status_task\n Buyer->>Seller: sync_reporting_status (consumer status)\n Seller->>Ledger: Record buyer statement; compare current states\n opt Seller healthy but buyer cannot consume\n Seller->>Ledger: Open caller-scoped CONSUMER_STATUS_MISMATCH\n end\n end`}),`\n`,_jsx(_components.p,{children:`This gives each side a distinct responsibility:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Seller:`}),` commit every elapsed eligible period before taking a ledger\nsnapshot after `,_jsx(_components.code,{children:`period.end`}),`, independently of source availability and before\ncommitting a revision. A matching `,_jsx(_components.code,{children:`periods`}),` view includes it in the\npaginated record set.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Buyer:`}),` retain the accepted configuration generation, derive the same\nexpected periods, and treat a missing obligation as a protocol failure rather\nthan evidence that no activity occurred. When the seller advertises\n`,_jsx(_components.code,{children:`consumer_status_task`}),`, sync the resulting consumer status back and update it\nwhenever consumption state changes.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Both:`}),` calculate `,_jsx(_components.code,{children:`expected_at`}),` as `,_jsx(_components.code,{children:`period.end + delivery_sla`}),`. The\nobligation is committed at period close and appears in the first ledger\nsnapshot strictly after it; the report becomes late only at\n`,_jsx(_components.code,{children:`expected_at`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`For example, a configuration activated at `,_jsx(_components.code,{children:`00:20Z`}),` with hourly aligned periods\nstarts at the next full boundary. Its first period is `,_jsx(_components.code,{children:`[01:00Z, 02:00Z)`}),`. The\nobligation appears in the first ledger snapshot strictly after `,_jsx(_components.code,{children:`02:00Z`}),`; with\n`,_jsx(_components.code,{children:`delivery_sla: PT1H`}),`, it stays `,_jsx(_components.code,{children:`waiting`}),` through `,_jsx(_components.code,{children:`03:00Z`}),` and becomes\n`,_jsx(_components.code,{children:`delayed`}),` after that if no revision has been produced. A snapshot exactly at\n`,_jsx(_components.code,{children:`02:00Z`}),` does not expose it.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-core-is-not`,children:`What Core is not`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No push requirement.`}),` Polling `,_jsx(_components.code,{children:`get_reporting_status`}),` is the\nauthoritative recovery path; a seller with no outbound push is fully\nconformant. When advertised, `,_jsx(_components.code,{children:`sync_reporting_status`}),` is an ordinary inbound\ntask call, not a seller push or a buyer-hosted callback.\nIf you do offer push, Core’s doorbell is `,_jsx(_components.code,{children:`reporting.status_changed`}),` — an\ninvalidation for health transitions in either direction, with stable\n`,_jsx(_components.code,{children:`issue_ids`}),`. `,_jsx(_components.code,{children:`reporting.ledger_changed`}),` is the separate optional invalidation\nfor every new revision or adjustment, including changes that leave health\nuntouched. `,_jsx(_components.code,{children:`reporting.delivery_ready`}),` belongs to the managed-delivery tier\nand never fires for Core configurations.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No delivery machinery.`}),` Core offerings omit `,_jsx(_components.code,{children:`method`}),`: the status ledger\nand its immutable revision metadata are required, while any existing\n`,_jsx(_components.code,{children:`get_media_buy_delivery`}),` read or legacy reporting webhook remains an\noptional data transport. Core never requires push. Destinations, manifests,\nand provisioning belong to the `,_jsx(_components.code,{children:`managed_delivery`}),` tier.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No Managed canonicalization or billing receipts.`}),` `,_jsx(_components.code,{children:`reconciliation_mode`}),` is\n`,_jsx(_components.code,{children:`delivery_only`}),`, offering profiles omit the external-materialization\n`,_jsx(_components.code,{children:`canonicalization_*`}),` contract, and `,_jsx(_components.code,{children:`sync_reporting_receipts`}),` does not exist\nfor you. The opt-in `,_jsx(_components.code,{children:`sync_reporting_status`}),` extension instead echoes only the\nfixed revision-binding SHA-256 when reporting was received; it carries no row\ntotals, Managed evidence, or billing acceptance. Receipts and Managed\nexternal materialization machinery belong to the `,_jsx(_components.code,{children:`reconciled_billing`}),` tier.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The boundary is executable: the `,_jsx(_components.code,{children:`reporting-core`}),` fixture test in the\nprotocol repository implements a complete polling-only seller and asserts\nits source contains none of\n`,_jsx(_components.code,{children:`destination | manifest | billing receipt | readiness | webhook`}),` (the Core binding\ndigest is intentionally retained).`]}),`\n`,_jsx(Heading,{level:`2`,id:`build-order-for-a-seller`,children:`Build order for a seller`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Advertise the tier.`}),` In `,_jsx(_components.code,{children:`get_adcp_capabilities`}),`, add\n`,_jsx(_components.code,{children:`media_buy.reporting_delivery`}),` with `,_jsx(_components.code,{children:`supported: true`}),`, `,_jsx(_components.code,{children:`configuration_task`}),`,\n`,_jsx(_components.code,{children:`status_task`}),`, at least one offering, `,_jsx(_components.code,{children:`automated_recovery_window_seconds`}),`,\nand `,_jsx(_components.code,{children:`status_retention_days`}),` — and add `,_jsx(_components.code,{children:`media_buy.reporting_delivery`}),` to\n`,_jsx(_components.code,{children:`experimental_features`}),`. Do not set `,_jsx(_components.code,{children:`managed_delivery`}),` or\n`,_jsx(_components.code,{children:`reconciled_billing`}),` until you implement them.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Define one Core offering.`}),` Feed purpose, an immutable\n`,_jsx(_components.code,{children:`report_definition_id`}),`, a content-addressed reporting profile (schema URI`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`SHA-256, grain, primary keys), a schedule (`,_jsx(_components.code,{children:`period_duration`}),`,\n`,_jsx(_components.code,{children:`alignment`}),`, `,_jsx(_components.code,{children:`delivery_sla`}),`), supported finality, and\n`,_jsx(_components.code,{children:`reconciliation_mode: \"delivery_only\"`}),`. No `,_jsx(_components.code,{children:`method`}),`.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Generate obligations.`}),` When an account installs a delivery\nconfiguration through `,_jsx(_components.a,{href:`/dist/docs/3.2.6/accounts/tasks/sync_accounts`,children:_jsx(_components.code,{children:`sync_accounts`})}),`,\nderive its future period boundaries and `,_jsx(_components.code,{children:`next_expected_at`}),`. At each eligible\n`,_jsx(_components.code,{children:`period.end`}),`, freeze the media-buy scope and commit that obligation\nindependently of source availability and before committing its first\nrevision. Every later ledger snapshot must record it, and a\nmatching `,_jsx(_components.code,{children:`get_reporting_status`}),` `,_jsx(_components.code,{children:`periods`}),` view must return it, even when the\nfirst report never arrives. Campaign starts, stops, and configuration\ngenerations change `,_jsx(_components.em,{children:`future`}),` obligations, never past ones.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Commit revisions.`}),` When a period’s data is final enough for its\ndeclared finality, record an immutable revision — including zero-row\nperiods. Snapshot restatements create superseding revisions. Official\nrevisions are terminal; publish any later source correction as a signed\ndelta in a `,_jsx(_components.code,{children:`reporting-adjustment`}),` record applied to an open accounting\nperiod.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Opt in to consumer status.`}),` When implemented, advertise\n`,_jsx(_components.code,{children:`consumer_status_task: \"sync_reporting_status\"`}),` and accept it idempotently.\nValidate the expected period from the authenticated caller’s immutable\nconfiguration generation even when no seller obligation exists. Retain\nsuperseded history and expose only that caller’s statements back through the\nperiods ledger.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Project status.`}),` Serve `,_jsx(_components.code,{children:`get_reporting_status`}),`: summary and periods\nviews over a consistent ledger snapshot, health computed from obligations\nversus revisions versus the clock and current consumer status, `,_jsx(_components.code,{children:`issues[]`}),` carrying the typed code,\n`,_jsx(_components.code,{children:`responsible_party`}),`, and `,_jsx(_components.code,{children:`recommended_action`}),` whenever health is\n`,_jsx(_components.code,{children:`delayed`}),` or `,_jsx(_components.code,{children:`action_required`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Escalate honestly.`}),` A due obligation stays `,_jsx(_components.code,{children:`delayed`}),` while automated\nrecovery runs, for at most `,_jsx(_components.code,{children:`automated_recovery_window_seconds`}),`; after\nthat it is `,_jsx(_components.code,{children:`action_required`}),`. Never park a dead feed in `,_jsx(_components.code,{children:`delayed`}),`. A\n`,_jsx(_components.code,{children:`CONSUMER_STATUS_MISMATCH`}),` follows the same discipline: every conflict is\n`,_jsx(_components.code,{children:`action_required`}),` immediately `,_jsx(_components.em,{children:`except`}),` a `,_jsx(_components.code,{children:`received`}),` status made stale only by\nyour own restatement, which is `,_jsx(_components.code,{children:`delayed`}),` until the first superseding\nrevision’s `,_jsx(_components.code,{children:`created_at + delivery_sla`}),` (or\n`,_jsx(_components.code,{children:`automated_recovery_window_seconds`}),` when that SLA resolves to zero) and\n`,_jsx(_components.code,{children:`action_required`}),` after. Later restatements do not restart that window. Carry\none `,_jsx(_components.code,{children:`issue_id`}),` and one `,_jsx(_components.code,{children:`opened_at`}),` across the transition. If you advertise\n`,_jsx(_components.code,{children:`consumer_mismatch_escalation_seconds`}),`, also advertise `,_jsx(_components.code,{children:`operations_contact`}),`\nand switch `,_jsx(_components.code,{children:`recommended_action`}),` to a `,_jsx(_components.code,{children:`contact_*`}),` value once the window\nelapses; that boundary wins when it overlaps the grace window. Resolve a\nmismatch only when the underlying conflict ends. Waive one only after an\nexplicit bilateral agreement covering that exact caller/account issue and\ncausing status. A valid waiver retires the issue, restores the underlying\nseller health while retaining the immutable consumer statement, and triggers\nan offered `,_jsx(_components.code,{children:`reporting.status_changed`}),` recovery fire when health changes.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Count silence; do not act on it.`}),` A buyer that misses its\n`,_jsx(_components.code,{children:`expected_at + automated_recovery_window_seconds`}),` status deadline is counted\nin `,_jsx(_components.code,{children:`obligation_counts.consumer_status_pending`}),` and nothing else. Missing\nbuyer status never changes your health, your reliability statistics, or\nanother caller’s view.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`build-order-for-a-buyer`,children:`Build order for a buyer`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Save the contract.`}),` Persist every accepted reporting configuration\ngeneration, including its schedule, activation boundary, scope, report\ndefinition, coverage requirement, and required finality. Do not reconstruct\nhistorical expectations from a seller’s current configuration.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Derive expected periods.`}),` Calculate the same half-open intervals and\n`,_jsx(_components.code,{children:`expected_at`}),` timestamps. A mid-period configuration activation begins at\nthe next full boundary; deactivation still owes a period that already\nstarted.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Use your own denominator.`}),` For each elapsed expected period, require a\nmatching obligation in the complete paginated `,_jsx(_components.code,{children:`periods`}),` view. The seller’s\nreturned obligation list cannot prove that the first one was not omitted.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Close the history.`}),` Keep one `,_jsx(_components.code,{children:`ledger_snapshot_id`}),` across every page,\ndeduplicate immutable IDs, match the returned record counts, and distinguish\na zero-row revision from no revision. An external billing system MAY retain\nan exact official `,_jsx(_components.code,{children:`reporting_revision_id`}),` as supporting evidence and apply\nlater adjustments under its own controls. Apply managed-resource and receipt checks only when the selected\ntier requires them.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Checkpoint repair.`}),` After consuming every page, persist\n`,_jsx(_components.code,{children:`changes_checkpoint`}),`; send it as `,_jsx(_components.code,{children:`changes_after`}),` on the next periods read.\nDeduplicate safely replayed records by immutable ID.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Sync consumer status when advertised.`}),` If the seller declares\n`,_jsx(_components.code,{children:`consumer_status_task`}),`, call `,_jsx(_components.code,{children:`sync_reporting_status`}),` after bounded repair\nwith the exact configuration generation, report definition, and period.\nFailures are sent promptly; later state changes use a new immutable status ID\nthat supersedes the current leaf. Post a current status for every elapsed\nexpected period by `,_jsx(_components.code,{children:`expected_at + automated_recovery_window_seconds`}),` — not\nonly before closing the scope — and still have one for every elapsed period at\nscope close. If reporting arrives but contradicts the accepted generation\n(a frozen media buy with no rows, a promised metric missing, the wrong\ncurrency), that is `,_jsx(_components.code,{children:`content_mismatch`}),` with a closed `,_jsx(_components.code,{children:`mismatch_code`}),`, not a\nmeasurement argument. When a seller restatement makes your `,_jsx(_components.code,{children:`received`}),` stale,\nre-read and supersede within the grace window rather than waiting for the\nescalation.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Treat push as a wake-up.`}),` `,_jsx(_components.code,{children:`reporting.ledger_changed`}),` starts a\n`,_jsx(_components.code,{children:`changes_after`}),` repair. Because a clock-only health transition may commit no\nledger record, `,_jsx(_components.code,{children:`reporting.status_changed`}),` starts a non-incremental current\nsummary or periods read. Poll periodically even when notifications are enabled.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`how-to-verify`,children:`How to verify`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The `,_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`reporting-core-declaration`}),` universal storyboard`]}),` grades the\nproper-name Reliable Reporting 1.0 declaration and Core boundary. The\ncapability-gated `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`reliable-reporting-managed-delivery`})}),` and\n`,_jsx(_components.strong,{children:_jsx(_components.code,{children:`reliable-reporting-reconciled-billing`})}),` storyboards grade the optional\ntiers. The lifecycle-focused\n`,_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`reporting-core`}),` storyboard`]}),` uses `,_jsx(_components.code,{children:`reporting_core_lifecycle_probe`}),` to\nverify an obligation-before-report, clock-derived delayed health, and\nexplicit zero-row publication. Sellers advertising `,_jsx(_components.code,{children:`consumer_status_task`}),`\nadditionally run the capability-gated `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`reporting-consumer-status`})}),`\nstoryboard for missing-obligation identity, mismatch, and supersession.`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`reporting-core fixture test`}),` is the tier boundary stated as code —\ncopy its Core capability block and offering as your starting fixtures.`]}),`\n`,_jsxs(_components.li,{children:[`Buyers verify the contract the same way with or without webhooks: they poll\n`,_jsx(_components.code,{children:`get_reporting_status`}),` and reconcile obligations against what they\nreceived.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Reliable Reporting 1.0 and the opt-in consumer-status loop are part of the\nAdCP 3.2 wire bundle. The public training sales agent serves `,_jsx(_components.code,{children:`\"3.2\"`}),`. Read the\nadvertised version from `,_jsx(_components.code,{children:`get_adcp_capabilities`}),` and put that exact negotiated\nvalue on every `,_jsx(_components.code,{children:`sync_accounts`}),`, controller, and `,_jsx(_components.code,{children:`get_reporting_status`}),` request.`]}),`\n`,_jsxs(_components.p,{children:[`First read the version the public sales sandbox advertises, then call\n`,_jsx(_components.code,{children:`comply_test_controller`}),` with\n`,_jsx(_components.code,{children:`scenario: \"reporting_core_lifecycle_probe\"`}),` and `,_jsx(_components.code,{children:`operation: \"prepare\"`}),`. Use\nthe returned account and stable identifiers in a `,_jsx(_components.code,{children:`get_reporting_status`}),`\n`,_jsx(_components.code,{children:`periods`}),` read. Then run `,_jsx(_components.code,{children:`advance_time`}),` with `,_jsx(_components.code,{children:`target_health: \"delayed\"`}),`, read\nthe summary, run `,_jsx(_components.code,{children:`publish_zero_row`}),`, and read the periods view again. The\n`,_jsx(_components.a,{href:`/dist/docs/3.2.6/building/by-layer/L3/comply-test-controller#reporting_core_lifecycle_probe`,children:`controller reference`}),`\ncontains the exact request shapes.`]}),`\n`,_jsx(Heading,{level:`2`,id:`the-ladder-above-core`,children:`The ladder above Core`}),`\n`,_jsx(_components.p,{children:`Nothing in Core obligates you to climb, and each rung is separately\nadvertised:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`managed_delivery: true`})}),` adds offerings with a `,_jsx(_components.code,{children:`method`}),` —\nfile transfer, dataset shares, warehouse materialization — plus\nexact-resource retention and authorization-revocation bounds, bound to\nprincipal-layer destinations (`,_jsx(_components.a,{href:`/dist/docs/3.2.6/protocol/sync_principal`,children:_jsx(_components.code,{children:`sync_principal`})}),`).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`reconciled_billing: true`})}),` adds `,_jsx(_components.code,{children:`receipt_task`}),`\n(`,_jsx(_components.a,{href:`/dist/docs/3.2.6/media-buy/task-reference/sync_reporting_receipts`,children:_jsx(_components.code,{children:`sync_reporting_receipts`})}),`),\n`,_jsx(_components.code,{children:`consumer_receipt`}),` reconciliation, and the canonical-digest contract —\nbilateral agreement on exact logical content, for billing.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Start with Core. It solves the problem everyone actually has.`}),`\n`,_jsx(Heading,{level:`2`,id:`reporting-reliability-and-billing-authority`,children:`Reporting reliability and billing authority`}),`\n`,_jsxs(_components.p,{children:[`Reliable Reporting answers `,_jsx(_components.em,{children:`“did the report I was promised arrive, intact, on\ntime?”`}),` It does not answer `,_jsx(_components.em,{children:`“whose number governs the invoice?”`}),` That second\nquestion is answered by `,_jsx(_components.code,{children:`measurement_terms.billing_measurement`}),` on the media\nbuy — see `,_jsx(_components.a,{href:`/dist/docs/3.2.6/media-buy/advanced-topics/billing-authority`,children:`Billing Authority`}),`\nfor how a deal names the seller’s ad server, the buyer’s third-party ad server,\nor a measurement vendor as the authoritative counter.`]}),`\n`,_jsx(_components.p,{children:`The two models are deliberately separate today, and a buyer can be green on\nboth surfaces while the invoice is still disputed: Reliable Reporting proves\nthe seller’s feed was delivered and read, not that its counts match the\nauthoritative party’s. Until they are unified, keep the distinction explicit:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Reliable Reporting`}),` is the operational contract for the seller-produced\nfeed: obligations, immutable revisions, health, and — when advertised —\nconsumer status.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`report_usage`})}),` is the predecessor path for media-buy billing when the\nauthoritative counter is the buyer or a vendor. It has no obligations, no\nimmutable revisions, no binding digest, and no status surface. Treat it as\nthe pre-Reliable-Reporting path for that case, not as a second reporting\nledger.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`content_mismatch`})}),` on `,_jsx(_components.code,{children:`sync_reporting_status`}),` covers contract facts the\naccepted configuration generation already fixed. It is not the channel for\n“your count and mine differ by 12%”; that is `,_jsx(_components.code,{children:`max_variance_percent`}),` and\n`,_jsx(_components.code,{children:`makegood_policy`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`reporting-delivery-config.json`}),` reserves an `,_jsx(_components.code,{children:`authoritative_party`}),` field for\nthe eventual unification. In 3.2 the only accepted value is `,_jsx(_components.code,{children:`seller`}),` (the\ndefault); a seller MUST reject `,_jsx(_components.code,{children:`consumer`}),` with `,_jsx(_components.code,{children:`UNSUPPORTED_FEATURE`}),` because no\nreleased minor defines the buyer-deposited revision task. Reserving the field\nnow keeps that work additive instead of breaking the billing-feed constraints.\nTracked in `,_jsx(_components.a,{href:`https://github.com/adcontextprotocol/adcp/issues/7440`,children:`#7440`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`file-transfer-object-and-version-references`,children:`File-transfer object and version references`}),`\n`,_jsxs(_components.p,{children:[`For Managed Delivery file transfers, every manifest `,_jsx(_components.code,{children:`files[]`}),` entry carries a\ncredential-free, destination-relative `,_jsx(_components.code,{children:`object_ref`}),`. For an S3 destination,\nthat means the decoded object key relative to the configured destination — not\nan `,_jsx(_components.code,{children:`s3://`}),` URI and not a key with `,_jsx(_components.code,{children:`?versionId=`}),` appended. The object key has a\n1,024-character schema bound, which accommodates S3’s 1,024-UTF-8-byte key\nlimit; JSON Schema measures characters, not bytes.`]}),`\n`,_jsxs(_components.p,{children:[`When a provider has an immutable object version, place its decoded native\nvalue in the entry’s optional `,_jsx(_components.code,{children:`native_version_ref`}),`, separately from the key.\nThis covers S3 VersionIds as well as GCS generations and provider-native\nsnapshots. A VersionId can include characters such as `,_jsx(_components.code,{children:`+`}),`, `,_jsx(_components.code,{children:`/`}),`, and `,_jsx(_components.code,{children:`=`}),` that\nexpand when URI encoded. Keep the decoded value in the manifest and encode it\nonly while constructing the provider request. The same destination-relative\n`,_jsx(_components.code,{children:`object_ref`}),` is used by `,_jsx(_components.code,{children:`physical_checksums[]`}),`, so it identifies the same\nobject without carrying credentials, signed URLs, or query parameters.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`reporting-file-manifest.json`}),` contains the `,_jsx(_components.code,{children:`files[]`}),` entries:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`11`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"files\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"object_ref\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"reports/2026-08-26/part-000.parquet\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"native_version_ref\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"3/L4kqtJlcpXroDTDmJ+rmSpXd3aIbrHY+\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"size_bytes\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`128`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"sha256\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"row_count\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`reporting-verification.json`}),` contains the `,_jsx(_components.code,{children:`physical_checksums[]`}),` entries:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"physical_checksums\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"object_ref\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"reports/2026-08-26/part-000.parquet\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"algorithm\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"sha256\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"value\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Reliable Reporting: implementing reporting.core","description":"The required Reliable Reporting tier: obligations, immutable closes, seller status, and an optional buyer-to-seller status loop — over the transports you already have.","og:title":"AdCP — Reliable Reporting with reporting.core","href":"/dist/docs/3.2.6/media-buy/reporting-core-implementation-guide"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"What Core is","slug":"what-core-is","depth":2,"children":[]},{"title":"Lifecycle at a glance","slug":"lifecycle-at-a-glance","depth":2,"children":[]},{"title":"What Core is not","slug":"what-core-is-not","depth":2,"children":[]},{"title":"Build order for a seller","slug":"build-order-for-a-seller","depth":2,"children":[]},{"title":"Build order for a buyer","slug":"build-order-for-a-buyer","depth":2,"children":[]},{"title":"How to verify","slug":"how-to-verify","depth":2,"children":[]},{"title":"The ladder above Core","slug":"the-ladder-above-core","depth":2,"children":[]},{"title":"Reporting reliability and billing authority","slug":"reporting-reliability-and-billing-authority","depth":2,"children":[]},{"title":"File-transfer object and version references","slug":"file-transfer-object-and-version-references","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/agenticadvertisingorg/1a1b50531e8add0f/dist/compliance/storyboard-runner-options.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.0.23/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.14/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.0.24/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.0/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.2/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.3/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.17/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.18/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.0.26/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.19/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.15/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.16/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.4/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.0.25/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.1/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.5/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.6/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.7/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.8/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.9/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/docs/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/3d9934cdcf6b6ce6/workers/artifact-cdn/src/index.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.10/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.20/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.11/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-rc.0/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-rc.1/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.21/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-rc.2/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-rc.6/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.24/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-rc.3/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-rc.4/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-rc.7/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.1/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.2/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.3/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.27/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.0.27/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.0.28/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.3.0-beta.0/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.6/slack-invite-recovery.js"],"subdomain":"agenticadvertisingorg","siteName":"AdCP - Ad Context Protocol","title":"AdCP — Reliable Reporting with reporting.core","navMaps":{"firstHrefInVersion":{"3.2":{"href":"/dist/docs/3.2.6/media-buy/reporting-core-implementation-guide","matchLevel":0},"3.3-beta":{"href":"/dist/docs/3.3.0-beta.0/media-buy/reporting-core-implementation-guide","matchLevel":1},"3.1":{"href":"/dist/docs/3.1.27/media-buy/index","matchLevel":2},"3.0":{"href":"/dist/docs/3.0.28/media-buy/index","matchLevel":2},"2.5 (archived)":{"href":"/dist/docs/2.5.3/intro","matchLevel":3}},"firstHrefInLanguage":{}},"lastModified":"2026-10-24T03:07:16.615Z","originalFileLocation":"dist/docs/3.2.6/media-buy/reporting-core-implementation-guide.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"The required Reliable Reporting tier: obligations, immutable closes, seller status, and an optional buyer-to-seller status loop — over the transports you already have.\">\u003cmeta data-mint-head name=\"application-name\" content=\"AdCP - Ad Context Protocol\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"AdCP — Reliable Reporting with reporting.core\">\u003cmeta data-mint-head property=\"og:description\" content=\"The required Reliable Reporting tier: obligations, immutable closes, seller status, and an optional buyer-to-seller status loop — over the transports you already have.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"AdCP - Ad Context Protocol\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/media-buy/reporting-core-implementation-guide\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://agenticadvertisingorg.mintlify.app/_mintlify/api/og/v2?division=Building\u0026amp;title=Reliable+Reporting%3A+implementing+reporting.core\u0026amp;description=The+required+Reliable+Reporting+tier%3A+obligations%2C+immutable+closes%2C+seller+status%2C+and+an+optional+buyer-to-seller+status+loop+%E2%80%94+over+the+transports+you+alread\u0026amp;theme=be64ae0b59577dd8c09f9173\u0026amp;signature=725b83ee85c54a4b30d41931eba51bab1849f5aae4d801d35762523c47f0c8dc\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"AdCP — Reliable Reporting with reporting.core\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"The required Reliable Reporting tier: obligations, immutable closes, seller status, and an optional buyer-to-seller status loop — over the transports you already have.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://agenticadvertisingorg.mintlify.app/_mintlify/api/og/v2?division=Building\u0026amp;title=Reliable+Reporting%3A+implementing+reporting.core\u0026amp;description=The+required+Reliable+Reporting+tier%3A+obligations%2C+immutable+closes%2C+seller+status%2C+and+an+optional+buyer-to-seller+status+loop+%E2%80%94+over+the+transports+you+alread\u0026amp;theme=be64ae0b59577dd8c09f9173\u0026amp;signature=725b83ee85c54a4b30d41931eba51bab1849f5aae4d801d35762523c47f0c8dc\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"AdCP - Ad Context Protocol\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#047857\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/media-buy/reporting-core-implementation-guide\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/dist/docs/3.2.6/media-buy/reporting-core-implementation-guide.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.adcontextprotocol.org/#organization\",\"name\":\"AdCP - Ad Context Protocol\",\"url\":\"https://docs.adcontextprotocol.org\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/agenticadvertisingorg/cnoy0Xiq2i_jSWzz/logo/sage.svg?fit=max\u0026auto=format\u0026n=cnoy0Xiq2i_jSWzz\u0026q=85\u0026s=f393829d8ccdabe856cf9c8362e66b96\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.adcontextprotocol.org#website\",\"name\":\"AdCP - Ad Context Protocol\",\"url\":\"https://docs.adcontextprotocol.org\",\"publisher\":{\"@id\":\"https://docs.adcontextprotocol.org/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/media-buy/reporting-core-implementation-guide#webpage\",\"url\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/media-buy/reporting-core-implementation-guide\",\"name\":\"Reliable Reporting: implementing reporting.core\",\"description\":\"The required Reliable Reporting tier: obligations, immutable closes, seller status, and an optional buyer-to-seller status loop — over the transports you already have.\",\"dateModified\":\"2026-10-24T03:07:16.615Z\",\"isPartOf\":{\"@id\":\"https://docs.adcontextprotocol.org#website\"},\"breadcrumb\":{\"@id\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/media-buy/reporting-core-implementation-guide#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/media-buy/reporting-core-implementation-guide#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Protocol\",\"item\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/media-buy/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Media Buy\",\"item\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/media-buy/index\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Building\",\"item\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/media-buy/capability-discovery/index\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Reliable Reporting: implementing reporting.core\",\"item\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/media-buy/reporting-core-implementation-guide\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/media-buy/reporting-core-implementation-guide#article\",\"headline\":\"Reliable Reporting: implementing reporting.core\",\"name\":\"Reliable Reporting: implementing reporting.core\",\"description\":\"The required Reliable Reporting tier: obligations, immutable closes, seller status, and an optional buyer-to-seller status loop — over the transports you already have.\",\"url\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/media-buy/reporting-core-implementation-guide\",\"mainEntityOfPage\":{\"@id\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/media-buy/reporting-core-implementation-guide#webpage\"},\"dateModified\":\"2026-10-24T03:07:16.615Z\",\"publisher\":{\"@id\":\"https://docs.adcontextprotocol.org/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.adcontextprotocol.org#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"AdCP - Ad Context Protocol\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"AdCP - Ad Context Protocol","nav":{"global":null,"versions":[{"version":"3.2","default":true,"tag":"Latest","groups":[{"group":"Getting Started","pages":[{"title":"Introduction to AdCP","sidebarTitle":"Introduction","href":"/dist/docs/3.2.6/intro"},{"title":"Quickstart","href":"/dist/docs/3.2.6/quickstart"}]},{"group":"Building with AdCP","expanded":false,"pages":[{"title":"Building with AdCP","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/building/index"},{"title":"Schemas \u0026 SDKs","sidebarTitle":"Schemas \u0026 SDKs","href":"/dist/docs/3.2.6/building/schemas-and-sdks"},{"group":"Release notes \u0026 migration","expanded":false,"pages":[{"title":"AdCP 3.0","href":"/dist/docs/3.2.6/reference/whats-new-in-v3"},{"title":"What's New in AdCP 3.1","href":"/dist/docs/3.2.6/reference/whats-new-in-3-1"},{"title":"What's new in AdCP 3.2","sidebarTitle":"What's new in 3.2","href":"/dist/docs/3.2.6/reference/whats-new-in-3-2"},{"title":"AdCP 3.2 prerelease history","sidebarTitle":"3.2 prerelease history","href":"/dist/docs/3.2.6/reference/3-2-beta"},{"group":"3.3 preview","pages":[{"title":"What's new in AdCP 3.3","sidebarTitle":"What's new in 3.3","href":"/dist/docs/3.2.6/reference/whats-new-in-3-3"},{"title":"AdCP 3.3 beta program","sidebarTitle":"3.3 beta program","href":"/dist/docs/3.2.6/reference/3-3-beta"},{"title":"Migrating from 3.2 to 3.3","sidebarTitle":"3.2 to 3.3","href":"/dist/docs/3.2.6/reference/migration/3-2-to-3-3"}]},{"title":"v3 readiness checklist","sidebarTitle":"Readiness checklist","href":"/dist/docs/3.2.6/reference/migration/v3-readiness"},{"title":"Migration guides","sidebarTitle":"Migration guides","href":"/dist/docs/3.2.6/reference/migration/index"},{"title":"Migrating from 3.0 to 3.1","sidebarTitle":"3.0 to 3.1","href":"/dist/docs/3.2.6/reference/migration/3-0-to-3-1"},{"title":"Migrating from 3.1 to 3.2","sidebarTitle":"3.1 to 3.2","href":"/dist/docs/3.2.6/reference/migration/3-1-to-3-2"},{"title":"Reliable Reporting consumer-status loop","href":"/dist/docs/3.2.6/reference/migration/reliable-reporting-status-loop"},{"title":"Prerelease upgrade notes","sidebarTitle":"Prerelease upgrades","href":"/dist/docs/3.2.6/reference/migration/prerelease-upgrades"},{"title":"Migrating channels","href":"/dist/docs/3.2.6/reference/migration/channels"},{"title":"Migrating pricing","href":"/dist/docs/3.2.6/reference/migration/pricing"},{"title":"Migrating geo targeting","href":"/dist/docs/3.2.6/reference/migration/geo-targeting"},{"title":"Migrating creatives","href":"/dist/docs/3.2.6/reference/migration/creatives"},{"title":"Migrating to creative transformers (3.1)","href":"/dist/docs/3.2.6/reference/migration/creative-transformers"},{"title":"Migrating catalogs","href":"/dist/docs/3.2.6/reference/migration/catalogs"},{"title":"Migrating optimization goals","href":"/dist/docs/3.2.6/reference/migration/optimization-goals"},{"title":"Migrating brand identity","href":"/dist/docs/3.2.6/reference/migration/brand-identity"},{"title":"Migrating signals","href":"/dist/docs/3.2.6/reference/migration/signals"},{"title":"Migrating audiences","href":"/dist/docs/3.2.6/reference/migration/audiences"},{"title":"Migrating attribution windows","href":"/dist/docs/3.2.6/reference/migration/attribution"},{"title":"Migrating to `media_buy_status` (3.1 → 3.2)","href":"/dist/docs/3.2.6/reference/migration/media-buy-status"},{"title":"Targeting-aware product discovery","href":"/dist/docs/3.2.6/reference/migration/targeting-aware-discovery"},{"title":"Migrating secured asset access (3.2)","href":"/dist/docs/3.2.6/reference/migration/asset-access"},{"title":"Cross-role governance enforcement","href":"/dist/docs/3.2.6/reference/migration/cross-role-governance-enforcement"}]},{"title":"Protocol architecture","sidebarTitle":"Architecture","href":"/dist/docs/3.2.6/protocol/architecture"},{"title":"How AdCP is designed","sidebarTitle":"Design principles","href":"/dist/docs/3.2.6/protocol/design-principles"},{"title":"Language and localization","sidebarTitle":"Language and localization","href":"/dist/docs/3.2.6/protocol/language-and-localization"},{"title":"Capabilities explorer","sidebarTitle":"Capabilities explorer","href":"/dist/docs/3.2.6/protocol/capabilities-explorer"},{"title":"Specification Guidelines","href":"/dist/docs/3.2.6/spec-guidelines"},{"title":"Required tasks by protocol","sidebarTitle":"Required tasks","href":"/dist/docs/3.2.6/protocol/required-tasks"},{"title":"Calling an AdCP agent","sidebarTitle":"Calling an agent","href":"/dist/docs/3.2.6/protocol/calling-an-agent"},{"title":"Format References","href":"/dist/docs/3.2.6/protocol/format-references"},{"title":"Snapshot and log","href":"/dist/docs/3.2.6/protocol/snapshot-and-log"},{"group":"Concepts","expanded":false,"pages":[{"title":"Why AdCP","href":"/dist/docs/3.2.6/building/concepts/index"},{"title":"Protocol Comparison","href":"/dist/docs/3.2.6/building/concepts/protocol-comparison"},{"title":"AdCP and OpenRTB","sidebarTitle":"AdCP vs OpenRTB","href":"/dist/docs/3.2.6/building/concepts/adcp-vs-openrtb"},{"title":"How AI agents communicate ad specs across platforms","sidebarTitle":"How agents communicate","href":"/dist/docs/3.2.6/building/concepts/how-agents-communicate"},{"title":"Security Model","sidebarTitle":"Security Model","href":"/dist/docs/3.2.6/building/concepts/security-model"},{"title":"AI advertising standards landscape","sidebarTitle":"Industry landscape","href":"/dist/docs/3.2.6/building/concepts/industry-landscape"},{"title":"Managing Response Size","sidebarTitle":"Managing Response Size","href":"/dist/docs/3.2.6/building/concepts/managing-response-size"}]},{"group":"Build by layer","pages":[{"group":"L4 — Business logic","pages":[{"title":"L4 — Business logic","sidebarTitle":"L4 — Business logic","href":"/dist/docs/3.2.6/building/by-layer/L4/index"},{"title":"Choose your SDK","sidebarTitle":"Choose your SDK","href":"/dist/docs/3.2.6/building/by-layer/L4/choose-your-sdk"},{"title":"Build an Agent","sidebarTitle":"Build an Agent","href":"/dist/docs/3.2.6/building/by-layer/L4/build-an-agent"},{"title":"Build a caller","sidebarTitle":"Build a caller","href":"/dist/docs/3.2.6/building/by-layer/L4/build-a-caller"},{"title":"Migrate from a hand-rolled agent","sidebarTitle":"Migrate from hand-rolled","href":"/dist/docs/3.2.6/building/by-layer/L4/migrate-from-hand-rolled"}]},{"group":"L3 — Protocol semantics","expanded":false,"pages":[{"title":"L3 — Protocol semantics","sidebarTitle":"L3 — Protocol semantics","href":"/dist/docs/3.2.6/building/by-layer/L3/index"},{"title":"Task Lifecycle","href":"/dist/docs/3.2.6/building/by-layer/L3/task-lifecycle"},{"title":"Async Operations","href":"/dist/docs/3.2.6/building/by-layer/L3/async-operations"},{"title":"Async identity and convergence","href":"/dist/docs/3.2.6/building/by-layer/L3/async-identity-and-convergence"},{"title":"Push Notifications","href":"/dist/docs/3.2.6/building/by-layer/L3/webhooks"},{"title":"Error Handling","href":"/dist/docs/3.2.6/building/by-layer/L3/error-handling"},{"title":"Compliance test controller","href":"/dist/docs/3.2.6/building/by-layer/L3/comply-test-controller"}]},{"group":"L2 — Auth \u0026 registry","expanded":false,"pages":[{"title":"L2 — Auth \u0026 registry","sidebarTitle":"L2 — Auth \u0026 registry","href":"/dist/docs/3.2.6/building/by-layer/L2/index"},{"title":"Authentication","href":"/dist/docs/3.2.6/building/by-layer/L2/authentication"},{"title":"Account state","href":"/dist/docs/3.2.6/building/by-layer/L2/account-state"},{"title":"Accounts and agents","href":"/dist/docs/3.2.6/building/by-layer/L2/accounts-and-agents"},{"title":"Context \u0026 Sessions","href":"/dist/docs/3.2.6/building/by-layer/L2/context-sessions"}]},{"group":"L1 — Identity \u0026 signing","expanded":false,"pages":[{"title":"L1 — Identity \u0026 signing","sidebarTitle":"L1 — Identity \u0026 signing","href":"/dist/docs/3.2.6/building/by-layer/L1/index"},{"title":"Security","href":"/dist/docs/3.2.6/building/by-layer/L1/security"},{"title":"Request Signing Guide","href":"/dist/docs/3.2.6/building/by-layer/L1/request-signing"},{"title":"Webhook Verifier Tuning Guide","sidebarTitle":"Webhook Verifier Tuning","href":"/dist/docs/3.2.6/building/by-layer/L1/webhook-verifier-tuning"}]},{"group":"L0 — Wire \u0026 transport","expanded":false,"pages":[{"title":"L0 — Wire \u0026 transport","sidebarTitle":"L0 — Wire \u0026 transport","href":"/dist/docs/3.2.6/building/by-layer/L0/index"},{"title":"Schemas","sidebarTitle":"Schemas","href":"/dist/docs/3.2.6/building/by-layer/L0/schemas"},{"title":"MCP Guide","href":"/dist/docs/3.2.6/building/by-layer/L0/mcp-guide"},{"title":"A2A Guide","href":"/dist/docs/3.2.6/building/by-layer/L0/a2a-guide"},{"title":"AdCP A2A Profile Extension v3","sidebarTitle":"A2A profile extension","href":"/dist/docs/3.2.6/building/by-layer/L0/a2a-profile-extension"},{"title":"A2A Response Format","href":"/dist/docs/3.2.6/building/by-layer/L0/a2a-response-format"},{"title":"get_adcp_capabilities","href":"/dist/docs/3.2.6/protocol/get_adcp_capabilities"},{"title":"sync_agent_notification_configs","href":"/dist/docs/3.2.6/protocol/sync_agent_notification_configs"},{"title":"sync_principal","href":"/dist/docs/3.2.6/protocol/sync_principal"},{"title":"get_principal","href":"/dist/docs/3.2.6/protocol/get_principal"},{"title":"MCP Response Extraction","href":"/dist/docs/3.2.6/building/by-layer/L0/mcp-response-extraction"},{"title":"A2A Response Extraction","href":"/dist/docs/3.2.6/building/by-layer/L0/a2a-response-extraction"}]}]},{"group":"Cross-cutting","expanded":false,"pages":[{"title":"The AdCP stack","sidebarTitle":"SDK stack reference","href":"/dist/docs/3.2.6/building/cross-cutting/sdk-stack"},{"title":"Version Adaptation","sidebarTitle":"Version Adaptation","href":"/dist/docs/3.2.6/building/cross-cutting/version-adaptation"},{"title":"Known spec ambiguities","href":"/dist/docs/3.2.6/building/cross-cutting/known-ambiguities"}]},{"group":"Verification \u0026 trust","expanded":false,"pages":[{"title":"Conformance Specification","sidebarTitle":"Conformance Specification","href":"/dist/docs/3.2.6/building/verification/conformance"},{"title":"Compliance Catalog","sidebarTitle":"Compliance Catalog","href":"/dist/docs/3.2.6/building/verification/compliance-catalog"},{"title":"Storyboards vs. scenarios — which is which","sidebarTitle":"Storyboards vs. Scenarios","href":"/dist/docs/3.2.6/building/verification/storyboards-vs-scenarios"},{"title":"How grading works","sidebarTitle":"How grading works","href":"/dist/docs/3.2.6/building/verification/how-grading-works"},{"title":"Validate your agent using storyboards","sidebarTitle":"Validate Your Agent","href":"/dist/docs/3.2.6/building/verification/validate-your-agent"},{"title":"Validate adapter agents with mock upstream fixtures","sidebarTitle":"Mock Upstream Fixtures","href":"/dist/docs/3.2.6/building/verification/validate-with-mock-fixtures"},{"title":"Pair-program with Addie (Socket Mode)","sidebarTitle":"Pair with Addie","href":"/dist/docs/3.2.6/building/verification/addie-socket-mode"},{"title":"Auth Graders","sidebarTitle":"Auth Graders","href":"/dist/docs/3.2.6/building/verification/grading"},{"title":"Get Test-Ready","sidebarTitle":"Get Test-Ready","href":"/dist/docs/3.2.6/building/verification/get-test-ready"},{"title":"AAO Verified","sidebarTitle":"AAO Verified","href":"/dist/docs/3.2.6/building/verification/aao-verified"}]},{"group":"Operating","expanded":false,"pages":[{"title":"Operating an Agent","sidebarTitle":"Operating an Agent","href":"/dist/docs/3.2.6/building/operating/operating-an-agent"},{"title":"Orchestrator Design","href":"/dist/docs/3.2.6/building/operating/orchestrator-design"},{"title":"Transport Error Mapping","href":"/dist/docs/3.2.6/building/operating/transport-errors"},{"title":"Making your inventory available to AI agents","sidebarTitle":"Seller integration","href":"/dist/docs/3.2.6/building/operating/seller-integration"},{"title":"Storyboard troubleshooting","href":"/dist/docs/3.2.6/building/operating/storyboard-troubleshooting"},{"title":"Support recovery runbooks","sidebarTitle":"Support recovery","href":"/dist/docs/3.2.6/building/operating/support-recovery-runbooks"}]},{"group":"Accounts","expanded":false,"pages":[{"title":"Accounts Protocol","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/accounts/overview"},{"title":"Set up your buyer agent with a seller","sidebarTitle":"Buyer agent setup","href":"/dist/docs/3.2.6/accounts/principal-registration-walkthrough"},{"title":"Provision a seller-mediated account","sidebarTitle":"Provision an account","href":"/dist/docs/3.2.6/accounts/provisioning-walkthrough"},{"title":"sync_accounts","href":"/dist/docs/3.2.6/accounts/tasks/sync_accounts"},{"title":"list_accounts","href":"/dist/docs/3.2.6/accounts/tasks/list_accounts"},{"title":"report_usage","href":"/dist/docs/3.2.6/accounts/tasks/report_usage"},{"title":"sync_governance","href":"/dist/docs/3.2.6/accounts/tasks/sync_governance"},{"title":"get_account_financials","href":"/dist/docs/3.2.6/accounts/tasks/get_account_financials"},{"title":"list_account_changes","href":"/dist/docs/3.2.6/accounts/tasks/list_account_changes"}]}]},{"group":"Protocol","expanded":false,"pages":[{"group":"Media Buy","expanded":false,"pages":[{"title":"Media buy protocol","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/media-buy/index"},{"title":"Commerce Media","href":"/dist/docs/3.2.6/media-buy/commerce-media"},{"group":"Concepts","pages":[{"title":"Product discovery and planning","sidebarTitle":"Discovery and planning","href":"/dist/docs/3.2.6/media-buy/product-discovery/index"},{"title":"Brief expectations","href":"/dist/docs/3.2.6/media-buy/product-discovery/brief-expectations"},{"title":"Example campaign discovery requests","href":"/dist/docs/3.2.6/media-buy/product-discovery/example-briefs"},{"title":"Media Products","href":"/dist/docs/3.2.6/media-buy/product-discovery/media-products"},{"title":"Collections and installments","href":"/dist/docs/3.2.6/media-buy/product-discovery/collections-and-installments"},{"title":"Proposal negotiation","href":"/dist/docs/3.2.6/media-buy/product-discovery/proposal-negotiation"},{"title":"MediaBuy lifecycle","href":"/dist/docs/3.2.6/media-buy/media-buys/index"},{"title":"Media Buy Lifecycle Flow","href":"/dist/docs/3.2.6/media-buy/media-buys/lifecycle"},{"title":"Indicators and Warnings","href":"/dist/docs/3.2.6/media-buy/media-buys/indicators"},{"title":"Optimization \u0026 Reporting","href":"/dist/docs/3.2.6/media-buy/media-buys/optimization-reporting"},{"title":"Policy compliance","href":"/dist/docs/3.2.6/media-buy/media-buys/policy-compliance"},{"title":"Creative Lifecycle","href":"/dist/docs/3.2.6/media-buy/creatives/index"},{"title":"Conversion Tracking \u0026 Optimization Goals","href":"/dist/docs/3.2.6/media-buy/conversion-tracking/index"},{"title":"Pricing Models","href":"/dist/docs/3.2.6/media-buy/advanced-topics/pricing-models"},{"title":"Targeting","href":"/dist/docs/3.2.6/media-buy/advanced-topics/targeting"},{"title":"Accountability","sidebarTitle":"Accountability","href":"/dist/docs/3.2.6/media-buy/advanced-topics/accountability"},{"title":"Billing Authority","sidebarTitle":"Billing Authority","href":"/dist/docs/3.2.6/media-buy/advanced-topics/billing-authority"},{"group":"3.x compatibility","expanded":false,"pages":[{"title":"Refinement","href":"/dist/docs/3.2.6/media-buy/product-discovery/refinement"}]}]},{"group":"Building","pages":[{"title":"Capability Discovery","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/media-buy/capability-discovery/index"},{"title":"Implementing Standard Format Support","description":"How AdCP 3.2 sales agents declare standard creative acceptance with canonical product format options.","href":"/dist/docs/3.2.6/media-buy/capability-discovery/implementing-standard-formats"},{"title":"Reliable Reporting: implementing reporting.core","href":"/dist/docs/3.2.6/media-buy/reporting-core-implementation-guide"},{"title":"Agentic eXecution Engine (AXE)","description":"Agentic eXecution Engine (AXE) — AdCP's real-time execution layer for brand suitability enforcement, frequency capping, and dynamic audience targeting at impression time.","href":"/dist/docs/3.2.6/media-buy/advanced-topics/agentic-execution-engine"},{"title":"Accounts \u0026 Security","href":"/dist/docs/3.2.6/media-buy/advanced-topics/accounts-and-security"},{"title":"Sandbox mode","href":"/dist/docs/3.2.6/media-buy/advanced-topics/sandbox"}]},{"group":"Reference","expanded":false,"pages":[{"title":"Media Buy Specification","sidebarTitle":"Specification","href":"/dist/docs/3.2.6/media-buy/specification"},{"title":"Task Reference","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/media-buy/task-reference/index"},{"title":"list_products","href":"/dist/docs/3.2.6/media-buy/task-reference/list_products"},{"title":"request_proposals","href":"/dist/docs/3.2.6/media-buy/task-reference/request_proposals"},{"title":"refine_proposals","href":"/dist/docs/3.2.6/media-buy/task-reference/refine_proposals"},{"title":"decline_proposals","href":"/dist/docs/3.2.6/media-buy/task-reference/decline_proposals"},{"title":"buy_products","href":"/dist/docs/3.2.6/media-buy/task-reference/buy_products"},{"title":"accept_proposal","href":"/dist/docs/3.2.6/media-buy/task-reference/accept_proposal"},{"title":"control_media_buy","href":"/dist/docs/3.2.6/media-buy/task-reference/control_media_buy"},{"title":"sync_catalogs","href":"/dist/docs/3.2.6/media-buy/task-reference/sync_catalogs"},{"title":"get_media_buys","href":"/dist/docs/3.2.6/media-buy/task-reference/get_media_buys"},{"title":"get_media_buy_delivery","href":"/dist/docs/3.2.6/media-buy/task-reference/get_media_buy_delivery"},{"title":"get_reporting_status","href":"/dist/docs/3.2.6/media-buy/task-reference/get_reporting_status"},{"title":"sync_reporting_status","href":"/dist/docs/3.2.6/media-buy/task-reference/sync_reporting_status"},{"title":"sync_reporting_receipts","href":"/dist/docs/3.2.6/media-buy/task-reference/sync_reporting_receipts"},{"title":"provide_performance_feedback","href":"/dist/docs/3.2.6/media-buy/task-reference/provide_performance_feedback"},{"title":"sync_event_sources","href":"/dist/docs/3.2.6/media-buy/task-reference/sync_event_sources"},{"title":"log_event","href":"/dist/docs/3.2.6/media-buy/task-reference/log_event"},{"title":"sync_audiences","href":"/dist/docs/3.2.6/media-buy/task-reference/sync_audiences"},{"group":"3.x compatibility","expanded":false,"pages":[{"title":"get_products","href":"/dist/docs/3.2.6/media-buy/task-reference/get_products"},{"title":"create_media_buy","href":"/dist/docs/3.2.6/media-buy/task-reference/create_media_buy"},{"title":"update_media_buy","href":"/dist/docs/3.2.6/media-buy/task-reference/update_media_buy"}]}]}]},{"group":"Creative","expanded":false,"pages":[{"title":"Creative protocol","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/creative/index"},{"group":"Concepts","pages":[{"title":"Key concepts","href":"/dist/docs/3.2.6/creative/key-concepts"},{"title":"AI creative for campaign teams","href":"/dist/docs/3.2.6/creative/ai-creative-overview"},{"title":"Generative Creative","href":"/dist/docs/3.2.6/creative/generative-creative"},{"title":"Creative libraries and concepts","href":"/dist/docs/3.2.6/creative/creative-libraries"},{"title":"Catalogs","href":"/dist/docs/3.2.6/creative/catalogs"},{"title":"Catalog item schemas","href":"/dist/docs/3.2.6/creative/catalog-schemas"}]},{"group":"Building Creative Agents","pages":[{"title":"Implementing Creative Agents","href":"/dist/docs/3.2.6/creative/implementing-creative-agents"},{"title":"Creative Capabilities on Sales Agents","href":"/dist/docs/3.2.6/creative/sales-agent-creative-capabilities"},{"title":"Multi-Agent Creative Orchestration","href":"/dist/docs/3.2.6/creative/multi-agent-orchestration"},{"title":"Creative Manifests","href":"/dist/docs/3.2.6/creative/creative-manifests"},{"title":"Private assets","href":"/dist/docs/3.2.6/creative/private-assets"},{"title":"Buyer-attached inputs to build_creative","sidebarTitle":"Buyer-attached inputs","href":"/dist/docs/3.2.6/creative/buyer-attached-inputs"}]},{"group":"Formats and Assets","pages":[{"title":"Canonical Formats","href":"/dist/docs/3.2.6/creative/canonical-formats"},{"title":"Migration to Canonical Formats","href":"/dist/docs/3.2.6/creative/canonical-formats-migration"},{"title":"Creative Formats","href":"/dist/docs/3.2.6/creative/formats"},{"title":"Asset Types","href":"/dist/docs/3.2.6/creative/asset-types"},{"title":"Creative representation sets","href":"/dist/docs/3.2.6/creative/representation-sets"},{"title":"Published Post Reference Creatives","href":"/dist/docs/3.2.6/creative/published-post-reference-creatives"},{"title":"Sponsored Placement adapter contracts","href":"/dist/docs/3.2.6/creative/sponsored-placement-adapter-contracts"},{"title":"Migrating Template Format IDs","href":"/dist/docs/3.2.6/creative/template-format-ids"},{"title":"Universal Macros","href":"/dist/docs/3.2.6/creative/universal-macros"},{"title":"Tracker execution contracts","href":"/dist/docs/3.2.6/creative/tracker-execution-contracts"}]},{"group":"Channel Guides","pages":[{"title":"Video Ads","href":"/dist/docs/3.2.6/creative/channels/video"},{"title":"Connected TV","href":"/dist/docs/3.2.6/creative/channels/ctv"},{"title":"CTV Experience Profiles","href":"/dist/docs/3.2.6/creative/ctv-experiences"},{"title":"Broadcast Creative","href":"/dist/docs/3.2.6/creative/channels/broadcast"},{"title":"Display Ads","href":"/dist/docs/3.2.6/creative/channels/display"},{"title":"Audio Ads","href":"/dist/docs/3.2.6/creative/channels/audio"},{"title":"Radio creative","href":"/dist/docs/3.2.6/creative/channels/radio"},{"title":"Digital Out-of-Home","href":"/dist/docs/3.2.6/creative/channels/dooh"},{"title":"Out-of-Home (Static)","href":"/dist/docs/3.2.6/creative/channels/ooh"},{"title":"Print Creative","href":"/dist/docs/3.2.6/creative/channels/print"},{"title":"Carousel Ads","href":"/dist/docs/3.2.6/creative/channels/carousels"},{"title":"Social and Native Ads","href":"/dist/docs/3.2.6/creative/channels/social-native"}]},{"group":"Compliance","pages":[{"title":"Accessibility","href":"/dist/docs/3.2.6/creative/accessibility"},{"title":"AI provenance and disclosure","sidebarTitle":"Provenance","href":"/dist/docs/3.2.6/creative/provenance"}]},{"group":"Reference","expanded":false,"pages":[{"title":"Creative Specification","sidebarTitle":"Specification","href":"/dist/docs/3.2.6/creative/specification"},{"title":"build_creative","href":"/dist/docs/3.2.6/creative/task-reference/build_creative"},{"title":"preview_creative","href":"/dist/docs/3.2.6/creative/task-reference/preview_creative"},{"title":"preview_creative (Advanced)","href":"/dist/docs/3.2.6/creative/task-reference/preview_creative-advanced"},{"title":"list_creative_formats (deprecated)","href":"/dist/docs/3.2.6/creative/task-reference/list_creative_formats"},{"title":"list_transformers","href":"/dist/docs/3.2.6/creative/task-reference/list_transformers"},{"title":"list_creatives","href":"/dist/docs/3.2.6/creative/task-reference/list_creatives"},{"title":"sync_creatives","href":"/dist/docs/3.2.6/creative/task-reference/sync_creatives"},{"title":"get_creative_delivery","href":"/dist/docs/3.2.6/creative/task-reference/get_creative_delivery"}]}]},{"group":"Governance","expanded":false,"pages":[{"title":"Governance protocol","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/governance/overview"},{"title":"RFC process","href":"/dist/docs/3.2.6/governance/rfc-process"},{"title":"Embedded human judgment","sidebarTitle":"Embedded human judgment","href":"/dist/docs/3.2.6/governance/embedded-human-judgment"},{"title":"Sell-side governance boundaries","sidebarTitle":"Sell-side boundaries","href":"/dist/docs/3.2.6/governance/sell-side-governance"},{"title":"Policy Registry","sidebarTitle":"Policy Registry","href":"/dist/docs/3.2.6/governance/policy-registry"},{"title":"Policy Registry: Sync and versioning","sidebarTitle":"Sync and versioning","href":"/dist/docs/3.2.6/governance/policy-registry-sync"},{"title":"Policy Attribution","sidebarTitle":"Policy Attribution","href":"/dist/docs/3.2.6/governance/policy-attribution"},{"title":"Annex III \u0026 Article 22 obligations","sidebarTitle":"Annex III \u0026 Art 22","href":"/dist/docs/3.2.6/governance/annex-iii-obligations"},{"title":"Working group charter","sidebarTitle":"Working group charter","href":"/dist/docs/3.2.6/governance/working-group-charter"},{"group":"Property Governance","pages":[{"title":"Property Governance","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/governance/property/index"},{"title":"adagents.json Tech Spec","href":"/dist/docs/3.2.6/governance/property/adagents"},{"title":"Managed Network Deployment","href":"/dist/docs/3.2.6/governance/property/managed-networks"},{"title":"Understanding Authorization","href":"/dist/docs/3.2.6/governance/property/authorized-properties"},{"title":"Property Governance Specification","sidebarTitle":"Specification","href":"/dist/docs/3.2.6/governance/property/specification"},{"group":"Tasks","pages":[{"title":"Property Governance Tasks","sidebarTitle":"Task Reference","href":"/dist/docs/3.2.6/governance/property/tasks/index"},{"title":"Property List Management","href":"/dist/docs/3.2.6/governance/property/tasks/property_lists"},{"title":"validate_property_delivery","href":"/dist/docs/3.2.6/governance/property/tasks/validate_property_delivery"}]}]},{"group":"Collection Governance","pages":[{"title":"Collection Governance","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/governance/collection/index"},{"title":"Collection List Management","href":"/dist/docs/3.2.6/governance/collection/tasks/collection_lists"}]},{"group":"Content Standards","pages":[{"title":"Content Standards","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/governance/content-standards/index"},{"title":"Content Artifacts","sidebarTitle":"Artifacts","href":"/dist/docs/3.2.6/governance/content-standards/artifacts"},{"title":"Content Standards Implementation","sidebarTitle":"Implementation Guide","href":"/dist/docs/3.2.6/governance/content-standards/implementation-guide"},{"group":"Tasks","pages":[{"title":"list_content_standards","href":"/dist/docs/3.2.6/governance/content-standards/tasks/list_content_standards"},{"title":"get_content_standards","href":"/dist/docs/3.2.6/governance/content-standards/tasks/get_content_standards"},{"title":"create_content_standards","href":"/dist/docs/3.2.6/governance/content-standards/tasks/create_content_standards"},{"title":"update_content_standards","href":"/dist/docs/3.2.6/governance/content-standards/tasks/update_content_standards"},{"title":"calibrate_content","href":"/dist/docs/3.2.6/governance/content-standards/tasks/calibrate_content"},{"title":"get_media_buy_artifacts","href":"/dist/docs/3.2.6/governance/content-standards/tasks/get_media_buy_artifacts"},{"title":"validate_content_delivery","href":"/dist/docs/3.2.6/governance/content-standards/tasks/validate_content_delivery"}]}]},{"group":"Creative Governance","pages":[{"title":"Creative Governance","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/governance/creative/index"},{"title":"get_creative_features","href":"/dist/docs/3.2.6/governance/creative/get_creative_features"},{"title":"Provenance verification","sidebarTitle":"Provenance verification","href":"/dist/docs/3.2.6/governance/creative/provenance-verification"},{"title":"Policy-backed creative rejections","sidebarTitle":"Policy-backed rejections","href":"/dist/docs/3.2.6/governance/creative/policy-backed-rejections"}]},{"group":"Campaign Governance","pages":[{"title":"Campaign Governance","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/governance/campaign/index"},{"title":"Buyer and Seller Responsibilities","sidebarTitle":"Responsibilities","href":"/dist/docs/3.2.6/governance/campaign/responsibilities"},{"title":"Safety Model","sidebarTitle":"Safety Model","href":"/dist/docs/3.2.6/governance/campaign/safety-model"},{"title":"Specification","sidebarTitle":"Specification","href":"/dist/docs/3.2.6/governance/campaign/specification"},{"title":"Audit trail: internal vs shareable views","sidebarTitle":"Audit trail","href":"/dist/docs/3.2.6/governance/campaign/audit-trail"},{"group":"Tasks","pages":[{"title":"Task reference","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/governance/campaign/tasks/index"},{"title":"sync_plans","href":"/dist/docs/3.2.6/governance/campaign/tasks/sync_plans"},{"title":"report_plan_outcome","href":"/dist/docs/3.2.6/governance/campaign/tasks/report_plan_outcome"},{"title":"report_plan_adjustment","href":"/dist/docs/3.2.6/governance/campaign/tasks/report_plan_adjustment"},{"title":"check_governance","href":"/dist/docs/3.2.6/governance/campaign/tasks/check_governance"},{"title":"get_plan_audit_logs","href":"/dist/docs/3.2.6/governance/campaign/tasks/get_plan_audit_logs"}]}]}]},{"group":"Sponsored Intelligence","expanded":false,"pages":[{"title":"Sponsored Intelligence","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/sponsored-intelligence/overview"},{"title":"Monetizing AI surfaces","sidebarTitle":"Monetizing AI","href":"/dist/docs/3.2.6/sponsored-intelligence/monetizing-ai"},{"group":"Concepts","pages":[{"title":"Product spectrum","sidebarTitle":"Product spectrum","href":"/dist/docs/3.2.6/sponsored-intelligence/product-spectrum"},{"title":"Ad networks","sidebarTitle":"Ad networks","href":"/dist/docs/3.2.6/sponsored-intelligence/networks"},{"title":"End-to-end workflow","sidebarTitle":"Workflow","href":"/dist/docs/3.2.6/sponsored-intelligence/workflow"},{"title":"Measurement","sidebarTitle":"Measurement","href":"/dist/docs/3.2.6/sponsored-intelligence/measurement"}]},{"group":"SI Chat Protocol","pages":[{"title":"SI Chat Protocol","sidebarTitle":"SI Chat Protocol","href":"/dist/docs/3.2.6/sponsored-intelligence/si-chat-protocol"},{"title":"Implementing SI Agents","href":"/dist/docs/3.2.6/sponsored-intelligence/implementing-si-agents"},{"title":"Implementing SI Hosts","href":"/dist/docs/3.2.6/sponsored-intelligence/implementing-si-hosts"}]},{"group":"Reference","expanded":false,"pages":[{"title":"Sponsored Intelligence Specification","sidebarTitle":"Specification","href":"/dist/docs/3.2.6/sponsored-intelligence/specification"},{"title":"Sponsored Intelligence Tasks","sidebarTitle":"Task Reference","href":"/dist/docs/3.2.6/sponsored-intelligence/tasks/index"},{"title":"si_get_offering","href":"/dist/docs/3.2.6/sponsored-intelligence/tasks/si_get_offering"},{"title":"si_initiate_session","href":"/dist/docs/3.2.6/sponsored-intelligence/tasks/si_initiate_session"},{"title":"si_send_message","href":"/dist/docs/3.2.6/sponsored-intelligence/tasks/si_send_message"},{"title":"si_terminate_session","href":"/dist/docs/3.2.6/sponsored-intelligence/tasks/si_terminate_session"}]}]},{"group":"Brand","expanded":false,"pages":[{"title":"Brand protocol","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/brand-protocol/index"},{"title":"Brand protocol","sidebarTitle":"Key concepts","href":"/dist/docs/3.2.6/brand-protocol/key-concepts"},{"title":"Rights licensing walkthrough","sidebarTitle":"Rights licensing","href":"/dist/docs/3.2.6/brand-protocol/walkthrough-rights-licensing"},{"title":"For advertisers","href":"/dist/docs/3.2.6/brand-protocol/for-advertisers"},{"title":"For talent and rights holders","href":"/dist/docs/3.2.6/brand-protocol/for-rights-holders"},{"title":"Seller setup","sidebarTitle":"For sellers","href":"/dist/docs/3.2.6/brand-protocol/seller-setup"},{"title":"brand.json Specification","href":"/dist/docs/3.2.6/brand-protocol/brand-json"},{"title":"Building a brand agent","href":"/dist/docs/3.2.6/brand-protocol/building-a-brand-agent"},{"title":"UI guidance for rejected claims","href":"/dist/docs/3.2.6/brand-protocol/ui-guidance"},{"group":"Tasks","pages":[{"title":"search_brands","href":"/dist/docs/3.2.6/brand-protocol/tasks/search_brands"},{"title":"get_brand_identity","href":"/dist/docs/3.2.6/brand-protocol/tasks/get_brand_identity"},{"title":"verify_brand_claim","href":"/dist/docs/3.2.6/brand-protocol/tasks/verify_brand_claim"},{"title":"verify_brand_claims","href":"/dist/docs/3.2.6/brand-protocol/tasks/verify_brand_claims"},{"title":"get_rights","href":"/dist/docs/3.2.6/brand-protocol/tasks/get_rights"},{"title":"acquire_rights","href":"/dist/docs/3.2.6/brand-protocol/tasks/acquire_rights"},{"title":"update_rights","href":"/dist/docs/3.2.6/brand-protocol/tasks/update_rights"}]}]},{"group":"Signals","expanded":false,"pages":[{"title":"Signals protocol","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/signals/overview"},{"title":"Key concepts","href":"/dist/docs/3.2.6/signals/key-concepts"},{"title":"Signals ecosystem","href":"/dist/docs/3.2.6/signals/ecosystem"},{"title":"Data Provider Guide","sidebarTitle":"Data Providers","href":"/dist/docs/3.2.6/signals/data-providers"},{"group":"Reference","expanded":false,"pages":[{"title":"Signals Specification","sidebarTitle":"Specification","href":"/dist/docs/3.2.6/signals/specification"},{"title":"get_signals","href":"/dist/docs/3.2.6/signals/tasks/get_signals"},{"title":"activate_signal","href":"/dist/docs/3.2.6/signals/tasks/activate_signal"}]}]},{"group":"Trusted Match","expanded":false,"pages":[{"title":"Trusted Match Protocol","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/trusted-match/index"},{"title":"How demand reaches AI assistants","sidebarTitle":"AI mediation","href":"/dist/docs/3.2.6/trusted-match/ai-mediation"},{"title":"TMP for Buyer Agents","sidebarTitle":"Buyer Guide","href":"/dist/docs/3.2.6/trusted-match/buyer-guide"},{"title":"The Execution Gap","href":"/dist/docs/3.2.6/trusted-match/execution-gap"},{"title":"Context Match and Identity Match","href":"/dist/docs/3.2.6/trusted-match/context-and-identity"},{"title":"TMP Specification","href":"/dist/docs/3.2.6/trusted-match/specification"},{"title":"The TMP Router","href":"/dist/docs/3.2.6/trusted-match/router-architecture"},{"title":"Identity Match Frequency-Cap Data Flow","sidebarTitle":"Frequency-Cap Data Flow","href":"/dist/docs/3.2.6/trusted-match/identity-match-implementation"},{"title":"Impression Tracker Implementation Reference","sidebarTitle":"Impression Tracker Reference","href":"/dist/docs/3.2.6/trusted-match/impression-tracker-implementation"},{"title":"Privacy Architecture","href":"/dist/docs/3.2.6/trusted-match/privacy-architecture"},{"title":"Data Protection Roles","href":"/dist/docs/3.2.6/trusted-match/data-protection-roles"},{"title":"Migrating from AXE to TMP","sidebarTitle":"AXE Migration","href":"/dist/docs/3.2.6/trusted-match/migration-from-axe"},{"group":"Surface Guides","pages":[{"title":"TMP for Web Publishers","href":"/dist/docs/3.2.6/trusted-match/surfaces/web"},{"title":"TMP for CTV","href":"/dist/docs/3.2.6/trusted-match/surfaces/ctv"},{"title":"TMP for Mobile Apps","href":"/dist/docs/3.2.6/trusted-match/surfaces/mobile"},{"title":"TMP for Retail Media","href":"/dist/docs/3.2.6/trusted-match/surfaces/retail-media"},{"title":"TMP for AI Assistants","href":"/dist/docs/3.2.6/trusted-match/surfaces/ai-assistants"}]}]}]},{"group":"Using AAO","pages":[{"title":"Connect Addie to your AI client","href":"/dist/docs/3.2.6/aao/connect-addie"},{"title":"AAO for Members","href":"/dist/docs/3.2.6/aao/users"},{"title":"AAO for Org Admins","href":"/dist/docs/3.2.6/aao/org-admins"},{"title":"Addie Tool Reference","href":"/dist/docs/3.2.6/aao/addie-tools"},{"title":"AAO Directory API — Agent ↔ Publisher Inverse Lookup","href":"/dist/docs/3.2.6/aao/directory-api"}]},{"group":"FAQ","pages":[{"title":"Frequently asked questions","sidebarTitle":"FAQ","href":"/dist/docs/3.2.6/faq"}]},{"group":"Trust \u0026 Security","expanded":false,"pages":[{"title":"Trust \u0026 Security","sidebarTitle":"Trust \u0026 Security","href":"/dist/docs/3.2.6/trust"},{"title":"Seller verification","sidebarTitle":"Seller verification","href":"/dist/docs/3.2.6/verification/overview"},{"title":"AI Disclosure","href":"/dist/docs/3.2.6/ai-disclosure"},{"title":"Privacy Considerations","sidebarTitle":"Privacy Considerations","href":"/dist/docs/3.2.6/reference/privacy-considerations"},{"title":"Protocol Boundaries and Known Limitations","sidebarTitle":"Boundaries \u0026 Limitations","href":"/dist/docs/3.2.6/reference/known-limitations"}]},{"group":"Reference","expanded":false,"pages":[{"group":"Registry API","pages":[{"title":"Registry API","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/registry/index"},{"title":"Registering an agent","sidebarTitle":"Registering an agent","href":"/dist/docs/3.2.6/registry/registering-an-agent"},{"title":"Maintaining your agent","sidebarTitle":"Maintaining your agent","href":"/dist/docs/3.2.6/registry/maintaining-your-agent"},{"group":"Search","pages":[{"title":"API discovery","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api","href":"/dist/docs/3.2.6/registry/api-reference/search/api-discovery"},{"title":"Search","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/search","href":"/dist/docs/3.2.6/registry/api-reference/search/search"},{"title":"Manifest reference lookup","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/manifest-refs/lookup","href":"/dist/docs/3.2.6/registry/api-reference/search/manifest-reference-lookup"}]},{"group":"Brand Resolution","pages":[{"title":"Resolve brand","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/brands/resolve","href":"/dist/docs/3.2.6/registry/api-reference/brand-resolution/resolve-brand"},{"title":"Bulk resolve brands","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/brands/resolve/bulk","href":"/dist/docs/3.2.6/registry/api-reference/brand-resolution/bulk-resolve-brands"},{"title":"Get brand.json","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/brands/brand-json","href":"/dist/docs/3.2.6/registry/api-reference/brand-resolution/get-brandjson"},{"title":"Save brand","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/brands/save","href":"/dist/docs/3.2.6/registry/api-reference/brand-resolution/save-brand"},{"title":"List brands","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/brands/registry","href":"/dist/docs/3.2.6/registry/api-reference/brand-resolution/list-brands"},{"title":"Brand activity history","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/brands/history","href":"/dist/docs/3.2.6/registry/api-reference/brand-resolution/brand-activity-history"},{"title":"Enrich brand","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/brands/enrich","href":"/dist/docs/3.2.6/registry/api-reference/brand-resolution/enrich-brand"},{"title":"Find brands by name","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/brands/find","href":"/dist/docs/3.2.6/registry/api-reference/brand-resolution/find-brands-by-name"},{"title":"Set up a hosted brand.json","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/brands/setup-my-brand","href":"/dist/docs/3.2.6/registry/api-reference/brand-resolution/set-up-a-hosted-brandjson"}]},{"group":"Property Resolution","pages":[{"title":"Property activity history","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/properties/history","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/property-activity-history"},{"title":"Resolve property","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/properties/resolve","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/resolve-property"},{"title":"Bulk resolve properties","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/properties/resolve/bulk","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/bulk-resolve-properties"},{"title":"List properties","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/properties/registry","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/list-properties"},{"title":"Validate adagents.json","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/properties/validate","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/validate-adagentsjson"},{"title":"Save property","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/properties/save","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/save-property"},{"title":"Claim a domain for bind-on-verify","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/properties/hosted/{domain}/claim","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/claim-a-domain-for-bind-on-verify"},{"title":"Verify AAO-hosted publisher origin","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/properties/hosted/{domain}/verify-origin","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/verify-aao-hosted-publisher-origin"},{"title":"Check property list","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/properties/check","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/check-property-list"},{"title":"Get property check report","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/properties/check/{reportId}","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/get-property-check-report"},{"title":"Bulk property identifier check","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/properties/check/bulk","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/bulk-property-identifier-check"},{"title":"Get bulk check report","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/properties/check/bulk/{reportId}","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/get-bulk-check-report"}]},{"group":"Agent Discovery","pages":[{"title":"List agents","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents","href":"/dist/docs/3.2.6/registry/api-reference/agent-discovery/list-agents"},{"title":"List publishers","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/publishers","href":"/dist/docs/3.2.6/registry/api-reference/agent-discovery/list-publishers"},{"title":"Registry statistics","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/stats","href":"/dist/docs/3.2.6/registry/api-reference/agent-discovery/registry-statistics"},{"title":"Search agent inventory profiles","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/search","href":"/dist/docs/3.2.6/registry/api-reference/agent-discovery/search-agent-inventory-profiles"},{"title":"Request domain re-crawl","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/crawl-request","href":"/dist/docs/3.2.6/registry/api-reference/agent-discovery/request-domain-re-crawl"},{"title":"Get publisher crawl request status","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/crawl-request/{crawlRequestId}","href":"/dist/docs/3.2.6/registry/api-reference/agent-discovery/get-publisher-crawl-request-status"},{"title":"Request manager fan-out re-validation","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/manager-revalidation-request","href":"/dist/docs/3.2.6/registry/api-reference/agent-discovery/request-manager-fan-out-re-validation"}]},{"group":"Authorization Lookups","pages":[{"title":"Domain lookup (deprecated)","deprecated":true,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/lookup/domain/{domain}","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/domain-lookup-deprecated"},{"title":"Property identifier lookup","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/lookup/property","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/property-identifier-lookup"},{"title":"Agent domain lookup","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/lookup/agent/{agentUrl}/domains","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/agent-domain-lookup"},{"title":"AAO directory inverse-lookup","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/v1/agents/{encodedUrl}/publishers","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/aao-directory-inverse-lookup"},{"title":"AAO directory inverse-lookup","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /v1/agents/{encodedUrl}/publishers","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/aao-directory-inverse-lookup-1"},{"title":"Operator lookup","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/operator","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/operator-lookup"},{"title":"Publisher lookup","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/publisher","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/publisher-lookup"},{"title":"Revalidate publisher adagents.json","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/publisher/{domain}/adagents/revalidate","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/revalidate-publisher-adagentsjson"},{"title":"Per-agent authorization rollup","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/publisher/authorization","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/per-agent-authorization-rollup"},{"title":"Validate product property coverage","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/validate/product-authorization","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/validate-product-property-coverage"},{"title":"Verify an owner-sold supply path","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/verify/supply-path","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/verify-an-owner-sold-supply-path"},{"title":"Expand product identifiers","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/expand/product-identifiers","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/expand-product-identifiers"},{"title":"Property authorization check","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/validate/property-authorization","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/property-authorization-check"}]},{"group":"Brand Discovery","pages":[{"title":"Force a synchronous brand.json crawl","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/brand/{domain}/force-crawl","href":"/dist/docs/3.2.6/registry/api-reference/brand-discovery/force-a-synchronous-brandjson-crawl"},{"title":"Request brand.json re-crawl","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/brand-crawl-request","href":"/dist/docs/3.2.6/registry/api-reference/brand-discovery/request-brandjson-re-crawl"}]},{"group":"Validation Tools","pages":[{"title":"Validate adagents.json","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/adagents/validate","href":"/dist/docs/3.2.6/registry/api-reference/validation-tools/validate-adagentsjson"},{"title":"Generate adagents.json","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/adagents/create","href":"/dist/docs/3.2.6/registry/api-reference/validation-tools/generate-adagentsjson"}]},{"group":"Community Mirrors","pages":[{"title":"List community mirror proposals","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/mirror-proposals","href":"/dist/docs/3.2.6/registry/api-reference/community-mirrors/list-community-mirror-proposals"},{"title":"Get community mirror proposal","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/mirror-proposals/{id}","href":"/dist/docs/3.2.6/registry/api-reference/community-mirrors/get-community-mirror-proposal"},{"title":"Approve community mirror proposal","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/mirror-proposals/{id}/approve","href":"/dist/docs/3.2.6/registry/api-reference/community-mirrors/approve-community-mirror-proposal"},{"title":"Reject community mirror proposal","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/mirror-proposals/{id}/reject","href":"/dist/docs/3.2.6/registry/api-reference/community-mirrors/reject-community-mirror-proposal"},{"title":"List community mirrors","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/mirrors","href":"/dist/docs/3.2.6/registry/api-reference/community-mirrors/list-community-mirrors"},{"title":"Get community mirror","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/mirrors/{platform}","href":"/dist/docs/3.2.6/registry/api-reference/community-mirrors/get-community-mirror"},{"title":"Publish or propose community mirror","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml put /api/registry/mirrors/{platform}","href":"/dist/docs/3.2.6/registry/api-reference/community-mirrors/publish-or-propose-community-mirror"},{"title":"Delete community mirror","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml delete /api/registry/mirrors/{platform}","href":"/dist/docs/3.2.6/registry/api-reference/community-mirrors/delete-community-mirror"}]},{"group":"Agent Probing","pages":[{"title":"Discover agent","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/public/discover-agent","href":"/dist/docs/3.2.6/registry/api-reference/agent-probing/discover-agent"},{"title":"Get creative-agent format capabilities","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/public/agent-formats","href":"/dist/docs/3.2.6/registry/api-reference/agent-probing/get-creative-agent-format-capabilities"},{"title":"Get agent publisher properties","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/public/agent-publishers","href":"/dist/docs/3.2.6/registry/api-reference/agent-probing/get-agent-publisher-properties"},{"title":"Get agent products","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/public/agent-products","href":"/dist/docs/3.2.6/registry/api-reference/agent-probing/get-agent-products"},{"title":"Validate publisher","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/public/validate-publisher","href":"/dist/docs/3.2.6/registry/api-reference/agent-probing/validate-publisher"}]},{"group":"Policy Registry","pages":[{"title":"List policies","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/policies/registry","href":"/dist/docs/3.2.6/registry/api-reference/policy-registry/list-policies"},{"title":"Resolve policy","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/policies/resolve","href":"/dist/docs/3.2.6/registry/api-reference/policy-registry/resolve-policy"},{"title":"Bulk resolve policies","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/policies/resolve/bulk","href":"/dist/docs/3.2.6/registry/api-reference/policy-registry/bulk-resolve-policies"},{"title":"Policy revision history","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/policies/history","href":"/dist/docs/3.2.6/registry/api-reference/policy-registry/policy-revision-history"},{"title":"Save policy","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/policies/save","href":"/dist/docs/3.2.6/registry/api-reference/policy-registry/save-policy"}]},{"group":"Change Feed","pages":[{"title":"Registry change feed","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/feed","href":"/dist/docs/3.2.6/registry/api-reference/change-feed/registry-change-feed"},{"title":"Registry change feed stream","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/feed/stream","href":"/dist/docs/3.2.6/registry/api-reference/change-feed/registry-change-feed-stream"},{"title":"Per-agent authorization pull","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/authorizations","href":"/dist/docs/3.2.6/registry/api-reference/change-feed/per-agent-authorization-pull"},{"title":"Bootstrap snapshot for inline verifiers","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/authorizations/snapshot","href":"/dist/docs/3.2.6/registry/api-reference/change-feed/bootstrap-snapshot-for-inline-verifiers"}]},{"group":"Agent Compliance","pages":[{"title":"Get agent compliance detail","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/compliance","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-agent-compliance-detail"},{"title":"Select an exact badge grading profile","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/grading-profile","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/select-an-exact-badge-grading-profile"},{"title":"AAO public key set","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/.well-known/jwks.json","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/aao-public-key-set"},{"title":"Get agent AgenticAdvertising.org Verified status","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/verification","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-agent-agenticadvertisingorg-verified-status"},{"title":"Get agent verification badge SVG","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/badge/{role}.svg","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-agent-verification-badge-svg"},{"title":"Get embeddable badge code","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/badge/{role}/embed","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-embeddable-badge-code"},{"title":"Get version-pinned agent verification badge SVG","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/badge/{role}/{version}.svg","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-version-pinned-agent-verification-badge-svg"},{"title":"Get version-pinned embeddable badge code","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/badge/{role}/{version}/embed","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-version-pinned-embeddable-badge-code"},{"title":"Get agent storyboard status","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/storyboard-status","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-agent-storyboard-status"},{"title":"Bulk storyboard status","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/agents/storyboard-status","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/bulk-storyboard-status"},{"title":"Get agent compliance history","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/compliance/history","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-agent-compliance-history"},{"title":"Update agent lifecycle stage","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/lifecycle","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/update-agent-lifecycle-stage"},{"title":"Update compliance opt-out","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/compliance/opt-out","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/update-compliance-opt-out"},{"title":"Get monitoring settings","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/monitoring/settings","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-monitoring-settings"},{"title":"Pause or resume monitoring","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/monitoring/pause","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/pause-or-resume-monitoring"},{"title":"Update monitoring interval","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/monitoring/interval","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/update-monitoring-interval"},{"title":"Requeue agent for compliance heartbeat","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/agents/{encodedUrl}/monitoring/requeue","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/requeue-agent-for-compliance-heartbeat"},{"title":"Get per-step diagnostics for a compliance run","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/compliance/diagnostics","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-per-step-diagnostics-for-a-compliance-run"},{"title":"Get outbound request log","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/monitoring/requests","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-outbound-request-log"},{"title":"Refresh agent snapshot","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/agents/{encodedUrl}/refresh","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/refresh-agent-snapshot"},{"title":"Get agent refresh status","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/refreshes/{operationId}","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-agent-refresh-status"},{"title":"Get agent auth status","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/auth-status","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-agent-auth-status"},{"title":"Connect agent credentials","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/connect","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/connect-agent-credentials"},{"title":"Save OAuth 2.0 client-credentials for an agent","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/oauth-client-credentials","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/save-oauth-20-client-credentials-for-an-agent"},{"title":"Dry-run the saved OAuth 2.0 client-credentials config","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/agents/{encodedUrl}/oauth-client-credentials/test","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/dry-run-the-saved-oauth-20-client-credentials-config"},{"title":"Get applicable storyboards for agent","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/applicable-storyboards","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-applicable-storyboards-for-agent"},{"title":"List storyboards","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/storyboards","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/list-storyboards"},{"title":"Get storyboard detail","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/storyboards/{id}","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-storyboard-detail"},{"title":"Run a single storyboard step","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/agents/{encodedUrl}/storyboard/{storyboardId}/step/{stepId}","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/run-a-single-storyboard-step"},{"title":"Get first step preview","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/storyboards/{storyboardId}/first-step","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-first-step-preview"},{"title":"Run full storyboard evaluation","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/agents/{encodedUrl}/storyboard/{storyboardId}/run","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/run-full-storyboard-evaluation"},{"title":"Compare storyboard against reference agent","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/agents/{encodedUrl}/storyboard/{storyboardId}/compare","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/compare-storyboard-against-reference-agent"}]},{"group":"Member Agents","pages":[{"title":"List my registered agents","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/me/agents","href":"/dist/docs/3.2.6/registry/api-reference/member-agents/list-my-registered-agents"},{"title":"Register an agent","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/me/agents","href":"/dist/docs/3.2.6/registry/api-reference/member-agents/register-an-agent"},{"title":"Remove an agent","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml delete /api/me/agents/{url}","href":"/dist/docs/3.2.6/registry/api-reference/member-agents/remove-an-agent"},{"title":"Update an agent","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml patch /api/me/agents/{url}","href":"/dist/docs/3.2.6/registry/api-reference/member-agents/update-an-agent"}]},{"group":"Onboarding","pages":[{"title":"Create or adopt my organization","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/organizations","href":"/dist/docs/3.2.6/registry/api-reference/onboarding/create-or-adopt-my-organization"}]},{"group":"Property Catalog","pages":[{"title":"Resolve identifiers to property_rids (and contribute them)","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/resolve","href":"/dist/docs/3.2.6/registry/api-reference/property-catalog/resolve-identifiers-to-property_rids-and-contribute-them"},{"title":"Dispute a catalog fact","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/catalog/disputes","href":"/dist/docs/3.2.6/registry/api-reference/property-catalog/dispute-a-catalog-fact"},{"title":"Get a catalog dispute","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/catalog/disputes/{id}","href":"/dist/docs/3.2.6/registry/api-reference/property-catalog/get-a-catalog-dispute"},{"title":"Browse the property catalog","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/catalog","href":"/dist/docs/3.2.6/registry/api-reference/property-catalog/browse-the-property-catalog"},{"title":"Sync catalog changes since a watermark","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/catalog/sync","href":"/dist/docs/3.2.6/registry/api-reference/property-catalog/sync-catalog-changes-since-a-watermark"}]}]},{"title":"GMSF Reference","href":"/dist/docs/3.2.6/reference/gmsf-reference"},{"title":"Media Channel Taxonomy","href":"/dist/docs/3.2.6/reference/media-channel-taxonomy"},{"title":"Measurement Taxonomy","sidebarTitle":"Measurement Taxonomy","href":"/dist/docs/3.2.6/measurement/taxonomy"},{"title":"Roadmap","href":"/dist/docs/3.2.6/reference/roadmap"},{"title":"Versions \u0026 Compatibility","sidebarTitle":"Versions","href":"/dist/docs/3.2.6/reference/versions"},{"title":"Versioning \u0026 Governance","href":"/dist/docs/3.2.6/reference/versioning"},{"title":"Specification lifecycle","sidebarTitle":"Specification lifecycle","href":"/dist/docs/3.2.6/reference/specification-lifecycle"},{"title":"URL Canonicalization","href":"/dist/docs/3.2.6/reference/url-canonicalization"},{"title":"Verifying protocol tarballs","href":"/dist/docs/3.2.6/reference/verifying-protocol-tarballs"},{"title":"Reference Test Vectors","sidebarTitle":"Reference test vectors","href":"/dist/docs/3.2.6/reference/test-vectors/index"},{"title":"Experimental Status","sidebarTitle":"Experimental status","href":"/dist/docs/3.2.6/reference/experimental-status"},{"title":"Schema Extensions","sidebarTitle":"Schema Extensions","href":"/dist/docs/3.2.6/reference/schema-extensions"},{"title":"v2 sunset","sidebarTitle":"v2 sunset","href":"/dist/docs/3.2.6/reference/v2-sunset"},{"title":"Release Notes","href":"/dist/docs/3.2.6/reference/release-notes"},{"title":"Changelog","href":"/dist/docs/3.2.6/reference/changelog"},{"title":"Implementor FAQ","href":"/dist/docs/3.2.6/reference/implementor-faq"},{"title":"Glossary","href":"/dist/docs/3.2.6/reference/glossary"},{"title":"Working Group","href":"/dist/docs/3.2.6/community/working-group"},{"title":"Joining the Community Slack","href":"/dist/docs/3.2.6/community/joining-slack"}]},{"group":"Certification","expanded":false,"pages":[{"title":"AdCP certification program","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/learning/overview"},{"title":"Instructional design framework","sidebarTitle":"How we teach","href":"/dist/docs/3.2.6/learning/instructional-design"},{"title":"Failure-mode competency scope","sidebarTitle":"Failure modes","href":"/dist/docs/3.2.6/learning/failure-mode-scope"},{"group":"Basics (free)","pages":[{"title":"A1: Why AdCP","sidebarTitle":"A1: Why AdCP","href":"/dist/docs/3.2.6/learning/foundations/a1-agentic-advertising"},{"title":"A2: Your first media buy","sidebarTitle":"A2: Your first media buy","href":"/dist/docs/3.2.6/learning/foundations/a2-protocol-architecture"},{"title":"A2B: Testing your first agent call","sidebarTitle":"A2B: Testing your first agent call","href":"/dist/docs/3.2.6/learning/foundations/a2b-testing-your-first-agent"},{"title":"A3: The AdCP landscape","sidebarTitle":"A3: The AdCP landscape","href":"/dist/docs/3.2.6/learning/foundations/a3-ecosystem-governance"}]},{"group":"For decision-makers","pages":[{"title":"Decision-Makers track","sidebarTitle":"Decision-makers","href":"/dist/docs/3.2.6/learning/decision-makers/overview"},{"title":"L1: Agentic advertising and the reversed data flow","sidebarTitle":"L1: Agentic advertising","href":"/dist/docs/3.2.6/learning/decision-makers/l1-agentic-advertising"},{"title":"L2: Your data, brand, and governance as the control surface","sidebarTitle":"L2: Data, brand, governance","href":"/dist/docs/3.2.6/learning/decision-makers/l2-data-brand-governance"},{"title":"L3: Deciding and leading","sidebarTitle":"L3: Deciding and leading","href":"/dist/docs/3.2.6/learning/decision-makers/l3-deciding-and-leading"},{"title":"How to explain agentic advertising","sidebarTitle":"Explaining it to others","href":"/dist/docs/3.2.6/learning/decision-makers/explaining-agentic-advertising"}]},{"group":"Role tracks","pages":[{"title":"Publisher / seller track","sidebarTitle":"Publisher track","href":"/dist/docs/3.2.6/learning/tracks/publisher"},{"title":"Buyer / brand track","sidebarTitle":"Buyer track","href":"/dist/docs/3.2.6/learning/tracks/buyer"},{"title":"Platform / intermediary track","sidebarTitle":"Platform track","href":"/dist/docs/3.2.6/learning/tracks/platform"}]},{"group":"Specialist modules","pages":[{"title":"S1: Media buy mastery","sidebarTitle":"S1: Media buy","href":"/dist/docs/3.2.6/learning/specialist/media-buy"},{"title":"S2: Creative mastery","sidebarTitle":"S2: Creative","href":"/dist/docs/3.2.6/learning/specialist/creative"},{"title":"S3: Signals and audiences","sidebarTitle":"S3: Signals","href":"/dist/docs/3.2.6/learning/specialist/signals"},{"title":"S4: Governance","sidebarTitle":"S4: Governance","href":"/dist/docs/3.2.6/learning/specialist/governance"},{"title":"S5: Sponsored Intelligence","sidebarTitle":"S5: Sponsored Intelligence","href":"/dist/docs/3.2.6/learning/specialist/sponsored-intelligence"},{"title":"S6: Security","sidebarTitle":"S6: Security","href":"/dist/docs/3.2.6/learning/specialist/security"},{"title":"S7: Brand identity and verification","sidebarTitle":"S7: Brand identity","href":"/dist/docs/3.2.6/learning/specialist/brand"}]},{"group":"Supplements","expanded":false,"pages":[{"title":"Buyer briefs and discovery request shape","sidebarTitle":"Buyer briefs","href":"/dist/docs/3.2.6/learning/supplements/buyer-briefs-and-get-products"},{"title":"Governance protocol by role","sidebarTitle":"Governance by role","href":"/dist/docs/3.2.6/learning/supplements/governance-protocol-by-role"},{"title":"Creative agent workflows","sidebarTitle":"Creative workflows","href":"/dist/docs/3.2.6/learning/supplements/creative-agent-workflows"},{"title":"Lab: reconcile a shared account","sidebarTitle":"Shared-account changes","href":"/dist/docs/3.2.6/learning/shared-account-change-feed"}]},{"group":"Policies","expanded":false,"pages":[{"title":"Nondiscrimination policy","sidebarTitle":"Nondiscrimination","href":"/dist/docs/3.2.6/learning/policies/nondiscrimination"},{"title":"Learner records and privacy","sidebarTitle":"Learner records","href":"/dist/docs/3.2.6/learning/policies/learner-records"},{"title":"Recertification and protocol-change updates","sidebarTitle":"Recertification","href":"/dist/docs/3.2.6/learning/policies/recertification"},{"title":"Complaints and grievances","sidebarTitle":"Complaints","href":"/dist/docs/3.2.6/learning/policies/complaints"},{"title":"Conflict of interest","sidebarTitle":"Conflict of interest","href":"/dist/docs/3.2.6/learning/policies/conflict-of-interest"},{"title":"Intellectual property","sidebarTitle":"Intellectual property","href":"/dist/docs/3.2.6/learning/policies/intellectual-property"},{"title":"Personnel qualifications","sidebarTitle":"Personnel qualifications","href":"/dist/docs/3.2.6/learning/policies/personnel-qualifications"},{"title":"Refund and cancellation","sidebarTitle":"Refund","href":"/dist/docs/3.2.6/learning/policies/refund"}]}]}]},{"version":"3.3-beta","tag":"Latest","pages":[{"title":"3.3-beta","href":"/dist/docs/3.3.0-beta.0/media-buy/reporting-core-implementation-guide"}]},{"version":"3.1","pages":[{"title":"3.1","href":"/dist/docs/3.1.27/media-buy"}]},{"version":"3.0","pages":[{"title":"3.0","href":"/dist/docs/3.0.28/media-buy"}]},{"version":"2.5 (archived)","pages":[{"title":"2.5 (archived)","href":"/dist/docs/2.5.3/intro"}]}]},"title":"AdCP — Reliable Reporting with reporting.core","buildId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","deploymentId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","dynamics":["10e4515597"],"chunks":["BannerMarkdown-DblVYOPe.js","dist-BnkC_6oA.js","lib--scc4DXi.js","lib-B8HbPgcC.js","clsx-CCOYKgaU.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js"]}