# UseQR — full agent surface Free forever. Keyless. No signup, no watermark, no limits. MIT source: https://github.com/rajkaria/useqr ## Generic generate GET https://useqr.app/api/v1/qr Required: data (aliases: text, content, url, q) Optional: size|width (64-4096, default 512) · format|type (png default, svg, json = module matrix, base64 = data URI) · color|fg (hex) · bg|light (hex or "transparent") · style|dots (square, rounded, dot, diamond, star, vertical-bars, horizontal-bars, organic) · eye (square, rounded, circle, leaf, diamond) · ec (L M Q H) · margin|quiet (0-10 modules, default 4) Deterministic → responses are cache-forever. Errors are application/problem+json with a "fix" field containing a corrected copy-pasteable call. Examples: curl "https://useqr.app/api/v1/qr?data=hello&size=512" -o qr.png curl "https://useqr.app/api/v1/qr?text=hello&format=svg" # alias + svg curl "https://useqr.app/api/v1/qr?data=hello&format=json" # matrix of 0/1 Google Sheets: =IMAGE("https://useqr.app/api/v1/qr?data="&ENCODEURL(A2)) ## Typed endpoints (same builders as the web UI; style params above work too) - GET https://useqr.app/api/v1/url?url=&utm_source=&utm_medium=&utm_campaign=&utm_term=&utm_content=&utm_id= Example: https://useqr.app/api/v1/url?url=example.com&utm_source=poster&utm_medium=qr - GET https://useqr.app/api/v1/text?text= Example: https://useqr.app/api/v1/text?text=hello - GET https://useqr.app/api/v1/wifi?ssid=&password=&security=&hidden= Example: https://useqr.app/api/v1/wifi?ssid=CafeGuest&password=espresso&security=WPA - GET https://useqr.app/api/v1/vcard?fn=&ln=&org=&title=&phone=&phone2=&email=&url=&street=&city=®ion=&zip=&country=¬e=&version= Example: https://useqr.app/api/v1/vcard?fn=Asha&ln=Rao&phone=%2B919876543210&email=asha%40example.com - GET https://useqr.app/api/v1/mecard?fn=&ln=&phone=&email=&url=¬e= Example: https://useqr.app/api/v1/mecard?fn=Asha&ln=Rao&phone=%2B919876543210 - GET https://useqr.app/api/v1/email?to=&subject=&body=&cc= Example: https://useqr.app/api/v1/email?to=hi%40example.com&subject=Hello - GET https://useqr.app/api/v1/phone?number= Example: https://useqr.app/api/v1/phone?number=%2B14155550123 - GET https://useqr.app/api/v1/sms?number=&message= Example: https://useqr.app/api/v1/sms?number=%2B14155550123&message=Hi - GET https://useqr.app/api/v1/whatsapp?number=&message= Example: https://useqr.app/api/v1/whatsapp?number=919876543210&message=Hi - GET https://useqr.app/api/v1/telegram?username= Example: https://useqr.app/api/v1/telegram?username=durov - GET https://useqr.app/api/v1/event?title=&start=&end=&location=&description=&allday=&reminder= Example: https://useqr.app/api/v1/event?title=Launch&start=2026-09-01T18:00:00%2B05:30 - GET https://useqr.app/api/v1/geo?lat=&lng= Example: https://useqr.app/api/v1/geo?lat=19.076&lng=72.8777 - GET https://useqr.app/api/v1/upi?pa=&pn=&am=&tn=&mc=&tr= Example: https://useqr.app/api/v1/upi?pa=shop%40okhdfcbank&pn=Sharma%20Store&am=499.00 - GET https://useqr.app/api/v1/paypal?user=&amount= Example: https://useqr.app/api/v1/paypal?user=ashadesigns&amount=25.00 - GET https://useqr.app/api/v1/bitcoin?address=&amount=&label=&message= Example: https://useqr.app/api/v1/bitcoin?address=bc1q...&amount=0.001 - GET https://useqr.app/api/v1/ethereum?address=&chain=&value= Example: https://useqr.app/api/v1/ethereum?address=0x...&chain=1 - GET https://useqr.app/api/v1/pix?key=&name=&city=&amount=&txid= Example: https://useqr.app/api/v1/pix?key=a%40b.com&name=Loja&city=SaoPaulo - GET https://useqr.app/api/v1/epc?name=&iban=&amount=&bic=&remittance= Example: https://useqr.app/api/v1/epc?name=ACME&iban=DE89370400440532013000&amount=100 - GET https://useqr.app/api/v1/social?ig=&x=&li=&yt=&tt=&gh=&fb=&web= Example: https://useqr.app/api/v1/social?ig=useqr&gh=useqr - GET https://useqr.app/api/v1/app-download?ios=&android=&fallback= Example: https://useqr.app/api/v1/app-download?ios=https://apps.apple.com/...&android=https://play.google.com/... - GET https://useqr.app/api/v1/google-review?placeid= Example: https://useqr.app/api/v1/google-review?placeid=ChIJN1t_tDeuEmsRUsoyG83frY4 - GET https://useqr.app/api/v1/menu?url=&utm_source=&utm_medium=&utm_campaign=&utm_term=&utm_content=&utm_id= Example: https://useqr.app/api/v1/menu?url=example.com/menu.pdf - GET https://useqr.app/api/v1/feedback?url=&utm_source=&utm_medium=&utm_campaign=&utm_term=&utm_content=&utm_id= Example: https://useqr.app/api/v1/feedback?url=forms.gle/abc - GET https://useqr.app/api/v1/pdf?url=&utm_source=&utm_medium=&utm_campaign=&utm_term=&utm_content=&utm_id= Example: https://useqr.app/api/v1/pdf?url=example.com/manual.pdf - GET https://useqr.app/api/v1/coupon?code=&url=&utm_source=&utm_medium=&utm_campaign=&utm_term=&utm_content=&utm_id= Example: https://useqr.app/api/v1/coupon?code=SAVE20 - GET https://useqr.app/api/v1/litecoin?address=&amount=&label=&message= Example: https://useqr.app/api/v1/litecoin?address=LcHKX9RQ7EmuALKweCkSTZ1zqFRHvJnDvL&amount=1.5 - GET https://useqr.app/api/v1/bitcoin-cash?address=&amount=&label=&message= Example: https://useqr.app/api/v1/bitcoin-cash?address=qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a - GET https://useqr.app/api/v1/dogecoin?address=&amount=&label=&message= Example: https://useqr.app/api/v1/dogecoin?address=DH5yaieqoZN36fDVciNyRueRGvGLR3mr7L&amount=100 - GET https://useqr.app/api/v1/crypto?chain=&scheme=&address=&amount=&label=&message= Example: https://useqr.app/api/v1/crypto?chain=dash&address=XnZfEsGeJhVRhJpuLYUvbeCHNCcvxqoMTh - GET https://useqr.app/api/v1/json?json= Example: https://useqr.app/api/v1/json?json=%7B%22a%22%3A1%7D - GET https://useqr.app/api/v1/base64?text=&b64= Example: https://useqr.app/api/v1/base64?text=hello - GET https://useqr.app/api/v1/ssh?url= Example: https://useqr.app/api/v1/ssh?url=git%40github.com%3Auser%2Frepo.git ## Batch POST https://useqr.app/api/v1/qr/batch Body: {"items":[{"data":"one"},{"data":"two","format":"svg","size":512}]} (≤100) Returns per-item base64 PNGs or SVG strings, with per-item errors. ## Decode GET https://useqr.app/api/v1/decode?url=https%3A%2F%2Fexample.com%2Fqr.png POST https://useqr.app/api/v1/decode with raw image bytes, multipart "file", or {"url":…} Returns every QR code found: {count, codes:[{text, format}]}. ## Verify (the loop that makes styling safe) GET https://useqr.app/api/v1/verify?data=hello&color=333333&style=dot Renders, rasterizes, and decodes with zxing. Returns {scannable, decoded, matchesInput, version, ecLevel, contrast, issues[]} — issues are actionable. ## MCP server Streamable HTTP, stateless, no auth: https://useqr.app/api/mcp claude mcp add --transport http useqr https://useqr.app/api/mcp Claude Desktop config: {"mcpServers":{"useqr":{"type":"http","url":"https://useqr.app/api/mcp"}}} ### qr_generate Generate a QR code from any string (URL, text, or a pre-built payload). Returns the image plus a stable hosted URL you can embed. Use qr_generate_typed instead when the user wants WiFi, vCard, UPI, calendar, or another structured type — it handles the encoding rules. Free, keyless, no signup. ### qr_generate_typed Generate a structured QR code (wifi, vcard, upi, event, whatsapp, sms, email, geo, pix, epc, and more) from typed fields — escaping and format rules are handled for you. Example: type='wifi', fields={ssid:'CafeGuest', password:'espresso', security:'WPA'}. Field names per type: wifi(ssid,password,security,hidden) vcard(fn,ln,org,title,phone,email,url) upi(pa,pn,am,tn) event(title,start,end,location) whatsapp(number,message) sms(number,message) email(to,subject,body) geo(lat,lng) pix(key,name,city,amount) epc(name,iban,amount) telegram(username) paypal(user,amount) bitcoin(address,amount) ethereum(address,chain). ### qr_decode Read the QR code(s) in an image. Provide either a public image URL or base64-encoded image bytes. Returns the decoded text of every code found. ### qr_verify Verify that a QR code design actually scans: renders it, rasterizes it, and reads it back with a real decoder. Returns a report with scannability, contrast, and concrete fixes. Always use this before telling a user their styled code is ready to print. ### qr_batch Generate up to 1000 QR codes in one call. Each item is either {data:'…'} or {type:'wifi', fields:{…}} using the same typed builders as qr_generate_typed. A shared `style` applies to every item and each item may override it. Returns hosted URLs (paste those into documents — they render forever and cost nothing) plus the exact encoded payload per item. Give items an `id` when you need to match results back to your data. ### qr_size_recommend Recommend the minimum printed size for a QR code given the scanning distance. Input distance_cm (how far away people scan from) and optionally the data (longer data needs larger prints). Returns mm/cm/inches plus print guidance. ## Web pages (URL-as-state — compose links with form + style params) Form fields are query params documented per page; style params: style, eye, fg, bg (hex or "t"), eyefg, ballfg, ec, qz, label, labelbg. Template deep links: ?tpl= (see https://useqr.app/templates). - https://useqr.app/url — Free URL QR Code Generator - https://useqr.app/text — Free Text QR Code Generator - https://useqr.app/email — Free Email QR Code Generator - https://useqr.app/phone — Free Phone QR Code Generator - https://useqr.app/sms — Free SMS QR Code Generator - https://useqr.app/vcard — Free vCard QR Code Generator - https://useqr.app/mecard — Free MeCard QR Code Generator - https://useqr.app/whatsapp — Free WhatsApp QR Code Generator - https://useqr.app/telegram — Free Telegram QR Code Generator - https://useqr.app/social — Free Social Media QR Code Generator - https://useqr.app/wifi — Free WiFi QR Code Generator - https://useqr.app/calendar — Free Calendar Event QR Code Generator - https://useqr.app/location — Free Location QR Code Generator - https://useqr.app/app-download — Free App Download QR Code Generator - https://useqr.app/upi — Free UPI QR Code Generator - https://useqr.app/paypal — Free PayPal QR Code Generator - https://useqr.app/bitcoin — Free Bitcoin QR Code Generator - https://useqr.app/ethereum — Free Ethereum QR Code Generator - https://useqr.app/litecoin — Free Litecoin QR Code Generator - https://useqr.app/bitcoin-cash — Free Bitcoin Cash QR Code Generator - https://useqr.app/dogecoin — Free Dogecoin QR Code Generator - https://useqr.app/crypto — Free Crypto Payment QR Code Generator - https://useqr.app/pix — Free PIX QR Code Generator - https://useqr.app/epc — Free EPC QR Code Generator - https://useqr.app/google-review — Free Google Review QR Code Generator - https://useqr.app/menu — Free Menu QR Code Generator - https://useqr.app/feedback — Free Feedback QR Code Generator - https://useqr.app/coupon — Free Coupon QR Code Generator - https://useqr.app/pdf — Free PDF QR Code Generator - https://useqr.app/json — Free JSON QR Code Generator - https://useqr.app/base64 — Free Base64 QR Code Generator - https://useqr.app/ssh — Free SSH & Git URL QR Code Generator - https://useqr.app/scan — decode from image or camera (client-side) - https://useqr.app/validate — scannability stress-test with a 0-100 score - https://useqr.app/size-calculator — distance → minimum print size - https://useqr.app/compare — do two codes encode the same data - https://useqr.app/bulk — CSV → ZIP of verified codes (client-side) - https://useqr.app/wifi-card — printable WiFi card - https://useqr.app/sticker-sheet — Avery label sheets - https://useqr.app/templates — 58 ready-made use-case templates ## Promises No accounts. No tracking. Static generation never touches a server. Dynamic QR (editable destinations) is intentionally not offered yet — it requires an abuse-screening stack we won't ship half-built. ## Documentation index — every page, with its direct answer Each page is also served as plain markdown at {path}.md. Fetch that for the full text of any entry below. ### Are QR codes still relevant? https://useqr.app/docs/basics/are-qr-codes-still-relevant.md Yes, and more so than during the pandemic peak. The difference is that usage has shifted from menus to payments, packaging and identity: UPI in India and PIX in Brazil now process billions of QR payments a month, and retail is standardising on 2D codes for point of sale by 2027. ### Do QR codes expire? https://useqr.app/docs/basics/do-qr-codes-expire.md A static QR code never expires — the destination is encoded in the pattern, so nothing has to keep running. A dynamic QR code expires when the provider's subscription lapses or the company shuts down, which is the single biggest risk in printed QR work. ### The history of QR codes https://useqr.app/docs/basics/history-of-qr-codes.md QR codes were invented in 1994 by a team led by Masahiro Hara at Denso Wave, a Toyota subsidiary, to track car parts faster than barcodes allowed. Denso Wave patented the format and then declined to enforce the patents, which is why the format became universal. ### How do QR codes work? https://useqr.app/docs/basics/how-do-qr-codes-work.md A scanner finds the three corner squares, works out the code's grid and orientation, samples every cell as black or white, reads the format bits to learn the mask and error-correction level, un-masks the data, corrects errors with Reed–Solomon, and reassembles the original text. ### QR code vs barcode https://useqr.app/docs/basics/qr-code-vs-barcode.md A traditional barcode stores about 20 characters in one dimension and must be scanned in roughly the right orientation. A QR code stores up to 2,953 bytes in two dimensions, reads at any angle, and survives up to 30% damage. Retail is now migrating from one to the other. ### QR code vs NFC https://useqr.app/docs/basics/qr-code-vs-nfc.md A QR code is printed and costs nothing per item; NFC needs a chip in every object and costs cents to dollars each. NFC is faster and needs no camera, but only works at a couple of centimetres and not on every phone. For most public-facing uses, QR wins on cost and reach. ### Static vs dynamic QR codes https://useqr.app/docs/basics/static-vs-dynamic-qr-codes.md A static QR code contains its destination directly, so it never expires and cannot be tracked or edited. A dynamic code contains a short link that redirects through a provider, making it editable and trackable — and dependent on that provider staying online and paid. ### What is a QR code? https://useqr.app/docs/basics/what-is-a-qr-code.md A QR code is a two-dimensional barcode that stores data as a grid of black and white squares. A camera reads the pattern and recovers the original text — usually a web address. It was invented in 1994 by Denso Wave to track car parts, and the format is free for anyone to use. ### When not to use a QR code https://useqr.app/docs/basics/when-not-to-use-a-qr-code.md Do not use a QR code where the audience is moving, where a tappable link already exists, where it would be the only route to essential information, or where the code cannot be printed at least a tenth of the viewing distance. In those cases it is decoration at best. ### Why use a QR code? https://useqr.app/docs/basics/why-use-qr-codes.md A QR code is worth using when it removes typing at a moment when typing is the obstacle: joining WiFi, paying at a counter, opening a menu, saving a contact. It is not worth using where a tappable link already exists, or where the audience is moving. ### Choosing QR code colours that scan https://useqr.app/docs/design/qr-code-colors-that-scan.md Decoders threshold on luminance, not hue, so the rule is a luminance difference of at least 40% between modules and background, dark on light. Apply the brand colour to the modules and keep the background white — colouring the background is where most branded codes fail. ### Adding a logo to a QR code, safely https://useqr.app/docs/design/qr-code-with-logo-best-practices.md Keep the logo central, under about 20–25% of the code area, at error-correction level Q or H, on a solid light panel with two or three modules of clearance. Never let it touch a corner square, and verify by decoding the finished artwork. ### A free QR code API with no key https://useqr.app/docs/developers/free-qr-code-api-no-key.md UseQR's REST API needs no signup, no API key and no SDK. GET /api/v1/qr?data=hello returns a PNG. The shortest form is /q/hello.png, which drops straight into a markdown image tag. Responses are deterministic and cacheable forever. ### Generate a QR code in JavaScript and React https://useqr.app/docs/developers/generate-a-qr-code-in-javascript.md For a QR code in a browser or React app, either point an at the keyless API — one line, no dependency — or use a client-side library such as qrcode when the payload must not leave the device. Use the API for public URLs, local generation for credentials. ### Generate a QR code in Python https://useqr.app/docs/developers/generate-a-qr-code-in-python.md Two options: call the keyless HTTP API with requests, which needs no dependencies beyond requests and no key, or use the qrcode library locally when you cannot make network calls. The API is better when you want styling and verification without pulling in an imaging stack. ### Generate a QR code with curl https://useqr.app/docs/developers/generate-a-qr-code-with-curl.md curl -o qr.png \"https://useqr.app/q/hello.png\" is the whole thing. No key, no auth header, no SDK. Add query parameters for size, format and styling, and use format=svg when you want vector output for print. ### QR codes from an AI agent: the UseQR MCP server https://useqr.app/docs/developers/qr-code-mcp-server.md UseQR runs a keyless MCP server over Streamable HTTP at /api/mcp. One command adds it to Claude; a few lines of JSON add it to Cursor or Copilot. Agents can generate, build typed payloads, decode images and verify that a styled code still scans. ### Why you should verify that a QR code decodes https://useqr.app/docs/developers/why-verify-that-your-qr-code-decodes.md Rendering a QR code proves nothing about whether it scans. Styling, colour, logos and print all consume error-correction budget invisibly. The only reliable check is to rasterise the final output and read it back with a real decoder. ### Using QR codes to get more Google reviews https://useqr.app/docs/ecommerce/qr-codes-for-google-reviews.md Link directly to Google's write-a-review endpoint for your Place ID, so the star dialog opens immediately instead of your listing. Put the code on the receipt or bill, ask every customer, and never offer anything in return — incentivised reviews violate Google's policies. ### QR codes on product packaging https://useqr.app/docs/ecommerce/qr-codes-on-product-packaging.md A packaging QR code has to work for as long as the product exists, which makes permanence the design constraint rather than size. Point it at a stable path on your own domain, never a campaign URL or a third-party shortener, and use error correction Q. ### How to add a logo to a QR code https://useqr.app/docs/how-to/how-to-make-a-qr-code-with-a-logo.md Set error correction to Q or H, place the logo centrally at under about 20% of the code area, give it two or three modules of clear space, and verify the result decodes. Never let it touch a corner square — those are not protected by error correction. ### How to make a QR code https://useqr.app/docs/how-to/how-to-make-a-qr-code.md Pick the type, enter your details, check the size against the scanning distance, and download SVG for print or PNG for screens. With UseQR the whole thing happens in your browser — no signup, no watermark, and nothing is uploaded. ### How to generate QR codes in bulk from a spreadsheet https://useqr.app/docs/how-to/how-to-make-qr-codes-in-bulk.md Export a CSV with one row per code, upload it, and download a ZIP of images, a grid PDF, or Avery-format label sheets. Verify every code decodes before printing — a systematic error found after 5,000 labels is expensive. ### How to track QR code scans without a paid tool https://useqr.app/docs/how-to/how-to-track-qr-code-scans.md Point the code at a URL on your own domain carrying UTM parameters, and read the results in your own analytics. That gives you scan counts, timing and placement attribution with no third party in the path and no subscription that can lapse. ### Writing the text next to a QR code https://useqr.app/docs/marketing/qr-code-call-to-action.md The words beside a QR code matter more than its design. A stated, specific benefit — "Scan for the wine list" — consistently outperforms "Scan me", and a code with no text at all is close to decoration. ### The EPC QR code format (GiroCode), line by line https://useqr.app/docs/payments/epc-qr-code-format.md An EPC QR code is twelve lines of text in fixed order, starting with BCD and containing the beneficiary name, IBAN and optionally an amount. The whole payload must stay under 331 bytes, and lines 10 and 11 are mutually exclusive. ### PIX key types, and which to use on a printed code https://useqr.app/docs/payments/pix-key-types.md A PIX key can be a CPF, CNPJ, email, phone number or a random EVP UUID. For anything printed publicly, use a random EVP key: it works identically but reveals neither your tax id nor your phone number, and it can be rotated. ### The PIX QR code format: EMV BR Code explained https://useqr.app/docs/payments/pix-qr-code-format.md A PIX QR code is an EMVCo BR Code: tag-length-value fields ending in a CRC16/CCITT-FALSE checksum. The same string is also copia e cola, which people paste when they cannot scan — always print it alongside the code. ### QR payment standards compared: UPI, PIX, EPC, EMVCo https://useqr.app/docs/payments/qr-payment-standards-compared.md UPI uses its own upi:// deep link; PIX, PromptPay, QRIS, DuitNow and PayNow are all EMVCo tag-length-value profiles; EPC uses a twelve-line text block. They are structurally different and none are interchangeable, though all are merchant-presented. ### Static vs dynamic UPI QR codes https://useqr.app/docs/payments/static-vs-dynamic-upi-qr.md A static UPI code omits the amount, so the customer types it — that is the printed shop standee, generated once and used forever. A dynamic code sets am for a specific transaction and is shown on a screen. Printing a fixed amount is almost always a mistake. ### The UPI QR code format, parameter by parameter https://useqr.app/docs/payments/upi-qr-code-format.md A UPI QR code is a upi://pay deep link. pa (the VPA) and pn (payee name) are required; am, cu, tn, tr, mc and mode are optional. NPCI standardised it, so one code works in every UPI app — Google Pay, PhonePe, Paytm, BHIM and every bank app. ### A UPI QR code for a small shop https://useqr.app/docs/payments/upi-qr-for-a-small-shop.md Generate a static code from your VPA with no amount, print it at 4 cm or larger on matt stock, put your business name in large text beside it, and check the standee at the start of every shift for a sticker pasted over it. ### What DPI should a QR code be printed at? https://useqr.app/docs/print/qr-code-dpi-for-printing.md Print QR codes from vector artwork — SVG or PDF — and DPI becomes irrelevant, because the RIP renders exact edges at the device's native resolution. If you must use raster, generate at final size × 300 dpi and never scale it up. ### Pre-press checklist for QR codes https://useqr.app/docs/print/qr-code-print-checklist.md Eight checks before any print run: scan a physical proof from the real distance, verify size against the ten-to-one rule, confirm the four-module quiet zone, keep the code clear of folds and trim, specify matt, supply vector, verify luminance contrast, and confirm the destination will still resolve. ### What size should a QR code be? https://useqr.app/docs/print/qr-code-size-for-print.md Printed width should be at least the scanning distance divided by ten. A code read from 30 cm needs 3 cm; from 2 m, 20 cm; from 10 m, 1 m. If there is not enough room, shorten the payload so the code has fewer, larger modules rather than shrinking the code. ### QR code durability outdoors https://useqr.app/docs/print/qr-codes-outdoors-durability.md Outdoor QR codes fail from UV fading, water ingress, abrasion and lichen — in that order. Use error correction Q or H, a UV-stable substrate with matt laminate, and expect printed vinyl to last two to five years depending on orientation and climate. ### QR code data capacity table https://useqr.app/docs/reference/qr-code-capacity-table.md The maximum a QR code can hold is 7,089 digits, 4,296 uppercase alphanumeric characters, 2,953 bytes or 1,817 kanji — all at version 40, error-correction level L. Raising to level H cuts each figure by roughly 57%. ### QR code size by scanning distance https://useqr.app/docs/reference/qr-code-size-by-distance-table.md Printed width should be at least the scanning distance divided by ten. This table applies that rule across the distances that occur in practice, from a business card at 25 cm to large-format signage at 30 m. ### QR code version and module count table https://useqr.app/docs/reference/qr-code-version-and-module-table.md Every QR version's module count follows one formula: 17 + 4 × version. Version 1 is 21 × 21 modules and version 40 is 177 × 177. This table lists all forty, alongside the number of alignment patterns each carries. ### How to scan a QR code on any device https://useqr.app/docs/scanning/how-to-scan-a-qr-code.md On iPhone and Android, open the camera app and point it at the code — a banner appears with the destination. No separate app is needed on any current phone. On a computer, upload a screenshot to a browser-based scanner rather than installing anything. ### Are QR codes safe? https://useqr.app/docs/security/are-qr-codes-safe.md Scanning a QR code is safe in itself — it decodes text and nothing else. The risk is entirely in what you do next. A code cannot install software, dial, pay or join a network without your confirmation, but it can send you to a convincing fake page. ### Client-side vs server-side QR generation, and why it matters https://useqr.app/docs/security/client-side-vs-server-side-qr-generation.md If a QR generator renders the image on its server, your data — including WiFi passwords, contact details and payment identifiers — is transmitted to and processed by that server. Client-side generation keeps it on your device, which is the only version that is private by construction. ### How to check where a QR code goes before opening it https://useqr.app/docs/security/how-to-check-a-qr-code-before-opening.md Use the preview banner both iOS and Android show before opening, and read the domain immediately before the first single slash. To inspect without any risk of opening, decode the code with a scanner that displays the text instead of following it. ### Quishing: QR code phishing explained https://useqr.app/docs/security/quishing-explained.md Quishing is phishing delivered by QR code. It works for two structural reasons: a human cannot read a URL from a pattern before scanning it, and email filters that inspect text do not inspect codes inside images and attachments. ### QR code error correction levels explained https://useqr.app/docs/spec/error-correction-levels-explained.md L, M, Q and H tolerate roughly 7%, 15%, 25% and 30% damage. Higher levels cost capacity, so the same payload needs a bigger version — which means smaller modules at the same printed size. Raising the level to make a code more robust can make it harder to scan. ### How a QR code is generated, step by step https://useqr.app/docs/spec/how-qr-codes-are-generated.md Encoding runs in eight steps: choose the mode, choose the version, build the bit stream, split into codewords, compute Reed–Solomon error correction, interleave, place modules in a zig-zag, then try all eight masks and keep the one with the lowest penalty score. ### QR code colours not scanning https://useqr.app/docs/troubleshooting/qr-code-colors-not-scanning.md Decoders convert the image to greyscale before deciding dark from light, so what matters is luminance difference, not how different the colours look. Two visually distinct colours can have nearly identical luminance and produce a code no scanner reads. ### QR code not scanning: the checklist https://useqr.app/docs/troubleshooting/qr-code-not-scanning-checklist.md Work through these in order, because they are ranked by how often they are the actual cause: quiet zone, contrast, size for distance, glare, blur from upscaling, inverted colours, and finally the destination. Most failures are found in the first three. ### QR code opens the wrong link or a 404 https://useqr.app/docs/troubleshooting/qr-code-opens-wrong-link.md Decode the code first to see the string it actually contains. If the string is right, the problem is the destination: a deleted page, a retired shortener, a DNS filter, or a captive portal. If the string is wrong, the code was generated from wrong input or was tampered with physically. ### QR code scans on screen but not in print https://useqr.app/docs/troubleshooting/qr-code-scans-on-screen-not-in-print.md Three causes account for nearly all of these: the raster image was scaled up in the layout, ink spread on the substrate closed the gaps between modules, or the finish is glossy and reflecting. All three are invisible on a monitor. ### QR code too dense to scan https://useqr.app/docs/troubleshooting/qr-code-too-dense-to-scan.md A dense code means too many modules for the printed size. The fix is almost always to shorten the payload rather than to enlarge the code or raise error correction — raising error correction makes density worse, not better. ### QR code with a logo not scanning https://useqr.app/docs/troubleshooting/qr-code-with-logo-not-scanning.md A logo works up to roughly 20–25% of the code area at error-correction level H, and only in the centre. Covering a finder pattern, the timing patterns, or the format information beside the finders breaks the code regardless of error-correction level. ### vCard QR code imports with missing or wrong fields https://useqr.app/docs/troubleshooting/vcard-qr-code-imports-wrong.md Two causes cover almost all of these: unescaped commas and semicolons inside a value, which split the field, and a missing FN line, which leaves the display name blank. Both fail silently at generation and only appear when someone saves the contact. ### WiFi QR code not connecting https://useqr.app/docs/troubleshooting/wifi-qr-code-not-connecting.md The usual causes, in order: an unescaped special character in the password or SSID, a hidden network without the hidden flag, choosing WEP or nopass when the network is WPA, or an enterprise network — which cannot be encoded in a QR code at all. ### App download QR codes — one code for iOS and Android https://useqr.app/app-download-qr-code.md One QR code cannot contain two store links, so an app download code points at a redirect that detects the operating system and forwards accordingly. UseQR hosts that redirect for you, or you can host it yourself on your own domain — which is what we recommend for anything printed. ### Base64 QR codes — how they work https://useqr.app/base64-qr-code.md Base64 encodes arbitrary binary as ASCII text so it can be carried in a QR code. It costs about 33% in size and forces byte mode, so use it only when the data is genuinely binary. For text, encoding directly is always smaller. ### Bitcoin QR codes — the BIP-21 URI explained https://useqr.app/bitcoin-qr-code.md A Bitcoin QR code stores a BIP-21 URI containing an address and optionally an amount, label and message. Wallets prefill a send screen from it. The address is public information, so the code itself is safe to print — but always verify the first and last characters after scanning. ### Calendar event QR codes — how they work https://useqr.app/calendar-qr-code.md A calendar QR code stores a minimal iCalendar VEVENT that phones offer to add to the calendar. Always store times in UTC with a trailing Z, or attendees in other timezones get the wrong hour. Nothing is added without the user confirming. ### Coupon QR codes — how they work https://useqr.app/coupon-qr-code.md A coupon QR code carries a code or a link to an offer page. The critical design fact is that any printed coupon code is a shared secret: photograph it once and it spreads. Enforce limits server-side at redemption, never in the QR code itself. ### Email QR codes — how they work https://useqr.app/email-qr-code.md An email QR code stores a mailto: URI. Scanning it opens the phone's mail app with the recipient, and optionally the subject and body, already filled in. Nothing is sent automatically — the user still has to press send, which is why it is safe to print in public. ### EPC QR codes (GiroCode) — SEPA credit transfers explained https://useqr.app/epc-qr-code.md An EPC QR code — also called GiroCode — encodes a SEPA credit transfer as a short line-based text block containing the beneficiary name, IBAN and optionally an amount. European banking apps read it and prefill a transfer. The payer still authorises it; nothing is charged automatically. ### Ethereum QR codes — the EIP-681 URI explained https://useqr.app/ethereum-qr-code.md An Ethereum QR code stores an EIP-681 URI with the recipient address and optionally a chain id and value in wei. Simple address-only codes work everywhere; the richer forms — token transfers and contract calls — are supported inconsistently, so test with the wallets your audience actually uses. ### Feedback QR codes — how they work https://useqr.app/feedback-qr-code.md A feedback QR code points at a short form or a prefilled email. Response rate is governed almost entirely by two things — how close the code is to the moment of experience, and how few fields the form has. One question beats five, every time. ### Google review QR codes — how they work https://useqr.app/google-review-qr-code.md A Google review QR code links to Google's write-a-review endpoint for your Place ID, which opens the star-rating dialog straight away instead of your business listing. Removing those two taps is the entire reason it works. Never offer anything in exchange for a review. ### JSON QR codes — how they work https://useqr.app/json-qr-code.md A JSON QR code stores a JSON document as plain text. It is the simplest way to move structured data offline, but JSON's punctuation is expensive in a format with a 2,953-byte ceiling — expect to fit roughly 100 to 200 fields at most, and far fewer if you want a printable size. ### Location QR codes — geo: URIs versus map links https://useqr.app/location-qr-code.md A location QR code stores either a geo: URI with raw coordinates or a map service link. The geo: URI is neutral and opens whichever map app the user prefers; a Maps link is more reliable and can carry a business name, but ties everyone to one provider. ### MeCard QR codes — how they work https://useqr.app/mecard-qr-code.md MeCard stores a contact in a compact single-line format that produces a QR code roughly 40% smaller than the equivalent vCard. It carries fewer field types and has slightly weaker desktop support, so it is the right choice when print size matters more than field richness. ### Menu QR codes — how they work https://useqr.app/menu-qr-code.md A menu QR code points at a web page or PDF of your menu. The choice between them matters more than the code: a mobile-friendly HTML page loads in under a second on a weak connection, while a PDF forces pinch-zooming and often fails on cellular in a busy room. ### PayPal QR codes — how they work https://useqr.app/paypal-qr-code.md A PayPal QR code is normally a PayPal.Me link, optionally with a fixed amount baked into the path. Scanning opens a payment page for your account. PayPal's separate in-app code is a different thing with different fees, so pick deliberately. ### PDF QR codes — how they work https://useqr.app/pdf-qr-code.md A QR code cannot store a PDF — the maximum payload is 2,953 bytes and a PDF is measured in megabytes. A "PDF QR code" is a link to a hosted file. That makes hosting the important decision: the code lasts forever, the link only lasts as long as you keep the file where it is. ### Phone QR codes — how they work https://useqr.app/phone-qr-code.md A phone QR code stores a tel: URI. Scanning it opens the dialler with the number entered, ready to call — it never dials on its own. Always store the number in full international format (+country code) so it works for people roaming or calling from abroad. ### PIX QR codes — the EMV BR Code format explained https://useqr.app/pix-qr-code.md A PIX QR code is an EMVCo BR Code — a tag-length-value string ending in a CRC16 checksum — containing the payee's PIX key, name and city. Any Brazilian banking app reads it. The same string doubles as copia e cola, the text people paste when they cannot scan. ### SMS QR codes — how they work https://useqr.app/sms-qr-code.md An SMS QR code opens the phone's messaging app with the recipient, and usually a prefilled message, ready to send. Two payload formats exist — SMSTO: and sms: — and body prefilling is the part that varies most between devices, so always test on both iOS and Android. ### Social hub QR codes — one code, all your profiles https://useqr.app/social-qr-code.md A social hub QR code points at one page that lists all your profiles, so a single printed code covers Instagram, TikTok, YouTube and the rest. UseQR builds the hub page from the links themselves, so nothing is stored on our servers and there is no account to lose. ### SSH and Git QR codes — how they work https://useqr.app/ssh-qr-code.md An SSH QR code stores an ssh:// URI or a git clone URL as text. Scanning it gives you the string to paste — it does not and cannot open a connection. It is a convenience for moving a long URL from a screen or a sticker to another machine without typos. ### Telegram QR codes — how they work https://useqr.app/telegram-qr-code.md A Telegram QR code is a t.me link to a username, channel, group or bot. Scanning it opens Telegram at that destination, or the web preview if Telegram is not installed. Usernames are 5–32 characters of letters, digits and underscores, and changing yours breaks every printed code. ### Text QR codes — how they work https://useqr.app/text-qr-code.md A text QR code stores raw characters with no scheme prefix, so a scanner simply displays the text rather than opening anything. It holds up to 2,953 bytes at the lowest error-correction level. Use it for serial numbers, instructions, notes and offline data that should not trigger an action. ### UPI QR codes — the NPCI spec, field by field https://useqr.app/upi-qr-code.md A UPI QR code stores a upi://pay deep link containing the payee's VPA, name and optionally an amount. Any UPI app — GPay, PhonePe, Paytm, BHIM — reads the same format, because NPCI standardised it. Nothing is charged automatically; the payer confirms the amount and enters their PIN. ### URL QR codes — how they work https://useqr.app/url-qr-code.md A URL QR code stores a web address as plain text inside the code. Scanning it opens that address in the phone's browser. Nothing is redirected through a third party, the link never expires, and the only thing that can break it is the URL itself going dead. ### vCard QR codes — how they work https://useqr.app/vcard-qr-code.md A vCard QR code stores a complete contact record — name, phones, emails, company, address, website — which the phone offers to save straight into its address book. It is the largest common payload type, so keep it lean: every extra field makes the code denser and harder to scan. ### WhatsApp QR codes — how they work https://useqr.app/whatsapp-qr-code.md A WhatsApp QR code is a wa.me link that opens a chat with your number, optionally with a message already typed. It needs the number in full international format with no plus sign, no spaces and no leading zeros. It works for anyone with WhatsApp, whether or not they have your number saved. ### WiFi QR codes — how they work https://useqr.app/wifi-qr-code.md A WiFi QR code stores your network name, security type and password in a WIFI: string. Scanning it joins the network with no typing. The password is inside the code in plain text, so generate it locally — UseQR builds it in your browser and never sends it anywhere. ### Alignment pattern https://useqr.app/glossary/alignment-pattern.md Alignment patterns are the small 5 × 5 concentric squares scattered through larger QR codes. They let a scanner correct for perspective distortion when the code is curved, tilted or photographed at an angle. ### BharatQR https://useqr.app/glossary/bharatqr.md BharatQR is India's interoperable merchant QR standard, built on EMVCo, allowing a single code to accept card-network payments. It is distinct from UPI, which uses its own upi:// deep-link format. ### BIP-21 https://useqr.app/glossary/bip21.md BIP-21 is the Bitcoin URI scheme that lets a QR code carry an address plus an optional amount, label and message. It is why every Bitcoin wallet interprets a scanned payment code the same way. ### Codeword https://useqr.app/glossary/codeword.md A codeword is one 8-bit byte in a QR code's data stream. Capacity tables are ultimately expressed in codewords: a version-1 code holds 26 of them, split between data and error correction. ### Contrast ratio https://useqr.app/glossary/contrast-ratio.md Contrast ratio is the luminance difference between a QR code's dark and light modules. Decoders need a clear threshold; the practical floor is about 40% luminance difference, and colour choice matters far less than luminance choice. ### Data capacity https://useqr.app/glossary/data-capacity.md Data capacity is how much a QR code can hold, and it depends on three things at once: the version, the error-correction level and the encoding mode. The maximum is 7,089 digits, 4,296 alphanumeric characters or 2,953 bytes. ### Decode-verify https://useqr.app/glossary/decode-verify.md Decode-verify is the practice of reading a generated QR code back with a real decoder before shipping it. It is the only way to know that a styled, logo-bearing or heavily coloured code actually scans, rather than assuming it does. ### Denso Wave https://useqr.app/glossary/denso-wave.md Denso Wave is the Japanese company that invented the QR code in 1994, and it holds the patents. It chose not to enforce them for use of the standardised format, which is why QR codes are free for everyone to generate and read. ### DPI (dots per inch) https://useqr.app/glossary/dpi.md DPI is printing resolution. For QR codes it matters because each module must be rendered from a whole number of printer dots — 300 dpi is the practical minimum, and generating from vector rather than raster avoids the problem entirely. ### Dynamic QR code https://useqr.app/glossary/dynamic-qr-code.md A dynamic QR code contains a short URL that redirects through a provider's server. That makes the destination editable and the scans trackable — and makes the printed code dependent on that provider staying in business and staying paid. ### ECI (Extended Channel Interpretation) https://useqr.app/glossary/eci.md ECI is a mechanism for declaring which character set a QR code's byte data uses. Without it, byte mode has no declared encoding, and decoders simply guess — usually UTF-8 on phones, sometimes ISO-8859-1 on industrial scanners. ### EIP-681 https://useqr.app/glossary/eip-681.md EIP-681 is the Ethereum URI scheme for payment requests. It carries a recipient address, a chain id and a value in wei, and optionally a contract function call — though wallet support for the richer forms is inconsistent. ### EMVCo QR code https://useqr.app/glossary/emvco-qr.md EMVCo QR is the international standard for payment QR codes, defining a tag-length-value payload used by PIX in Brazil, PromptPay in Thailand, QRIS in Indonesia and many others. It has merchant-presented and consumer-presented modes. ### Encoding mode https://useqr.app/glossary/encoding-mode.md Encoding mode is how characters are packed into bits. QR codes support numeric (3.33 bits/char), alphanumeric (5.5), byte (8) and kanji (13), and a single code can switch modes mid-stream to use the cheapest one for each run. ### EPC QR code https://useqr.app/glossary/epc-qr.md An EPC QR code, branded GiroCode in German-speaking markets, encodes a SEPA credit transfer as a twelve-line text block. European banking apps read it and prefill a bank transfer for the payer to authorise. ### Error correction level https://useqr.app/glossary/error-correction-level.md Error correction level sets how much of a QR code can be damaged and still decode: L tolerates about 7%, M 15%, Q 25% and H 30%. Higher levels cost capacity, so the same data needs a bigger code. ### Finder pattern https://useqr.app/glossary/finder-pattern.md The three large concentric squares in the corners of a QR code are finder patterns. A scanner locates them first to work out where the code is, how big it is and which way up it is — which is why the missing fourth corner is deliberate. ### Format information https://useqr.app/glossary/format-information.md Format information is the 15-bit block next to the finder patterns that records the error-correction level and mask pattern. It is stored twice and protected by its own BCH code, because a decoder cannot read anything else without it. ### GS1 Digital Link https://useqr.app/glossary/gs1-digital-link.md GS1 Digital Link is a URL syntax that carries GS1 identifiers such as a GTIN, batch and expiry date. It lets a single QR code on packaging serve both consumers and supply-chain scanners. ### Interleaving https://useqr.app/glossary/interleaving.md Interleaving is the reordering of QR code data so that consecutive codewords come from different error-correction blocks. It spreads localised physical damage across multiple blocks, so no single block exceeds its correction capacity. ### ISO/IEC 18004 https://useqr.app/glossary/iso-18004.md ISO/IEC 18004 is the international standard defining QR codes: symbol structure, encoding, error correction, masking and decoding. It is the authoritative reference, and it is why codes from any generator read on any scanner. ### Kanji mode https://useqr.app/glossary/kanji-mode.md Kanji mode packs Shift-JIS double-byte characters into 13 bits each instead of the 16 bits they would take in byte mode. It exists because QR codes were invented in Japan for Japanese text. ### Mask pattern https://useqr.app/glossary/mask-pattern.md A mask pattern is one of eight XOR patterns applied to a QR code's data area to avoid large blocks of one colour and false finder-like shapes. The encoder tries all eight, scores them, and keeps the best. ### MeCard https://useqr.app/glossary/mecard.md MeCard is a compact contact format created by NTT DoCoMo. It encodes the same essentials as a vCard in roughly 40% fewer bytes, producing a visibly coarser and more scannable code at the same printed size. ### Micro QR code https://useqr.app/glossary/micro-qr.md Micro QR is a smaller variant defined in the same standard, ranging from 11 × 11 to 17 × 17 modules with a single finder pattern and a two-module quiet zone. It holds far less data but fits where a standard code cannot. ### Module https://useqr.app/glossary/module.md A module is one square cell of a QR code — the smallest unit of the pattern. Codes are measured in modules, not pixels or millimetres, because the module count is fixed by the version and the physical size is whatever you print it at. ### Payload https://useqr.app/glossary/payload.md The payload is the actual string encoded in a QR code — the URL, the WIFI: block, the vCard. Everything about a code's size, density and minimum print dimensions follows from the payload's length and character set. ### Quiet zone https://useqr.app/glossary/quiet-zone.md The quiet zone is the blank margin around a QR code. The specification requires at least four modules of clear space on every side, and codes fail more often from a missing quiet zone than from almost any other design error. ### Quishing https://useqr.app/glossary/quishing.md Quishing is phishing delivered by QR code. It works because the destination is unreadable to a human before scanning, and because a code in an email image evades URL-based filtering that would catch the same link as text. ### Reed–Solomon coding https://useqr.app/glossary/reed-solomon.md Reed–Solomon is the error-correcting code that lets a damaged QR code still decode. It adds redundant codewords so that a decoder can reconstruct the original data even when part of the pattern is unreadable. ### rMQR code https://useqr.app/glossary/rmqr.md rMQR is a rectangular QR variant standardised in ISO/IEC 23941 (2022). It carries more data than Micro QR in a long, thin footprint, which suits cable labels, pipes, cylindrical parts and shelf edges. ### Scan rate https://useqr.app/glossary/scan-rate.md Scan rate is the share of people who see a QR code and scan it. There is no universal benchmark worth quoting — placement, context and the reason to scan swamp every other variable, including the design of the code itself. ### Short URL https://useqr.app/glossary/short-url.md A short URL is a brief address that redirects to a longer one. In QR codes it is used to reduce payload length — which genuinely produces a coarser, more scannable code — at the cost of adding a permanent dependency. ### Static QR code https://useqr.app/glossary/static-qr-code.md A static QR code contains its destination directly in the pattern. It cannot be edited or tracked, and it never expires — because nothing has to keep running for it to work. ### SVG https://useqr.app/glossary/svg.md SVG is a vector image format, and the right one for QR codes. Because the pattern is described as shapes rather than pixels, it prints crisply at any size and never softens module edges through interpolation. ### Timing pattern https://useqr.app/glossary/timing-pattern.md The timing patterns are the alternating black-and-white lines running between the finder patterns, one horizontal and one vertical. They tell the decoder the module pitch, so it knows where each cell boundary falls. ### UTM parameter https://useqr.app/glossary/utm-parameter.md UTM parameters are query-string tags — utm_source, utm_medium, utm_campaign — that let your analytics attribute a visit to a specific campaign. In QR codes they are the standard way to measure scans without any third-party tracker. ### vCard https://useqr.app/glossary/vcard.md vCard is the standard contact-record format, defined in RFC 6350 for version 4.0 and RFC 2426 for 3.0. Encoded into a QR code it becomes a digital business card that a phone can save directly to its address book. ### Vector graphic https://useqr.app/glossary/vector-graphic.md A vector graphic describes shapes mathematically rather than as a grid of pixels, so it can be scaled to any size without loss. For QR codes it is the correct format for anything that will be printed. ### Version information https://useqr.app/glossary/version-information.md Version information is an 18-bit block present only in QR codes of version 7 and above, recording the code's size. Smaller codes do not need it because the decoder can count modules directly. ### Version https://useqr.app/glossary/version.md A QR code's version is its size: version 1 is 21 × 21 modules and each step adds 4 modules per side, up to version 40 at 177 × 177. The encoder picks the smallest version that fits your data at your chosen error-correction level. ### ZXing https://useqr.app/glossary/zxing.md ZXing — "zebra crossing" — is the open-source barcode library that most QR decoding is ultimately built on. UseQR uses a WebAssembly build of it to decode every code it generates, before you download it. ### QR codes for agencies and consultants https://useqr.app/qr-codes-for/agencies.md For an agency, QR codes are mostly a client deliverable rather than an internal tool. The value is knowing the rules well enough to stop a client printing 20,000 flyers with a 1 cm code across a fold. ### QR codes for bars and pubs https://useqr.app/qr-codes-for/bars.md Bar QR codes face the worst lighting conditions of any hospitality setting — dim, coloured and often moving. Print bigger than you would for a restaurant, use maximum contrast, and never use a coloured or styled code. ### QR codes for cafés https://useqr.app/qr-codes-for/cafes.md For a café the highest-value QR code is not the menu — it is the WiFi code at the counter and a UPI, PIX or local payment code sized for the counter distance. Both remove a repeated interaction from every shift. ### QR codes for ecommerce and direct-to-consumer brands https://useqr.app/qr-codes-for/ecommerce.md For an online brand the QR code lives on the physical touchpoints — packaging, packing slips, thank-you cards — where it is the only bridge back to a digital relationship. The packaging code's constraint is permanence: it must resolve for years. ### QR codes for events and conferences https://useqr.app/qr-codes-for/events.md Conference QR codes should be on badges (both sides), on session signage, and on the last slide of every talk. Badge codes should carry a short opaque id or a profile URL — not a full vCard, which puts personal data into a pattern anyone can photograph. ### QR codes for government and public services https://useqr.app/qr-codes-for/government.md Public-sector QR codes carry an accessibility obligation that commercial ones do not. Never make a code the only route to a service, always print the URL, and use a .gov-style domain so citizens can verify the destination before scanning. ### QR codes for gyms and fitness studios https://useqr.app/qr-codes-for/gyms.md Gym QR codes work on equipment, where a member is already standing still. An exercise-demo code on each machine is the highest-value use; class booking and WiFi come next. Codes must survive sweat and cleaning products. ### QR codes for clinics and healthcare providers https://useqr.app/qr-codes-for/healthcare.md Healthcare QR codes must never be the only route to clinical information, and they must not carry patient data. Use them for check-in, directions, appointment booking and aftercare leaflets — with a printed alternative always available. ### QR codes for hotels https://useqr.app/qr-codes-for/hotels.md Hotels should treat QR codes as a replacement for the in-room compendium: one code per service, each pointing at a page you update centrally. The WiFi code is the one guests actually want, and it belongs on the desk, not behind the door. ### QR codes for warehousing and logistics https://useqr.app/qr-codes-for/logistics.md In logistics the QR code is usually read by a handheld imager rather than a phone, which changes every rule: codes can be smaller, but print durability and quiet-zone discipline matter far more, and the payload should be an opaque id. ### QR codes for manufacturing https://useqr.app/qr-codes-for/manufacturing.md Manufacturing QR codes are usually direct part marks on metal or plastic, where contrast comes from surface texture rather than ink. Use error correction H, modules of 0.5 mm or more, and grade marks against ISO/IEC 29158 rather than eyeballing them. ### QR codes for museums and galleries https://useqr.app/qr-codes-for/museums.md Museum QR codes belong on object labels, pointing at extended interpretation, audio and accessibility content. The design constraint is gallery lighting — deliberately low and often raking — which is the worst possible condition for scanning. ### QR codes for charities and nonprofits https://useqr.app/qr-codes-for/nonprofits.md For a charity the QR code that matters is the donation code, and its design decisions are all about trust: a recognisable domain, the organisation name in large text, and a payment rail with no fee where one exists. ### QR codes for real estate agencies https://useqr.app/qr-codes-for/real-estate.md For estate agents the QR code that works is on the board outside the property, sized for a 2–3 metre pavement distance, pointing at that specific listing. A code at 5 cm on a board read from the street is the standard mistake. ### QR codes for restaurants https://useqr.app/qr-codes-for/restaurants.md Restaurants get the most value from three QR codes, not one: the menu on a matt table tent, a Google review code on the bill, and a WiFi code at the counter. The menu code is the one most often done badly — glossy, flat on the table, and pointing at a PDF. ### QR codes for retail stores https://useqr.app/qr-codes-for/retail.md Retail QR codes work best where a customer is already holding a decision: shelf-edge labels for product detail, fitting-room codes for size availability, and receipt codes for reviews. Store-window codes underperform because nobody stops. ### QR codes for salons and barbers https://useqr.app/qr-codes-for/salons.md For a salon the booking code is the one that matters, and it belongs in the window where it can be scanned when you are closed. Rebooking codes on the mirror and on receipts capture the customer while they are still in the chair. ### QR codes for schools and universities https://useqr.app/qr-codes-for/schools.md Education QR codes work best on noticeboards, in printed handouts and on library shelving. The constraint most schools miss is that many students have no data allowance — so linked resources must be light, and a printed alternative must exist. ### QR codes for public transport https://useqr.app/qr-codes-for/transport.md Transport QR codes are scanned by people in a hurry, often with poor signal underground, and on surfaces that are prime targets for fraudulent stickers. Size for a 1–2 m platform distance, and make the real domain visible. ### QR codes for weddings and celebrations https://useqr.app/qr-codes-for/weddings.md Wedding QR codes work best on the invitation for RSVP and on table cards for photo sharing. The design trap is foil and dark card stock — both look right and neither scans. ### QR codes on 3d-printed qr codes https://useqr.app/qr-codes-on/3d-prints.md A printed-in-relief QR code relies on shadow for contrast, which makes it lighting-dependent and unreliable. Two-colour printing with a filament change is far better: real luminance contrast, and it works in any light. ### QR codes on billboards and out-of-home https://useqr.app/qr-codes-on/billboards.md A billboard QR code must be at least a tenth of the viewing distance — a metre wide at 10 m, five metres at 50 m. For most roadside billboards that is impractical, and the honest answer is usually that a QR code is the wrong tool. ### QR codes on business cards https://useqr.app/qr-codes-on/business-cards.md A business card QR code should be at least 2 cm square. That feels large on an 85 × 55 mm card, which is why so many are printed at 1 cm — a size where a vCard payload's modules fall below what a phone resolves at reading distance. ### QR codes on digital signage https://useqr.app/qr-codes-on/digital-signage.md Digital signage QR codes follow the same ten-to-one rule as print — 10–30 cm for a 1–3 m viewing distance — with two screen-specific problems: dwell time in the playlist, and glare from ambient lighting. ### QR codes on e-ink displays https://useqr.app/qr-codes-on/e-ink.md E-ink is an excellent QR surface: high contrast, no glare, no backlight and no refresh artefacts. The constraint is resolution — most electronic shelf labels are 100–150 dpi, so each module needs several pixels. ### QR codes on email signatures https://useqr.app/qr-codes-on/email-signatures.md A QR code in an email signature is scanned from a second device — someone photographing their own screen — so size it in pixels: 80–120 px displayed, exported at 2× for retina. Most email clients block images by default, so a text link is still required. ### QR codes on embroidery https://useqr.app/qr-codes-on/embroidery.md Embroidery is the worst common QR surface: stitch pitch is coarse, thread has sheen, and fabric distorts as it is stitched. A code below about 6 cm will not work, and even a large one needs error correction H and careful stabilising. ### QR codes on engraved and etched metal https://useqr.app/qr-codes-on/engraved-metal.md Metal marking is the hardest QR surface because contrast comes from surface texture rather than colour, and the finish reflects. Use error correction H, keep modules at 0.5 mm or larger, and specify a matt or annealed mark rather than a polished cut. ### QR codes on flyers and leaflets https://useqr.app/qr-codes-on/flyers.md A flyer is held in the hand and read from 20–30 cm, so a 2–3 cm code is enough. The bigger risks are cheap uncoated stock spreading the ink and the code being placed in the fold. ### QR codes on food packaging https://useqr.app/qr-codes-on/food-packaging.md Food packaging QR codes carry ingredient, allergen and provenance information, which makes accessibility a legal matter rather than a nicety. Use 2–3 cm at error correction Q, and never make allergen data QR-only. ### QR codes on memorials and headstones https://useqr.app/qr-codes-on/headstones.md A memorial QR code must be legible for decades on stone, which means a sandblasted or laser-etched code of 5–10 cm at error correction H — and, more importantly, a URL that will still resolve long after the person who chose it. ### QR codes on invitations and greeting cards https://useqr.app/qr-codes-on/invitations.md An invitation QR code is read at arm's length so 2 cm is enough. The design pressure is the opposite of usual — the risk is a code so heavily styled or foiled that it no longer scans. ### QR codes on product labels https://useqr.app/qr-codes-on/labels.md Label QR codes are typically 1.5–3 cm and printed by thermal transfer at 203 or 300 dpi. The critical number is dots-per-module: aim for at least 4, which means checking your printer resolution before choosing the code size. ### QR codes on laser-cut and engraved wood https://useqr.app/qr-codes-on/laser-cut-wood.md Wood grain is the problem: it adds contrast noise at the module scale and burns unevenly. Use error correction H, modules of at least 1 mm, and a close-grained wood such as maple, birch ply or MDF rather than oak or pine. ### QR codes on livestream overlays https://useqr.app/qr-codes-on/livestreams.md A stream viewer scans from 50 cm to a metre away with a second device, so 180–300 px on a 1080p canvas is right. Keep the code static and out of the region where chat and alerts appear. ### QR codes on menus and table tents https://useqr.app/qr-codes-on/menus.md A menu QR code is read from 30–40 cm across a table, so 3–4 cm is right. The dominant real-world failure is not size but glare: a glossy laminated table tent under restaurant downlighting reflects straight into the camera. ### QR codes on mugs and drinkware https://useqr.app/qr-codes-on/mugs.md A mug is a cylinder about 8 cm across, so a QR code has roughly 8 cm of usable arc before curvature defeats the decoder. Keep the code to 2.5–3.5 cm and centre it on the flattest part facing the viewer. ### QR codes on name badges and lanyards https://useqr.app/qr-codes-on/name-badges.md A badge QR code is scanned across a handshake — 30–50 cm — so 3–5 cm is right. The bigger issue is that lanyards swing and badges flip, so the code must be printed on both sides. ### QR codes on plant tags and garden markers https://useqr.app/qr-codes-on/plant-tags.md A garden QR code faces UV, rain, frost and soil splash. Use error correction H, a UV-stable material, and expect to replace printed tags every two seasons unless you use engraved or anodised metal. ### QR codes on posters https://useqr.app/qr-codes-on/posters.md A poster QR code is read from between one and three metres, so under the ten-to-one rule it needs to be 10–30 cm wide. Most posters carry codes at 3–5 cm, which is why most poster codes go unscanned. ### QR codes on product packaging https://useqr.app/qr-codes-on/product-packaging.md Packaging QR codes need 2–3 cm and error correction Q, because packaging is curved, creased, laminated and handled. The harder problem is permanence: the code outlives the campaign, so it must point at a URL you will still control in five years. ### QR codes on cvs and résumés https://useqr.app/qr-codes-on/resumes.md A résumé QR code should be 2 cm and point at a portfolio or LinkedIn profile. The important caveat is that most résumés are read on screen or through an applicant tracking system, where a code is useless — print a visible URL too. ### QR codes on shipping labels https://useqr.app/qr-codes-on/shipping-labels.md Shipping label QR codes are scanned close, often by handheld imagers rather than phones, and often after the parcel has been through a conveyor. Error correction Q and a thermal-transfer ribbon are the two decisions that matter. ### QR codes on shop windows https://useqr.app/qr-codes-on/shop-windows.md A shop window code is read from the pavement, often through glass with strong reflections, so it needs to be 10–30 cm and mounted with reflection in mind. The glass is the problem, not the code. ### QR codes on slide decks and presentations https://useqr.app/qr-codes-on/slide-decks.md A QR code on a projected slide is scanned from wherever the audience is sitting — often 5–10 m back. Size it as a proportion of the projected image, leave it on screen for at least 20 seconds, and never put it on a slide you advance quickly. ### QR codes on letterheads and stationery https://useqr.app/qr-codes-on/stationery.md A QR code on business stationery should be 1.5–2 cm in the footer. Keep it out of the fold and out of the window area of a windowed envelope, and always print the URL as text as well. ### QR codes on stickers https://useqr.app/qr-codes-on/stickers.md Sticker QR codes are usually scanned close, so 1.5–4 cm is enough — but stickers get scuffed, curled and rained on, which is why error-correction level Q is the sensible default here rather than M. ### QR codes on t-shirts and apparel https://useqr.app/qr-codes-on/t-shirts.md A QR code on clothing needs 5–10 cm because people scan it from conversational distance, and error correction Q because fabric stretches, wrinkles and distorts the pattern. Print flat-chest or back, never over a seam. ### QR codes on tattoos https://useqr.app/qr-codes-on/tattoos.md A QR tattoo needs to be at least 5–8 cm and use error correction H, because skin stretches, ink spreads over years, and the surface is curved. Most importantly, the destination must be something you control permanently — the tattoo outlives every domain. ### QR codes on tv and broadcast https://useqr.app/qr-codes-on/tv-broadcast.md A QR code on television is scanned from a sofa 2–4 m from the screen, so it needs to occupy 12–20% of the screen height and stay on air for at least 15 seconds. Broadcast compression is the second constraint: fine module detail does not survive it. ### QR codes on vehicle wraps https://useqr.app/qr-codes-on/vehicle-wraps.md A vehicle QR code only works when the vehicle is parked. On the move it is unscannable at any size. Size for the parked case — 20–50 cm — and put it on the side panel, not a curved or hinged surface. ### QR codes on websites https://useqr.app/qr-codes-on/websites.md A QR code on a web page is scanned by a second device pointed at the screen. Size it at 150–250 CSS pixels, serve SVG, and remember that on mobile the code is nearly useless — a tap target is better. ### QR codes on wristbands https://useqr.app/qr-codes-on/wristbands.md A wristband QR code has to work on a curved, moving, sweaty surface about 15–20 mm tall. Keep the payload tiny so the code stays low-version, use error correction Q, and consider a rectangular rMQR code if your scanners support it. ### The best free QR code generators, honestly compared https://useqr.app/vs/best-free-qr-code-generators.md For a free static QR code with full design control and no account, UseQR and QRCode Monkey are the two credible options; we generate client-side and are open source, they have a longer track record. If you need dynamic codes with scan analytics today, we do not offer them — use QRCodeKIT, Uniqode or The QR Code Generator. ### QR code generators that need no signup https://useqr.app/vs/qr-code-generator-without-signup.md UseQR and QRCode Monkey both let you generate and download without an account. The reason most tools require one is that the account is how they upsell dynamic codes — the static code itself costs them almost nothing to produce. ### UseQR vs the qrserver / goqr.me API https://useqr.app/vs/useqr-vs-qrserver-api.md api.qrserver.com is the long-standing free QR API and it works well for plain PNGs. UseQR adds SVG and PDF output, typed payload builders with real spec validation, decode-verification, an MCP server, and errors that return a corrected call — all still keyless. ### What happens when a QR code service shuts down https://useqr.app/vs/what-happens-when-a-qr-service-shuts-down.md Static codes are unaffected — they contain the destination directly. Dynamic codes stop resolving the moment the provider's redirect stops, and every printed copy dies at once. There is no recovery for material already distributed. ### When a paid QR platform is worth it https://useqr.app/vs/when-a-paid-qr-platform-is-worth-it.md Pay when you genuinely need to change a destination after printing, need scan analytics you cannot get from your own logs, or need enterprise governance such as SSO and audit trails. Do not pay for the code itself — a static QR code costs nothing to produce.