API
Everything the gallery does is plain HTTP — 287 assets across 34 brands, no auth. Use it from CI, a website, a script. Copy any example below.
List logos
GET /logos returns the full JSON index. Filter with brand (alias product), type (full / symbol / horizontal / vertical / wordmark), theme (on-light / on-dark / universal), mono, format, and width — adding a width flips every url to a sized PNG.
/logos?brand=reanimated/logos?type=symbol&theme=on-dark/logos?width=300One logo
GET /logo/<brand> picks the best match for the same filters and serves the file — the original SVG untouched, or a PNG when width or format=png is given. Pin an exact file with file=.
/logo/reanimated?theme=on-dark/logo/typegpu?type=symbol&width=512/logo/fishjam?file=fishjam-full-on-dark.svg&format=png&width=1024Raw files
Every asset is also a plain static file — the most cacheable URL there is, ideal for embedding.
/logos/products/reanimated/reanimated-full-on-dark.svgZIP bundles
POST /logos/zip with { ids, format, width } answers with the archive in one response (up to 300 ids). For bigger bundles use the job API the gallery uses: POST /api/downloads (same body, up to 1000 ids) returns { id }; poll GET /api/downloads/<id> until state: "done", then fetch GET /api/downloads/<id>/file. Finished bundles expire after 15 minutes.
curl -X POST -H 'Content-Type: application/json' -d '{"ids":["reanimated","typegpu/typegpu-symbol-color-universal.svg"],"format":"png","width":512}' --output logos.zip https://brand.swmansion.com/logos/zipOG images
GET /og renders an on-brand social card from URL params — compose one visually in the studio and copy its URL. Full parameter reference lives in the repo README.
/og?title=Hello&bg=navy&logo=1Stability
Asset ids (<brand>/<file>) are permanent: renames leave an alias behind, so an id that ever worked keeps working — published OG images depend on that. The JSON index also lists brands with no artwork yet (missing: true), so gaps are visible programmatically.