Skip to content
ImgKiloImgKiloOpen tools

QR code payload cheatsheet, every URI scheme in one reference

A QR code is a pattern that encodes bytes. The bytes that get those scans to do something useful (open a mail draft, join Wi-Fi, drop a contact into Contacts, trigger a UPI payment) all follow URI schemes defined in real standards, mostly RFCs. This page collects every scheme imgkilo's QR generators emit, the fields each one expects, the gotchas that break them in practice, and the controlling spec for each. Bookmark it; use the QR code generator when you need a static code, or jump to the per-scheme tools listed at the bottom.

Updated June 27, 202611 min read
Generate a QR code for any payload typePlain URL, text, or one of the URI schemes below. Encoded in your browser, exported as SVG or PNG.

Reference table: every scheme at a glance

QR payload schemes, their controlling specs, and the imgkilo tool that emits each
Payload typeScheme / formatControlling specimgkilo tool
Web URLhttp(s)://RFC 3986 (generic URI)QR code generator
Plain text(raw bytes)ISO/IEC 18004 byte modeQR code generator
Emailmailto:RFC 6068Email QR
Phonetel:RFC 3966Phone QR
SMS (URI)sms:RFC 5724SMS QR
SMS (legacy)SMSTO:Pre-RFC convention, widely supportedSMS QR
Wi-FiWIFI:ZXing Wi-Fi specWi-Fi QR
Locationgeo:RFC 5870Location QR
UPI paymentupi://payNPCI UPI Linking specUPI QR
Contact (modern)BEGIN:VCARD VERSION:4.0RFC 6350vCard QR
Contact (legacy)BEGIN:VCARD VERSION:3.0RFC 2426vCard QR
Calendar eventBEGIN:VEVENTRFC 5545QR code generator (raw)
Android appmarket://details?id=Google Play vendor URIApp store QR
Android intentintent://Android Intent URI schemeQR code generator (raw)
iOS App Storehttps://apps.apple.com/...Plain HTTPS, no custom schemeApp store QR
QR payload schemes, their controlling specs, and the imgkilo tool that emits each
Schemes that begin with capitals (WIFI:, SMSTO:, MATMSG:) are case-sensitive vendor conventions that pre-date the RFCs. Modern scanners accept both the legacy form and the RFC form for SMS; for Wi-Fi the WIFI: form is the de facto standard, codified by the ZXing project.

Web URLs: http and https

The base case. The scanner sees a string starting with http:// or https:// and hands it to the OS to open in a browser. Defined by RFC 3986, the generic URI syntax.

  • Always use https; modern scanners warn or block plain http on phones with corporate profiles.
  • Percent-encode any character outside the unreserved set defined in RFC 3986 (e.g. spaces become %20).
  • Watch payload length. Long URLs push the QR symbol to a higher version, which raises the minimum print size. Strip unnecessary query parameters before encoding.
  • Trailing slashes and case affect server matching but not QR decoding. Match your canonical form.

mailto: email

Defined by RFC 6068. Lets a scanner open a pre-filled email draft.

mailto: structure
FieldExampleNotes
Recipientmailto:hello@example.comRequired. Multiple addresses comma-separated.
Subject?subject=Hi%20thereOptional. Percent-encode spaces and reserved chars.
Body&body=Some%20messageOptional. Long bodies bloat the QR; keep under 200 chars.
CC / BCC&cc=copy@example.com&bcc=hidden@example.comOptional, comma-separated lists allowed.
mailto: structure

Full example: `mailto:hello@example.com?subject=Reservation&body=Table%20for%20two%20on%20Friday`. Most mobile clients honour subject and body; some desktop clients ignore body. Use the email QR generator to assemble the URI without hand-encoding.

tel: phone

Defined by RFC 3966. The scanner opens the dialler with the number pre-loaded.

  • Use the E.164 international form with a leading +: tel:+919876543210.
  • Spaces, hyphens and parens in the number are stripped by the OS; including them is fine for readability.
  • Extensions can be added with ;ext=, e.g. tel:+12025550100;ext=42.
  • The phone QR does not place the call; it only loads the dialler. The user still taps to dial.

Build one with the phone QR generator.

SMS: two schemes, one outcome

