curl --header "Authorization: Bearer $LOGO_DEV_SECRET_KEY" \
"https://api.logo.dev/v2/brands/brandmark?domain=stripe.com"{
"data": {
"object": "image",
"kind": "brandmark",
"brand_id": "brand_4x0wr3g0000g00400000000004",
"status": "ready",
"url": "https://img.logo.dev/assets/SEALED_TOKEN",
"etag": "9f2c1e7a4b8d3f60",
"blurhash": "LKO2?U%2Tw=w]~RBVZRi};RPxuwH",
"source": {
"width": 512,
"height": 512,
"format": "svg",
"has_transparency": true,
"is_vector": true
},
"last_updated_at": "2026-08-01T09:00:00Z",
"expires_at": "2026-09-28T13:00:00Z"
},
"metadata": {
"request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2",
"resolution": {
"type": "domain",
"value": "stripe.com",
"method": "direct",
"context": {}
}
}
}Get a brandmark
Get a brand’s brandmark with a temporary download URL, dimensions, and blurhash.
curl --header "Authorization: Bearer $LOGO_DEV_SECRET_KEY" \
"https://api.logo.dev/v2/brands/brandmark?domain=stripe.com"{
"data": {
"object": "image",
"kind": "brandmark",
"brand_id": "brand_4x0wr3g0000g00400000000004",
"status": "ready",
"url": "https://img.logo.dev/assets/SEALED_TOKEN",
"etag": "9f2c1e7a4b8d3f60",
"blurhash": "LKO2?U%2Tw=w]~RBVZRi};RPxuwH",
"source": {
"width": 512,
"height": 512,
"format": "svg",
"has_transparency": true,
"is_vector": true
},
"last_updated_at": "2026-08-01T09:00:00Z",
"expires_at": "2026-09-28T13:00:00Z"
},
"metadata": {
"request_id": "request_01k6z8m2a4b5c6d7e8f9g0h1j2",
"resolution": {
"type": "domain",
"value": "stripe.com",
"method": "direct",
"context": {}
}
}
}Get your API keys
Authorizations
Your secret key (sk_), as Bearer sk_.... Call the Logo API only from your server.
Query Parameters
A company domain. Reduced to its registrable domain, so www.stripe.com looks up stripe.com. Send exactly one identifier.
"stripe.com"
The stock or ETF symbol, in any case, with no exchange prefix: aapl and AAPL return the same brand. A bare symbol resolves against US exchanges. For a listing on another exchange, add the exchange suffix, such as 7203.T. Send exactly one identifier.
"aapl"
An ISIN. Case-insensitive. Send exactly one identifier.
"US0378331005"
A crypto token symbol. Case-insensitive. Send exactly one identifier.
"BTC"
A brand name. Resolved to the top search match. Send exactly one identifier.
"Stripe"
A card-statement merchant descriptor. Announced but not yet enabled for any account, so it currently answers 403. Send exactly one identifier.
"SQ *BLUE BOTTLE COFFEE"
Response
The brand is ready and has a brandmark.
Hide child attributes
Hide child attributes
"image"logo or brandmark.
logo, brandmark "brand_4x0wr3g0000g00400000000004"
"ready"Temporary signed download URL. It stops working at expires_at: download and host the image yourself. Add size, format (png, jpg, webp), or theme (light, dark) to format the download. Downloads do not count toward CDN image usage.
Identifies this version of the source image, and is the same on every route. Save it and download again only when it changes.
Compact blurred placeholder for the image.
The source file behind the image.
When the image last changed. null if it has not changed since the brand was indexed.
When url stops working, about 24 hours after the request.
Hide child attributes
Hide child attributes
Unique id for this request. Also sent as the Request-Id header.
"request_01k6z8m2a4b5c6d7e8f9g0h1j2"
Brand and image lookups only.
Hide child attributes
Hide child attributes
Which identifier the request used.
domain, ticker, isin, crypto, name, brand_id The identifier after normalization: the registrable domain, an upper-cased ticker, and so on.
How the identifier reached the brand. direct is a brand id or a domain that is its own brand; domain went through an alias or redirect; security is a ticker or ISIN; crypto is a crypto token symbol; search is a name lookup. Empty on a cached miss.
direct, domain, security, crypto, search, Reserved for brands involved in a merchant lookup. Always {} today.
202 responses only.
Hide child attributes
Hide child attributes
indexing is a brand's first crawl; resolving means the identifier is still being matched to a brand.
indexing, resolving Wait this long before retrying. Matches the Retry-After header.
30
Stop polling after this long.
300
Whether a brand.indexed webhook event carrying this request's request_id will be sent when the lookup settles.
Present when a brand lookup (GET /v2/brands or GET /v2/brands/{id}) ran the automatic subscribe: webhooks are on for the account, and nosubscribe is not true. See automatic subscriptions.
Hide child attributes
Hide child attributes
subscribed: the account is subscribed to the brand. quota_exceeded: the account is at its plan's subscription limit, so the brand was not subscribed. The lookup is answered and billed either way.
subscribed, quota_exceeded Why the subscribe was refused. Only with quota_exceeded.
Was this page helpful?