Skip to main content
The Ad Context Protocol (AdCP) puts a brand’s identity in one file, brand.json, at https://{domain}/.well-known/brand.json: its names, logos, colors, fonts and voice, for ad tech and agents. It is the open format Artbucket follows to publish a brand for machines, and it reads it back to start a brand.
  • BrandHub serves each public brand as a Brand Canonical Document, at /{org}/{brand}/brand.json, from its latest release (@{n} for another). A private or never-released brand has none.
  • A verified domain answers /.well-known/brand.json with an Authoritative Location Redirect to that document (below).
  • A new brand can be made from any domain’s brand.json (the import).

The export

The document is drawn from the release’s rules, by key. Only the default context is read, but for logos, whose context versions are logos of their own. Where a field lists several keys, the first the brand has wins.

Identity

Colors

Type

Logos

Every image of every logo.* rule, context versions included, is one logos[] entry; rules named like a do or a don’t (logo.never, logo.always) are not logos.

Voice, spacing and imagery

ext.artbucket

What AdCP has no field for stays one link away, under ext.artbucket:
rules is every rule, losslessly (rules.json); guidelines the portal BrandHub links as the brand’s guidelines, else its BrandHub page.

What the export leaves out

  • Colors: print values (cmyk, pantone, ral, rgb), tints, gradients (the solid is kept), groups and weights, each color’s label and usage, alpha, and every context version.
  • Type: a bare type scale (AdCP’s scale is by role), spec.license, spec.source and spec.download, and the weight and style of each file.
  • Logos: visual do’s (logo.always): AdCP has none.
  • Everything else: every rule outside the keys above, the brand’s pages and theme, and brand.audience. They are in rules.json.

Make it complete

A brand that holds these rules fills every field the export writes. The complete example holds them all. Then release the brand and make it public on BrandHub: the document is the release’s, so a change shows once it is released.

An example

The export of the complete example’s release 4, with its organization’s verified domain acme.com:
File URLs are signed for a day: an agent that keeps the document should fetch it again rather than keep its URLs.

Your domain

To have agents that read your domain find the brand, host one file at https://{domain}/.well-known/brand.json, an Authoritative Location Redirect. The brand’s Sharing tab gives it:
A domain the organization verified, serving the app or one of its portals, answers /.well-known/brand.json itself, from the organization’s public, released brands (on a portal’s domain, those the portal shows):
  • the one whose domain the host proves, else the only one, else the default one, as an Authoritative Location Redirect to it on BrandHub;
  • with several and none of those, a House Portfolio of them all, inline: { "$schema", "version": "1", "house": { "domain", "name" }, "brands": [...] }.
Any other host answers 404. The public Brand Agent Score reads a domain’s /.well-known/brand.json (or the brand.json its llms.txt links) for its rules. An Authoritative Location Redirect there is followed once, over https, so the one-line file above is enough for the score to read the brand on BrandHub.

The import

New brand, From a domain in the app, or POST /api/v1/brands with domain (or the document itself as brandJson), makes a brand from a brand.json: making one has the steps. It is the export run backwards, so a document Artbucket wrote comes back as it was, as far as the document says it.
  • Localized fields (AdCP 3.2’s tagline, tone.*, an asset’s name and description) are read in English, else in the document’s default_language, else as their plain value; never whichever translation comes first. A localized list is taken whole.
  • Documents of other shapes: an Authoritative Location Redirect is followed once, exactly; a House Portfolio offers each of its brands, and its brand_refs are read at their own domains, ten at most; a document that only points at its house, or only names a brand agent, makes no brand and says why.
  • Dropped: what has no place in the rules (keller_type, house_domain, trademarks, agents, brand_agent, contact, privacy_policy_url, visual_guidelines.photography, motion, graphic_style, the other logo_placement fields, colors that aren’t six-digit hex, assets that aren’t images) is listed in the answer’s dropped, by its path. A logo or font file that won’t fetch is listed in skipped. Neither refuses the brand.
The document is fetched as the protocol says: over https only, from public hosts, at most 512 KB and 20 seconds, redirected only to the domain’s exact www twin and back.