Skip to content
Docs page

Start

Getting started

Create a free key, make your first brand lookup in curl, JavaScript or Python, and cache the result.

Create a key

Sign up, verify your email address, open API keys in the dashboard and create a secret key. It starts with lh_sk_ and is shown once, so copy it into your secret store or .env file straight away:

.env
BRAND_IDENTITY_API_KEY=lh_sk_your_key_here

Every account starts with 50 free brand lookups, plus 500,000 logo renders and 250,000 searches a month (monthly limits). No card is needed. A plan adds credits every month, and unused ones never expire.

Make your first request

Ask for a brand by its domain. A full URL or an email address works too: we reduce it to the registrable domain.

curl https://brandidentityapi.com/v1/brands/stripe.com \
  -H "Authorization: Bearer $BRAND_IDENTITY_API_KEY"

If we have not seen the domain before, the first lookup crawls it live, usually in a few seconds. Every later lookup is answered from the index, and the X-Cache header says which one you got.

Read the response

The record has the same field names as Brandfetch's Brand API v2. The parts most apps use:

  • logos: each logo has a type (icon, symbol or logo), a theme and a list of formats, SVG first.
  • colors: HEX values with a role (accent, dark, light, brand) and a brightness from 0 to 255.
  • fonts: the title and body fonts the site really loads, and where they come from.
  • company: industry, headcount band, founding year and location, when known.

A logo's theme is the color of its ink, so a logo for a light background has the dark theme. This helper picks the right one:

javascript
/**
 * The best logo for a background: an SVG wordmark when there is one, else
 * any logo, else the icon. `background` is the color you will draw it on.
 */
function pickLogo(brand, background = "light") {
  // A logo for a light background is drawn in dark ink, and the reverse.
  const ink = background === "light" ? "dark" : "light";
  const byPreference = [
    (logo) => logo.type === "logo" && logo.theme === ink,
    (logo) => logo.type === "logo" && logo.theme === null,
    (logo) => logo.type === "icon",
  ];
  for (const matches of byPreference) {
    const logo = brand.logos.find(matches);
    if (!logo) continue;
    const svg = logo.formats.find((format) => format.format === "svg");
    return (svg ?? logo.formats[0])?.src ?? null;
  }
  return null;
}

Every field is described in the Brand API reference.

Asset URLs in the response are on our CDN and stable, so you can use them directly. For a list of companies, the logo CDN is simpler still: one URL per domain, sized for you.

html
<img
  src="https://brandidentityapi.com/logo/stripe.com?type=icon&size=128"
  alt="Stripe logo"
  width="64"
  height="64"
  loading="lazy"
/>

Brands in the index load without a key. See the Logo API for sizes, formats and dark backgrounds.

Cache the result

Store the JSON next to the company in your own database and read it from there. You may keep it for as long as you like on every plan. There is no rule that makes you re-fetch, and no rule against copying the logos to your own storage.

When to refresh
Brands change logos rarely. A refresh every few months, or when a user reports a stale logo, is plenty. On paid plans, ?refresh=true re-crawls the site there and then.

Check your usage

Every brand lookup carries X-Credits-Remaining. For the whole picture, ask /v1/me, which is free:

bash
curl https://brandidentityapi.com/v1/me -H "Authorization: Bearer $BRAND_IDENTITY_API_KEY"
200 OK · application/json
{
  "plan": "free",
  "credits": {
    "balance": 8,
    "remaining": 8
  },
  "period": "2026-10",
  "usage": {
    "lookups": 42,
    "logos": 1280,
    "searches": 96
  },
  "limits": {
    "perMinute": 60,
    "batchSize": 25,
    "crawlsPerMinute": 10,
    "logosPerMonth": 500000,
    "searchesPerMonth": 250000
  },
  "key": {
    "id": "key_id",
    "kind": "secret"
  }
}