Built for developers & agents
No API keys. No signup. No SDK required. Deterministic responses that cache forever, and errors that hand you the corrected call. An agent that has never seen UseQR succeeds on its first request.
Shortest possible call — path style, so it drops straight into a markdown image tag: https://useqr.app/q/hello.png
REST API
curl "https://useqr.app/api/v1/qr?data=hello&size=512" -o qr.png
curl "https://useqr.app/api/v1/qr?data=hello&format=svg&style=rounded&fg=312e81"
curl "https://useqr.app/api/v1/qr?data=hello&format=json" # module matrixcurl "https://useqr.app/api/v1/qr?data=hello&format=svg-tiny" -o qr-tiny.svgcurl "https://useqr.app/api/v1/wifi?ssid=CafeGuest&password=espresso" -o wifi.png
curl "https://useqr.app/api/v1/upi?pa=shop@okhdfcbank&pn=Sharma%20Store&am=499"
curl "https://useqr.app/api/v1/vcard?fn=Asha&ln=Rao&phone=%2B919876543210"curl -X POST https://useqr.app/api/v1/qr/batch \
-H "Content-Type: application/json" \
-d '{
"output": "url",
"style": { "size": 512, "style": "rounded", "color": "312e81" },
"items": [
{ "data": "https://example.com/a", "id": "a" },
{ "data": "https://example.com/b", "style": { "color": "000000" } },
{ "type": "wifi", "fields": { "ssid": "CafeGuest", "password": "espresso" } }
]
}'curl -X POST --data-binary @qr.png -H "Content-Type: image/png" https://useqr.app/api/v1/decode
curl "https://useqr.app/api/v1/verify?data=hello&color=cccccc" # tells you it's low-contrast=IMAGE("https://useqr.app/api/v1/qr?data=" & ENCODEURL(A2))Full surface: OpenAPI 3.1 · llms-full.txt (paste it into any agent) · llms.txt
MCP server
Six tools — qr_generate, qr_generate_typed, qr_decode, qr_verify, qr_batch, qr_size_recommend — over Streamable HTTP. No auth, no account, nothing stored.
claude mcp add --transport http useqr https://useqr.app/api/mcp{
"mcpServers": {
"useqr": { "type": "http", "url": "https://useqr.app/api/mcp" }
}
}{ "mcpServers": { "useqr": { "url": "https://useqr.app/api/mcp" } } }How this compares
Two other QR products ship an MCP server. Both need an account before an agent can call them, neither exposes design arguments, and neither can prove the code it returns actually scans.
| Capability | UseQR | QRCodeKIT | QR Planet |
|---|---|---|---|
| Account needed | None. No account, no API key, no OAuth — connect and call. | Account required; API access sits on the top plan, with keys requested by email. | Account required; paid plans from about $5/month. |
| Design arguments | Full design surface: module shape, eye shape, colors, error correction, size, quiet zone. | No design arguments — colors, module shapes, eyes, and logos are not exposed. | Not exposed through the MCP surface. |
| Proves it scans | qr_verify renders, rasterizes, and decodes with zxing, then reports contrast and quiet-zone problems. | No verification step; nothing decodes the generated code back. | No verify or decode tool. |
| Payload types | 30+ typed payloads (WiFi, vCard, UPI, PIX, EPC, BIP-21 crypto, calendar, and more). | A subset of their dynamic types. | Core dynamic types. |
| Quotas | None. Static generation is deterministic and cached; there is nothing to meter. | Plan quotas apply (free tier: 2 codes for life, 100 scans per code per month). | Plan-gated. |
Verified 2026-08-21: QRCodeKIT AI / MCP page · QR Planet MCP documentation. Vendors ship fast — if something here is out of date, tell us and we’ll correct it.
Every page is an API too
Tool pages keep their full state in the URL — form fields and style options are query params. Compose a link, send it to someone, and they land in the editor with everything filled in.
https://useqr.app/wifi?ssid=CafeGuest&sec=WPA&style=rounded&fg=312e81&label=SCAN%20ME
https://useqr.app/upi?pa=shop@okhdfcbank&pn=Sharma%20Store&tpl=upi-shop-counterSelf-host it
MIT licensed, one command to run. If you need more than fair use of the hosted API, run your own — it's the same code.
git clone https://github.com/rajkaria/useqr.git
cd useqr && pnpm install && pnpm verify
pnpm --filter @useqr/web dev