Migrating brand identity
AdCP 3.0 rc.1 replaces inlinebrand_manifest objects with lightweight brand references (BrandRef). Brand data is resolved at execution time from /.well-known/brand.json or the community brand registry.
What changed
| beta.3 | rc.1 | Notes |
|---|---|---|
brand_manifest (inline object) | brand (BrandRef) | Reference resolved at execution time |
| Brand data passed in every request | Brand data fetched once from brand.json | Caching recommended (24h TTL) |
| No standard identity format | /.well-known/brand.json specification | Four variants: House Portfolio, Brand Agent, House Redirect, Authoritative Location |
BrandRef schema
A brand reference identifies a brand by domain and optionalbrand_id:
domain(required) — Domain where/.well-known/brand.jsonis hosted, or the brand’s operating domainbrand_id(optional) — Brand identifier within a house portfolio. Omit for single-brand domains.
Where brand appears
| Task | Required? | Purpose |
|---|---|---|
create_media_buy | Yes | Campaign identity — immutable once set |
get_products | No | Discovery context. Required when catalog is provided |
build_creative | No | Resolves to colors, logos, tone for creative generation |
brand does not appear on update_media_buy (immutable from creation), sync_creatives (scoped to account), or sync_catalogs (scoped to account).
Before and after
beta.3 — inline brand_manifest on create_media_buy:test=false
test=false
nova-brands.com + spark to the full brand identity (logos, colors, tone, properties) via the Brand Protocol.
Resolution flow
Given aBrandRef, the resolution is:
- Fetch
https://{domain}/.well-known/brand.json - If it’s a House Redirect (has
housefield), follow to the house domain (max 3 redirects) - If it’s a House Portfolio, look up the brand by
brand_idin thebrandsarray - If it’s a Brand Agent, call the MCP agent for dynamic brand data
- If it’s an Authoritative Location, follow the
locationURL
Migration steps
Replace brand_manifest with brand
In all task requests (
create_media_buy, get_products, build_creative), replace the brand_manifest object with a brand BrandRef: { "domain": "...", "brand_id": "..." }.Host brand.json
Publish
/.well-known/brand.json on the brand’s domain. Choose a variant: House Portfolio for multi-brand companies, Brand Agent for dynamic data, or single-brand for simple cases.Register in brand registry
If the brand domain doesn’t host
brand.json, register it in the community brand registry so sellers can resolve it.Update seller resolution
Seller agents must resolve
BrandRef to full brand data at execution time. Implement caching and handle all four brand.json variants.Remove inline brand data
Remove any code that constructs or parses
brand_manifest objects. Brand data is no longer passed inline.Brand identity
Full reference for brand.json variants, the brand registry, and BrandRef resolution.
Related: Channels | Catalogs | Brand Protocol | AdCP 3.0 overview