GET /api
API documentation
Returns this machine-readable specification as JSON.
→ application/json
API reference
Generate deterministic square SVG company logos for mockups, plus random AI headshot avatars for profile placeholders. Logos are self-contained SVG with path-based text; headshots are proxied JPEG/PNG faces resized for embeds.
DummyLogo is a placeholder logo generator with a companion headshot endpoint for profile mockups. This page documents the public HTTP API so you can embed stable SVG logos or random avatar photos in Storybook, tests, or Figma without opening the studio. The machine-readable spec is GET /api. Agents should also read /llms.txt.
GET /api → JSON spec
GET /api
Returns this machine-readable specification as JSON.
→ application/json
GET /api/logo
Primary endpoint. Returns an SVG image, or JSON metadata when meta=1 or format=json.
→ image/svg+xml | application/json
GET /random
Picks a random company name, seed, and variant on each request, then generates a logo. Use size to control output dimensions and layout tier. Response includes X-Logo-* headers and a Link header to reproduce via /api/logo. Not cached.
→ image/svg+xml | application/json
GET /random-headshot
Proxies a fresh face from thispersondoesnotexist.com on each request, resized for avatar/headshot mockups. Default is a 64px square JPEG; add round=1 or shape=round for a LinkedIn-style circular PNG with transparent corners. Not cached.
→ image/jpeg | image/png | application/json
GET /api/logo/{name}.svg
Same generator as /api/logo. Company name is taken from the path; hyphens become spaces.
→ image/svg+xml
| Name | Type | Default | Description |
|---|---|---|---|
| domain? | string | — | Gstatic-style favicon param. Same as passing a URL as seed — domain becomes the seed, brand label becomes the name (notion.com → name Notion, seed notion.com). Omit name when using this. |
| name | string | — | Company name for logo text. If this is a URL or domain (Notion.com, https://…), it is normalized to a brand label (Notion) and the hostname becomes the seed. |
| seed? | string | oak-7 | Deterministic seed string, or a website URL (http/https, optional www, path ignored) — normalized to the domain name, like a favicon service. Same name + seed + variant always yields the same logo. Omit to use the default seed. |
| variant? | integer | 0 | Alternate design index. 24 variants per name/seed pair (0–23). |
| size? | integer | 256 | Square output size in pixels. Same seed yields the same palette, mark, and style at every size; ≤64px drops text for a favicon layout, ≤128px shortens labels. |
| style? | string | auto | Layout style. auto picks from lockup, stacked, badge, wordmark, crest, seal, split, mark, monogram. |
| palette? | string | auto | Colour scheme. Either a curated palette id, or a hex brand colour (e.g. 0F766E or %230F766E) to generate a harmonious palette around it. Layout, font and mark stay seed-stable — only the colours change. |
| harmony? | string | complementary | Colour-wheel scheme used when `palette` is a hex colour. Ignored for curated palette ids. |
| meta? | boolean | 0 | When 1, return JSON with svg, url, font, palette, mark, seed, and seedValue. |
| format? | string | — | Alias for meta=1. |
| download? | boolean | 0 | When 1, sets Content-Disposition to attachment with a slugged filename. |
For GET /random-headshot only.
| Name | Type | Default | Description |
|---|---|---|---|
| size? | integer | 64 | Square output size in pixels (32–512). Default 64 for avatar mockups. |
| round? | boolean | 0 | When 1 or true, return a circular PNG with transparent corners (LinkedIn-style). |
| shape? | string | square | Alias for round=1 when set to round or circle. Default square returns JPEG. |
| meta? | boolean | 0 | When 1, return JSON with size, shape, source, url, and contentLength. |
| format? | string | — | Alias for meta=1. |
| download? | boolean | 0 | When 1, sets Content-Disposition to attachment (headshot-{size}.jpg or headshot-{size}-round.png). |
GET /random?size=256 returns a new logo each time (random name, seed, variant). Use meta=1 to get the resolved values and reproduce URL. Optional name/seed/variant params override the random pick.
GET /random-headshot?size=64 returns a new square JPEG face on each request, proxied from thispersondoesnotexist.com. Add round=1 or shape=round for a circular PNG (LinkedIn-style) with transparent corners. Runs on the Node.js runtime with sharp — supported on Vercel Fluid Compute.
Logos are seeded from hash(name:variant:seed). Palette, mark, font, and style are identical at every size. Size only changes layout: icon (≤64px) removes text for a favicon-style crop; compact (≤128px) shortens labels.
SVG responses include Cache-Control: public, max-age=86400. Safe to embed in img tags, Figma, or mockup tools.
Access-Control-Allow-Origin: * is set on SVG, JPEG, and PNG responses for cross-origin embedding.
Names like "Helix Labs" or "Blue Peak Capital" split into display name + uppercase descriptor (LABS, CAPITAL).
Northwind, Helix Labs, Oak & Ember, Blue Peak Capital, Cedar & Co, Lumina Health, Harbor Legal, Volt Systems, Fraiche Cafe, Atlas Ridge, Meridian Studio, Cobalt Works, Nimbus Cloud, Grove Therapeutics, Ironwood Partners
Domain only — brand name and seed derived automatically (Notion, not Notion.com).
/api/logo?domain=notion.com&size=64
curl "/api/logo?domain=notion.com&size=64" -o notion.svg
Pass a URL as seed — protocol, www, and path are stripped; domain becomes the seed.
/api/logo?name=Northwind&size=64&seed=https%3A%2F%2Fwww.notion.so%2Fproduct
curl "/api/logo?name=Northwind&size=64&seed=https%3A%2F%2Fwww.notion.so%2Fproduct" -o notion-favicon.svg
New random logo on every request — 64px icon tier.
/random?size=64
curl "/random?size=64" -o random.svg
AI-generated face from thispersondoesnotexist.com, resized for avatar mockups.
/random-headshot?size=64
curl "/random-headshot?size=64" -o headshot.jpg
Circular PNG with transparent corners — no CSS border-radius needed.
/random-headshot?size=128&round=1
curl "/random-headshot?size=128&round=1" -o headshot-round.png
Random pick with JSON metadata to reproduce via /api/logo.
/random?size=256&meta=1
curl "/random?size=256&meta=1" | jq '{name, seed, variant, style, url}'Icon tier — mark-only or monogram layouts optimized for tiny display.
/api/logo?name=Northwind&size=32&seed=oak-7
curl "/api/logo?name=Northwind&size=32&seed=oak-7" -o northwind-32.svg
Icon tier with seed-driven mark/monogram/badge variants.
/api/logo?name=Helix+Labs&size=64&seed=oak-7&variant=3
curl "/api/logo?name=Helix+Labs&size=64&seed=oak-7&variant=3" -o helix-64.svg
Uses default seed (oak-7), variant 0, size 256, auto style.
/api/logo?name=Northwind
curl "/api/logo?name=Northwind" -o northwind.svg
Explicit seed and lockup style for reproducible horizontal marks.
/api/logo?name=Northwind&size=256&variant=0&seed=oak-7&style=lockup
curl "/api/logo?name=Northwind&size=256&variant=0&seed=oak-7&style=lockup" -o northwind-lockup.svg
Inspect resolved font, palette, mark, and raw SVG without parsing the image.
/api/logo?name=Northwind&size=256&variant=0&seed=oak-7&style=lockup&meta=1
curl "/api/logo?name=Northwind&size=256&variant=0&seed=oak-7&style=lockup&meta=1" | jq '{style, font, palette, mark, seed}'REST-style URL with company name in the path.
/api/logo/Northwind.svg?size=512&seed=oak-7&variant=2&style=crest
curl "/api/logo/Northwind.svg?size=512&seed=oak-7&variant=2&style=crest" -o northwind-crest.svg
Force browser download with a filename derived from the company name.
/api/logo?name=Northwind&size=256&variant=0&seed=oak-7&style=lockup&download=1
curl -OJ "/api/logo?name=Northwind&size=256&variant=0&seed=oak-7&style=lockup&download=1"
38 geometric marks — rings, venn, hex, peaks, wave, orbit, diamond, leaf, …
Append meta=1 to logo or random endpoints to receive JSON including these fields:
Append meta=1 to /random-headshot to receive JSON including these fields: