Transactional SMS: what counts, the consent it needs, and templates that fit one message
Published Updated 10 min readBy the Rasket team
Written for developers, e-commerce teams and small business owners

The short answer
A transactional SMS is a text a person needs because of something they did: a sign-in code, an order update, an appointment reminder, a password reset. A marketing text is anything that promotes. The difference decides the consent you need, the hours you may send in, and whether the text must end with “Reply STOP to opt out”.
Transactional texts still need the person to have given you their number for that purpose, and they stop when the person texts STOP. Keep each one short enough to fit in a single message: 160 plain characters, or 70 once a single emoji or curly quote creeps in.
Transactional vs marketing texts
The test is the reason the text exists. If the person would expect it because of something they just did, or something they arranged, it is transactional. If it is there to sell, it is marketing, even when it rides on a transaction. A shipping update is transactional. The same update with “10% off your next order” at the end is promotional, and the wireless industry treats it that way: CTIA's Messaging Principles say that adding a call to action such as a coupon code to an informational text may put the message in the promotional category.
| Text | Kind | Why |
|---|---|---|
| Your sign-in code is 481922 | Transactional | They are signing in right now |
| Your order has shipped | Transactional | They placed the order |
| Your appointment is tomorrow at 2:30 | Transactional | They booked it |
| Your card was declined; update it here | Transactional | About an account they hold |
| Your cart is waiting | Marketing | It asks for a sale they have not made |
| New arrivals this week | Marketing | It promotes |
| Your order has shipped. 10% off your next one | Marketing | The offer makes it promotional |
In Rasket the kind is a field: category on a send, transactional by default. Calling a marketing text transactional to get past the rules is something carriers look for, and so do we: your number's registration already says how you will text, and a mismatch is a reason to be filtered.
What consent does a transactional SMS need?
Less than a marketing text, but not none. Under the FCC's rules, a text that includes an advertisement or is telemarketing, sent with automated equipment, needs the person's prior express written consent: a signed agreement, which can be a checkbox and an electronic signature, that clearly authorises the seller to text them ads at that number. A transactional text sent the same way needs the person's prior express consent, which in practice means they gave you the number for this purpose: at checkout to hear about the delivery, or in their account settings for sign-in codes.
CTIA's guidelines draw the same line in their own words. A conversational text answers one the person sent. An informational text, such as an appointment reminder, a welcome text or an alert, follows from the person giving their number and asking to be contacted, and they should agree to texts for that specific purpose when they give it. A promotional text needs written agreement first.
Canada's anti-spam law takes a different route to a similar place. Section 6 requires consent for a commercial electronic message, and lifts that requirement for one that solely confirms or completes a transaction, or gives warranty, recall or safety information. The rest of section 6 still applies to it: the message must identify the sender, say how to contact them, and offer a way to unsubscribe.
STOP stops transactional texts too
A person can revoke consent by any reasonable means, and a reply of STOP, QUIT, END, REVOKE, OPT OUT, CANCEL or UNSUBSCRIBE counts as one on its own under the FCC's rules. In Rasket STOP and its synonyms end every text from your project to that phone, and only the person can undo it, by texting START. If a phone opted out, a sign-in code to it will be skipped, so offer another way in.
Transactional SMS examples
Order shipped and out for delivery
The most welcome texts a shop sends. Say what happened, the order number they will quote, and one link to the tracking page. The email confirmation keeps the line items; the text only needs to make them look. Send “out for delivery” on the day, not every scan in between: three texts for one parcel is how people learn to ignore you.
One-time codes and two-factor authentication
A code by text is the most common transactional SMS, and the one with the most rules of its own. Put the code first so it shows in the notification, say what it is for, say when it expires, and tell people never to share it. NIST's digital identity guidelines treat codes sent over the phone network as a restricted authenticator: a service that offers them must also offer another kind of second factor, should warn people of the risks, such as a number moved to a new SIM, and must treat an out-of-band code as valid for at most ten minutes and accept it only once. So send codes by text where it helps, and keep an authenticator app or a passkey on offer.
Appointment reminders
Name the person, the day, the time and the place, and give one way to change it. A reminder the day before and, for a short booking, an hour before is enough. Write the date out (“Oct 28”) rather than “in 2 days”, because a text can arrive late or be read later.
Password reset
A reset is safer as a code than as a link: a link in a text can be forwarded or previewed, and the reset link belongs in the inbox the account is tied to. Say plainly that the person can ignore the text if they did not ask, so a reset somebody else started does not turn into a support ticket.
Transactional SMS templates and their message counts
These are written for a brand called Acme, filled in with sample values. Each count is for the whole text as sent, which is how texts are billed: Rasket puts Acme: in front of every text that does not already start with it, and adds “Reply STOP to opt out” on a new line to the first transactional text a phone gets from you in any 30 days. The last column is that first text.
| Template | Encoding | As sent | With the STOP line |
|---|---|---|---|
| Order shipped | GSM-7 | 60 characters, 1 message | 82 characters, 1 message |
| Out for delivery | GSM-7 | 152 characters, 1 message | 174 characters, 2 messages |
| Sign-in code | GSM-7 | 93 characters, 1 message | 115 characters, 1 message |
| Appointment reminder | GSM-7 | 111 characters, 1 message | 133 characters, 1 message |
| Password reset | GSM-7 | 105 characters, 1 message | 127 characters, 1 message |
| Password reset, curly apostrophe | UCS-2 | 105 characters, 2 messages | 127 characters, 2 messages |
| Order shipped, with an emoji | UCS-2 | 62 characters, 1 message | 84 characters, 2 messages |
Acme: Your order #1042 has shipped. Track it: acme.co/t/1042
Reply STOP to opt outTwo of the rows are the same text with one character changed. The password reset with a straight apostrophe is one message; with a curly one, which phones and word processors type for you, the whole text switches to UCS-2 and needs two. An emoji does the same. Use straight quotes in your templates, and leave the emoji out of anything sent at volume.
How a text is counted: GSM-7, UCS-2 and segments
A message is up to 160 characters (70 if it has an emoji or another special character). A longer text is sent and billed as several messages.
- GSM-7 is the phone networks' own 7-bit alphabet: letters, digits and common punctuation. A text that uses only it fits 160 characters in one message. A few characters, such as
€ [ ] { } ~ ^ |, are in its extension table and count as two. - UCS-2 is used as soon as one character is outside GSM-7: an emoji, a curly quote, most accented letters outside the basic set, any non-Latin script. One message then holds 70 units, and an emoji counts as two.
- Longer texts are split into parts, and each part loses a few characters to the header that joins them on the phone: 153 GSM-7 characters or 67 UCS-2 units a part. Rasket sends at most 10 parts and refuses longer text.
Each part is a message you pay for: at $0.015 a message, a three-part text costs three times a one-part one. No character is quietly swapped for a lookalike to save a message, so what you count is what is sent. To count a text before you send it, call POST /sms/estimate, which returns the encoding, the characters, the messages and a warning such as special_characters.
Quiet hours, and why transactional texts ignore them
Marketing texts in Rasket go out between 8 am and 9 pm in the person's own time zone, or the shorter hours some states set, the same window the FCC sets for telephone solicitations in the US. A marketing text due outside it waits for the next morning; nothing is dropped. A phone also gets at most one marketing text from you in any 16 hours, however it was sent.
Transactional texts skip both rules. A sign-in code at 2 am is still wanted, because the person asked for it a second ago, and a delivery update does not use up the one marketing text a phone may get in 16 hours. That is the practical reason to get the category right: a reminder sent as marketing would wait for the morning, and a promotion sent as transactional would break the rules that protect your number.
Send a transactional SMS from the API
One call to POST /sms. Set category to transactional (it is the default, but saying so makes the intent visible in your code), and make the Idempotency-Key from the event, such as the order and what happened to it, so a retry within 24 hours returns the first answer instead of texting twice.
curl -X POST "https://api.rasket.com/sms" \
-H "Authorization: Bearer $RASKET_API_KEY" \
-H "User-Agent: acme-billing/1.0" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-1042-shipped" \
-d '{
"to": "+14155550123",
"text": "Your order #1042 has shipped.",
"category": "transactional",
"tags": {
"order": "1042"
}
}'const response = await fetch("https://api.rasket.com/sms", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.RASKET_API_KEY}`,
"User-Agent": "acme-billing/1.0",
"Content-Type": "application/json",
"Idempotency-Key": "order-1042-shipped",
},
body: JSON.stringify({
to: "+14155550123",
text: "Your order #1042 has shipped.",
category: "transactional",
tags: {
order: "1042"
}
}),
});
const { id } = await response.json();The answer says how many messages the text was and what it cost, and webhooks follow as it is sent and delivered. The SMS API guide walks through the whole first send, from giving a key SMS access to the delivery webhook.
Send one from an automation step
When the text belongs to a flow, such as a shipping update after an order event, add a Send SMS step to an automation instead of calling the API yourself. The step is send_sms, and its category is marketing unless you set transactional, so set it:
{
"id": "text_shipped",
"type": "send_sms",
"config": {
"text": "Your order {{{event.order_number}}} has shipped. Track it: {{{event.tracking_url}}}",
"category": "transactional"
}
}texttakes the same merge fields as an email in the flow, including the event's own data.- A contact with no phone, or who texted STOP, skips the step, and the run carries on with its next one; the run's history says why.
fromis optional; your default number for the contact's country is used.
Texts in automations has the full step.
Transactional SMS in Rasket
Transactional texts go through the same API key, contacts and webhooks as your email, to phones in the United States and Canada. Every text says what it cost, a failed one is never charged, and STOP, HELP and the opt-out list are handled for you. Until your own number is approved, which usually takes 1 to 5 business days, you can send these templates to your own verified phones from Rasket's shared test number and see exactly how they arrive.
The SMS page has what is included, and Consent and STOP has the rules for the texts that are not transactional.
Frequently asked questions
Do transactional text messages need consent?
Yes, though less than marketing texts. The person must have given you their number for that purpose, such as at checkout for delivery updates. Marketing texts need prior express written consent. In Rasket a marketing text to a contact without SMS consent is skipped; a transactional one is sent.
Does STOP stop transactional texts too?
Yes. A reply of STOP, or UNSUBSCRIBE, CANCEL, END or QUIT, ends every text from your project to that phone in Rasket, transactional ones included, and only the person can undo it by texting START. Give people who opted out another way to get sign-in codes.
Is it safe to send one-time codes by SMS?
It is common and better than no second factor, but not the strongest. NIST treats codes over the phone network as restricted: offer another kind of second factor as well, warn people about risks such as a number moved to a new SIM, and accept each code once, within ten minutes.
Why does one emoji double the cost of a text?
An emoji is outside the GSM-7 alphabet, so the whole text switches to UCS-2, where one message holds 70 units instead of 160 characters and the emoji itself counts as two. A curly apostrophe does the same. Use straight quotes and leave emoji out of texts you send at volume.
Can I send transactional texts at night?
Yes. Quiet hours apply to marketing texts only: in Rasket they go out between 8 am and 9 pm where the person is, or the shorter hours some states set. A sign-in code or a delivery update is sent at once, whatever the time, because the person is waiting for it.
Can a transactional text include a discount code?
Not if you want it to stay transactional. CTIA's guidelines say adding a call to action such as a coupon code to an informational text may make it promotional, and then it needs marketing consent, daytime hours and the STOP line. Put the offer in a separate marketing text to people who agreed to them.
Sources
- 47 CFR § 64.1200: Delivery restrictions — Legal Information Institute, Cornell Law School, read 2026-10-25
- Messaging Principles and Best Practices (May 2023) — CTIA, read 2026-10-25
- An Act to promote the efficiency and adaptability of the Canadian economy (S.C. 2010, c. 23), section 6 — Justice Laws Website, Government of Canada, read 2026-10-25
- NIST SP 800-63B-4: Digital Identity Guidelines, Authentication and Authenticator Management — National Institute of Standards and Technology, read 2026-10-25
- 3GPP TS 23.038: Alphabets and language-specific information — 3GPP, read 2026-10-25
Related
- SMS — Text US and Canadian phones from the API you send email with: one key, the same contacts and webhooks, consent and STOP handled, a price per message in dollars.
- SMS — Transactional and marketing texts on the API, contacts and automations you use for email. Consent, STOP and HELP handled, priced per message in dollars.
- Consent and STOP — Who you may text, the proof you keep, and replies like STOP.
- Texts in automations — The Send SMS step, and what happens to a contact without a phone.
- SMS quickstart — Send your first text to a US or Canadian phone.
- SMS API: how it works and what to look for — What an SMS API does, what to check before you pick one, from delivery webhooks to STOP and number types, and a first text sent with curl and Node.
- Transactional vs marketing email (2026 Full Guide) — How to tell transactional email from marketing email, the US and UK rules for mixed messages, separate sending subdomains, and how to send each kind.