{"openapi":"3.1.0","info":{"title":"LogoAnimator API","version":"1.0.0","description":"Turn any logo into an animated dot-matrix display — upload or fetch by URL, tune the grid and motion, export a lightweight animated SVG. Free to try, no signup required. Headless render: send a PNG logo, get an animated dot-matrix SVG. Requires an API key from a plan with API access (Studio). The same renderer is available to AI agents over MCP: https://logoanimator.app/.well-known/mcp.json"},"servers":[{"url":"https://logoanimator.app"}],"security":[{"bearer":[]},{"apiKeyHeader":[]}],"paths":{"/api/render":{"post":{"operationId":"renderAnimatedSvg","summary":"Render a logo as an animated dot-matrix SVG","parameters":[{"name":"animation","in":"query","required":false,"description":"Only with a raw image/png body. Animation id (see /animations/<id> for previews).","schema":{"type":"string","enum":["ring-reveal","spiral-in","perimeter-sweep","row-scan","column-scan","diagonal-wipe","checker-shift","corner-cascade","sparkle-reveal","edge-in","slow-bloom","twinkle","breathe","altitude-wave","shimmer","ripple","pulse-core","heart-pulse","neon-drift","aurora","jelly","float","swell","spiral-glow","beacon","shockwave","diamond-pulse","glint-sweep","iris","pop-in","drop-in","zoom-in","jitter","swirl","echo-ring","rail-scan","elastic-pop","domino-wave","pinwheel-in","burst-assemble","vortex-pull","slide-shuffle","rain-assemble","bounce-in","fade-scale-ring","fade-slide-diagonal","sparkle-pop","wave-shimmer","core-spiral","glide-in","comet-sweep"],"default":"row-scan"}},{"name":"density","in":"query","required":false,"description":"Only with a raw image/png body. Dots across the longer side. Out-of-range values are clamped, not rejected (to 96 on Studio).","schema":{"type":"number","minimum":8,"maximum":96,"default":24}},{"name":"colorMode","in":"query","required":false,"description":"Only with a raw image/png body. `mono` paints every dot `monoColor`; `sampled` keeps the logo's own colors.","schema":{"type":"string","enum":["mono","sampled"],"default":"mono"}},{"name":"monoColor","in":"query","required":false,"description":"Only with a raw image/png body. Dot color for `mono`, as a CSS hex color.","schema":{"type":"string","default":"#C084FC"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["image"],"properties":{"image":{"type":"string","contentEncoding":"base64","contentMediaType":"image/png","maxLength":2000000,"description":"The logo as a base64-encoded PNG."},"animation":{"type":"string","enum":["ring-reveal","spiral-in","perimeter-sweep","row-scan","column-scan","diagonal-wipe","checker-shift","corner-cascade","sparkle-reveal","edge-in","slow-bloom","twinkle","breathe","altitude-wave","shimmer","ripple","pulse-core","heart-pulse","neon-drift","aurora","jelly","float","swell","spiral-glow","beacon","shockwave","diamond-pulse","glint-sweep","iris","pop-in","drop-in","zoom-in","jitter","swirl","echo-ring","rail-scan","elastic-pop","domino-wave","pinwheel-in","burst-assemble","vortex-pull","slide-shuffle","rain-assemble","bounce-in","fade-scale-ring","fade-slide-diagonal","sparkle-pop","wave-shimmer","core-spiral","glide-in","comet-sweep"],"default":"row-scan","description":"Animation id (see /animations/<id> for previews)."},"density":{"type":"number","minimum":8,"maximum":96,"default":24,"description":"Dots across the longer side. Out-of-range values are clamped, not rejected (to 96 on Studio)."},"colorMode":{"type":"string","enum":["mono","sampled"],"default":"mono","description":"`mono` paints every dot `monoColor`; `sampled` keeps the logo's own colors."},"monoColor":{"type":"string","default":"#C084FC","description":"Dot color for `mono`, as a CSS hex color."}}}},"image/png":{"schema":{"type":"string","format":"binary","maxLength":1500000}},"application/octet-stream":{"schema":{"type":"string","format":"binary","maxLength":1500000}}}},"responses":{"200":{"description":"The animated SVG.","headers":{"X-Dotmatrix-Animation":{"schema":{"type":"string"}},"X-Dotmatrix-Density":{"schema":{"type":"string"}},"X-Dotmatrix-Cols":{"schema":{"type":"string"}},"X-Dotmatrix-Rows":{"schema":{"type":"string"}}},"content":{"image/svg+xml":{"schema":{"type":"string"}}}},"400":{"description":"Invalid parameters, an undecodable PNG, or a JSON `image` over the size limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key's account has no API access (Studio).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"PNG larger than 1500000 bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Body is neither application/json nor image/png.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Render budget exhausted; see Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Authorization: Bearer <API key>"},"apiKeyHeader":{"type":"apiKey","in":"header","name":"x-api-key"}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unauthorized","forbidden","invalid_params","unsupported_media_type","payload_too_large","rate_limited"]},"message":{"type":"string"}}}}}}}}