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:
Field | Type | Description |
---|---|---|
@context | object/string | Schema context (can be string "https://schema.org" or object with namespaces) |
@type | string | Must be "Organization" |
name | string | Brand's display name |
url | string | Canonical domain URL |
logo | string (URI) | URL to brand logo |
cmp:productFeed | object | DataFeed object with url property |
cmp:brandId | string (URN) | Unique brand identifier |
Optional Fields​
Field | Type | Description |
---|---|---|
description | string | Organization description |
cmp:category | array | Business category slugs |
cmp:did | string | Decentralized Identifier |
brand | object | Nested brand information |
sameAs | array | Social media profile URLs |
identifier | object | Additional 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​
- Brand Registration - Brands submit their entry following the schema
- Validation - Entries are validated against the official schema
- Publication - Approved entries are added to brands.json
- Discovery - Applications query the registry to find brands
- 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​
- Registration Guide - Step-by-step registration process
- Schema Reference - Official schema definition
- Example Entry - Complete example from spec