Brand Agent

A brand agent is the AdCP agent that answers questions about a brand identity and licenses its rights. In AdCP 3.1.13 it is declared as an agents[] entry with type "brand" in brand.json. AAMP has no equivalent.

A brand agent is the AdCP agent that answers questions about a brand: who owns it, what it looks like, and whose likeness or voice may be generated on its behalf. AdCP’s architecture module describes the role as: “Manages brand identity and guidelines via brand.json”.

Four different things go by the name. This entry covers the first.

SenseWhat it isWhere it is specified
Brand identity agentAnswers identity questions about a brand and licenses its rightsAdCP brand.json, as an agents[] entry with type: "brand"
Sponsored Intelligence brand agentSits inside an AI assistant and talks to a userAdCP’s Sponsored Intelligence tasks, registered separately from the identity operations
Buy-side brand agentExecutes media buying on the brand’s behalfScope3’s published taxonomy; type: "buying" in the same AdCP enum
Branded assistantAn assistant with a company logo in the chat windowNothing

The term is not in AdCP’s own glossary, which defines Agent, Sales Agent and Signal Agent, and uses “brand agent” only inside other terms’ definitions.

What a brand agent answers

Creative agents are the main callers, and they call before generation rather than during a buy. From AdCP’s brand specialist guide: “A creative agent fetches brand.json (or calls get_brand_identity authorized), then pulls the wordmark, applies the exact palette and type scale, adopts the tone of voice, and obeys the restrictions.” The rights-licensing walkthrough has a buyer agent calling it too.

Answers come in two tiers. Any caller gets the public baseline unauthenticated: house, names, description, industries, keller_type (the brand-architecture classification), basic logos, tagline. Assets, voice synthesis, tone, restrictions and rights availability need a linked account, set up once by calling sync_accounts. Until then the response lists the withheld sections in available_fields, so a caller can tell an unauthorised response from an incomplete file.

How a brand agent is declared

A brand agent is declared in one file, brand.json, fetched from https://example.com/.well-known/brand.json under RFC 8615. There is no registry to join. Two shapes declare one: a standalone brand agent document, or a type: "brand" entry in the agents[] array of a fuller file, either a house portfolio or a brand’s canonical document. AdCP’s brand.json reference treats the two routes as equivalent, and all five file variants are laid out on discovery files.

In dist/schemas/3.1.13/brand.json, properties.brand_agent carries "deprecated": true and this note:

Deprecated: use agents array with type ‘brand’ instead. Brand agent that provides dynamic brand data via MCP.

rights_agent goes the same way. The replacement is an agents[] entry whose type comes from an eight-value enum titled “Brand Agent Type”.

typeWhat that agent does
brandBrand identity data (logos, colors, tone, guidelines) via MCP
rightsRights discovery, pricing and acquisition for licensable assets
measurementCampaign measurement, attribution and reporting
governanceBrand safety, compliance and policy enforcement
creativeCreative asset generation, review and approval
salesSells inventory for publishers and media owners
buyingExecutes media buying for the brand
signalsAudience signal discovery and activation

Both sales and buying appear in the same enum, so an entry records only that the brand declared the agent, not which side of the trade it sits on. The sales agent entry sets out the same collision in AdCP’s role names.

Mechanically the change is a rename with a discriminator added: {"url": ..., "id": ...} under brand_agent becomes {"type": "brand", "url": ..., "id": ...} inside agents[]. type, url and id are required, everything else is optional, and an unset jwks_uri defaults to /.well-known/jwks.json on the origin of url.

AdCP’s brand-json.mdx reference still tables brand_agent as an ordinary optional object, agents has no row in that table, and the file’s one deprecation note is about rights_agent. The schema says deprecated rather than removed and names no removal version, so both shapes stay readable: a producer writing new files uses agents[], and a consumer has to accept either.

Operations and conformance

Six AdCP operations are registered to the brand agent. The four Sponsored Intelligence operations are registered separately and are not in this table.

OperationWhat it doesIn required-tasks.mdx
get_brand_identityIdentity data; core public, more for authorised callersRequired
verify_brand_claimVerify one claim: subsidiary, parent, property, trademarkAbsent
verify_brand_claimsBulk variant, results positionally alignedAbsent
get_rightsSearch licensable rights, natural-language firstConditional
acquire_rightsBinding acquisition; pick a pricing_option_idConditional
update_rightsLifecycle of an existing grantConditional

The conformance table and the registered operations do not line up in either direction. creative_approval is listed Conditional, “required when the agent reviews AI-generated content”, with no operation of that name behind it; it is the payload a buyer submits to the approval_webhook from acquire_rights. verify_brand_claim and verify_brand_claims are the reverse case: both are callable, and neither appears in the conformance table, so nothing in 3.1.13 says whether they have to ship. The one hard requirement stated is that brand agents MUST declare brand in supported_protocols.

The rights half is flagged experimental

acquire_rights can issue scoped generation_credentials, bounded by a rights_constraint on uses, countries and an impression cap, after which generation stops. AdCP’s brand specialist guide names Midjourney for likeness and ElevenLabs for voice as providers that verify those credentials at generation time. Both names appear in documentation, not in the schemas.

All of it sits in the brand.rights_lifecycle experimental cluster under a strict declaration rule: any implementation of a task in it MUST declare the cluster id. “Partial implementation is allowed; silent implementation is not.” AdCP gives its reason for the flag as a “Legal-construct surface added late in the 3.0 cycle” whose first deployments will expose edge cases in partial rights, sublicensing and revocation.

Brand agent in AAMP

AAMP defines no brand agent. Three artifacts in the IAB Tech Lab repositories use the word, and none is a callable brand service.

What AAMP hasWhereWhat it actually is
branding_agentbuyer-agent, in its CrewAI agent configAn LLM persona, role: "Branding Specialist", picking premium display and video placements
advertiser_brand_idiab-agentic-primitives, on the avails requestA 36-character string, with no schema behind it and nothing to call
agent_role: "brand"agentic-audiences, in embedding_format.schema.jsonOne member of a six-value enum, in a draft whose sibling specs/v1.0/schema/agent_interface.schema.json is zero bytes

The first row is the one a search surfaces, and it is a persona inside the buyer agent rather than a service anyone can call. The nearest thing AAMP has to brand identity on the wire is the advertiser_brand_id string.

The buy-side sense

Scope3’s published definition is the buy-side one: “an AI buying agent that acts on behalf of a brand — translating objectives, budgets, and brand standards into advertising decisions”. That is type: "buying", another value in the same Brand Agent Type enum. AdCP’s own decision-maker material reaches for the buy-side reading too, calling a brand agent “a personal shopper”. AdCP’s schemas implement the identity sense.

The well-known path is contested as well. Brand Context Protocol v0.7, published by Encoded Brands and dated 2026-07-05, serves /.well-known/brand.md. Its specification says the brand.json output projects into AdCP’s “brand_agent/get_brand_identity contract”, which is the field AdCP deprecated, and neither corpus acknowledges the other. A document can be valid BCP output and still carry the shape AdCP is retiring.