brand.json file at a well-known location, brands can declare their identity, brand hierarchy, and optionally designate official brand agents.
Purpose
The Brand Protocol addresses buy-side identity in advertising, providing the same clarity that the Property Protocol provides for the sell-side:| Sell Side | Buy Side | Description |
|---|---|---|
| Publisher | House | Corporate entity (Nike, Inc., P&G) |
| Property | Brand | Advertising identity (Nike, Air Jordan) |
| Inventory | Destination | Landing pages, apps |
How it works
Brands host abrand.json file at /.well-known/brand.json on their domain. The file can take one of four forms:
- Brand Agent: Points to an MCP agent that provides brand information
- House Portfolio: Contains full brand hierarchy with all brands and properties
- House Redirect: Points to a house domain that contains the portfolio
- Authoritative Location: Points to a hosted brand.json URL
Brand architecture
The protocol supports Keller’s brand architecture models:| Type | Description | Example |
|---|---|---|
master | Primary brand of house | Nike for Nike, Inc. |
sub_brand | Carries parent name | Nike SB |
endorsed | Independent identity, backed by parent | Air Jordan “by Nike” |
independent | Operates separately | Converse under Nike, Inc. |
Example: house portfolio
A house domain with multiple brands:Example: brand agent
A brand with an MCP agent that provides brand information:Example: house redirect
A brand domain pointing to its house:Resolution flow
Given any domain, the protocol resolves to a canonical brand:Brand resolution sources
There are three ways to resolve brand identity, each returning the same data structure:| Source | How it works | When to use |
|---|---|---|
resolve_brand | Fetches /.well-known/brand.json, extracts brand identity | Brand publishes a brand.json file |
| Brand enrichment | Fetches from Brandfetch, saves identity to registry | No brand.json available, need enrichment |
| Registry lookup | Returns community or enriched identity from the registry | Brand already registered |
{ "domain": "...", "brand_id": "..." }).
Use cases
Creative generation
When a creative agent needs brand assets:- Resolve domain to canonical brand via brand.json
- Get brand identity data (from brand.json, agent, or registry)
- Generate on-brand creatives
Brand verification
When verifying brand claims:- Fetch brand.json from claimed domain
- Follow redirects to house if needed
- Verify brand exists in portfolio
Reporting roll-up
When aggregating brand performance:- Resolve all brand domains to canonical IDs
- Group by house for corporate-level reporting
- Optionally include/exclude sub-brands
Brand context in requests
AdCP tasks accept abrand reference that identifies the brand by domain and optional brand_id. The system resolves this reference to the full brand identity at execution time.
brand_id is optional:
brand.json or the registry — never passed inline.
Caching
Brand information changes infrequently (logo updates, guideline refreshes). Recommended caching:- HTTP headers: Use standard
ETag,Last-Modified, andCache-Controlheaders - Default TTL: 24 hours for validated brand.json files
- Failed lookups: Cache for 1 hour before retrying
- last_updated field: Informational timestamp in brand.json for staleness checks
Brand protocol tasks
Agents that implement the brand protocol declaresupported_protocols: ["brand"] in get_adcp_capabilities. The specific tasks they implement define their role:
| Agent capability | Tasks | Example |
|---|---|---|
| DAM | get_brand_identity | Enterprise brand portal, asset management |
| Rights management | get_rights + acquire_rights | Talent licensing, music sync, stock media |
| Both | All brand tasks | Talent agency managing identity and rights |
get_brand_identity
Returns brand identity data that’s richer, more dynamic, or more access-controlled than static brand.json. Core identity (house, names, description, logos) is always public. Linked accounts (viasync_accounts) get deeper data: high-res assets, voice synthesis configs, tone guidelines, and rights availability.
Rights discovery via brand.json
Brands with licensable rights declare arights_agent in their brand.json. This makes rights crawlable and indexable without MCP calls:
brand_agent provides identity data (logos, tone, assets). The rights_agent provides licensing (discovery, pricing, acquisition). They can be the same agent or different ones.
get_rights
Search for licensable rights across a brand agent’s roster. Returns matches with pricing. Discovery is natural-language-first — no taxonomy, LLMs interpret intent from the query.acquire_rights
Binding contractual request to clear rights. The buyer selects apricing_option_id from get_rights and provides campaign details. Returns terms, generation credentials for LLM providers, and disclosure requirements.
Generation credentials
Rights management agents coordinate with LLM providers (Midjourney, ElevenLabs, etc.) to issue scoped credentials. The rights agent sets up the permission; the provider enforces at generation time. Any creative agent can use the credentials.Creative lifecycle
Creative manifests carry an optionalrights array — each entry is a rights constraint from a different rights holder. A single creative may combine talent likeness + music license, each with different validity periods and country restrictions. For v1, rights constraints are informational metadata.
Usage is reported back to the rights agent via report_usage with the rights_id field for cap tracking and billing.
MCP tools
The Brand Protocol provides MCP tools for programmatic access:| Tool | Description |
|---|---|
resolve_brand | Resolve domain to canonical brand identity |
validate_brand_json | Validate a domain’s brand.json |
validate_brand_agent | Test brand agent reachability |
Learn more
brand.json spec
Complete technical specification for the brand.json file format.
get_brand_identity
Retrieve brand identity data from a brand agent.
get_rights
Search for licensable rights with pricing.
acquire_rights
Acquire rights with contractual clearance.