Two conventions are in use. The RFC form is RFC 5724 (sms:); the older form pre-dates the RFC and lives on as SMSTO:.

SMS URI forms
FormSyntaxNotes
RFC 5724sms:+919876543210?body=HelloUniversally supported on modern phones.
SMSTO legacySMSTO:+919876543210:HelloPre-RFC; still widely supported. Colon-separated, no URL encoding.
SMS URI forms

Stick with the RFC form for new QRs. The body field is optional in both. Use the SMS QR generator, which emits the RFC form by default.

WIFI: join a network on scan

Wi-Fi QR codes use a vendor format documented by the ZXing project. iOS (since 11) and Android (since 10) both honour it.

WIFI: fields
FieldKeyExampleNotes
Authentication typeTWPAWPA (covers WPA/WPA2/WPA3), WEP, or nopass for open networks.
SSIDSCafe-GuestThe network name. Escape `;`, `,`, `:`, `\`, and `"` with a backslash.
PasswordPletmein123Omit for nopass. Escape the same characters as SSID.
Hidden networkHtrueOptional; omit unless the SSID is genuinely hidden.
WIFI: fields

Full example: `WIFI:T:WPA;S:Cafe-Guest;P:letmein123;;`. The trailing `;;` matters; some scanners refuse the payload without it. Generate one safely with the Wi-Fi QR generator.

Anyone with the QR can read the password by decoding the symbol. Use a guest SSID for cafe-style codes, not the main network credential.

geo: pin a location

Defined by RFC 5870. Opens the OS map app to a coordinate.

geo: structure
FieldExampleNotes
Coordinatesgeo:28.6139,77.2090Latitude,longitude in decimal degrees. WGS-84 by default.
Altitudegeo:28.6139,77.2090,15Optional third value in metres.
Uncertainty;u=10Optional accuracy radius in metres.
Query string?q=Cafe+nameSome platforms accept a non-standard search query after `?q=`.
geo: structure

On Android, geo: opens Google Maps reliably. On iOS, behaviour varies: many scanners convert geo: into a Maps URL automatically, while others ignore it. For cross-platform safety, encode an https://maps.apple.com or https://maps.google.com URL instead, or use the location QR generator which emits a fallback.

upi: India UPI payments

UPI QR codes follow the National Payments Corporation of India's UPI Linking spec, published under the NPCI UPI product documentation. The scheme is upi://pay with query parameters.

upi://pay query parameters
FieldKeyExampleRequired
Payee VPApamerchant@bankYes
Payee namepnSample%20StoreYes
Transaction IDtidTXN12345No
Reference IDtrORDER12345Yes for merchant payments
Amountam199.00No (omit to let the payer choose)
CurrencycuINRYes
NotetnOrder%20%23ORDER12345No
Min amountminam100.00No
upi://pay query parameters

Example: `upi://pay?pa=merchant@bank&pn=Sample%20Store&am=199.00&cu=INR&tn=Order`. Use the UPI QR generator for static merchant QRs. The NPCI spec is authoritative; payment apps reject any payload that omits a required field.

For dynamic per-order QRs (changing tr and am per transaction), most merchants use their PSP's API rather than printing each one. Printed UPI QRs are usually static and let the payer enter the amount.

vCard: contact cards

vCard is the standard contact format. Two versions matter for QR codes: 3.0 (RFC 2426) and 4.0 (RFC 6350). iOS and Android both support 3.0 reliably. 4.0 has better field types but inconsistent QR-scanner support in 2026.

vCard 3.0 fields commonly used in QR payloads
PropertyExampleNotes
BEGIN / ENDBEGIN:VCARD ... END:VCARDRequired wrapper. CRLF line breaks recommended.
VERSIONVERSION:3.0Pick 3.0 for QR compatibility unless you control the scanner.
NN:Doe;Jane;;;Structured name: Family;Given;Additional;Prefix;Suffix.
FNFN:Jane DoeDisplay name. Required in 3.0.
ORGORG:Acme Pvt LtdCompany name.
TITLETITLE:EngineerJob title.
TEL;TYPE=CELLTEL;TYPE=CELL:+919876543210Mobile number. TYPE=WORK and HOME also accepted.
EMAIL;TYPE=WORKEMAIL;TYPE=WORK:jane@example.comWork email.
URLURL:https://example.comWebsite.
ADR;TYPE=WORKADR;TYPE=WORK:;;221B Baker St;London;;NW1;UKAddress. Seven semicolon-separated parts.
vCard 3.0 fields commonly used in QR payloads

