{"openapi":"3.1.0","info":{"title":"QRSmith API","version":"0.1.0","description":"QR code generation (text/URL/Wi-Fi/vCard), best-effort decoding, and error-correction-level reference — all local.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://qrsmith.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/qrsmith/docs"},"termsOfService":"https://connectorbay.com/qrsmith/terms"},"servers":[{"url":"https://qrsmith.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/qrsmith/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/qr_generate":{"post":{"operationId":"qr_generate","summary":"Generate a real QR code from text, a URL, a Wi-Fi network, or a vCard contact — as a base64 PNG or SVG.","description":"Generate a real QR code from text, a URL, a Wi-Fi network, or a vCard contact — as a base64 PNG or SVG.\n    Use for \"make a QR code for this URL\", \"QR code for my wifi network\", \"QR code contact card\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"kind":{"default":"text","description":"text | url | wifi | vcard","title":"Kind","type":"string"},"data":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The text or URL to encode. Required for kind='text' or 'url'.","title":"Data"},"wifi_ssid":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Network name, for kind='wifi'.","title":"Wifi Ssid"},"wifi_password":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Network password, for kind='wifi' (omit if security='nopass').","title":"Wifi Password"},"wifi_security":{"default":"WPA","description":"WPA | WEP | nopass, for kind='wifi'.","title":"Wifi Security","type":"string"},"wifi_hidden":{"default":false,"description":"Whether the network is hidden, for kind='wifi'.","title":"Wifi Hidden","type":"boolean"},"vcard_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Full name, for kind='vcard'.","title":"Vcard Name"},"vcard_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Phone number, for kind='vcard'.","title":"Vcard Phone"},"vcard_email":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Email address, for kind='vcard'.","title":"Vcard Email"},"vcard_org":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Organization, for kind='vcard'.","title":"Vcard Org"},"vcard_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Website, for kind='vcard'.","title":"Vcard Url"},"error_correction":{"default":"M","description":"L | M | Q | H — see qr_error_correction_levels.","title":"Error Correction","type":"string"},"box_size":{"default":10,"description":"Pixels per module, for PNG output.","maximum":50,"minimum":1,"title":"Box Size","type":"integer"},"border":{"default":4,"description":"Quiet-zone width, in modules.","maximum":20,"minimum":0,"title":"Border","type":"integer"},"output_format":{"default":"png_base64","description":"png_base64 | svg","title":"Output Format","type":"string"},"fg_color":{"default":"black","description":"Foreground color name or hex, for PNG output.","title":"Fg Color","type":"string"},"bg_color":{"default":"white","description":"Background color name or hex, for PNG output.","title":"Bg Color","type":"string"}},"title":"qr_generateArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/qr_decode":{"post":{"operationId":"qr_decode","summary":"Decode a QR code image back to its text content. Depends on a system library that may not be present in","description":"Decode a QR code image back to its text content. Depends on a system library that may not be present in\n    every deployment; check decode_available in the result. Use for \"what does this QR code say\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"image_base64":{"description":"A QR code image, base64-encoded (PNG/JPEG/etc.), with or without a data: URI prefix.","title":"Image Base64","type":"string"}},"required":["image_base64"],"title":"qr_decodeArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/qr_error_correction_levels":{"post":{"operationId":"qr_error_correction_levels","summary":"The QR standard's four error-correction levels (L/M/Q/H) with real recovery percentages and when to use","description":"The QR standard's four error-correction levels (L/M/Q/H) with real recovery percentages and when to use\n    each. Use for \"what error correction level should I use\", \"what does QR error correction mean\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"qr_error_correction_levelsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}