> ## Documentation Index
> Fetch the complete documentation index at: https://docs.interchange.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Brand

> Brand identity resolved from the AdCP brand registry — logos, colors, tone, product catalog, and disclaimers

## Overview

A **Brand** in v2 is the resolved identity behind an [Advertiser](./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. `northwind.example`) and Scope3 resolves the full manifest from the brand's own manifest, the registry, or enrichment:

1. The brand's own `/.well-known/brand.json`
2. The **Agentic Advertising Organization (AAO)** brand registry maintained by Scope3 and partners
3. Brandfetch enrichment when no official manifest or registry entry is available

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.

<Note>
  **Where this differs from v1**: V1 had a separate "Brand Stories" object describing target audiences in natural language. V2 resolves brand identity from `brand.json`, the registry, or enrichment. Audience descriptions now belong on signals, brand stories where supported, and campaign briefs. This guide covers the v2 brand resolution model.
</Note>

## 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 resolved brand identity

## 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 with `brand: "acme.com"`:

<Steps>
  <Step title="Try /.well-known/brand.json">
    Scope3 fetches `https://acme.com/.well-known/brand.json`. If present and valid, it's used as the manifest.
  </Step>

  <Step title="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.
  </Step>

  <Step title="Optional auto-save">
    Pass `saveBrand: true` after reviewing enrichment to persist brand identity into the registry when the brand isn't yet registered. When no enrichment data exists, use `saveBrand: true` only after confirming the advertiser name and brand domain.
  </Step>

  <Step title="Surface as linkedBrand">
    The advertiser response carries a `linkedBrand` object containing the resolved name, domain, logos, colors, industry, tone, tagline, and the full manifest.
  </Step>
</Steps>

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.

House-portfolio manifests may also include `authorized_operators`. Interchange can use that field as trusted evidence for storefront operator-domain auto-verification when the registered account domain is already approved and the manifest links the account domain to the requested alias or rebrand operator domain. The `operator_domain` check on your storefront readiness reports what is still outstanding and who owns the next step.

## 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

```bash theme={null}
curl -X POST https://api.interchange.io/api/v2/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 an advertiser response includes `brandWarning` because the brand resolved through enrichment rather than the AAO registry, review the returned brand details first. To persist the enriched brand, update the existing advertiser with `saveBrand: true`:

```bash theme={null}
curl -X PUT https://api.interchange.io/api/v2/buyer/advertisers/12345 \
  -H "Authorization: Bearer $SCOPE3_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "brand": "acme.com",
    "saveBrand": true
  }'
```

This persists the enriched identity so future references resolve without re-enrichment. If registry/enrichment lookup has no brand data, retry advertiser creation with `saveBrand: true` only after confirming the advertiser name and brand domain.

### Re-resolve a brand on an existing advertiser

```bash theme={null}
curl -X PUT https://api.interchange.io/api/v2/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

```bash theme={null}
curl "https://api.interchange.io/api/v2/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

<AccordionGroup>
  <Accordion title="Self-hosted brand.json">
    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.
  </Accordion>

  <Accordion title="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.
  </Accordion>

  <Accordion title="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.
  </Accordion>

  <Accordion title="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.
  </Accordion>
</AccordionGroup>

## Related concepts

<CardGroup cols={2}>
  <Card title="Advertiser" href="./advertiser" icon="user-tie">
    Owns the `brand` reference; surfaces resolved brand under `linkedBrand`
  </Card>

  <Card title="Creative" href="./creative" icon="image">
    Auto-resolves brand\_domain from the campaign's advertiser
  </Card>

  <Card title="Signal" href="./signal" icon="wave-pulse">
    Audience definitions complementary to brand identity
  </Card>

  <Card title="Storefront onboarding" href="/v2/setup/storefront-onboarding" icon="store">
    Brand-aware sign-in surfaces the right advertiser context
  </Card>
</CardGroup>
