Skip to main content
The Brand Protocol enables brands to claim their identity and establish a verifiable source of truth through a standardized discovery mechanism. By hosting a 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 SideBuy SideDescription
PublisherHouseCorporate entity (Nike, Inc., P&G)
PropertyBrandAdvertising identity (Nike, Air Jordan)
InventoryDestinationLanding pages, apps
This parallel structure makes brands first-class citizens in AdCP.

How it works

Brands host a brand.json file at /.well-known/brand.json on their domain. The file can take one of four forms:
  1. Brand Agent: Points to an MCP agent that provides brand information
  2. House Portfolio: Contains full brand hierarchy with all brands and properties
  3. House Redirect: Points to a house domain that contains the portfolio
  4. Authoritative Location: Points to a hosted brand.json URL

Brand architecture

The protocol supports Keller’s brand architecture models:
TypeDescriptionExample
masterPrimary brand of houseNike for Nike, Inc.
sub_brandCarries parent nameNike SB
endorsedIndependent identity, backed by parentAir Jordan “by Nike”
independentOperates separatelyConverse under Nike, Inc.

Example: house portfolio

A house domain with multiple brands:
{
  "$schema": "https://adcontextprotocol.org/schemas/v3/brand.json",
  "version": "1.0",
  "house": {
    "domain": "nikeinc.com",
    "name": "Nike, Inc.",
    "architecture": "hybrid"
  },
  "brands": [
    {
      "id": "nike",
      "names": [{"en": "Nike"}, {"zh": "耐克"}],
      "keller_type": "master",
      "properties": [
        {"type": "website", "identifier": "nike.com", "primary": true},
        {"type": "mobile_app", "store": "apple", "identifier": "com.nike.omega"}
      ]
    },
    {
      "id": "air_jordan",
      "names": [{"en": "Air Jordan"}, {"en": "Jordan"}],
      "keller_type": "endorsed",
      "parent_brand": "nike",
      "properties": [
        {"type": "website", "identifier": "jordan.com"},
        {"type": "website", "identifier": "jumpman23.com"}
      ]
    }
  ]
}

Example: brand agent

A brand with an MCP agent that provides brand information:
{
  "$schema": "https://adcontextprotocol.org/schemas/v3/brand.json",
  "version": "1.0",
  "brand_agent": {
    "url": "https://agent.acme.com/mcp",
    "id": "acme_brand_agent"
  }
}
The agent provides brand identity data (logos, colors, tone) on behalf of the brand.

Example: house redirect

A brand domain pointing to its house:
{
  "$schema": "https://adcontextprotocol.org/schemas/v3/brand.json",
  "house": "nikeinc.com"
}

Resolution flow

Given any domain, the protocol resolves to a canonical brand:
jumpman23.com
  -> fetch /.well-known/brand.json
  -> { "house": "nikeinc.com" }
  -> fetch nikeinc.com/.well-known/brand.json
  -> search brands[] for property matching "jumpman23.com"
  -> found in Air Jordan brand's properties
  -> Result: { house: "nikeinc.com", brand_id: "air_jordan" }

Brand resolution sources

There are three ways to resolve brand identity, each returning the same data structure:
SourceHow it worksWhen to use
resolve_brandFetches /.well-known/brand.json, extracts brand identityBrand publishes a brand.json file
Brand enrichmentFetches from Brandfetch, saves identity to registryNo brand.json available, need enrichment
Registry lookupReturns community or enriched identity from the registryBrand already registered
Regardless of source, the result is a brand identity that can be referenced by any AdCP task via a brand reference ({ "domain": "...", "brand_id": "..." }).

Use cases

Creative generation

When a creative agent needs brand assets:
  1. Resolve domain to canonical brand via brand.json
  2. Get brand identity data (from brand.json, agent, or registry)
  3. Generate on-brand creatives

Brand verification

When verifying brand claims:
  1. Fetch brand.json from claimed domain
  2. Follow redirects to house if needed
  3. Verify brand exists in portfolio

Reporting roll-up

When aggregating brand performance:
  1. Resolve all brand domains to canonical IDs
  2. Group by house for corporate-level reporting
  3. Optionally include/exclude sub-brands

Brand context in requests

AdCP tasks accept a brand 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": {
    "domain": "acmecorp.com",
    "brand_id": "tide"
  }
}
For single-brand domains, brand_id is optional:
{
  "brand": {
    "domain": "acmecorp.com"
  }
}
Brand identity data is resolved from 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, and Cache-Control headers
  • 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
Agents should respect HTTP caching headers when fetching brand.json files.

Brand protocol tasks

Agents that implement the brand protocol declare supported_protocols: ["brand"] in get_adcp_capabilities. The specific tasks they implement define their role:
Agent capabilityTasksExample
DAMget_brand_identityEnterprise brand portal, asset management
Rights managementget_rights + acquire_rightsTalent licensing, music sync, stock media
BothAll brand tasksTalent 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 (via sync_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 a rights_agent in their brand.json. This makes rights crawlable and indexable without MCP calls:
{
  "id": "daan_janssen",
  "names": [{"en": "Daan Janssen"}],
  "description": "Dutch Olympic speed skater, 2x gold medalist",
  "rights_agent": {
    "url": "https://rights.lotientertainment.com/mcp",
    "id": "loti_entertainment",
    "available_uses": ["likeness", "voice", "endorsement"],
    "right_types": ["talent"],
    "countries": ["NL", "BE", "DE"]
  }
}
The 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 a pricing_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 optional rights 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:
ToolDescription
resolve_brandResolve domain to canonical brand identity
validate_brand_jsonValidate a domain’s brand.json
validate_brand_agentTest 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.