{"openapi":"3.0.3","info":{"title":"Ramzineh QR & Barcode API","version":"1.0.0","description":"Create permanent static QR codes and barcodes. No content storage or redirect service. Server-to-server clients send Authorization: Bearer <API_KEY>. Configure RAMZINEH_API_KEY on the server. Keep the key in server secrets. Web UI is public; image-generation API requires the key."},"servers":[{"url":"https://qrgenerator.dkmehr.ir"}],"paths":{"/api/v1/qr":{"get":{"operationId":"getQr","summary":"Generate QR code","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Generated image, or JSON with a Base64 data URL when response=json.","content":{"image/png":{"schema":{"type":"string","format":"binary"}},"image/svg+xml":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"object","required":["type","format","contentType","width","height","dataUrl"],"properties":{"type":{"type":"string","enum":["qr","barcode"]},"format":{"type":"string","enum":["png","svg"]},"contentType":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"},"dataUrl":{"type":"string","description":"data:image/png;base64,... or data:image/svg+xml;base64,..."}}}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid Authorization: Bearer <API_KEY>."},"403":{"description":"Access denied."},"404":{"description":"Unsupported endpoint."},"413":{"description":"JSON request body exceeds 16 KB."},"415":{"description":"POST requires application/json."},"422":{"description":"invalid_data, data_too_long, invalid_format, invalid_response, invalid_options, invalid_color, invalid_symbology, invalid_barcode_data, size_too_small, or image_too_large.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal_error"},"503":{"description":"API key is missing or shorter than 32 characters on the server."}},"parameters":[{"name":"data","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Literal content. Unicode is supported for QR. Barcode character sets depend on symbology."}},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["png","svg"],"default":"png"}},{"name":"response","in":"query","required":false,"schema":{"type":"string","enum":["binary","json"],"default":"binary"}},{"name":"color","in":"query","required":false,"schema":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","default":"#153e35","description":"Dark foreground on white. Relative luminance must be at most 0.18."}},{"name":"download","in":"query","required":false,"schema":{"type":"string","enum":["0","1"],"default":"0"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":128,"maximum":2048,"default":1024,"description":"Exact square image dimensions in pixels. Dense codes may need a larger size. QR capacity is 2953 UTF-8 bytes for ASCII, 2952 bytes with UTF-8 ECI. Error correction M is used up to its capacity, then L."}}]},"post":{"operationId":"postQr","summary":"Generate QR code","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Generated image, or JSON with a Base64 data URL when response=json.","content":{"image/png":{"schema":{"type":"string","format":"binary"}},"image/svg+xml":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"object","required":["type","format","contentType","width","height","dataUrl"],"properties":{"type":{"type":"string","enum":["qr","barcode"]},"format":{"type":"string","enum":["png","svg"]},"contentType":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"},"dataUrl":{"type":"string","description":"data:image/png;base64,... or data:image/svg+xml;base64,..."}}}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid Authorization: Bearer <API_KEY>."},"403":{"description":"Access denied."},"404":{"description":"Unsupported endpoint."},"413":{"description":"JSON request body exceeds 16 KB."},"415":{"description":"POST requires application/json."},"422":{"description":"invalid_data, data_too_long, invalid_format, invalid_response, invalid_options, invalid_color, invalid_symbology, invalid_barcode_data, size_too_small, or image_too_large.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal_error"},"503":{"description":"API key is missing or shorter than 32 characters on the server."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"string","minLength":1,"description":"Literal content. Unicode is supported for QR. Barcode character sets depend on symbology."},"format":{"type":"string","enum":["png","svg"],"default":"png"},"response":{"type":"string","enum":["binary","json"],"default":"binary"},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","default":"#153e35","description":"Dark foreground on white. Relative luminance must be at most 0.18."},"download":{"type":"boolean","default":false,"description":"Return Content-Disposition: attachment for binary responses."},"size":{"type":"integer","minimum":128,"maximum":2048,"default":1024,"description":"Exact square image dimensions in pixels. Dense codes may need a larger size. QR capacity is 2953 UTF-8 bytes for ASCII, 2952 bytes with UTF-8 ECI. Error correction M is used up to its capacity, then L."}}},"example":{"data":"سلام دنیا","format":"png","size":1024}}}}}},"/api/v1/barcode":{"get":{"operationId":"getBarcode","summary":"Generate barcode","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Generated image, or JSON with a Base64 data URL when response=json.","content":{"image/png":{"schema":{"type":"string","format":"binary"}},"image/svg+xml":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"object","required":["type","format","contentType","width","height","dataUrl"],"properties":{"type":{"type":"string","enum":["qr","barcode"]},"format":{"type":"string","enum":["png","svg"]},"contentType":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"},"dataUrl":{"type":"string","description":"data:image/png;base64,... or data:image/svg+xml;base64,..."}}}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid Authorization: Bearer <API_KEY>."},"403":{"description":"Access denied."},"404":{"description":"Unsupported endpoint."},"413":{"description":"JSON request body exceeds 16 KB."},"415":{"description":"POST requires application/json."},"422":{"description":"invalid_data, data_too_long, invalid_format, invalid_response, invalid_options, invalid_color, invalid_symbology, invalid_barcode_data, size_too_small, or image_too_large.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal_error"},"503":{"description":"API key is missing or shorter than 32 characters on the server."}},"parameters":[{"name":"data","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Literal content. Unicode is supported for QR. Barcode character sets depend on symbology."}},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["png","svg"],"default":"png"}},{"name":"response","in":"query","required":false,"schema":{"type":"string","enum":["binary","json"],"default":"binary"}},{"name":"color","in":"query","required":false,"schema":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","default":"#153e35","description":"Dark foreground on white. Relative luminance must be at most 0.18."}},{"name":"download","in":"query","required":false,"schema":{"type":"string","enum":["0","1"],"default":"0"}},{"name":"symbology","in":"query","required":false,"schema":{"type":"string","enum":["CODE128","EAN13","CODE39"],"default":"CODE128"}},{"name":"scale","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":4,"default":3}},{"name":"height","in":"query","required":false,"schema":{"type":"integer","minimum":40,"maximum":300,"default":100,"description":"Bar height in pixels. Total image height includes 32 px padding. Width is automatic and limited to 4096 px. Maximum input length is 80 characters. Image contains bars without human-readable caption."}}]},"post":{"operationId":"postBarcode","summary":"Generate barcode","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Generated image, or JSON with a Base64 data URL when response=json.","content":{"image/png":{"schema":{"type":"string","format":"binary"}},"image/svg+xml":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"object","required":["type","format","contentType","width","height","dataUrl"],"properties":{"type":{"type":"string","enum":["qr","barcode"]},"format":{"type":"string","enum":["png","svg"]},"contentType":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"},"dataUrl":{"type":"string","description":"data:image/png;base64,... or data:image/svg+xml;base64,..."}}}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid Authorization: Bearer <API_KEY>."},"403":{"description":"Access denied."},"404":{"description":"Unsupported endpoint."},"413":{"description":"JSON request body exceeds 16 KB."},"415":{"description":"POST requires application/json."},"422":{"description":"invalid_data, data_too_long, invalid_format, invalid_response, invalid_options, invalid_color, invalid_symbology, invalid_barcode_data, size_too_small, or image_too_large.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"internal_error"},"503":{"description":"API key is missing or shorter than 32 characters on the server."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"string","minLength":1,"description":"Literal content. Unicode is supported for QR. Barcode character sets depend on symbology."},"format":{"type":"string","enum":["png","svg"],"default":"png"},"response":{"type":"string","enum":["binary","json"],"default":"binary"},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","default":"#153e35","description":"Dark foreground on white. Relative luminance must be at most 0.18."},"download":{"type":"boolean","default":false,"description":"Return Content-Disposition: attachment for binary responses."},"symbology":{"type":"string","enum":["CODE128","EAN13","CODE39"],"default":"CODE128"},"scale":{"type":"integer","minimum":1,"maximum":4,"default":3},"height":{"type":"integer","minimum":40,"maximum":300,"default":100,"description":"Bar height in pixels. Total image height includes 32 px padding. Width is automatic and limited to 4096 px. Maximum input length is 80 characters. Image contains bars without human-readable caption."}}},"example":{"data":"590123412345","symbology":"EAN13","format":"svg"}}}}}}},"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"The RAMZINEH_API_KEY configured on your server."}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}