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=300

One 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=1024

Raw 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.svg

ZIP 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/zip

OG 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=1

Stability

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.