{"openapi":"3.1.0","info":{"title":"QR Fabric","summary":"Public, privacy-first QR code generator API.","description":"QR Fabric provides a public HTTP API to render QR codes as PNG or SVG.\n\n## What this API is\nA lightweight API for generating QR codes from text payloads with optional styling parameters and optional in-memory logo overlays for PNG generation.\n\n## Privacy model\n- No login required\n- No database storage for submitted QR payloads\n- Uploaded logos are processed in memory\n\n## Quick start\n1. Open `/docs` for interactive Swagger UI.\n2. Send form-data to `POST /api/v1/qr/png` or `POST /api/v1/qr/svg`.\n3. Save the binary response as your QR image.\n\n### Example (PNG)\n```bash\ncurl -X POST 'http://localhost:8000/api/v1/qr/png' \\\n  -F 'payload=https://qrfabric.com' \\\n  -F 'error_correction=M' \\\n  --output qr.png\n```","version":"1.0.0"},"paths":{"/api/v1/qr/png":{"post":{"tags":["qr"],"summary":"Qr Png","operationId":"qr_png_api_v1_qr_png_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_qr_png_api_v1_qr_png_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/qr/svg":{"post":{"tags":["qr"],"summary":"Qr Svg","operationId":"qr_svg_api_v1_qr_svg_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_qr_svg_api_v1_qr_svg_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/licenses":{"get":{"summary":"Licenses","operationId":"licenses_licenses_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/legal-notices":{"get":{"summary":"Legal Notices","operationId":"legal_notices_legal_notices_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/faq":{"get":{"summary":"Faq","operationId":"faq_faq_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Home","operationId":"home__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"Body_qr_png_api_v1_qr_png_post":{"properties":{"payload":{"type":"string","title":"Payload"},"error_correction":{"type":"string","title":"Error Correction","default":"M"},"box_size":{"type":"integer","title":"Box Size","default":10},"border":{"type":"integer","title":"Border","default":4},"fill_color":{"type":"string","title":"Fill Color","default":"#000000"},"back_color":{"type":"string","title":"Back Color","default":"#FFFFFF"},"transparent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transparent"},"logo_scale":{"type":"number","title":"Logo Scale","default":0.22},"logo":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Logo"}},"type":"object","required":["payload"],"title":"Body_qr_png_api_v1_qr_png_post"},"Body_qr_svg_api_v1_qr_svg_post":{"properties":{"payload":{"type":"string","title":"Payload"},"error_correction":{"type":"string","title":"Error Correction","default":"M"},"box_size":{"type":"integer","title":"Box Size","default":10},"border":{"type":"integer","title":"Border","default":4}},"type":"object","required":["payload"],"title":"Body_qr_svg_api_v1_qr_svg_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}