WhenDocumentation Index
Fetch the complete documentation index at: https://docs.adcontextprotocol.org/llms.txt
Use this file to discover all available pages before exploring further.
verify_brand_claim returns disputed or not_ours, the rejection is authoritative β a brand has standing to refuse association unilaterally. But the signed answer travels alone; the consumer surface that renders it owes the humans on both sides a sane presentation.
This page is non-normative. It collects conventions for the consumer side β DSPs, portfolio explorers, creative-clearance UIs, brand-safety pipelines β and for the leaf publisher whose claim was rejected.
Rendering rejected claims
The rejected response carries astatus (disputed or not_ours) and usually a context_note written by the brand-agent. The note is intended for human eyes; surface it.
Attribution language
Always attribute the rejection to the rejecting brand. A signednot_ours from Nikeβs brand-agent says Nike says this is not theirs β it does NOT say this publisher is fake. The distinction matters legally; see Legal exposure below.
| Donβt render | Render instead |
|---|---|
| βfake-nike-store.com is fraudulent" | "Nike, Inc. does not recognize fake-nike-store.com as one of its properties" |
| "This subsidiary claim is invalid" | "Nike, Inc. has rejected this brandβs subsidiary claim" |
| "Trademark not owned" | "Brand X disputes the claim that this mark is theirs in this jurisdictionβ |
DSP inventory shopping
When a DSP buyer agent checks a property claim before bidding and getsnot_ours or disputed:
- Exclude the property from the buy by default. A rejected property claim means the publisherβs house attribution is in question β bid risk is elevated regardless of the underlying inventory quality.
- Surface the rejection inline in the inventory row, not in a separate audit log. The buyer needs the signal at decision time.
- Show the
context_noteverbatim as the brandβs explanation. Donβt paraphrase β the brand wrote it deliberately. - Offer the buyer a manual-override path for cases where the property is legitimately operated under a different relationship the buyer has separately verified.
Portfolio explorer
A portfolio explorer (the AAO registry, a brand-safety vendorβs lookup tool) renders brand relationships. When a relationship edge has been rejected at the agent layer:- Donβt show the edge as if it exists with a warning icon. Show it as contested β a distinct visual state from verified, unverified-pending-reciprocation, and missing.
- Render both sides of the rejected edge. βBrand X claims subsidiary-of Brand Y. Brand Y has rejected this claim.β
- Timestamp the rejection. Brands change positions; a 2-year-old rejection of what is now a real acquisition shouldnβt dominate the UI.
- Link the leaf to its update path (see Recovery paths below).
Creative-clearance UI
Creative-clearance pipelines callverify_brand_claim with claim_type: "trademark" to confirm a generated creative isnβt trespassing on a mark. When the response is disputed or not_ours:
- Block the creative from publish by default. The mark is contested or denied; promoting the creative invites takedown.
- Render the disputing brandβs
context_noteso the creative reviewer can decide whether to escalate to legal. - Donβt auto-retry with a different mark variant β the rejection is jurisdictional and a near-miss may produce the same result.
Brand-safety pipeline
Brand-safety vendors aggregateverify_brand_claim signals across the supply chain. When a property is rejected by its claimed house:
- Demote the property in safety scoring but donβt silently zero it out β the publisher may have legitimate independent inventory.
- Surface the rejection in the safety report with full attribution: βBrand X rejected this siteβs affiliation claim on $DATE.β Buyers reading the report need to know who made the call.
- Recompute on a schedule matching the agentβs
Cache-Control: max-age. Donβt pin the rejection state forever β the underlying status can transition.
Recovery paths for the rejected leaf
The leaf publisher whosehouse_domain (or properties[], or trademarks[]) claim was rejected has no protocol-level recourse beyond updating or removing the claim. There is no βappealβ task in the brand protocol. This is by design β a brand has standing to refuse association without a counter-process.
But a consumer surface that lands on a rejected leaf SHOULD give that leaf operator a clear next-step UI. Otherwise the publisher sees their site demoted with no explanation.
Surface the rejection to the leaf
If the consumer surface knows itβs looking at the leaf (e.g., the leaf logged into a portfolio explorer or DSP self-service portal):What the leaf cannot do
- There is no protocol-defined challenge mechanism. The leaf cannot βforceβ reconsideration through AdCP; that is an out-of-band business conversation.
- A leaf claiming
house_domain: Aagainst Aβs published rejection does NOT establish the relationship. Consumers will continue to treat the leaf as standalone. - Re-asserting via different surfaces (a new brand-agent on a new subdomain) doesnβt help β the consumer trust gate is domain control + house-side reciprocation, not number of assertions.
Audit trail and appeal-process notes
Out-of-spec but worth documenting: keep a record of rejections so a brand or publisher can see the history.What to record per rejected response
- Timestamp of the response.
- Caller identity that initiated the verify call (your own user, or the upstream service).
- Full signed envelope of the brand-agentβs response β signature included, for downstream attestation.
status,context_note, and theclaimpayload that triggered it.- Cache validity window (
Cache-Control: max-age) so you know when the record could be stale.
Appeal-process surface
If your platform supports an appeal flow (a vendor-mediated dispute between leaf and house), keep it OUT of the protocol layer and IN your platformβs relationship-management surface. The protocolβs job is to convey the brandβs authoritative answer; your platformβs job is to broker the business conversation if there is one.Legal exposure
Broadcasting one brandβs rejection of another party carries defamation risk. Two considerations:Attribute, donβt editorialize
Render rejections as the brandβs first-person statement, attributed to the brand:- Good: βNike, Inc. has stated that fake-nike-store.com is not one of its properties.β
- Bad: βfake-nike-store.com is a fraudulent Nike imitator.β
The consumer surface is responsible, not AdCP
AdCP delivers a signed answer from one party to another. The consumer surface β the UI that renders that answer to a third party β owns the editorial decisions about how to present it. AdCP does not pre-litigate defamation; render with care. Specifically:- The rejecting brand owns the
context_notetext. If a brand writes βfake-nike-store.com is a scam,β thatβs the brandβs statement and the brandβs exposure. Your surface can render it verbatim or summarize it more neutrally; both are reasonable depending on your audience. - Your platform owns any text outside the
context_note. Headlines, severity labels, badges (βVERIFIED FRAUDβ) are your editorial choices and your exposure. - Status-icon design carries weight. A red X next to a publisherβs name reads differently than a yellow βhouse affiliation contestedβ badge. Choose the visual register that matches the underlying signal.
When in doubt, attribute and link
The lowest-risk pattern is to attribute the statement to the brand and link to the signed source:Related
- verify_brand_claim β The task this guidance applies to
- Building a brand agent β Agent-side implementation, including the public/authorized split and signing setup
- brand.json Β§ Agent-augmented verification β The asymmetric trust model that makes rejections authoritative