Skip to content

Logo endpoint

One URL per company. The endpoint returns the best available logo for the domain, ready to be used anywhere an image URL works.

# the logo, as an image
GET https://img.anylogo.dev/{domain}
# examples
https://img.anylogo.dev/github.com
https://img.anylogo.dev/stripe.com
https://img.anylogo.dev/linear.app

{domain} is a bare registrable domain — no scheme, no path, no www. prefix.

Try the logo endpoint img.anylogo.dev/{domain}

The response is a plain image: an SVG when a sharp vector mark is available, otherwise a high-resolution PNG. The Content-Type header reflects the format.

Logos are served at their original size — there are no resizing parameters. SVGs scale to any size losslessly; for PNGs, size the image in your markup or CSS (for example width="64") and the browser scales it down cleanly.

Responses are cached aggressively so repeat loads are instant: browsers cache a logo for a day, and the edge network keeps it for a week. Logos refresh automatically as new versions become available — you never need to bust the cache yourself.

The endpoint is CORS-enabled (Access-Control-Allow-Origin: *), so it can be fetched from browser code on any origin, not just used in img tags. Every successful response also carries an X-Anylogo-Source header, a short label identifying which logo variant was served.

# response headers on a successful request
Content-Type: image/svg+xml # or image/png
Cache-Control: public, max-age=86400, s-maxage=604800
Access-Control-Allow-Origin: *
X-Anylogo-Source: ... # which logo variant was served

When no logo is available for a domain, the endpoint returns 404 with a JSON body. Misses aren’t permanent: the domain is re-checked periodically (roughly weekly), so if a logo becomes available later, the same URL starts working.

# 404 — no logo available for this domain
{ "error": "no logo found", "domain": "example.com" }
# 400 — the domain is malformed
{ "error": "invalid domain" }

In an img tag, a 404 simply fires the image’s onerror handler — handy for falling back to initials or a placeholder. See Errors for the full reference.

By default the original image is returned. Request a variant with query parameters:

<img src="https://img.anylogo.dev/github.com?size=64">
<img src="https://img.anylogo.dev/github.com?size=128&format=webp">
  • size — one of 16, 32, 64, 128, 256, 512. The image is scaled to fit within that square, never upscaled beyond its source resolution.
  • format — png or webp.

SVG logos are returned as-is regardless of size — they scale losslessly at any resolution, so use them directly. Responses include X-Anylogo-Width and X-Anylogo-Height headers with the source dimensions.

Every logo response includes an X-Anylogo-Verified-At header with the timestamp of the last successful fetch, so you always know how current the asset is.

Logos refresh automatically when they age past 30 days. If a company rebrands before then, anyone can flag it — no key required:

Terminal window
curl -X POST https://api.anylogo.dev/report/{domain}
{
"ok": true,
"domain": "stripe.com",
"previouslyVerifiedAt": "2026-08-15T18:50:58.595Z",
"note": "Thanks — this logo will be re-fetched on the next request."
}

The next request for that domain fetches a fresh copy. Premium plans can also force an immediate refresh of both the logo and company record with POST /refresh/{domain}.

By default a domain with no logo returns 404 with a JSON body. Add fallback to get an image instead, so an <img> tag never renders broken:

<img src="https://img.anylogo.dev/unknown-startup.io?fallback=monogram">
  • monogram — a lettered tile in a colour derived from the domain, so the same company always gets the same tile.
  • transparent — a 1×1 transparent pixel.
  • 404 — the default JSON error.

Fallback responses carry an X-Anylogo-Fallback header naming the mode used.