Overview
A Brand in v2 is the resolved identity behind an Advertiser: the canonical name, logos, colors, fonts, tone, tagline, assets, product catalog, disclaimers, contact info, and target audience. Brand identity is not stored on the advertiser directly. Instead, the advertiser references a brand domain (e.g.nike.com) and Scope3 resolves the full manifest from one of two authoritative sources:
- The brand’s own
/.well-known/brand.json(per the AdCP brand-manifest spec) - The Agentic Advertising Organization (AAO) brand registry maintained by Scope3 and partners
Where this differs from v1: V1 had a separate “Brand Stories” object describing target audiences in natural language. V2 unifies brand identity around the AdCP brand manifest. Audience descriptions now belong on signals, brand stories where supported, and campaign briefs. This guide covers the v2 brand resolution model.
Why brands matter
- Single source of truth — one canonical manifest per brand domain, used by every advertiser referencing it
- Auto-population — creatives auto-resolve brand_domain from the campaign’s advertiser, so logos/colors/fonts flow into manifests without manual entry
- Storefront onboarding — discovery and storefront sign-in flows resolve a brand from the browser’s domain so users land in the right advertiser context
- AAO interoperability — agents across the AdCP ecosystem can negotiate from the same brand manifest
Key fields (BrandManifestJson)
The full manifest follows ADCP v2. Top-level fields:| Field | Type | Notes |
|---|---|---|
name | string | Brand name (required) |
url | string | Brand website URL |
logos | array | { url, tags?, width?, height? } — primary, dark, square variants |
colors | object | { primary, secondary, accent, background, text } hex codes (extra keys preserved) |
fonts | object/array | Primary/secondary fonts; supports both v2 object form and Brandfetch array form |
tone | string | Voice and tone description |
tagline | string | Brand tagline / slogan |
assets | array | Brand assets (assetId, assetType, url, dimensions, metadata) |
productCatalog | object | { feedUrl, feedFormat, categories, lastUpdated, updateFrequency } |
disclaimers | array | [{ text, context?, required }] legal disclaimers |
industry | string | Sector classification |
targetAudience | string | Target audience description |
contact | object | { email, phone, website } |
metadata | object | { createdDate, updatedDate, version } |
Resolution flow
When you create or update an advertiser withbrand: "acme.com":
Try /.well-known/brand.json
Scope3 fetches
https://acme.com/.well-known/brand.json. If present and valid, it’s used as the manifest.Fall back to the AAO registry
If the well-known location is missing or invalid, Scope3 looks up
acme.com in the AAO brand registry.Optional auto-save
Pass
saveBrand: true to enrich and persist a manifest into the registry when the brand isn’t yet registered. Scope3 enriches with sources like Brandfetch before saving.brandWarning describing why — but the advertiser is still created so onboarding can continue.
ADCP v1 compatibility
For backwards compatibility with the AdCP v1 wire format, Scope3 also accepts and resolves manifests using:- House portfolio — house-of-brands hierarchies with master/sub_brand/endorsed/independent relationships
- Authoritative location redirect —
{ "authoritative_location": "https://other-domain/.well-known/brand.json" } - House redirect —
{ "house": "parent-domain.com" }to resolve from a parent house - Brand agent delegation —
{ "brand_agent": { "url": "...", "id": "..." } }to delegate to an MCP endpoint
Common operations
Brand resolution happens implicitly through the advertiser endpoints — there is no standalonePOST /v2/brands for buyers. The relevant moments:
Create an advertiser with a brand domain
acme.com resolves successfully, the response carries linkedBrand with the manifest. If not, brandWarning explains.
Save an enriched brand to the registry
If the first attempt returns a brand preview but the brand isn’t yet in the AAO registry, retry withsaveBrand: true:
Re-resolve a brand on an existing advertiser
brand field re-fetches the manifest. Use this when you’ve published a new /.well-known/brand.json or the AAO registry entry has changed.
Inspect resolved brand
linkedBrand with the canonical fields plus the full manifest.
How creatives use the brand
When you create a creative manifest under a campaign,brand_domain auto-populates from the campaign’s advertiser. Creative AI generators consume the resolved manifest’s logos, colors, fonts, tone, tagline, disclaimers, and product catalog so generated assets stay on-brand without per-creative configuration.
If your manifest defines disclaimers flagged required: true, downstream creative pipelines surface them for inclusion.
Storefront onboarding
The storefront sign-in flow uses brand resolution to map a visitor’s browser domain (or AAO sign-in) to the correct advertiser. When a buyer authenticates through a storefront:- The storefront resolves the active brand domain
- Scope3 looks up advertisers linked to that brand
- The buyer is dropped into the right advertiser context — private/member agents become discoverable
Best practices
Self-hosted brand manifests
Self-hosted brand manifests
Publish
/.well-known/brand.json on your brand’s primary domain. This is the authoritative source — registry entries are a fallback. Keep it in sync with downstream brand systems.Multi-brand companies
Multi-brand companies
Use the AdCP v1 house-portfolio form to model house-of-brands hierarchies (one master brand, multiple sub-brands). Each sub-brand can resolve through the parent house manifest.
Disclaimers
Disclaimers
Treat
disclaimers as the single source of truth for legal text. Mark each required: true and supply context so creative pipelines know when to apply them.Product catalogs
Product catalogs
Point
productCatalog.feedUrl at a Google Merchant Center, Facebook Catalog, or custom feed. AdCP-aligned discovery and DCO can reference catalog SKUs directly.Related concepts
Advertiser
Owns the
brand reference; surfaces resolved brand under linkedBrandCreative
Auto-resolves brand_domain from the campaign’s advertiser
Signal
Audience definitions complementary to brand identity
Storefront onboarding
Brand-aware sign-in surfaces the right advertiser context