Skip to content
UseQR
ESC

Jump to

MOVEOPEN50 places

Troubleshooting

SMS QR code body not prefilled on iPhone

The sms: URI split its body syntax across platforms: older iOS wanted an ampersand where Android used a question mark, and some iOS versions dropped the body entirely. The SMSTO:number:message form avoids the whole split and is recognised by current iPhone and Android cameras, which is why UseQR emits it.

View as MarkdownPaste this page into any AI assistant. It is plain, portable Markdown.

The classic platform split

Prefilled-SMS codes are the textbook example of a payload that "works on my phone" and fails on the client's. The reason is historical: there have been two competing syntaxes, and iOS and Android disagreed about one of them for years.

The URI form. RFC 5724 standardised the sms: URI, and the de-facto extension adds the message as a query field:

sms:+15551234567?body=Your%20message

Android handles this. iOS is the problem child: early iOS versions required an ampersand instead of the question mark (sms:+15551234567&body=…; invalid as a URI, but it was what worked), and across the years various iOS versions opened Messages with the number but silently dropped the body from ?body= links. The result was a generation of QR codes that prefilled everything on Android and only the number on iPhones.

The scanner form. Barcode scanners converged on a simpler convention that predates the URI politics:

SMSTO:+15551234567:Your message here

Number after the first colon, message after the second, message text literal (no percent-encoding). This is the form scanner vendors standardised on, and it is what current iPhone and Android camera apps recognise, number and body.

What to use today

Payload Android camera iOS camera
SMSTO:+15551234567:Hi Number + body Number + body
sms:+15551234567?body=Hi Number + body Number reliable; body has varied by iOS version
sms:+15551234567&body=Hi Broken Legacy-iOS workaround only: do not use

The answer is the first row. UseQR's SMS generator emits SMSTO:number:message for exactly this reason. It is the one form with no known platform split in current OS versions. The number is normalised on the way in: spaces, dashes, dots and parentheses are stripped, and the result must be 7–15 digits with an optional leading +. Always include the country code with +, a national-format number prefills correctly at home and dials the wrong thing for any traveller who scans it.

Two details about the SMSTO body worth knowing: colons inside the message are fine (the format splits on the first two colons only), and the message is plain literal text, so what you type is what appears, no %20, no encoding, unlike a mailto body.

If your code still fails

  1. Decode it with our scanner and check which form it actually contains. Plenty of older generators still emit sms:…&body=…, which is broken everywhere except ancient iPhones.
  2. Check the split symptom. Body missing on iOS but present on Android almost always means the ?body= URI form, regenerate as SMSTO. Failing on both platforms usually means the code, not the payload; run the not-scanning checklist.
  3. Mind the length. SMS bodies belong under a couple of hundred characters: beyond that the code densifies fast and, past 160 GSM characters, the message splits into multiple SMS parts on sending.
  4. Consider the channel. If your audience is on WhatsApp, a WhatsApp QR code with a prefilled message avoids SMS quirks entirely and is often the better fit for business enquiries.

FAQ

Why does my SMS QR code open Messages without the text on iPhone?

The payload uses the sms: URI with a ?body= parameter, whose body handling has been inconsistent across iOS versions. Regenerate using the SMSTO:number:message form, which current iPhone and Android cameras both prefill completely.

What is the difference between sms: and SMSTO:?

sms: is the RFC 5724 URI scheme with the message in a percent-encoded body query field. SMSTO: is the barcode-scanner convention: number, colon, then the literal message text. SMSTO is the form that behaves consistently across today's platforms.

Does the message text in SMSTO need percent-encoding?

No. The message after the second colon is literal text: spaces, punctuation and even colons pass through as typed. Percent-encoding it would put literal %20 sequences into the composed message.

Can a QR code send an SMS automatically?

No. On every platform the code only opens the messaging app with number and text prefilled; the user must still tap send. That confirmation step is deliberate and cannot be bypassed by any payload.

Try it: free, no signup