A customer buys a pair of shoes. You send: "Your order #4821 has shipped! Track it here: [link]." Nobody blinks. That text is transactional — it exists because the customer bought something and reasonably expects to hear about it. You didn't need a marketing opt-in to send it, and you never will.
Then someone in growth says: "Add a line — 'While you wait, take 15% off your next order.'" And now you've changed what that message is. Not a little. Legally, you've turned a transactional notice into a marketing message, and the consent you had for the first one doesn't cover the second.
Full disclosure: I work for Ready, an SMS platform. This comes up constantly with ecommerce operators, and the fix is boring and cheap — but only if you understand where the line actually sits.
Transactional vs. marketing: the test regulators actually use
The distinction isn't about tone or how salesy the copy feels. It's about purpose. A message is transactional when its primary reason for existing is to complete or service a transaction the customer already initiated:
- Order confirmations
- Shipping and delivery notices
- Delivery exceptions ("your package is delayed")
- Return/refund status
- Appointment or reservation confirmations
- Account and security alerts (2FA, password reset)
A message is marketing the moment its primary purpose is to promote a product, offer, or sale — even if it's stapled onto a transactional notice. The FCC and TCPA framework treats these as different categories with different consent requirements. Transactional messages rest on the transactional relationship. Marketing messages require prior express written consent — an actual opt-in where the customer agreed to receive promotional texts.
The "primary purpose" test is the whole game. And a shipping notice with a discount code bolted onto the end fails it, because a court can reasonably read the promo as a purpose, which is enough to require marketing consent for the whole message.
Where bundling quietly crosses the line
Here's the trap. You've got a legitimately transactional flow — say, a shipping confirmation campaign registered under a transactional 10DLC use case. It sails through carrier filters. Deliverability is great. So you start "optimizing" it:
| Message | Transactional? | Needs marketing consent? |
|---|---|---|
| "Order #4821 shipped. Track: [link]" | Yes | No |
| "Order #4821 shipped. Track: [link]. Reply YES for exclusive drops" | No — it's soliciting an opt-in inside a transactional send | Gray, risky |
| "Order #4821 shipped. Take 15% off your next order: [link]" | No | Yes |
| "Delivered! Rate your order + get 10% off your next one" | No | Yes |
The second row is the sneaky one. Asking someone to opt into marketing inside a transactional message is itself arguably promotional content, and some brands have gotten flagged for exactly that. A cleaner path exists — a dedicated, consent-first upgrade step — which I'll get to.
The bigger issue: once you mix promo into a transactional campaign, you've also mismatched your 10DLC use case. Carriers registered your campaign as transactional. Now you're sending marketing on it. That mismatch is one of the most common causes of silent throttling and delivery drops — we wrote about that in Registering a 'Marketing' Campaign for Transactional Texts Is Why Your Delivery Silently Drops. The same problem runs in reverse: send marketing on a transactional registration and carriers start filtering you.
What the money exposure looks like
TCPA statutory damages run $500 to $1,500 per message for messages sent without required consent. That's per text, not per campaign.
Do the math on a modest ecommerce operation. You send a shipping notice with a discount code to 8,000 customers who bought this month but never opted into marketing. Every one of those is arguably a marketing message sent without express written consent. At the low end:
8,000 × $500 = $4,000,000 in theoretical exposure.
You will almost certainly never see the full number — most of it never gets litigated, plenty of recipients don't care, and you'd fight it. But the exposure is real, and it only takes one recipient who is a TCPA litigator to turn a discount code into a demand letter. The cost of avoiding it is nearly nothing by comparison.
Segment the two flows — literally
The clean architecture is to keep transactional and marketing as separate flows with separate consent and separate 10DLC campaigns:
- Transactional campaign — order/shipping/delivery notices. Registered as a transactional use case. No promo copy, ever. Rests on the purchase relationship.
- Marketing campaign — sales, drops, back-in-stock, abandoned cart, promos. Registered as a marketing use case. Sends only to contacts who gave express written consent.
The contacts overlap heavily — most people who opted into marketing also placed orders — but the permission is tracked separately. Someone can be on your transactional flow and not your marketing flow. That's fine and normal.
In Ready, this maps to separate campaigns and separate opt-in states, so a contact who never opted into marketing simply isn't eligible for the marketing send even if they're an active customer receiving shipping notices. And STOP handling is automatic and propagates — if someone replies STOP to a promo, the opt-out sticks across your marketing sends. (Transactional STOP is handled too, though the relationship for genuinely transactional messages is narrower.)
The consent upgrade that lets you have both
You don't have to choose between "no promos ever" and "risky bundling." There's a legitimate move: use the transactional message as the moment to invite a marketing opt-in — as a clearly separate, affirmative step, not as buried promo copy.
The pattern:
- Transactional text goes out clean: "Order #4821 shipped. Track: [link]"
- A follow-up, or a one-tap link, invites the customer to opt into marketing: "Want first dibs on drops + exclusive discounts? Reply YES." — sent as its own message with its own clear purpose and STOP language.
- The moment they reply YES, you've captured express written consent, and they move into the marketing flow.
Done right, this converts well precisely because you're catching someone at peak intent — right after they bought. We walk through the mechanics in Transactional Order Texts Don't Let You Send Promos — The One-Tap Upgrade That Converts Them Legally. Ready records the opt-in attestation when they consent, so you've got the audit trail if anyone asks how a contact ended up on your marketing list.
Register the right 10DLC use cases from the start
The compliance and the deliverability are the same problem wearing two hats. Getting your consent architecture right and registering matching 10DLC campaigns is what keeps your messages landing:
- Transactional campaign registered with transactional sample messages (shipping notices, order confirmations).
- Marketing campaign registered with promotional sample messages and clear opt-in/opt-out language.
Ready handles A2P 10DLC brand and campaign registration in-app — roughly ~$10/mo per brand and ~$20/mo per campaign in carrier fees, with approval usually landing in 1–3 days (often same-day). Running two campaigns costs one extra ~$20/mo campaign registration. That's the price of not having your marketing throttled on a transactional route — and not having a discount code become a legal problem. For the ecommerce-specific registration walkthrough, see Understanding 10DLC Compliance for E-Commerce Businesses.
Layer on quiet-hours enforcement (marketing sends held outside permitted local hours) and litigator/DNC scrubbing before your promo blasts, and you've reduced most of the avoidable exposure. None of this makes you lawsuit-proof — consent is ultimately the sender's responsibility — but it removes the easy, self-inflicted mistakes.
The practical takeaway
The shipping notice is fine. The problem is what you bolt onto it. Keep the two flows honestly separated:
- Transactional messages rest on the purchase relationship. Keep them clean.
- Anything promotional — including a discount code inside a shipping text — needs marketing consent and a matching marketing 10DLC campaign.
- Bundle a promo into a transactional send and you've mismatched your use case (delivery drops) and sent marketing without consent ($500–$1,500/message exposure).
- Use the post-purchase moment to invite a marketing opt-in as its own step — that's the legal way to convert the same audience.
If you're setting this up, run two campaigns from day one — a transactional one and a marketing one — with separate consent states. Ready's registration flow and automatic STOP handling make that the default rather than the exception. You can start with 2,500 free credits and no card at tryready.com/readysms, or sign up here and register both campaigns before your next drop.