Skip to main content
The brand.json file provides a standardized way for brands to claim their identity and establish discoverable brand information. It supports four mutually exclusive variants to accommodate different use cases.

File Location

Brands host the brand.json file at:
https://example.com/.well-known/brand.json
Following RFC 8615 well-known URI conventions.

Variants

The brand.json file supports four mutually exclusive variants:

1. Authoritative Location Redirect

Points to a hosted brand.json at another URL:
{
  "$schema": "https://adcontextprotocol.org/schemas/v1/brand.json",
  "authoritative_location": "https://adcontextprotocol.org/brand/abc123/brand.json"
}
Use this when:
  • Brand.json is hosted centrally (e.g., by a service provider)
  • CDN distribution is needed
  • Managed brand services

2. House Redirect

Points to the house domain that contains the full brand portfolio:
{
  "$schema": "https://adcontextprotocol.org/schemas/v1/brand.json",
  "house": "nikeinc.com",
  "note": "Regional site - see house for brand portfolio"
}
Optional fields:
  • region: ISO 3166-1 alpha-2 country code (e.g., “CN”)
  • note: Explanation text
Use this when:
  • Brand domain is owned by a larger house
  • Regional/localized domains point to main house
  • Legacy domains redirect to canonical

3. Brand Agent

Designates 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"
  }
}
Optional fields:
  • contact: Contact information
When a brand has an agent, the agent is the authoritative source for brand information. Agents implement get_brand_manifest({ house, brand_id }) to return brand manifest data.

4. House Portfolio

Contains the full brand hierarchy with all brands and properties:
{
  "$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"}],
      "keller_type": "master",
      "properties": [
        {"type": "website", "identifier": "nike.com", "primary": true}
      ]
    }
  ]
}

House Definition

The house object represents the corporate entity:
FieldTypeRequiredDescription
domainstringYesHouse’s primary domain
namestringYesDisplay name
namesarrayNoLocalized names
architectureenumNobranded_house, house_of_brands, or hybrid

Brand Definition

Each brand in the brands array:
FieldTypeRequiredDescription
idstringYesBrand identifier (lowercase alphanumeric with underscores)
namesarrayYesLocalized names (see below)
keller_typeenumNomaster, sub_brand, endorsed, independent
parent_brandstringNoParent brand’s id
propertiesarrayNoDigital properties owned by brand
brand_agentobjectNoAgent providing brand manifest data { url, id }
logosarrayNoBrand logo assets (inline manifest data)
colorsobjectNoBrand color palette (inline manifest data)
fontsobjectNoBrand typography (inline manifest data)
tonestringNoBrand voice and messaging tone
taglinestringNoBrand tagline or slogan

Names Array

Names are localized with language codes:
{
  "names": [
    {"en": "Nike"},
    {"en": "The Swoosh"},
    {"zh": "耐克"},
    {"ja": "ナイキ"}
  ]
}
Multiple entries per language are allowed (for aliases).

Keller Types

Brand architecture classifications from marketing theory:
TypeDescriptionExample
masterPrimary brand of houseNike for Nike, Inc.
sub_brandCarries parent brand nameNike SB
endorsedIndependent identity, endorsed by parentAir Jordan “by Nike”
independentOperates separately from houseConverse

Property Definition

Properties are digital touchpoints owned by brands:
FieldTypeRequiredDescription
typeenumYesProperty type (see below)
identifierstringYesDomain or app ID
storeenumNoApp store (apple, google, etc.)
regionstringNoISO country code or global
primarybooleanNoIs this the primary property?

Property Types

Matches AdCP property-type enum:
  • website
  • mobile_app
  • ctv_app
  • desktop_app
  • dooh
  • podcast
  • radio
  • streaming_audio

Resolution Algorithm

To resolve a domain to a canonical brand:
  1. Fetch https://{domain}/.well-known/brand.json
  2. Check variant:
    • authoritative_location: Fetch from that URL, continue from step 2
    • house (string): Fetch from house domain, continue from step 2
    • brand_agent: Return agent URL (agent provides brand info)
    • house (object) + brands: Search for domain in properties
  3. For house portfolio, find the brand whose properties contain the query domain
  4. Return canonical brand information
Maximum redirect depth: 3 hops.

Complete Examples

Small Business

{
  "$schema": "https://adcontextprotocol.org/schemas/v1/brand.json",
  "version": "1.0",
  "house": {
    "domain": "bobsburgers.com",
    "name": "Bob's Burgers LLC"
  },
  "brands": [
    {
      "id": "bobs_burgers",
      "names": [{"en": "Bob's Burgers"}],
      "keller_type": "master",
      "properties": [
        {"type": "website", "identifier": "bobsburgers.com", "primary": true}
      ],
      "brand_manifest": {
        "name": "Bob's Burgers",
        "url": "https://bobsburgers.com",
        "colors": {"primary": "#FF6B35"}
      }
    }
  ]
}

Enterprise with Agent

{
  "$schema": "https://adcontextprotocol.org/schemas/v1/brand.json",
  "version": "1.0",
  "brand_agent": {
    "url": "https://brand-agent.enterprise.com/mcp",
    "id": "enterprise_brand_agent"
  },
  "contact": {
    "name": "Enterprise Brand Team",
    "email": "brand@enterprise.com"
  }
}

Multi-Brand Portfolio

{
  "$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": "耐克"}, {"ja": "ナイキ"}],
      "keller_type": "master",
      "properties": [
        {"type": "website", "identifier": "nike.com", "primary": true},
        {"type": "website", "identifier": "nike.cn", "region": "CN"},
        {"type": "mobile_app", "store": "apple", "identifier": "com.nike.omega"}
      ]
    },
    {
      "id": "air_jordan",
      "names": [{"en": "Air Jordan"}, {"en": "Jordan"}, {"en": "Jumpman"}],
      "keller_type": "endorsed",
      "parent_brand": "nike",
      "properties": [
        {"type": "website", "identifier": "jordan.com", "primary": true},
        {"type": "website", "identifier": "jumpman23.com"},
        {"type": "mobile_app", "store": "apple", "identifier": "com.nike.snkrs"}
      ]
    },
    {
      "id": "converse",
      "names": [{"en": "Converse"}],
      "keller_type": "independent",
      "properties": [
        {"type": "website", "identifier": "converse.com", "primary": true}
      ]
    }
  ],
  "contact": {
    "name": "Nike Brand Team",
    "email": "brand@nike.com"
  }
}

Regional Domain Redirect

On nike.cn/.well-known/brand.json:
{
  "$schema": "https://adcontextprotocol.org/schemas/v1/brand.json",
  "house": "nikeinc.com",
  "region": "CN"
}

Caching

Recommended cache TTLs:
  • Canonical files: 24 hours
  • Redirect files: 24 hours
  • Failed lookups: 1 hour

Best Practices

  1. Start simple: Begin with minimal brand.json and add complexity as needed
  2. Use redirects for subsidiaries: Point brand domains to house domain
  3. List all properties: Include regional domains, apps, and legacy domains
  4. Keep names current: Include localized names and common aliases
  5. Use brand agents for dynamic data: If brand info changes frequently, use an agent