v1 · public

Machine-readable API. No auth.

Pass a domain. Get separate symbol, logotype, primary logo, favicon, light variant, and dark variant assets back, with per-asset confidence. Cached 30 days; add ?refresh=1 to re-extract. 60 requests/hour/IP.

Get JSON
curl "https://brandkit-api.vercel.app/v1/logo?url=stripe.com"

Response is LogoResponse: domain, name, mark (symbol), logotype, primaryLogo, favicon, lightVariant, darkVariant, confidence, sources, candidates.

OpenAPI and agent docs
curl "https://brandkit-api.vercel.app/openapi.json"
curl "https://brandkit.danielhowells.com/llms.txt"

The OpenAPI document includes stable operation IDs, request and response schemas, cache notes, rate-limit errors, and Problem Details responses. Agents should use /llms.txt as the concise discovery entry point.

Pipe the SVG
curl -sL "https://brandkit-api.vercel.app/v1/logo.svg?url=stripe.com" > stripe-logo.svg

Returns image/svg+xml directly. Sanitised via DOMPurify.

Favicon redirect
curl -IL "https://brandkit-api.vercel.app/v1/favicon?url=stripe.com"

302 to the canonical favicon — ICO, PNG, or SVG depending on the brand.

Variant SVGs
curl -sL "https://brandkit-api.vercel.app/v1/logo.light.svg?url=stripe.com" > stripe-logo-light.svg
curl -sL "https://brandkit-api.vercel.app/v1/logo.dark.svg?url=stripe.com" > stripe-logo-dark.svg

Variants are source-provided when possible and otherwise derived from the selected logo asset with provenance in the JSON response.

Force a refresh
curl "https://brandkit-api.vercel.app/v1/logo?url=stripe.com&refresh=1"

Skips the 30-day cache, re-runs extraction, writes fresh results back.

Response schema
pathtypenotes
domainstringResolved host (follows redirects).
namestring?Title-style brand name when we could infer one.
primaryLogoAsset | nullBest selected logo asset for general display, or null if none.
markAsset | nullCompact brand symbol or monogram, separate from the wordmark.
logotypeAsset | nullWordmark or lockup containing the brand name.
primaryLogo.urlstringCanonical URL or data: URL when inline.
primaryLogo.format"svg" | "png" | ...Usually svg — that is what we target.
primaryLogo.svgstring?Sanitised SVG source when available.
lightVariant / darkVariantVariantDownloadable logo variants with provenance and confidence.
confidencenumber0..1 summary confidence for the result.
primaryLogo.width / heightnumber?Intrinsic dimensions in pixels.
primaryLogo.confidencenumber0..1 — higher means stronger signal.
faviconAsset | nullHighest-scoring favicon candidate.
sourcesstring[]Which extractors produced candidates.
candidatesnumberTotal raw candidates before scoring.
Notes