Skip to content

Create a brand

POST
/api/v1/brands
curl --request POST \
--url http://localhost:3000/api/v1/brands \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "name": "example", "slug": "example", "from": "example", "template": "firefox", "domain": "example", "brandJson": { "additionalProperty": "example" }, "brand": "example", "publish": { "note": "example", "image": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" }, "visibility": "private", "dryRun": true }'

Empty, or from another brand’s current rules, a public BrandHub brand’s release, a template, or an AdCP brand.json: a domain’s (https://{domain}/.well-known/brand.json, following its authoritative_location and a house portfolio’s brand_refs, https only) or a brandJson document. From a brand.json, its colors, type, logos, voice and more become rules, its logos and font files are ingested from their URLs, and the brand keeps its domain (a template’s too); skipped and dropped say what was left out. publish releases it and visibility: public lists it on BrandHub in the same call (both take share on the project); if either fails, no brand is made. Its history starts at version 1.

Scope: write.

Media typeapplication/json
object
name

Required, but from a brand.json: then the brand’s name there when left out

string
>= 1 characters <= 80 characters
slug

Defaults to the name, as a slug; from a brand.json, to its id

string
<= 60 characters /^[a-z0-9]+(-[a-z0-9]+)*$/
from
Any of:
string
<= 60 characters /^[a-z0-9]+(-[a-z0-9]+)*$/
template

Start from a showcase brand’s rules, theme, pages and logos, to edit into your own

string
Allowed values: firefox rust blender
domain

Start from this domain’s AdCP brand.json (https://{domain}/.well-known/brand.json, following its authoritative_location and a house portfolio’s brand_refs): its colors, type, logos (ingested from their URLs), voice and more, as rules. With brandJson, only where that document came from. The brand keeps the document’s own domain (its url), else this one

string
>= 1 characters <= 253 characters
brandJson

Start from this AdCP brand.json document, rather than one read from domain

object
key
additional properties
brand

Which brand of a house portfolio, by its AdCP id; when left out, the one at domain, or its only one

string
<= 100 characters /^[a-z0-9_]+$/
publish
Any of:
boolean
visibility

public puts its release on BrandHub for anyone, once made; takes publish

string
Allowed values: private public
dryRun

Check that a brand can be made here (write on the project, not read-only, room in the plan’s brands), make nothing: before long work that ends in one

boolean

Created

Media typeapplication/json
object
data
required
object
id
required
string format: uuid
/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/
slug
required
string
name
required
string
default
required
boolean
private
required

Only grants on it, and admins, reach it in the app

boolean
visibility
required

Who sees it on BrandHub

string
Allowed values: private public
from

The BrandHub brand it started from, as {org}/{brand}@{n}

string | null
domain

Its own domain (acme.com): whoever proves it may claim its BrandHub listing

string | null
movedTo

Claimed on BrandHub by whoever proved its domain: the listing that took its place, as {org}/{brand}

string | null
rules
required
integer
>= -9007199254740991 <= 9007199254740991
createdAt
required
string format: date-time
/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$/
skipped

From a brand.json: files and portfolio brands that wouldn’t read; from a BrandHub brand: files shown there but not handed out. Each with why

Array<string>
dropped

From a brand.json: what it says that has no place in the rules, by its path there

Array<string>
published

With publish: the version released

integer
>= -9007199254740991 <= 9007199254740991
hub
Any of:
object
visibility
required
string
Allowed values: private public
url
required
string
Example
{
"data": {
"visibility": "private",
"hub": {
"visibility": "private"
}
}
}

An error

Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
detail
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"detail": "example"
}
}