Skip to content
UseQR

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

Generate (aliases like text= and width= just work)
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 matrix
Print & cutting (SVG Tiny 1.2 — Illustrator, Cricut, engravers)
curl "https://useqr.app/api/v1/qr?data=hello&format=svg-tiny" -o qr-tiny.svg
Typed endpoints — same builders as the web UI
curl "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"
Batch — shared style, per-item overrides, typed items, up to 1,000
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" } }
    ]
  }'
Decode & verify
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
Google Sheets
=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 Code
claude mcp add --transport http useqr https://useqr.app/api/mcp
Claude Desktop / any MCP client (config JSON)
{
  "mcpServers": {
    "useqr": { "type": "http", "url": "https://useqr.app/api/mcp" }
  }
}
Cursor (.cursor/mcp.json)
{ "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.

UseQR’s MCP server compared with QRCodeKIT and QR Planet
CapabilityUseQRQRCodeKITQR Planet
Account neededNone. 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 argumentsFull 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 scansqr_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 types30+ typed payloads (WiFi, vCard, UPI, PIX, EPC, BIP-21 crypto, calendar, and more).A subset of their dynamic types.Core dynamic types.
QuotasNone. 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.

URL-as-state
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-counter

Self-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.

Run locally
git clone https://github.com/rajkaria/useqr.git
cd useqr && pnpm install && pnpm verify
pnpm --filter @useqr/web dev

Why it's free forever →