Documentation Index
Fetch the complete documentation index at: https://docs.adcontextprotocol.org/llms.txt
Use this file to discover all available pages before exploring further.
The Brand Manifest is a standardized format for identifying the advertiser and providing brand context in AdCP. It tells publishers who the advertiser is (for policy compliance and business purposes) and optionally provides brand guidelines, assets, and product catalogs for creative generation.
Brand manifests can be provided either inline as a JSON object or by URL reference to a hosted manifest file.
Overview
Brand manifests solve a key problem: how to efficiently identify advertisers and provide brand context without requiring complex authorization flows or repeated data entry. The brand manifest provides:
- Advertiser identity: Publishers know who they’re doing business with (KYC/policy compliance)
- Brand guidelines: Colors, fonts, tone, and visual identity for creative generation
- Asset libraries: Logos, images, and videos for creative assembly
- Product catalogs: SKUs and offerings for promotional targeting
- Consistent identity: Same brand information reused across all requests
Key Benefits
- Know Your Customer: Publishers can verify advertisers meet their standards
- Minimal Friction: Start with just a name or URL, expand as needed
- Cacheable: Same brand manifest reused across all requests
- Standardized: Consistent format across all AdCP implementations
- Flexible: Supports SMB to enterprise use cases
- AI-Optimized: Structured for easy ingestion by creative agents
Providing Brand Manifests
Inline JSON Object
Provide the brand manifest directly in the request:
{
"brand_manifest": {
"url": "https://bobsfunburgers.com",
"name": "Bob's Fun Burgers",
"colors": {
"primary": "#FF6B35"
}
}
}
URL String
Reference a hosted brand manifest file with a URL string:
{
"brand_manifest": "https://cdn.acmecorp.com/brand-manifest.json"
}
The manifest at the URL must conform to the brand-manifest.json schema.
Benefits of URL references:
- Centralized management: Update brand information in one place
- Version control: Track changes to brand guidelines over time
- Reduced payload size: Large manifests don’t bloat every request
- CDN caching: Leverage edge caching for faster access
- Consistency: Same manifest across all campaigns and platforms
Use Cases
If you’re building a sales agent focused purely on media buying, you can provide a minimal manifest. The brand manifest is required so publishers know who the advertiser is (for policy compliance and business purposes), but you don’t need extensive brand details unless you’re using creative generation or optimization features.
Minimal inline manifest:
{
"$schema": "https://adcontextprotocol.org/schemas/v2/core/brand-manifest.json",
"name": "ACME Corporation",
"url": "https://acmecorp.com"
}
Or even simpler for brands with URLs:
{
"$schema": "https://adcontextprotocol.org/schemas/v2/core/brand-manifest.json",
"name": "ACME Corporation",
"url": "https://acmecorp.com"
}
Or reference a minimal hosted manifest:
"https://acmecorp.com/.well-known/brand-manifest.json"
This minimal approach provides:
- Advertiser identity for publisher KYC and policy compliance
- Basic business information for reporting and tracking
- Future extensibility if you later need creative generation
You can safely skip colors, fonts, logos, product catalogs, and tone unless your use case requires them.
SMB / Ad Hoc Creative Generation
For small businesses or one-off campaigns needing creative generation, a minimal brand manifest with a URL provides enough context:
{
"$schema": "https://adcontextprotocol.org/schemas/v2/core/brand-manifest.json",
"name": "Bob's Fun Burgers",
"url": "https://bobsfunburgers.com"
}
Creative agents can infer brand information from the URL, pulling logos, colors, and style from the website.
Enterprise / Established Brand
For established brands with defined guidelines, host the manifest on a CDN:
Hosted at https://cdn.acmecorp.com/brand-manifest.json:
{
"$schema": "https://adcontextprotocol.org/schemas/v2/core/brand-manifest.json",
"url": "https://acmecorp.com",
"name": "ACME Corporation",
"logos": [
{
"url": "https://cdn.acmecorp.com/logo-square-dark.png",
"tags": ["dark", "square"],
"width": 512,
"height": 512
},
{
"url": "https://cdn.acmecorp.com/logo-horizontal-light.png",
"tags": ["light", "horizontal"],
"width": 1200,
"height": 400
}
],
"colors": {
"primary": "#FF6B35",
"secondary": "#004E89",
"accent": "#F7931E",
"background": "#FFFFFF",
"text": "#1A1A1A"
},
"fonts": {
"primary": "Helvetica Neue",
"secondary": "Georgia"
},
"tone": "professional and trustworthy",
"tagline": "Innovation You Can Trust",
"product_catalog": {
"feed_url": "https://acmecorp.com/products.rss",
"feed_format": "google_merchant_center"
},
"industry": "technology",
"target_audience": "business decision-makers aged 35-55"
}
Reference in requests:
{
"brand_manifest": "https://cdn.acmecorp.com/brand-manifest.json"
}
Multi-SKU Retailer
Large retailers can provide product feeds and asset libraries:
{
"$schema": "https://adcontextprotocol.org/schemas/v2/core/brand-manifest.json",
"url": "https://bigretail.com",
"name": "BigRetail",
"product_catalog": {
"feed_url": "https://bigretail.com/catalog.xml",
"feed_format": "google_merchant_center"
},
"disclaimers": [
{
"text": "Prices and availability subject to change",
"context": "pricing",
"required": true
}
]
}
Brands Without URLs
Some brands don’t have dedicated URLs (white-label products, local businesses, B2B brands). Brand cards support name-only identification:
{
"$schema": "https://adcontextprotocol.org/schemas/v2/core/brand-manifest.json",
"name": "Great Value",
"colors": {
"primary": "#0071CE",
"secondary": "#FFC220"
},
"tone": "affordable and trustworthy"
}
Common cases for name-only brands:
- White-label/store brands (e.g., “Great Value”, “Kirkland”)
- Local businesses without websites
- B2B brands without public sites
- Sub-brands under parent company URLs
Brand Manifest Schemas
Brand Manifest Reference (Union Type)
Schema URL: /schemas/v2/core/brand-manifest-ref.json
The brand manifest reference is a union type that accepts either:
- Inline object: Full brand manifest JSON object
- URL reference: Object with
manifest_url field pointing to hosted manifest
Brand Manifest Object
Schema URL: /schemas/v2/core/brand-manifest.json
The structure of the brand manifest object itself (whether provided inline or hosted at a URL).
Required Fields
Either url OR name is required (both can be provided):
| Field | Type | Description |
|---|
url | string (uri) | Primary brand URL for context and asset discovery |
name | string | Brand or business name (required if no URL provided) |
Optional Fields
| Field | Type | Description |
|---|
name | string | Brand or business name |
logos | Logo[] | Brand logo assets with semantic tags |
colors | Colors | Brand color palette (hex format) |
fonts | Fonts | Brand typography guidelines |
tone | string | Brand voice and messaging tone |
tagline | string | Brand tagline or slogan |
assets | Asset[] | Brand asset library with explicit assets and tags |
product_catalog | ProductCatalog | Product catalog information for e-commerce advertisers |
disclaimers | Disclaimer[] | Legal disclaimers for creatives |
industry | string | Industry or vertical |
target_audience | string | Primary target audience description |
contact | Contact | Brand contact information |
metadata | Metadata | Version and update tracking |
Logo Object
{
url: string; // URL to logo asset
tags?: string[]; // Semantic tags (e.g., "dark", "light", "square", "horizontal")
width?: number; // Logo width in pixels
height?: number; // Logo height in pixels
}
Common Tags: "dark", "light", "square", "horizontal", "vertical", "icon", "wordmark", "lockup"
Colors Object
{
primary?: string; // Primary brand color (#RRGGBB)
secondary?: string; // Secondary brand color (#RRGGBB)
accent?: string; // Accent color (#RRGGBB)
background?: string; // Background color (#RRGGBB)
text?: string; // Text color (#RRGGBB)
}
Fonts Object
{
primary?: string; // Primary font family name
secondary?: string; // Secondary font family name
font_urls?: string[]; // URLs to web font files
}
Disclaimer Object
{
text: string; // Disclaimer text
context?: string; // When this applies (e.g., "financial_products", "health_claims")
required?: boolean; // Whether this must appear (default: true)
}
Asset Object
{
asset_id: string; // Unique identifier for this asset
asset_type: string; // Type of asset (image, video, audio, text, etc.)
url: string; // URL to CDN-hosted asset file
tags?: string[]; // Tags for asset discovery (e.g., "holiday", "lifestyle")
name?: string; // Human-readable asset name
description?: string; // Asset description or usage notes
width?: number; // Image/video width in pixels
height?: number; // Image/video height in pixels
duration_seconds?: number; // Video/audio duration in seconds
file_size_bytes?: number; // File size in bytes
format?: string; // File format (e.g., "jpg", "mp4")
metadata?: Record<string, any>; // Additional asset-specific metadata
}
ProductCatalog Object
{
feed_url: string; // URL to product catalog feed
feed_format?: string; // Format of the product feed (default: "google_merchant_center")
categories?: string[]; // Product categories available in the catalog
last_updated?: string; // When the product catalog was last updated (ISO 8601)
update_frequency?: string; // How frequently the catalog is updated
}
Integration with AdCP Tasks
Include brand manifest in media buy creation to provide context for creative generation:
{
"buyer_ref": "campaign_2024_q1",
"promoted_offering": "ACME Pro Widget",
"brand_manifest": {
"url": "https://acmecorp.com",
"name": "ACME Corporation",
"tone": "professional and innovative"
},
"packages": [...],
"budget": {...}
}
build_creative
Use brand manifest to inform creative generation:
{
"message": "Create a native ad highlighting our new product launch",
"format_id": {
"agent_url": "https://creative.adcontextprotocol.org",
"id": "display_native"
},
"brand_manifest": {
"url": "https://acmecorp.com",
"logos": [
{
"url": "https://cdn.acmecorp.com/logo-square.png",
"tags": ["square", "dark"]
}
],
"colors": {
"primary": "#FF6B35",
"secondary": "#004E89"
},
"tone": "professional and trustworthy"
}
}
Best Practices
1. Start Simple, Expand as Needed
Begin with just a URL. Add more fields only when the URL-based inference isn’t sufficient:
// ✅ Good starting point
{
"url": "https://mybrand.com"
}
// ✅ Add details when needed
{
"url": "https://mybrand.com",
"logos": [...],
"colors": {...}
}
Tags help creative agents select appropriate logo variants:
{
"logos": [
{"url": "...", "tags": ["dark", "square"]}, // For light backgrounds
{"url": "...", "tags": ["light", "square"]}, // For dark backgrounds
{"url": "...", "tags": ["dark", "horizontal"]}, // Wide layouts
{"url": "...", "tags": ["icon"]} // Small placements
]
}
3. Cache and Reuse Brand Manifests
Brand cards are designed to be cached. Use URL strings for automatic caching:
// Reference hosted manifest (cacheable by URL)
const brandManifestUrl = "https://cdn.acmecorp.com/brand-manifest.json";
// Reuse across requests - agents can cache the manifest
await createMediaBuy({ brand_manifest: brandManifestUrl, ... });
await buildCreative({ brand_manifest: brandManifestUrl, ... });
await buildCreative({ brand_manifest: brandManifestUrl, ... }); // Same manifest, different creative
Or cache inline manifests yourself:
// Cache inline manifest once
const brandManifest = {
url: "https://acmecorp.com",
colors: {...},
logos: [...]
};
// Reuse across requests
await createMediaBuy({ brand_manifest: brandManifest, ... });
await buildCreative({ brand_manifest: brandManifest, ... });
4. Product Feeds for Multi-SKU
Large retailers should provide product feeds:
{
"$schema": "https://adcontextprotocol.org/schemas/v2/core/brand-manifest.json",
"name": "Retailer Name",
"url": "https://retailer.com",
"product_catalog": {
"feed_url": "https://retailer.com/products.json"
}
}
Supported Feed Formats: RSS, JSON Feed, Product CSV
5. Asset Libraries for Enterprise
Enterprise brands with large asset libraries should provide explicit assets:
{
"$schema": "https://adcontextprotocol.org/schemas/v2/core/brand-manifest.json",
"name": "Enterprise Brand",
"url": "https://brand.com",
"assets": [
{
"asset_id": "hero_lifestyle_1",
"asset_type": "image",
"url": "https://cdn.brand.com/hero-lifestyle-1.jpg",
"tags": ["lifestyle", "hero", "outdoor"],
"width": 1920,
"height": 1080
},
{
"asset_id": "product_video_30s",
"asset_type": "video",
"url": "https://cdn.brand.com/product-video-30s.mp4",
"tags": ["product", "demo", "30s"],
"duration_seconds": 30,
"width": 1920,
"height": 1080
}
]
}
Evolution and Versioning
Brand cards are versioned using the metadata.version field:
{
"$schema": "https://adcontextprotocol.org/schemas/v2/core/brand-manifest.json",
"name": "Brand Name",
"url": "https://brand.com",
"metadata": {
"version": "2.1",
"updated_date": "2024-03-15T10:00:00Z"
}
}
Version updates:
- Patch (2.0.1): Fix typos, update contact info
- Minor (2.1.0): Add new assets, update colors
- Major (3.0.0): Complete rebrand, new identity
Migration from brand_guidelines
For implementations using the legacy brand_guidelines field in build_creative:
Before (Legacy):
{
"brand_guidelines": {
"colors": ["#FF6B35", "#004E89"],
"fonts": ["Helvetica Neue"],
"tone": "professional"
}
}
After (Brand Manifest):
{
"brand_manifest": {
"url": "https://brand.com",
"colors": {
"primary": "#FF6B35",
"secondary": "#004E89"
},
"fonts": {
"primary": "Helvetica Neue"
},
"tone": "professional"
}
}