Skip to content

DummyLogo API

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

Logo defaults

seed
oak-7
variant
0
size
256
style
auto

Headshot defaults

size
64
shape
square

Endpoints

GET /api

API documentation

Returns this machine-readable specification as JSON.

application/json

GET /random

Random logo

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

Random AI 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

Generate logo (pretty URL)

Same generator as /api/logo. Company name is taken from the path; hyphens become spaces.

image/svg+xml

Logo parameters

NameTypeDefault
domain?string
namestring
seed?stringoak-7
variant?integer0
size?integer256
style?stringauto
palette?stringauto
harmony?stringcomplementary
meta?boolean0
format?string
download?boolean0

Headshot parameters

For GET /random-headshot only.

NameTypeDefault
size?integer64
round?boolean0
shape?stringsquare
meta?boolean0
format?string
download?boolean0

Usage notes

Random endpoint

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.

Random headshot

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.

Determinism

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.

Caching

SVG responses include Cache-Control: public, max-age=86400. Safe to embed in img tags, Figma, or mockup tools.

CORS

Access-Control-Allow-Origin: * is set on SVG, JPEG, and PNG responses for cross-origin embedding.

Descriptors

Names like "Helix Labs" or "Blue Peak Capital" split into display name + uppercase descriptor (LABS, CAPITAL).

Example companies

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

Examples

Gstatic-style domain favicon

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

Website seed (favicon-style)

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

Random favicon

New random logo on every request — 64px icon tier.

/random?size=64
curl "/random?size=64" -o random.svg

Random headshot (64px)

AI-generated face from thispersondoesnotexist.com, resized for avatar mockups.

/random-headshot?size=64
curl "/random-headshot?size=64" -o headshot.jpg

Round headshot (LinkedIn-style)

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 with metadata

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}'

Small favicon (32px)

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

Compact app icon (64px)

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

Default logo

Uses default seed (oak-7), variant 0, size 256, auto style.

/api/logo?name=Northwind
curl "/api/logo?name=Northwind" -o northwind.svg

Seeded lockup

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

Metadata JSON

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}'

Pretty path

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

Download attachment

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"

Styles

  • mark
  • lockup
  • stacked
  • wordmark
  • badge
  • monogram
  • crest
  • seal
  • split
  • auto

Marks

38 geometric marks — rings, venn, hex, peaks, wave, orbit, diamond, leaf, …

Logo meta response

Append meta=1 to logo or random endpoints to receive JSON including these fields:

  • namestringOriginal company name input.
  • displayNamestringPrimary wordmark text (descriptor stripped).
  • descriptorstring?Uppercase suffix when detected (e.g. LABS, LEGAL).
  • stylestringResolved layout style.
  • paletteIdstringResolved palette id — a curated id, or custom-<hex>-<harmony>.
  • fontstringEmbedded typeface family used for path text.
  • palettestringColor palette name.
  • markstringPrimary icon mark id.
  • secondaryMarkstring?Optional accent mark when present.
  • sizenumberOutput pixel size.
  • sizeTierstringLayout tier derived from size: icon (≤64), compact (≤128), or full. Affects text density only.
  • variantnumberVariant index used.
  • seedstringEffective seed (domain name when input was a URL).
  • seedInputstring?Original seed query value when it was normalized from a URL.
  • seedFromUrlboolean?True when seed was parsed from a website URL.
  • seedValuenumberInternal 32-bit hash used for RNG.
  • randombooleanTrue when returned from GET /random.
  • randomUrlstringURL to fetch another random logo at the same size.
  • urlstringCanonical URL to reproduce this logo via /api/logo.
  • svgstringFull SVG document (only when meta=1 or format=json).

Headshot meta response

Append meta=1 to /random-headshot to receive JSON including these fields:

  • sizenumberOutput pixel size.
  • shapestringsquare or round.
  • sourcestringUpstream provider label (thispersondoesnotexist.com).
  • sourceUrlstringUpstream image URL fetched on each request.
  • urlstringCanonical URL to reproduce this headshot request.
  • randomUrlstringSame as url — fetch again for another random face.
  • randombooleanAlways true for GET /random-headshot.
  • contentTypestringimage/jpeg (square) or image/png (round).
  • contentLengthnumberResponse body size in bytes.