When to use it
Text-to-join campaigns, “text STOP to unsubscribe” notices, competition entries, a maintenance line where the person reports a fault by texting a code printed on the equipment. Anywhere the reply should be a keyword to a number rather than a conversation.
How it behaves on phones
iPhone: the Camera app shows a banner with the number. Tapping it opens Messages with the recipient and body filled in. The person edits or sends.
Android: most Android scanners open the default messaging app with the draft ready. Google Lens shows the number and a “Send SMS” button first.
On a tablet or a phone with no SIM, the message app may open with nothing to send it through. The code is not at fault, but it is worth knowing.
Common mistake
Encoding sms:+15550100?body=JOIN because that is what a web tutorial showed. It works on Android. On iPhone the question mark form is often ignored and Messages opens with an empty body, so the person has to type the keyword themselves. Use SMSTO: and both platforms fill it in.
Gotchas
Prefill only. A QR code cannot send a message, charge anything, or sign anyone up by itself. If a campaign says “scan to subscribe”, the scan opens a draft and the person still has to send it.
Two formats. SMSTO:number:body comes from the old Japanese phone conventions and both platforms read it. sms:number is the internet standard (RFC 5724) but the standard’s ?body= option was never adopted by iPhone, which uses &body= instead. Stick to SMSTO.
Body encoding. In SMSTO the body is plain text after the second colon. Spaces are fine. In the sms: form the body must be percent encoded, so a space becomes %20.
Country codes. Write the number as + followed by the country code and the number without spaces or brackets. +15550100 works anywhere; (555) 0100 only works if the phone happens to be in the same country.
Size. SMSTO:+15550100:JOIN is 20 characters and fits version 2 at level M, 25 modules wide. A 100 character body needs version 6 or more.
Try it in QR Studio
QR Studio has an SMS type with a number field and a message field. It writes the SMSTO string and shows you the result before you export.
Print advice
Level M. SMS codes go on posters, flyers and stickers that are scanned from arm’s length, so 3 to 4 cm is comfortable. Always print the number and the keyword in plain text as well, for example “or text JOIN to +1 555 0100”. Some people prefer to type, and some scanners show the raw text.
Try it yourself
Enter a number and a keyword, and compare the SMSTO string with the sms form.