{"name":"DummyLogo API","version":"1.0.0","description":"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.","baseUrl":"https://www.dummylogo.com","defaults":{"seed":"oak-7","variant":0,"size":256,"style":"auto"},"headshotDefaults":{"size":64,"shape":"square"},"endpoints":[{"method":"GET","path":"/api","summary":"API documentation","description":"Returns this machine-readable specification as JSON.","responseType":"application/json"},{"method":"GET","path":"/api/logo","summary":"Generate logo (query params)","description":"Primary endpoint. Returns an SVG image, or JSON metadata when meta=1 or format=json.","responseType":"image/svg+xml | application/json","parameters":["name","domain","seed","variant","size","style","palette","harmony","meta","format","download"]},{"method":"GET","path":"/random","summary":"Random logo","description":"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.","responseType":"image/svg+xml | application/json","parameters":["size","style","palette","harmony","name","seed","variant","meta","format","download"]},{"method":"GET","path":"/random-headshot","summary":"Random AI headshot","description":"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.","responseType":"image/jpeg | image/png | application/json","parameters":["size","round","shape","meta","format","download"]},{"method":"GET","path":"/api/logo/{name}.svg","summary":"Generate logo (pretty URL)","description":"Same generator as /api/logo. Company name is taken from the path; hyphens become spaces.","responseType":"image/svg+xml","parameters":["seed","variant","size","style","download"]}],"parameters":[{"name":"domain","in":"query","type":"string","required":false,"description":"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":"name","in":"query","type":"string","required":true,"description":"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."},{"name":"seed","in":"query","type":"string","required":false,"default":"oak-7","description":"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."},{"name":"variant","in":"query","type":"integer","required":false,"default":0,"min":0,"max":23,"description":"Alternate design index. 24 variants per name/seed pair (0–23)."},{"name":"size","in":"query","type":"integer","required":false,"default":256,"min":32,"max":2048,"description":"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."},{"name":"style","in":"query","type":"string","required":false,"default":"auto","enum":["auto","mark","lockup","stacked","wordmark","badge","monogram","crest","seal","split"],"description":"Layout style. auto picks from lockup, stacked, badge, wordmark, crest, seal, split, mark, monogram."},{"name":"palette","in":"query","type":"string","required":false,"default":"auto","enum":["auto","navy-gold","burgundy-cream","ink-copper","ivory-indigo","paper-forest","mist-slate","charcoal-lime","slate-ice","ocean","volt","ink-coral","crimson-paper","teal-sand","clay-cream","sage","plum-gilt","midnight-rose","parchment-oxblood","graphite-amber","frost-cobalt","citrus-ink","blossom","olive-cream"],"description":"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."},{"name":"harmony","in":"query","type":"string","required":false,"default":"complementary","enum":["complementary","analogous","triadic","split","monochrome"],"description":"Colour-wheel scheme used when `palette` is a hex colour. Ignored for curated palette ids."},{"name":"meta","in":"query","type":"boolean","required":false,"default":"0","description":"When 1, return JSON with svg, url, font, palette, mark, seed, and seedValue."},{"name":"format","in":"query","type":"string","required":false,"enum":["json"],"description":"Alias for meta=1."},{"name":"download","in":"query","type":"boolean","required":false,"default":"0","description":"When 1, sets Content-Disposition to attachment with a slugged filename."}],"headshotParameters":[{"name":"size","in":"query","type":"integer","required":false,"default":64,"min":32,"max":512,"description":"Square output size in pixels (32–512). Default 64 for avatar mockups."},{"name":"round","in":"query","type":"boolean","required":false,"default":"0","description":"When 1 or true, return a circular PNG with transparent corners (LinkedIn-style)."},{"name":"shape","in":"query","type":"string","required":false,"default":"square","enum":["square","round","circle"],"description":"Alias for round=1 when set to round or circle. Default square returns JPEG."},{"name":"meta","in":"query","type":"boolean","required":false,"default":"0","description":"When 1, return JSON with size, shape, source, url, and contentLength."},{"name":"format","in":"query","type":"string","required":false,"enum":["json"],"description":"Alias for meta=1."},{"name":"download","in":"query","type":"boolean","required":false,"default":"0","description":"When 1, sets Content-Disposition to attachment (headshot-{size}.jpg or headshot-{size}-round.png)."}],"styles":["mark","lockup","stacked","wordmark","badge","monogram","crest","seal","split"],"marks":["rings","venn","hex","peaks","wave","orbit","diamond","leaf","shield","cube","burst","loop","chevrons","tiles","plus","bolt","columns","arc-dots","slash","letter","compass","laurel","flame","droplet","spiral","mesh","crown","tree","crescent","constellation","ribbon","helix","window","knot","prism","scale","anchor","book"],"examples":[{"title":"Gstatic-style domain favicon","description":"Domain only — brand name and seed derived automatically (Notion, not Notion.com).","url":"https://www.dummylogo.com/api/logo?domain=notion.com&size=64","curl":"curl \"https://www.dummylogo.com/api/logo?domain=notion.com&size=64\" -o notion.svg"},{"title":"Website seed (favicon-style)","description":"Pass a URL as seed — protocol, www, and path are stripped; domain becomes the seed.","url":"https://www.dummylogo.com/api/logo?name=Northwind&size=64&seed=https%3A%2F%2Fwww.notion.so%2Fproduct","curl":"curl \"https://www.dummylogo.com/api/logo?name=Northwind&size=64&seed=https%3A%2F%2Fwww.notion.so%2Fproduct\" -o notion-favicon.svg"},{"title":"Random favicon","description":"New random logo on every request — 64px icon tier.","url":"https://www.dummylogo.com/random?size=64","curl":"curl \"https://www.dummylogo.com/random?size=64\" -o random.svg"},{"title":"Random headshot (64px)","description":"AI-generated face from thispersondoesnotexist.com, resized for avatar mockups.","url":"https://www.dummylogo.com/random-headshot?size=64","curl":"curl \"https://www.dummylogo.com/random-headshot?size=64\" -o headshot.jpg"},{"title":"Round headshot (LinkedIn-style)","description":"Circular PNG with transparent corners — no CSS border-radius needed.","url":"https://www.dummylogo.com/random-headshot?size=128&round=1","curl":"curl \"https://www.dummylogo.com/random-headshot?size=128&round=1\" -o headshot-round.png"},{"title":"Random with metadata","description":"Random pick with JSON metadata to reproduce via /api/logo.","url":"https://www.dummylogo.com/random?size=256&meta=1","curl":"curl \"https://www.dummylogo.com/random?size=256&meta=1\" | jq '{name, seed, variant, style, url}'"},{"title":"Small favicon (32px)","description":"Icon tier — mark-only or monogram layouts optimized for tiny display.","url":"https://www.dummylogo.com/api/logo?name=Northwind&size=32&seed=oak-7","curl":"curl \"https://www.dummylogo.com/api/logo?name=Northwind&size=32&seed=oak-7\" -o northwind-32.svg"},{"title":"Compact app icon (64px)","description":"Icon tier with seed-driven mark/monogram/badge variants.","url":"https://www.dummylogo.com/api/logo?name=Helix+Labs&size=64&seed=oak-7&variant=3","curl":"curl \"https://www.dummylogo.com/api/logo?name=Helix+Labs&size=64&seed=oak-7&variant=3\" -o helix-64.svg"},{"title":"Default logo","description":"Uses default seed (oak-7), variant 0, size 256, auto style.","url":"https://www.dummylogo.com/api/logo?name=Northwind","curl":"curl \"https://www.dummylogo.com/api/logo?name=Northwind\" -o northwind.svg"},{"title":"Seeded lockup","description":"Explicit seed and lockup style for reproducible horizontal marks.","url":"https://www.dummylogo.com/api/logo?name=Northwind&size=256&variant=0&seed=oak-7&style=lockup","curl":"curl \"https://www.dummylogo.com/api/logo?name=Northwind&size=256&variant=0&seed=oak-7&style=lockup\" -o northwind-lockup.svg"},{"title":"Metadata JSON","description":"Inspect resolved font, palette, mark, and raw SVG without parsing the image.","url":"https://www.dummylogo.com/api/logo?name=Northwind&size=256&variant=0&seed=oak-7&style=lockup&meta=1","curl":"curl \"https://www.dummylogo.com/api/logo?name=Northwind&size=256&variant=0&seed=oak-7&style=lockup&meta=1\" | jq '{style, font, palette, mark, seed}'"},{"title":"Pretty path","description":"REST-style URL with company name in the path.","url":"https://www.dummylogo.com/api/logo/Northwind.svg?size=512&seed=oak-7&variant=2&style=crest","curl":"curl \"https://www.dummylogo.com/api/logo/Northwind.svg?size=512&seed=oak-7&variant=2&style=crest\" -o northwind-crest.svg"},{"title":"Download attachment","description":"Force browser download with a filename derived from the company name.","url":"https://www.dummylogo.com/api/logo?name=Northwind&size=256&variant=0&seed=oak-7&style=lockup&download=1","curl":"curl -OJ \"https://www.dummylogo.com/api/logo?name=Northwind&size=256&variant=0&seed=oak-7&style=lockup&download=1\""}],"usage":[{"title":"Random endpoint","body":"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."},{"title":"Random headshot","body":"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."},{"title":"Determinism","body":"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."},{"title":"Caching","body":"SVG responses include Cache-Control: public, max-age=86400. Safe to embed in img tags, Figma, or mockup tools."},{"title":"CORS","body":"Access-Control-Allow-Origin: * is set on SVG, JPEG, and PNG responses for cross-origin embedding."},{"title":"Descriptors","body":"Names like \"Helix Labs\" or \"Blue Peak Capital\" split into display name + uppercase descriptor (LABS, CAPITAL)."},{"title":"Example companies","body":"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"}],"metaFields":[{"field":"name","type":"string","description":"Original company name input."},{"field":"displayName","type":"string","description":"Primary wordmark text (descriptor stripped)."},{"field":"descriptor","type":"string?","description":"Uppercase suffix when detected (e.g. LABS, LEGAL)."},{"field":"style","type":"string","description":"Resolved layout style."},{"field":"paletteId","type":"string","description":"Resolved palette id — a curated id, or custom-<hex>-<harmony>."},{"field":"font","type":"string","description":"Embedded typeface family used for path text."},{"field":"palette","type":"string","description":"Color palette name."},{"field":"mark","type":"string","description":"Primary icon mark id."},{"field":"secondaryMark","type":"string?","description":"Optional accent mark when present."},{"field":"size","type":"number","description":"Output pixel size."},{"field":"sizeTier","type":"string","description":"Layout tier derived from size: icon (≤64), compact (≤128), or full. Affects text density only."},{"field":"variant","type":"number","description":"Variant index used."},{"field":"seed","type":"string","description":"Effective seed (domain name when input was a URL)."},{"field":"seedInput","type":"string?","description":"Original seed query value when it was normalized from a URL."},{"field":"seedFromUrl","type":"boolean?","description":"True when seed was parsed from a website URL."},{"field":"seedValue","type":"number","description":"Internal 32-bit hash used for RNG."},{"field":"random","type":"boolean","description":"True when returned from GET /random."},{"field":"randomUrl","type":"string","description":"URL to fetch another random logo at the same size."},{"field":"url","type":"string","description":"Canonical URL to reproduce this logo via /api/logo."},{"field":"svg","type":"string","description":"Full SVG document (only when meta=1 or format=json)."}],"headshotMetaFields":[{"field":"size","type":"number","description":"Output pixel size."},{"field":"shape","type":"string","description":"square or round."},{"field":"source","type":"string","description":"Upstream provider label (thispersondoesnotexist.com)."},{"field":"sourceUrl","type":"string","description":"Upstream image URL fetched on each request."},{"field":"url","type":"string","description":"Canonical URL to reproduce this headshot request."},{"field":"randomUrl","type":"string","description":"Same as url — fetch again for another random face."},{"field":"random","type":"boolean","description":"Always true for GET /random-headshot."},{"field":"contentType","type":"string","description":"image/jpeg (square) or image/png (round)."},{"field":"contentLength","type":"number","description":"Response body size in bytes."}]}