Documentation

Fivicon Documentation

Fivicon finds, scores, and serves the logo, favicon, and wordmark for any company domain — so you don't have to source, resize, or babysit brand assets by hand.

The core idea: give Fivicon a domain, it scans the site and finds every logo-shaped asset it can (favicon, header logo, OG image, manifest icons…), scores each one on how usable it actually is, and picks a winner. You embed one URL; Fivicon keeps watching the domain and swaps in a better asset automatically when the company rebrands.

Discover & scanning

POST /api/v1/discover is the entry point. Give it a domain and Fivicon scans the live site for logo-shaped assets — favicons, header logos, Open Graph images, web app manifest icons — and records what it found.

A discover call is also how you refresh a domain: calling it again re-scans the site and appends a new changelog entry if anything changed. It's safe to call on a domain you don't manage — Fivicon scans only what's publicly reachable, and skips domains whose robots.txt blocks scraping.

A domain doesn't need to be watched for you to discover it — discovery and watching are separate: discovery gets you the data, watching keeps it fresh automatically.

Logos & scoring

Every asset Fivicon finds is one logo variant with a type (primary, icon, wordmark, favicon), a format (svg, png, …), and a score from 0–100.

The score is a sum of signals, not a black box:

  • Format — vector formats score higher than raster; they scale cleanly at any size.
  • Resolution — bigger, sharper raster assets beat tiny or blurry ones.
  • Relevance — how confident Fivicon is that this asset actually is the brand mark, not incidental site art.
  • File size — reasonable file weight for something that's going to be embedded, not a multi-megabyte export.

Penalties subtract points for things like a broken URL or a blocked fetch. The best logo for a domain is whichever variant has the highest score after penalties — that's what an embed serves by default, unless you pin a specific one.

Companies & watchlist

A company, in Fivicon, is just a domain with data on file — whatever you've discovered or looked up. Your watchlist is the subset of those domains Fivicon actively keeps fresh: watched domains get periodically re-scanned on their own, without you calling /discover again by hand.

Add a domain to your watchlist with POST /api/v1/me/watchlist, remove it with DELETE /api/v1/me/watchlist/{domain}. Every domain you've discovered still shows up in Companies whether or not it's watched — watching just adds the "keep this current for me" guarantee.

Changelog

Each re-scan of a domain (manual or from the watchlist) can produce a changelog entry: GET /api/v1/catalog/domains/{domain}/changelog. An entry's summary reports what moved — added, removed, score_updated, asset_updated, or url_broken counts — or nothing at all if the re-scan found the site unchanged.

This is what a rebrand looks like from the API's side: a company swaps its logo, the next watchlist scan picks it up, a changelog entry records the change, and the domain's status turns from Healthy to Changed until someone looks at it.

Logo preference

By default, an embed serves whichever logo variant currently scores highest — fully automatic, and it follows the score if a better asset shows up later. If you'd rather lock a domain to one specific logo (a particular format, or a specific variant you've picked by eye), set a preference:

  • PUT /api/v1/me/logo-preferences/{domain} — { "logo_url": "…" } to lock to that exact asset.
  • DELETE /api/v1/me/logo-preferences/{domain} — clear the lock and go back to automatic.

The preference is per your account and per domain — it never changes what's in the shared catalog for that domain, only which asset your embeds resolve to.

Three ways to authenticate

Pick whichever fits where the call is coming from:

  • Allowlist — the browser's own Origin/Referer header matches a domain you've allowed. No key ever touches the page; this is the right choice for embedding a logo directly in a site you control.
  • API key — append ?api_key=… to the static embed URL. Useful anywhere an allowlisted Origin/Referer isn't available (native apps, server-rendered emails, tools that strip Referer).
  • Bearer token — your account's access token, sent as Authorization: Bearer …, for server-side calls against /api/v1/… (discover, catalog, watchlist, preferences, admin).

Discover a domain

curl -X POST https://api.fivicon.com/api/v1/discover \
  -H "Authorization: Bearer $FIVICON_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domain":"stripe.com"}'

Then read back what it found any time:

curl https://api.fivicon.com/api/v1/catalog/domains/stripe.com \
  -H "Authorization: Bearer $FIVICON_TOKEN"

Embed a logo

The CDN serves the resolved logo for a domain — automatic best match, or your pinned preference if you set one — behind a static URL:

<img src="https://static.fivicon.com/stripe.com?api_key=YOUR_KEY" alt="Stripe" />

If stripe.com is on your allowed domains list and the request's Origin/Referer matches, you can drop the ?api_key= entirely.

Pin a specific logo

curl -X PUT https://api.fivicon.com/api/v1/me/logo-preferences/stripe.com \
  -H "Authorization: Bearer $FIVICON_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"logo_url":"https://.../stripe-icon.svg"}'

Reset to automatic scoring at any time:

curl -X DELETE https://api.fivicon.com/api/v1/me/logo-preferences/stripe.com \
  -H "Authorization: Bearer $FIVICON_TOKEN"

Watch companies

curl -X POST https://api.fivicon.com/api/v1/me/watchlist \
  -H "Authorization: Bearer $FIVICON_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domain":"stripe.com"}'

Watched domains are re-scanned for you; everything else is scan-on-demand only.

Allow an embed domain

curl -X POST https://api.fivicon.com/api/v1/me/allowed-domains \
  -H "Authorization: Bearer $FIVICON_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domain":"app.mycompany.com"}'

Lowercase hostname only — no scheme, no path. Wildcards (*.mycompany.com) and localhost both work. Max 50 per account.

Endpoints

EndpointWhat it does
POST /api/v1/discoverScan a domain and record its logo assets.
GET /api/v1/catalog/domains/{domain}Read what's on file for a domain.
GET /api/v1/catalog/domains/{domain}/changelogWhat changed on the last few re-scans.
GET / POST / DELETE /api/v1/me/watchlistDomains Fivicon keeps re-scanning for you.
PUT / DELETE /api/v1/me/logo-preferences/{domain}Lock or reset which logo variant an embed resolves to.
GET / POST / DELETE /api/v1/me/allowed-domainsSites permitted to load logos without an API key.
POST / DELETE /api/v1/users/me/api-keyCreate or revoke your account's API key.
GET https://static.fivicon.com/{domain}The CDN embed URL — the resolved logo image itself.

All /api/v1/… calls except the CDN embed URL take a Bearer token. See Authentication for the embed URL's own options.