Skip to main content

Brand Registry Overview

The CMP Brand Registry is a decentralized directory of brands participating in the Commerce Mesh Protocol. It serves as the foundation for product discovery and trust across the network.

📄 Official Specification: github.com/commercemesh/commercemesh/tree/main/spec/brand-registry/v0.1

What is the Brand Registry?​

The Brand Registry is a JSON-LD formatted collection of brand entries that:

  • Identifies brands uniquely across the network using URNs
  • Links to product feeds and brand information
  • Establishes trust through verified brand data
  • Enables discovery by AI agents and applications

Registry Structure​

The registry is maintained as a simple JSON array in the CMP repository:

/registry/
├── brands.json # Main registry file
├── example/ # Example entries
│ └── brands.json # Sample brand entry
└── schema/ # Schema documentation
└── schema.md # Field specifications

Brand Entry Format​

Based on the official schema, each entry follows this structure:

{
"@context": {
"schema": "https://schema.org",
"cmp": "https://schema.commercemesh.ai/ns#"
},
"@type": "Organization",
"name": "TechFlow Solutions",
"description": "TechFlow Solutions is a leading technology company specializing in software development and digital innovation.",
"url": "https://techflowsolutions.com",
"logo": "https://example.com/logos/techflow-logo.png",
"brand": {
"@type": "Brand",
"name": "TechFlow",
"logo": "https://example.com/logos/techflow-brand-logo.png",
"identifier": {
"@type": "PropertyValue",
"propertyID": "cmp:brandId",
"value": "urn:cmp:org:abc12345-e89b-12d3-a456-426614174000:brand:987fcdeb-51a2-43d1-b789-987654321000"
}
},
"sameAs": [
"https://www.instagram.com/techflowsolutions",
"https://www.facebook.com/TechFlowSolutions",
"https://www.linkedin.com/company/techflow-solutions"
],
"cmp:category": [
"technology",
"software",
"digital-services"
],
"cmp:productFeed": {
"@type": "DataFeed",
"url": "https://techflowsolutions.com/.well-known/cmp/feed.json"
},
"identifier": {
"@type": "PropertyValue",
"propertyID": "cmp:orgId",
"value": "urn:cmp:org:abc12345-e89b-12d3-a456-426614174000"
}
}

Required Fields​

According to the brand registry schema:

FieldTypeDescription
@contextobject/stringSchema context (can be string "https://schema.org" or object with namespaces)
@typestringMust be "Organization"
namestringBrand's display name
urlstringCanonical domain URL
logostring (URI)URL to brand logo
cmp:productFeedobjectDataFeed object with url property
cmp:brandIdstring (URN)Unique brand identifier

Optional Fields​

FieldTypeDescription
descriptionstringOrganization description
cmp:categoryarrayBusiness category slugs
cmp:didstringDecentralized Identifier
brandobjectNested brand information
sameAsarraySocial media profile URLs
identifierobjectAdditional identifiers (e.g., cmp:orgId)

Key Concepts​

URN Identifiers​

CMP uses a hierarchical URN (Uniform Resource Name) format for unique identification. See Identifiers & URN Hierarchy for complete documentation.

Quick reference:

  • Organization: urn:cmp:org:{org-uuid}
  • Brand: urn:cmp:org:{org-uuid}:brand:{brand-uuid}
  • Product: urn:cmp:org:{org-uuid}:brand:{brand-uuid}:sku:{sku-uuid}

All UUIDs are generated using UUID v5 with the CMP namespace: 4c2d9653-e971-4093-8d5b-82da447c2e85

Product Feed Reference​

The cmp:productFeed field is an object, not just a URL:

"cmp:productFeed": {
"@type": "DataFeed",
"url": "https://example.com/cmp/products/feed.json"
}

Category Taxonomy​

Categories use lowercase slugs from a predefined taxonomy:

  • electronics, fashion, home, books, etc.

How It Works​

  1. Brand Registration - Brands submit their entry following the schema
  2. Validation - Entries are validated against the official schema
  3. Publication - Approved entries are added to brands.json
  4. Discovery - Applications query the registry to find brands
  5. Integration - Product feeds are accessed via the registered URLs

Registry Access​

Fetching the Registry​

const registry = await fetch(
'https://raw.githubusercontent.com/commercemesh/commercemesh/main/registry/brands.json'
).then(r => r.json());

Filtering Brands​

// Find by category
const electronicsbrands = registry.filter(org =>
org['cmp:category']?.includes('electronics')
);

// Find by brand ID
const brand = registry.find(org =>
org['cmp:brandId'] === 'urn:cmp:org:123e4567-e89b-12d3-a456-426614174000:brand:456e7890-e89b-12d3-a456-426614174000'
);

Next Steps​