v1 · public
Machine-readable API. No auth.
Pass a domain. Get an SVG logo and favicon 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, logo, favicon, 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.
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
| path | type | notes |
|---|---|---|
| domain | string | Resolved host (follows redirects). |
| name | string? | Title-style brand name when we could infer one. |
| logo | Asset | null | Best-scoring SVG logo, or null if none. |
| logo.url | string | Canonical URL or data: URL when inline. |
| logo.format | "svg" | "png" | ... | Usually svg — that is what we target. |
| logo.svg | string? | Sanitised SVG source when available. |
| logo.width / height | number? | Intrinsic dimensions in pixels. |
| logo.confidence | number | 0..1 — higher means stronger signal. |
| favicon | Asset | null | Highest-scoring favicon candidate. |
| sources | string[] | Which extractors produced candidates. |
| candidates | number | Total raw candidates before scoring. |
Notes
- · SVGs are sanitised server-side.
- · robots.txt is respected.
- · Free sources only: head/manifest/homepage DOM, Simple Icons, headless render.
- · When a slot isn’t reliably available, the field is null rather than guessed.