Skip to main content

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:
  1. The brand’s own /.well-known/brand.json (per the AdCP brand-manifest spec)
  2. The Agentic Advertising Organization (AAO) brand registry maintained by Scope3 and partners
This decouples brand identity from any single advertiser account — the same brand can power multiple advertisers across customers, agencies, and storefronts, and a brand update propagates everywhere it’s referenced.
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:
FieldTypeNotes
namestringBrand name (required)
urlstringBrand website URL
logosarray{ url, tags?, width?, height? } — primary, dark, square variants
colorsobject{ primary, secondary, accent, background, text } hex codes (extra keys preserved)
fontsobject/arrayPrimary/secondary fonts; supports both v2 object form and Brandfetch array form
tonestringVoice and tone description
taglinestringBrand tagline / slogan
assetsarrayBrand assets (assetId, assetType, url, dimensions, metadata)
productCatalogobject{ feedUrl, feedFormat, categories, lastUpdated, updateFrequency }
disclaimersarray[{ text, context?, required }] legal disclaimers
industrystringSector classification
targetAudiencestringTarget audience description
contactobject{ email, phone, website }
metadataobject{ createdDate, updatedDate, version }

Resolution flow

When you create or update an advertiser with brand: "acme.com":
1

Try /.well-known/brand.json

Scope3 fetches https://acme.com/.well-known/brand.json. If present and valid, it’s used as the manifest.
2

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.
3

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.
4

Surface as linkedBrand

The advertiser response carries a linkedBrand object containing the resolved name, domain, logos, colors, industry, tone, tagline, and the full manifest.
If the manifest can’t be resolved, the advertiser response includes 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
The platform extracts the canonical brand name from any of these forms.

Common operations

Brand resolution happens implicitly through the advertiser endpoints — there is no standalone POST /v2/brands for buyers. The relevant moments:

Create an advertiser with a brand domain

curl -X POST https://api.agentic.scope3.com/api/buyer/advertisers \
  -H "Authorization: Bearer $SCOPE3_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme",
    "brand": "acme.com",
    "saveBrand": false
  }'
If 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 with saveBrand: true:
curl -X POST https://api.agentic.scope3.com/api/buyer/advertisers \
  -H "Authorization: Bearer $SCOPE3_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme",
    "brand": "acme.com",
    "saveBrand": true
  }'
This enriches and persists the manifest so future references resolve without re-enrichment.

Re-resolve a brand on an existing advertiser

curl -X PUT https://api.agentic.scope3.com/api/buyer/advertisers/12345 \
  -H "Authorization: Bearer $SCOPE3_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "brand": "acme.com" }'
Updating the 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

curl "https://api.agentic.scope3.com/api/buyer/advertisers/12345?includeBrand=true" \
  -H "Authorization: Bearer $SCOPE3_API_KEY"
The response includes 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:
  1. The storefront resolves the active brand domain
  2. Scope3 looks up advertisers linked to that brand
  3. The buyer is dropped into the right advertiser context — private/member agents become discoverable
See the storefront onboarding setup guide for the full flow.

Best practices

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.
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.
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.
Point productCatalog.feedUrl at a Google Merchant Center, Facebook Catalog, or custom feed. AdCP-aligned discovery and DCO can reference catalog SKUs directly.

Advertiser

Owns the brand reference; surfaces resolved brand under linkedBrand

Creative

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