Keep the vCard short, vCard payloads bloat fast. A full address plus two phones, two emails and a photo will push the QR symbol to a high version and force a large print size. Strip optional fields. Build one with the vCard QR generator.

MeCard, the compact alternative

MeCard (`MECARD:N:Doe,Jane;TEL:+919876543210;EMAIL:jane@example.com;;`) is a denser legacy format that Android originally promoted. Modern scanners still understand it. vCard 3.0 has wider iOS support; default to it unless print size is critical.

Calendar: ICS events

Calendar events use the iCalendar format defined in RFC 5545. For a QR payload, encode a single VEVENT inside a VCALENDAR wrapper.

Minimum ICS VEVENT for a QR payload
PropertyExampleNotes
BEGIN / ENDBEGIN:VCALENDAR / END:VCALENDARRequired wrapper with a nested VEVENT block.
VERSIONVERSION:2.0ICS protocol version, required.
UIDUID:event-123@example.comGlobally unique ID. Required by RFC 5545.
DTSTAMPDTSTAMP:20260627T120000ZWhen the event record was created, UTC.
DTSTARTDTSTART:20260701T180000ZEvent start. Use Z suffix for UTC, or TZID= for local.
DTENDDTEND:20260701T200000ZEvent end.
SUMMARYSUMMARY:Product launchEvent title.
LOCATIONLOCATION:HQ AuditoriumOptional.
DESCRIPTIONDESCRIPTION:Doors open at 17:30.Optional. Long values inflate the QR fast.
Minimum ICS VEVENT for a QR payload

Scanner support for raw ICS varies. iOS and most Android scanners do recognise it; some only accept ICS hosted at an https URL and treat the QR as a URL instead. For best cross-platform behaviour, host the ICS file at a public URL and encode that URL in the QR.

App store links: Android and iOS

App store links are the messiest part of the QR cheat sheet, because Android and iOS use different conventions.

iOS: a normal HTTPS URL

Use the canonical https://apps.apple.com/<country>/app/<slug>/id<numeric-id> URL. Encode it as a plain URL QR. No custom scheme is involved; Safari and the App Store handle the rest.

Android: market:// and intent://

Two conventions exist. `market://details?id=com.example.app` opens the Play Store app directly if it is installed; it fails on devices without Play Services. `intent://...#Intent;scheme=https;package=com.example.app;end` is the Android Intent URI scheme and lets you fall back to a web URL when the app is missing.

For QR codes meant to install or open an app, the safe pattern is to encode the canonical https://play.google.com/store/apps/details?id=... URL and let the OS dispatch it to the Play Store app. Same for iOS with apps.apple.com URLs. Use the app store QR generator, which emits cross-platform-safe URLs.

Scheme-specific gotchas, in one list

  • Anything inside a QR is plain text. Wi-Fi passwords, mailto bodies and vCard fields can all be read by decoding the symbol. Treat printed codes as public.
  • Long payloads push the symbol up several QR versions, raising the minimum print size. Strip optional fields ruthlessly.
  • Capital-letter schemes (WIFI:, SMSTO:, MATMSG:) are case-sensitive vendor conventions. Lowercase RFC schemes (mailto:, tel:, sms:, geo:, upi:) are case-insensitive per RFC 3986 but should be written lowercase for safety.
  • Some scanners default to opening only http(s) automatically and require an extra tap for everything else. This is a security feature, not a QR error.
  • iOS and Android disagree on geo: behaviour. Encode a maps URL fallback for cross-platform reliability.
  • vCard 4.0 (RFC 6350) is technically the modern version, but 3.0 (RFC 2426) has wider scanner support in 2026. Default to 3.0 unless you control the readers.
  • intent:// URLs work only on Android Chrome and its derivatives; on iOS they are ignored. Use plain https URLs for cross-platform app deep links.

Frequently asked questions