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/v1/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/v1/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/v1/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.

Future considerations

Digital asset management (DAM)

For brands requiring fine-grained control over asset usage, the brand_agent variant provides a natural integration point for DAM systems. Agents can:
  • Enforce access control per asset
  • Track usage and licensing
  • Provide assets with usage terms
  • Log access for compliance
This is optional—brands publishing static brand.json files grant implied permission for compliant creative use. DAM integration is for enterprises with complex licensing requirements.

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