Skip to content
Docs page

API reference

Brand API

GET /v1/brands/{domain}: every field in the response (logos, brand colors, fonts, company data), the parameters, status codes and caching.

Request

GEThttps://brandidentityapi.com/v1/brands/{identifier}

Needs a secret key. A lookup costs one credit only when it returns a brand with a logo: a 4xx or 5xx answer is refunded straight away.

Path parameter

NameDescription
identifierA domain (stripe.com), a URL (https://www.stripe.com/pricing, URL-encoded) or an email address (jane@stripe.com). We reduce it to the registrable domain, so shop.example.co.uk is filed under example.co.uk. IP addresses, localhost and private suffixes such as .local are refused with invalid_domain.

Query parameter

NameDescription
refreshtrue re-crawls the site now instead of answering from the index. Paid plans only; on the free plan it is ignored. It counts as one lookup, like any other.

Example

curl https://brandidentityapi.com/v1/brands/stripe.com \
  -H "Authorization: Bearer $BRAND_IDENTITY_API_KEY"
200 OK · stripe.com, trimmed
{
  "id": "0b7e9a52-3c1d-4f6e-8a2b-5d9c1e7f4a30",
  "name": "Stripe",
  "domain": "stripe.com",
  "claimed": false,
  "description": "Stripe is a financial infrastructure platform that businesses use to accept payments and manage money online.",
  "longDescription": null,
  "links": [
    {
      "name": "twitter",
      "url": "https://x.com/stripe"
    },
    {
      "name": "linkedin",
      "url": "https://www.linkedin.com/company/stripe"
    },
    {
      "name": "github",
      "url": "https://github.com/stripe"
    }
  ],
  "logos": [
    {
      "type": "logo",
      "theme": "dark",
      "formats": [
        {
          "src": "https://brandidentityapi.com/cdn/5f0d6a1e8c2b4e7a9d3f1b6c0a8e2d4f.svg",
          "format": "svg",
          "background": "transparent",
          "width": 360,
          "height": 150,
          "size": 1612
        },
        {
          "src": "https://brandidentityapi.com/cdn/5f0d6a1e8c2b4e7a9d3f1b6c0a8e2d4f.png",
          "format": "png",
          "background": "transparent",
          "width": 1024,
          "height": 427,
          "size": 18244
        }
      ],
      "tags": []
    },
    {
      "type": "logo",
      "theme": "light",
      "formats": [
        {
          "src": "https://brandidentityapi.com/cdn/9a3c7e1f5b0d4a8c2e6f1d9b3a7c5e0f.svg",
          "format": "svg",
          "background": "transparent",
          "width": 360,
          "height": 150,
          "size": 1598
        }
      ],
      "tags": [
        "generated"
      ]
    },
    {
      "type": "icon",
      "theme": null,
      "formats": [
        {
          "src": "https://brandidentityapi.com/cdn/2e8b4d0f6a1c3e5b7d9f0a2c4e6b8d1f.png",
          "format": "png",
          "background": "transparent",
          "width": 256,
          "height": 256,
          "size": 6340
        }
      ],
      "tags": []
    }
  ],
  "colors": [
    {
      "hex": "#635bff",
      "type": "accent",
      "brightness": 112
    },
    {
      "hex": "#0a2540",
      "type": "dark",
      "brightness": 32
    },
    {
      "hex": "#f6f9fc",
      "type": "light",
      "brightness": 248
    }
  ],
  "fonts": [
    {
      "name": "Sohne",
      "type": "title",
      "origin": "custom",
      "originId": null,
      "weights": [
        500,
        600
      ]
    },
    {
      "name": "Sohne",
      "type": "body",
      "origin": "custom",
      "originId": null,
      "weights": [
        400
      ]
    }
  ],
  "images": [],
  "ogImage": "https://stripe.com/img/v3/home/social.png",
  "company": {
    "employees": 5001,
    "foundedYear": 2010,
    "kind": "PRIVATELY_HELD",
    "location": {
      "city": "San Francisco",
      "state": "California",
      "country": "United States",
      "countryCode": "US",
      "region": "Americas",
      "subregion": "Northern America"
    },
    "industries": [
      {
        "id": "payments",
        "name": "Payments",
        "slug": "payments",
        "emoji": "💳",
        "score": 0.92,
        "parent": {
          "id": "finance",
          "name": "Finance & Fintech",
          "slug": "finance",
          "emoji": "💳"
        }
      }
    ],
    "ticker": null,
    "financialIdentifiers": {
      "isin": [],
      "ticker": []
    }
  },
  "qualityScore": 0.94,
  "isNsfw": false,
  "restriction": null,
  "urn": "urn:brandidentityapi:brand:0b7e9a52-3c1d-4f6e-8a2b-5d9c1e7f4a30",
  "status": "ready",
  "updatedAt": "2026-10-12T09:00:00.000Z"
}

Response fields

Field names follow Brandfetch's Brand API v2. Fields marked as additions are ours.

Brand

Brand fields
FieldTypeDescription
idstringThe record's stable id.
namestring | nullThe brand's name as it presents itself.
domainstringThe registrable domain the record is filed under.
claimedbooleanTrue when the brand's owner has claimed and checked the record.
descriptionstring | nullOne or two neutral sentences about what the company does.
longDescriptionstring | nullA longer description, when one is available.
linksLink[]Social and reference profiles. See Link.
logosLogo[]Every logo we kept, each with its formats. See Logo.
colorsColor[]Brand colors with their roles. See Color.
fontsFont[]The title and body fonts the site loads. See Font.
imagesImage[]The site's pictures, none of them icons: the banner (its share image) first, then the other images we found on its page. Each is a JPEG on our CDN, at most 1600px wide. Empty when the site has none.
ogImagestring | nullThe URL of the site's own share image: og:image, or twitter:image when the page has no og:image. It points at the file on the site. When the file is at least 400 by 200, we also keep a copy as a banner in images. An addition to Brandfetch's shape.
companyCompany | nullFirmographics. See Company.
qualityScorenumber0 to 1: how complete and trustworthy the record is.
isNsfwbooleanTrue when the site is adult content. The record is then empty: no name, logos, colors, fonts, images, links or description, and a company with only its Adult industry.
restriction{ code, message } | nullNull for a normal record. For an adult site, { code: "nsfw", message } says why the record is empty, so it is not mistaken for a site we failed to read. An addition to Brandfetch's shape.
urnstringurn:brandidentityapi:brand:{id}
status"ready" | "partial" | "pending" | "failed"Whether the record is complete. Partial records are retried sooner. An addition to Brandfetch's shape.
updatedAtstringWhen the record was last refreshed, ISO 8601. An addition.
Logo fields
FieldTypeDescription
type"icon" | "symbol" | "logo" | "other"icon: a square mark, like an app icon. symbol: the mark without words. logo: the wordmark or full lockup.
theme"light" | "dark" | nullThe color of the artwork's ink. A dark logo is for light backgrounds; a light logo is for dark backgrounds. Null when it reads on both.
formatsFormat[]The same logo in each file format we have, SVG first.
tagsstring[]Hints. generated means we drew this variant from a single-color original for the other background; wikimedia means the file came from Wikimedia Commons; photographic marks a photo rather than artwork.

Format

Format fields
FieldTypeDescription
srcstringAbsolute URL of the file on our CDN. Stable: safe to store and hotlink.
format"svg" | "png" | "webp" | "jpeg" | "ico"The file format.
background"transparent" | nulltransparent when the image has a used alpha channel.
widthnumber | nullPixels. For an SVG, its intrinsic size.
heightnumber | nullPixels.
sizenumberFile size in bytes.

Color

Color fields
FieldTypeDescription
hexstringSix lower-case hex digits with a leading #.
type"accent" | "dark" | "light" | "brand"accent: the most saturated color the brand uses prominently. dark: the darkest color in real use. light: the lightest. brand: the other distinct colors, heaviest first. At most six.
brightnessnumber0 to 255, perceived brightness, (299R + 587G + 114B) / 1000. Put dark text on colors at 150 and above.

Font

Font fields
FieldTypeDescription
namestringThe family name, as the site declares it.
type"title" | "body"Where the site uses it: headings or running text.
origin"google" | "adobe" | "custom" | "system"Where the font file comes from. custom is a self-hosted or licensed face. adobe (Adobe Fonts) is an addition; Brandfetch reports those as custom.
originIdstring | nullThe family id at its origin, such as the Google Fonts family name.
weightsnumber[]Weights the site loads, such as 400 and 600.
Link fields
FieldTypeDescription
namestringtwitter, linkedin, github, instagram, facebook, youtube, tiktok, crunchbase, discord, pinterest, threads, bluesky, medium or wikipedia.
urlstringThe profile URL.

Company

Company fields
FieldTypeDescription
employeesnumber | nullThe floor of a headcount band: 1, 2, 11, 51, 201, 501, 1001, 5001 or 10001. 2 is 2 to 10; records crawled before that band existed say 1 for 1 to 10.
foundedYearnumber | nullThe year the company was founded.
kindstring | nullPUBLIC_COMPANY, PRIVATELY_HELD, NON_PROFIT, GOVERNMENT_AGENCY, EDUCATIONAL, SELF_EMPLOYED or PARTNERSHIP.
locationLocation | nullHeadquarters. See Location.
industriesIndustry[]Up to three industries, most likely first. See Industry.
tickerstring | nullExchange and symbol for a listed company, such as NASDAQ:AAPL. An addition.
financialIdentifiers{ isin: string[], ticker: string[] }Brandfetch's field, never null: ticker holds the bare symbol from ticker above, such as AAPL. isin is not collected yet and is always empty.

Location

Location fields
FieldTypeDescription
citystring | nullCity.
statestring | nullState, province or region.
countrystring | nullCountry name in English.
countryCodestring | nullISO 3166-1 alpha-2 code, such as US.
regionstring | nullContinent-level region, such as Americas.
subregionstring | nullSubregion, such as Northern America.

Industry

Industry fields
FieldTypeDescription
idstringStable id of the category.
namestringDisplay name.
slugstringURL-safe name, stable forever.
emojistringAn emoji for the parent category.
scorenumber0 to 1: how sure the classifier is.
parentobject | nullThe parent category (id, name, slug, emoji), or null for a top-level one.

Image

Image fields
FieldTypeDescription
type"banner" | "other"banner: the site's share image (og:image). other: another picture from its page, a hero or a team photo.
formatsFormat[]As for logos.
tagsstring[]Hints, as for logos.

Status codes

StatusCodeMeaning
200The brand record.
400invalid_domainThe identifier has no public domain in it.
401unauthorizedNo key, or a key that is not valid.
403forbiddenA publishable key, or a suspended account.
404domain_not_foundNo site answers at that domain.
404no_brand_dataThe site answered, but there was nothing to build a brand from.
422fetch_blockedThe site refused our crawler, or resolves to an address we never fetch.
402insufficient_creditsNo credits left. Add credits on the billing page.
429rate_limitedToo many requests this minute.
502fetch_failedThe site could not be fetched.
504timeoutThe live crawl ran out of time. Retry in a minute.
500internal_errorSomething failed on our side.
503internal_errorUsage metering was briefly unavailable, so nothing ran and nothing was counted. See Retry-After.

Every error has the same envelope. The Errors page has one entry per code.

Headers

HeaderDescription
X-CacheHIT when the answer came from the index, MISS when it was crawled for this request.
X-Request-IdA unique id for the request. Quote it when you contact us.
X-Credits-RemainingCredits left after this lookup.
X-RateLimit-LimitRequests allowed per minute on your plan.
X-RateLimit-RemainingRequests left in the current minute.
X-RateLimit-ResetWhen the current minute ends, in Unix seconds.
Retry-AfterOn a 429, how many seconds to wait.

Freshness and refresh

  • A complete record is re-crawled when it is more than 30 days old and someone looks it up. You get the stored record at once; the refresh runs behind it.
  • A partial record, usually from a site that was down or slow, is retried after 3 days.
  • On paid plans, ?refresh=true re-crawls on the spot and returns the new record.
Caching on your side
You may cache and store responses forever, on every plan. The updatedAt field tells you how old a record is if you want your own refresh rule.

Brandfetch alias

GET /v2/brands/{identifier} and GET /v2/brands/domain/{domain} answer exactly like this endpoint, at the paths Brandfetch's API uses. Point a Brandfetch client at https://brandidentityapi.com and it works. See Migrate from Brandfetch.