QR QR Studio

QR code type

SMS QR code

Published 7 September 2026 · 2 min read

Raw payload

SMSTO:+15550100:JOIN
  1. SMSTO: Tells the phone to open a text message
  2. +15550100 The recipient number in international format
  3. :JOIN The pre-filled message body, after a second colon
How a SMS payload is put together. Scanners read the prefix, then each field in turn.
QR code encoding SMSTO:+15550100:DEMO
A real SMS code. Scan it with your phone.

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.

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.

Build an SMS payload

Frequently asked questions

Does the text get sent when someone scans the code?

No. The phone opens a draft with the number and message filled in. The person taps send, or does not. There is no way to make a QR code send anything on its own.

Should I use SMSTO or sms?

SMSTO. The sms form works on both platforms for the number alone, but iPhone wants the body as sms:+15550100&body=JOIN while Android wants sms:+15550100?body=JOIN. SMSTO avoids the argument.

Can I put a long message in the code?

You can, but every character makes the code denser and people rarely send a long pre-written text unchanged. A keyword such as JOIN or STOP is the usual pattern.

Does it work with short codes like 12345?

Usually. Put the short code where the number goes. Some scanners insist on a plus sign and a country code, so test on both platforms.

Related reading

Make a SMS QR code in QR Studio

Pick SMS from the type list, fill in the fields, and the payload below is written for you. Free, no watermark.

Download on the App Store