Skip to main content

Brand Registration Guide

This guide walks you through registering your organization in the CMP Brand Registry.

Prerequisites

Before registering, ensure you have:

  • ✅ A verified organization website with HTTPS
  • ✅ Product catalog ready for feed creation
  • ✅ Organization logo URL (preferably SVG or high-resolution PNG)
  • ✅ GitHub account for submission
  • ✅ Node.js or Python for generating URN identifiers

Step 1: Generate Your URN Identifier

CMP uses UUID v5 with a specific namespace to generate unique organization identifiers. You must generate your URN using your canonical domain.

CMP Namespace

4c2d9653-e971-4093-8d5b-82da447c2e85

JavaScript Method

import { v5 as uuid } from 'uuid';

const CMP_NAMESPACE = '4c2d9653-e971-4093-8d5b-82da447c2e85';

const generateOrgId = (domain) => {
const orgUuid = uuid(domain, CMP_NAMESPACE);
return `urn:cmp:orgid:${orgUuid}`;
};

// Example
const orgId = generateOrgId('example.com');
// Returns: urn:cmp:orgid:123e4567-e89b-12d3-a456-426614174000

Python Method

import uuid

CMP_NAMESPACE = uuid.UUID("4c2d9653-e971-4093-8d5b-82da447c2e85")

def generate_org_id(domain):
urn_id = uuid.uuid5(CMP_NAMESPACE, domain)
return f"urn:cmp:orgid:{urn_id}"

# Example
org_id = generate_org_id("example.com")
# Returns: urn:cmp:orgid:123e4567-e89b-12d3-a456-426614174000

Step 2: Prepare Your Organization Information

Gather the following required information:

  • Organization name - As it appears officially
  • Description - Brief description of your organization
  • URL - Your canonical domain (must match URN generation)
  • Logo - Direct URL to your logo image
  • Categories - Business categories (e.g., "fashion", "electronics", "books")
  • Product Feed URL - Where your CMP product feed will be hosted

Optional information:

  • Brand details - Specific brand name and logo if different from organization
  • Contact point - Customer service email
  • Social profiles - Links to social media
  • Physical address - Business location

Step 3: Create Your Registry Entry

Create your organization entry following the CMP schema:

{
"@context": {
"schema": "https://schema.org",
"cmp": "https://schema.commercemesh.ai/ns#"
},
"@type": "Organization",
"name": "Your Organization Name",
"description": "Brief description of your organization and what you offer",
"url": "https://example.com",
"logo": "https://example.com/logo.png",
"identifier": {
"@type": "PropertyValue",
"propertyID": "cmp:orgId",
"value": "urn:cmp:orgid:YOUR-GENERATED-UUID"
},
"brand": {
"@type": "Brand",
"name": "Your Brand Name",
"logo": "https://example.com/brand-logo.png"
},
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer service",
"email": "support@example.com"
},
"sameAs": [
"https://twitter.com/yourbrand",
"https://instagram.com/yourbrand",
"https://linkedin.com/company/yourbrand"
],
"cmp:category": ["electronics", "computers"],
"cmp:productFeed": "https://example.com/cmp/products/feed.json"
}

Step 4: Validate Your Entry

Before submission, validate your organization entry:

Required Fields Checklist

  • @type is "Organization"
  • name is provided
  • description is meaningful
  • url matches domain used for URN
  • logo URL is accessible
  • identifier contains valid URN
  • cmp:category is an array
  • cmp:productFeed URL is planned/ready

JSON Validation

# Check JSON syntax
cat your-org.json | jq .

# Validate all URLs are HTTPS
cat your-org.json | jq -r '.. | strings | select(startswith("http://"))'

Step 5: Fork the Repository

  1. Go to github.com/commercemesh/commercemesh
  2. Click "Fork" in the top right
  3. Clone your fork locally:
git clone https://github.com/YOUR_USERNAME/commercemesh.git
cd commercemesh

Step 6: Add Your Organization

  1. Open /registry/brands.json
  2. Add your organization entry to the JSON array
  3. Maintain proper JSON formatting (comma after previous entry)

Example addition:

[
{
// ... existing organization
},
{
"@context": {
"schema": "https://schema.org",
"cmp": "https://schema.commercemesh.ai/ns#"
},
"@type": "Organization",
"name": "Your Organization",
// ... your complete entry
}
]

Step 7: Test Your Changes

Validate the updated registry:

# Validate JSON syntax
jq . registry/brands.json > /dev/null

# Check for duplicate organization IDs
jq -r '.[].identifier.value' registry/brands.json | sort | uniq -d

# Verify your entry
jq '.[] | select(.name == "Your Organization")' registry/brands.json

Step 8: Submit Pull Request

  1. Commit your changes:
git add registry/brands.json
git commit -m "Add [Your Organization Name] to brand registry"
git push origin main
  1. Create pull request:
    • Go to your fork on GitHub
    • Click "Pull Request"
    • Title: "Add [Organization Name] to registry"
    • Description: Include your organization details and product feed status

Step 9: Review Process

Your submission will undergo review for:

  • ✅ Valid JSON-LD format
  • ✅ Unique organization identifier
  • ✅ Domain ownership (future automation)
  • ✅ Accessible URLs
  • ✅ Appropriate content
  • ✅ Product feed validation (when available)

Post-Registration

After approval:

  1. Implement Product Feed - Create your feed at the specified URL
  2. Test Discovery - Verify your products appear in CMP searches
  3. Monitor Feed Health - Ensure feed stays accessible
  4. Update as Needed - Submit PRs for any changes

Fetching Registry Data

To access the registry programmatically:

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

// Find specific category
const bookPublishers = organizations.filter(org =>
org['cmp:category']?.includes('books')
);

// Find by domain
const myOrg = organizations.find(org =>
org.url === 'https://example.com'
);

Common Issues

Invalid URN

Ensure you use your canonical domain (without www or subdomains) when generating the URN.

Duplicate Organization

Check if your organization is already registered before submitting.

Feed Not Ready

You can register before your feed is live, but implement it soon after approval.

Need Help?