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:
BRAND_IDENTITY_API_KEY=lh_sk_your_key_hereEvery 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 atype(icon, symbol or logo), athemeand a list offormats, SVG first.colors: HEX values with a role (accent,dark,light,brand) and abrightnessfrom 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:
/**
* 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.
Show a logo
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.
<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.
?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:
curl https://brandidentityapi.com/v1/me -H "Authorization: Bearer $BRAND_IDENTITY_API_KEY"{
"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"
}
}