Product
Developers
Startups FREE GitHub

API reference

Docs.

Everything LogoAPI does today, with real examples. Every route is a plain GET. Updated 2026-10-26

Quick start

No key, no signup. Copy this tag, swap the domain, done.

<img src="https://logoapi.sh/stripe.com.svg" alt="Stripe" height="24">
Stripe logo

Bare domain

GET/{domain}

Same answer as /{domain}.svg, without the extension. A Clearbit-style URL works after a host swap.

<img src="https://logoapi.sh/stripe.com" alt="Stripe" height="24">

Icon

GET/icon/{domain}.svg

The square mark, for avatars and lists.

<img src="https://logoapi.sh/icon/github.com.svg" width="32" height="32" alt="GitHub">

Favicon

GET/favicon/{domain}

A favicon for a site, taken from the catalog icon. /favicon/{domain}.svg works too. The answer is SVG. An unknown domain returns a 404 with a JSON body. PNG is coming.

<link rel="icon" type="image/svg+xml" href="https://logoapi.sh/favicon/github.com">

Colour versions

GET/{version}/{domain}.svg

Put white, black, grey or dark in front of any logo path. white and black repaint every colour to one flat colour, grey removes the colour, and dark is for dark backgrounds. The icon form is /{version}/icon/{domain}.svg. The .svg ending is optional.

VersionURL
white/white/stripe.com.svg
black/black/stripe.com.svg
grey/grey/stripe.com.svg
dark/dark/stripe.com.svg
icon/white/icon/github.com.svg
Stripe, black
black
Stripe, grey
grey
Stripe, white
white
Stripe, dark
dark
<img src="https://logoapi.sh/white/stripe.com.svg" alt="Stripe" height="24">

Tags and filters

GET/search?tag={tag}

Filter by exactly one tag; a comma list returns 400. With tag, q is optional. A tag alone returns the first 48 results, with no total. A tag plus q returns up to 8. Asking for page=2 of a tag returns 403. Case does not matter.

curl "https://logoapi.sh/search?tag=israel"
curl "https://logoapi.sh/search?tag=israel&q=teva"
Response
{
  "query": "teva",
  "tag": ["israel"],
  "page": 1,
  "results": [ { "domain": "teva.com", "name": "Teva", "tags": ["health", "israel"], ... } ]
}
TagWhat it covers
techSoftware, SaaS, hardware, AI, security, telecom
devtoolsDeveloper tools, languages, frameworks, databases, open source
financeBanks, payments, fintech, investors, insurance
retailConsumer brands, shops, food, travel, cars
mediaNews, TV, games, music, social, streaming
organizationsNonprofits, government, universities, standards bodies
healthPharma, hospitals, health tech
industryEnergy, manufacturing, logistics, real estate
israelIsraeli companies (also carry a sector tag)

An unknown tag returns 400 with the allowed list. For a browsable list, see /tag/finance or the Logo Finder.

Brand pages

GET/brand/{domain}

An HTML page for one brand: its logo, icon, white, black, grey and dark versions, colours, URLs and embed code. Link to it from your docs or share it with a teammate. An unknown domain returns 404.

https://logoapi.sh/brand/stripe.com

Open the Stripe page

Aliases

Some brands answer on several domains, for example teva.co.il and teva.com both serve the Teva logo. Search returns the main domain once, even when you search for an alias.

Errors

StatusWhen
404Logo, icon, version or brand page for an unknown domain. Plain text not found, no placeholder image, so your own fallback runs. Cached for an hour. /favicon/{domain} returns a JSON body instead: {"error":"not_found", "message":..., "claim":...}.
400Bad search input: q too short or too long, an unknown tag, or a comma list of tags. JSON with an error message.
403page=2 or higher on a tag search. JSON with error: "page_limit".
429You went over a limit (see Limits). JSON body, plus a Retry-After header.
429 body
{
  "error": "rate_limited",
  "message": "...You hit the free limit (120 searches per minute)...",
  "retry_after_seconds": 60
}

error is rate_limited (searches per minute), daily_limit (searches per day) or guess_limit (too many unknown domains). Wait retry_after_seconds before you retry.

<img src="https://logoapi.sh/icon/acme.example.svg"
     onerror="this.src='/img/generic-company.svg'" alt="Acme">

Caching and CORS

Logos, icons, favicons and colour versions are cached at the edge for a day and served stale for a week while they refresh (max-age=86400, stale-while-revalidate=604800). Search results cache for 5 minutes. Brand pages and 404 answers cache for an hour. Error JSON is never cached. Every response sends Access-Control-Allow-Origin: *, so you can fetch from any site.

Limits

Free, no key, no attribution. Fair use: embed our logos and use the search API in your site or app. Do not bulk-copy the catalog to run a competing service. Limits are per IP address.

LimitWhat happens
150 requests per 10 secondsAcross all of logoapi.sh. Over it you get a 429.
300 requests per minuteOver it, the IP is blocked for 1 hour. Verified search-engine crawlers are exempt.
120 searches per minute429 with Retry-After.
500 searches per day50 per day from cloud and hosting networks. Resets at 00:00 UTC.
300 unknown domains in 10 minutes300 404s in 10 minutes blocks the IP for 1 hour.
Tag searchFirst 48 results. A tag plus q gives up to 8.

Need more (aggregators, bulk, heavy apps)? Email hello@logoapi.sh. Free keys with higher limits are coming.

AI agents

No setup needed. An agent that writes HTML can use the URL pattern directly: https://logoapi.sh/{domain}.svg. To find a domain from a name, call /search?q=. For a set, use /search?tag=.

Machine-readable summary: /llms.txt.

Prompt: "Add a row of customer logos for stripe.com, notion.so and linear.app.\nUse https://logoapi.sh/{domain}.svg for each."

Finder links

The Logo Finder lets you search any brand or browse the top 48 logos of each category.

Coming soon

Not live yet. We list them here so you know what is next.

  • PNG and WebP at any size, and PNG favicons
  • Optional monogram fallback
  • Free keys with higher limits
  • MCP server for AI agents
  • OpenAPI spec at /openapi.json and /llms-full.txt