Order and shipping texts are the messages customers want. People check their phone for "your order shipped" far more often than they open the matching email. These texts also carry the least compliance risk, as long as you keep them separate from marketing. Most stores get into trouble by mixing the two: a discount code tacked onto a shipping alert, sent from a number that was never registered.
This guide covers what Shopify can send without any add-on, when a Shopify app is the better choice, how consent and A2P 10DLC registration apply to transactional texts, and how to send them yourself through an API. It also works through the cost of a month of order texts.
What Shopify sends on its own
Shopify includes customer notification templates under Settings → Notifications. Some of them can go out as SMS when a customer gives a phone number at checkout instead of an email address. The exact list, wording controls and supported countries change over time, so check that settings page rather than relying on any blog's list, including this one.
The native route has real advantages:
- No setup. The templates already exist and fire on Shopify's own order events.
- No extra vendor. Nothing new to install, register or pay for separately.
- Correct by default. Texts are triggered by real orders, so they stay transactional.
It also has limits. Native texts usually go only to customers who checked out with a phone number. You get little control over timing or the sending number. Replies don't land in a shared inbox where your team can answer "can I change my address?" If you want a two-way conversation, branded sender details or texts triggered by your own logic (backorder delays, delivery exceptions, pickup-ready notices), you need an app or an API.
The three ways to add order texts
| Route | Best for | Setup effort | Two-way replies | Who handles 10DLC registration |
|---|---|---|---|---|
| Shopify native notifications | Small stores that want basic confirmations | Minutes | Limited | Shopify |
| SMS marketing app from the Shopify App Store | Stores whose main goal is marketing flows (abandoned cart, campaigns) that also want order updates | An afternoon | Varies by app | Usually the app, under its process |
| Messaging API (such as Ready) triggered by Shopify webhooks | Stores with a developer, custom logic, or platforms serving many stores | A day or two of dev work | Yes, in an inbox | You, through self-serve registration |
Here is our honest view. If marketing flows are the main reason you want SMS, a dedicated Shopify marketing app is often the right tool. Those apps are built around Shopify's consent checkbox and cart events. We cover that tradeoff in Shopify SMS marketing: options and rules and in our piece on Shopify and Square platform add-ons. The API route is a good fit when you want transactional texts on your own terms, or when you're building a product that texts on behalf of many merchants.
Consent: transactional and marketing are different promises
A customer who enters a phone number to get order updates has agreed to order updates. They have not agreed to promotions. Marketing texts need separate, express consent, which is what Shopify's "text me with news and offers" checkbox at checkout is for.
Follow these rules for order and shipping texts:
- Keep the content transactional. "Order #1042 shipped, track it here" qualifies. "Order #1042 shipped, use SAVE10 on your next one" is a marketing message, and it needs marketing consent.
- Keep consent records in the store. Shopify's customer record shows how and when someone opted in. When you send through Ready, we record your attestation on each send (who sent it, to how many people, when). That gives you an audit trail of your sending. It is not a per-contact consent record, so the source of truth for each customer's opt-in stays in Shopify.
- Honor STOP everywhere. On Ready, an inbound STOP or UNSUBSCRIBE is honored automatically. The opt-out carries across every campaign, so that number can't be texted again by mistake.
- Mind quiet hours. An API text sent during the recipient's local quiet hours is held only if sending opens within about 6 hours; otherwise the API answers 409 QUIET_HOURS_BLOCK and nothing is queued. A fulfillment created at 11 PM is refused, so queue it in your webhook handler and resend it after
next_allowed_atin the morning.
Mixing promo content into transactional texts also hurts deliverability. Carriers filter on content, which is why an order update can get through while a promo from the same number gets blocked. Our post on content signals that get marketing texts filtered covers the specific triggers.
Compliance is ultimately the sender's responsibility. The tools reduce risk. They don't transfer it.
Registration: why order texts still need 10DLC
US carriers filter unregistered application-to-person traffic from local numbers, and transactional texts are no exception. If you send through your own number, you register a brand and a campaign. Our 10DLC explainer covers the background.
On Ready, registration is self-serve and runs inside the app:
- Brand: $10/mo
- Campaign: $20/mo
- Per number: $2/mo
- No setup fee. The charge when you submit is the first month, $25.
- Most approvals take 2 to 7 days.
Describe the campaign as customer care or order notifications, and write sample messages that look exactly like what you'll send. A sample that mentions discounts on a "transactional" campaign is a common reason for rejection. If you get rejected, this resubmission guide explains how to fix the samples.
You don't have to sit idle while registration is in review. An account can send up to 500 texts a month before registering, at its normal per-text rate. An account that bought its number first sends on our shared registration while its own is reviewed. The first 20 texts are free one-to-one sends. Use them to test your templates before you register, because the free texts end once a registration is paid for. To send, you add a card and get a number, which is $2 a month with the first month charged when you get it.
Wiring Shopify to Ready over the API
Shopify publishes webhooks for store events, including orders/create and fulfillments/create. The pattern is simple: a small endpoint receives the webhook, checks that the customer has a phone number and opted into order updates, and sends one text.
curl -X POST https://api.tryready.com/v1/messages \
-H "X-API-Key: $READY_API_KEY" \
-H "Idempotency-Key: 3f1c2a9e-8b7d-4e21-9c55-1a2b3c4d5e6f" \
-H "Content-Type: application/json" \
-d '{
"to": "+12125550199",
"body": "Your order #1042 has shipped. Track it: https://example.com/t/1042 Reply STOP to opt out.",
"consent_attested": true
}' A few details matter here:
- Idempotency-Key. Shopify retries webhooks it thinks failed. Derive the key from the order or fulfillment ID so a retry never sends the customer two "shipped" texts.
consent_attested: trueis your statement that this recipient agreed to texts. Only set it when Shopify's record supports it.- Opt-outs are refused up front and not charged. You can also check them yourself with
GET /v1/opt-outs/:phone. - Local presence. Local presence needs nothing in the request. Leave
from_strategyout and Ready sends from the number this customer already texts with, otherwise your number closest to their area code. Every number still sits on your registered campaign.
For full request details, see the messages API docs and the quickstart. For a broader walk-through of retries and error handling, see our SMS API integration guide.
What a month of order texts costs
Assumptions for this example: 1,500 orders a month, two texts per order (confirmation and shipped), each under 160 plain characters with no emoji, so one segment each.
- Segments: 1,500 × 2 = 3,000
- Rate: 3,000 × $0.0075 = $23, plus 3,000 × $0.0045 carrier fee, itemized separately
- Registration: $25/mo for registration and $2/mo per number
- Replies are billed like sent texts. If 5% of customers reply with one segment, that adds 150 segments.
That all-in figure excludes the optional compliance surcharge. Scrubbing and landline validation each add $0.003 per segment when you turn them on, and both are off by default. For one-off list checks, the standalone TCPA and DNC litigator scrub is $0.005 per contact.
Watch the emoji. A 📦 in the shipping text drops the segment limit to 70 characters. A 120-character message becomes 2 segments, which doubles that line of the bill. Ready already converts curly quotes and long dashes to plain characters, so those don't change the count. Emoji do.
Ready's per-segment rate isn't the lowest available. Raw carrier APIs charge less per segment. What you get here is self-serve registration, the inbox, opt-out handling and quiet hours already built, rather than building them yourself.
The practical takeaway
Start with Shopify's native notifications. If they cover what you need, you're done. If you want marketing flows first, pick a Shopify marketing app. If you want transactional texts triggered by your own logic, replies in a shared inbox, or you're a platform texting for many stores, the API route works well.
Whichever route you choose, keep order texts free of promotions, keep consent records in Shopify, and register before your volume grows. If you want to test the API route, create an account, send your 20 free test texts to your own phone, and then submit your registration. Rates are on the pricing page.