> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sequenzy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SMS & MMS

> Send SMS and MMS messages from sequences with the SMS add-on: toll-free number provisioning, consent, quiet hours, cost-weighted credits, international destinations, and click tracking

# SMS & MMS

The SMS add-on lets you send text and picture messages to subscribers in the
United States, Canada, and 20+ international destinations as steps in your
sequences. It is a paid add-on at \$16/month, which includes 1,000 message
credits every month; larger prepaid bundles lower the per-credit price as
volume grows.

SMS sends require either a paid plan (from \$19/mo) or a positive SMS credit
balance. Free workspaces without SMS credits see an upgrade prompt in
`Settings -> SMS`; sending pauses automatically when a workspace has neither a
paid plan nor credits.

## Enabling The Add-on

Go to `Settings -> SMS` and subscribe to the add-on. If you are upgrading
your plan, you can also add SMS in the same step: the plan upgrade dialog
lists it under **Add-ons** with a volume slider, so you can pick a monthly
credit bundle (from 1,000 credits at \$16/mo up to 75,000) and buy it together
with the plan. SMS is billed monthly even alongside an annual plan. Once
payment completes, Sequenzy automatically:

1. Purchases a dedicated toll-free number for your workspace (no number picker
   needed - it just works)
2. Opens the toll-free verification wizard so you can register the number with
   carriers

You never deal with a telecom provider directly - Sequenzy manages the number
and carrier relationships for you.

## Toll-Free Verification

US and Canadian carriers require every toll-free number to be verified before
it can send marketing messages. The verification form asks for:

* Legal business name and address
* Website
* Contact information
* A description of how subscribers opt in to SMS
* Sample messages you plan to send
* An estimated monthly volume

Sequenzy prefills most of the form from your workspace - business name,
website, address, and your contact details - so you usually just review it,
add your business registration number, and submit.

Review typically takes **1-5 business days**. The SMS settings tab shows a
setup checklist with the current state: **Action needed** (you still have to
submit the form), **In carrier review**, **Verified**, or **Rejected** with
the carrier's reason. If your submission is rejected, you can edit the form
and resubmit.

Until the number is verified, the composer and settings are fully available,
but sending is blocked.

## SMS Consent

SMS consent is **completely separate from email status**. A subscriber can be
active for email but not subscribed to SMS, and vice versa.

Every subscriber has:

* A **phone** field (stored in E.164 format, country derived automatically)
* An **SMS status**: `not_subscribed` (default), `subscribed`, or
  `unsubscribed`
* A consent **source** and timestamp when subscribed: `import`, `api`,
  `manual`, `form`, `checkout`, or `shopify`

Key rules:

* **Consent is never inferred from a phone number.** Adding a phone via the
  UI, CSV import, or API does not subscribe anyone to SMS - you must set
  consent explicitly, and only when you have express written consent.
* **STOP applies per phone number.** When someone replies STOP, every
  subscriber in your workspace who shares that phone number is unsubscribed
  from SMS, and the number is suppressed from future sends.
* **START re-subscribes.** If a subscriber who opted out via STOP replies
  START, the suppression is removed and they are subscribed again.

You can set consent when importing a CSV (map a phone column and confirm the
contacts gave SMS marketing consent), through the
[subscriber API](/api-reference/subscribers/create) with the `smsConsent`
field, or manually on a subscriber's profile.

### Shopify SMS consent sync

If you use the [Shopify integration](/integrations/shopify), phone numbers and
SMS marketing consent your store collects (for example at checkout) sync
automatically:

* The **initial customer sync** imports each customer's phone number and SMS
  marketing state. Customers who opted in at your store arrive as `subscribed`
  with consent source `shopify` and Shopify's consent timestamp.
* **Customer webhooks** keep consent current: when a customer opts in or out
  on Shopify, the change is applied to the matching subscriber within seconds.
* Consent stays TCPA-safe: a customer is only subscribed on an explicit
  Shopify opt-in, an explicit opt-out unsubscribes them, and a phone number
  without consent is stored as `not_subscribed`.

Phone numbers are protected customer data on Shopify, so the store must have
approved phone field access. If it hasn't, the sync still runs - it just skips
phone and consent.

## Sending Rules

The **Send SMS** sequence step sends only when all of these are true:

* Your workspace is on a paid plan or has SMS credits available
* The add-on is enabled and your number is verified
* The subscriber has a phone number in a supported country (see
  [International destinations](#international-destinations))
* The subscriber's SMS status is `subscribed`
* The phone number is not suppressed (for example by a prior STOP)

If any check fails, the step is skipped with a recorded reason and the
subscriber continues through the rest of the sequence - a missing phone number
never stalls a journey.

You can change what happens to contacts who can't receive SMS (no phone
number, no consent, suppressed, or an unsupported destination) per step: keep
the default **Skip this step** to continue the journey, or choose **Exit the
sequence** to end it for that contact. Workspace-level issues (add-on
disabled, no paid plan or credits, no active number) always skip so an account
misconfiguration never ends journeys in bulk.

To route contacts by SMS reachability instead, use the **Has phone number**
and **Subscribed to SMS** conditions in if/else and multi-branch steps, or the
`Phone Number` and `SMS Status` fields in segments.

### Quiet Hours

Messages are only delivered between **11:00am and 8:00pm** in the recipient
country's reference timezone (Eastern Time for the US and Canada, London time
for the UK, and so on). On Sundays the window opens at **2:00pm**. If a
sequence step fires outside the window, the message is **deferred until the
window opens** - it is never dropped.

### Message Format

Every message is sent with your brand name as a prefix (for example
`Acme: Your order shipped!`) so recipients always know who is texting them.
The very first message a subscriber receives also includes a compliance
footer: `Msg&data rates may apply. Reply STOP to opt out, HELP for help.`

## The Composer

The Send SMS step opens a lightweight composer designed for texting:

* **Text** with merge tags for personalization (like `{{firstName}}`) - type
  `{{` to pick a merge tag inline
* **Emoji** via an inline searcher - type `:` and a few letters (like
  `:fire`) to search and insert an emoji without leaving the keyboard
* **Images** - up to 2 per message, JPEG/PNG/GIF, 1MB max each. Attaching an
  image turns the message into an MMS
* A **live counter** showing character count, encoding, segment count, and the
  credit cost of the message
* A phone-frame **preview** showing the message exactly as recipients will see
  it, including the brand prefix, footer, and shortened links

### Segments And Encoding

SMS messages are billed in segments, and the segment size depends on the
characters you use:

| Encoding                           | Single message | Per segment when concatenated |
| ---------------------------------- | -------------- | ----------------------------- |
| GSM-7 (standard characters)        | 160 characters | 153 characters                |
| Unicode (emoji, non-Latin scripts) | 70 characters  | 67 characters                 |

A single emoji switches the whole message to Unicode encoding, so a 150
character message with one emoji costs 3 segments instead of 1. The composer's
counter shows the encoding and segment count live so there are no surprises.

Sequenzy automatically normalizes typographic characters (smart quotes,
dashes, ellipses) to their standard equivalents so pasted text doesn't
accidentally trigger Unicode pricing.

**MMS** (any message with an image) costs a flat **3 credits** regardless of
text length.

## International Destinations

Sending is not limited to the US and Canada: the UK, Ireland, most of Western
and Northern Europe, Poland, Czechia, Ukraine, Australia, and New Zealand are
supported out of the box. A few things to know:

* **Credits are cost-weighted by country.** A US or Canadian SMS segment is
  always 1 credit; international segments consume a per-country multiplier
  that reflects what carriers in that country charge (for example a UK
  segment costs several credits, and Ukraine more still).
* **`Settings -> SMS` includes a calculator.** Pick a destination country and
  a monthly budget to see how many messages it buys, the effective per-SMS
  rate, and the credit multiplier. A "View all country rates" table lists
  every supported destination.
* **International marketing is one-way.** Outside the US and Canada, messages
  are delivered from a sender that can't receive replies, so keyword STOP is
  unavailable; opt-outs run through unsubscribe links instead.
* **MMS is US/Canada only.** Steps with images are skipped for international
  recipients with an `mms_not_supported` reason.
* **Unsupported countries are blocked, never silently billed.** If a
  subscriber's phone country has no published rate, the step is skipped with
  an `unsupported_country` reason and the subscriber continues the sequence.
* Rates are estimates and international carrier costs can change; some routes
  may require sender approval before going live.

The subscriber profile shows each contact's phone country, the credit
multiplier that applies to them, and whether they can currently receive SMS
(with the exact reason when they can't).

## Credits And Billing

SMS is prepaid:

* The add-on costs **\$16/month and includes 1,000 credits** each month, and
  the per-credit price scales down gradually with larger monthly bundles
* Extra credit packs are available at **\$0.012 per credit** (1k, 5k, and 20k
  packs)
* **1 credit = 1 US/CA SMS segment**; US/CA MMS = 3 credits; international
  segments use the per-country multiplier shown in the rate table
* When your balance runs low, you receive an email alert so you can top up
  before sends start skipping
* If a message can't be sent because your balance is empty, the step is
  skipped with a `no_credits` reason and the subscriber continues the
  sequence. Sending resumes once you top up

Your balance and a transaction ledger are visible in `Settings -> SMS`.

## One-Off Sends

You can text a single contact directly from their subscriber page: when the
contact is subscribed to SMS marketing, a **Send SMS** button appears next to
**Send email**. It opens the same composer used in sequences, shows the
estimated credit cost for the contact's destination country, and queues the
message immediately. One-off sends follow all the [sending
rules](#sending-rules) above, including quiet hours - a message composed
outside the delivery window is deferred until it opens.

## Test Sends

You can send a test message to any phone number from the composer or the SMS
settings tab. Test sends:

* Are limited to **5 per hour**
* Are **exempt from quiet hours** so you can test any time
* **Charge credits** like a real send
* Are **excluded from step stats**

Your number must be verified before test sends work.

## Short Links And Click Tracking

Links in your messages are automatically shortened to
`https://api.sequenzy.com/s/...` (about 30 characters). When a recipient taps
a link, the click is recorded and feeds into the same
[revenue attribution](/concepts/metrics) as email clicks, so SMS-driven
purchases show up in your reporting.

## Replies

When a subscriber texts your number:

* **STOP** (and variants) - handled automatically: the carrier-grade
  auto-responder confirms the opt-out, and Sequenzy unsubscribes every
  subscriber with that phone number
* **HELP** - answered automatically with your help message
* **Anything else** - forwarded to your account email as a notification, so
  you never miss a reply

There is no two-way SMS inbox yet - replies arrive as email notifications.

## Step Stats

Each Send SMS step shows its own stats in the sequence builder: sent,
delivered, clicked, opted out, and credits spent. Test sends are excluded.

## AI Assistant

The sequence builder's AI assistant can add and edit SMS steps natively. Ask
it things like "add a shipping confirmation text after the order email" and it
proposes an `action_sms` step with drafted copy. SMS additions always require
your explicit approval before they are applied, because they text real
subscribers and spend credits.

## API, CLI, And MCP

SMS is a first-class citizen on every agent surface:

* **API** - create sequences with SMS steps (`type: "sms"` with `text` in
  [Create Sequence](/api-reference/sequences/create) steps, branch paths, and
  `insertSteps`), edit existing SMS steps with `smsSteps` in
  [Update Sequence](/api-reference/sequences/update), draft copy with
  [Generate SMS](/api-reference/generate/sms), check readiness with
  [Get SMS Settings](/api-reference/sms/settings), and verify end to end with
  [Send Test SMS](/api-reference/sms/test)
* **CLI** - `sequenzy sms settings` shows add-on status, credits, and numbers;
  `sequenzy sms send-test` sends a real test message;
  `sequenzy generate sms "<prompt>"` drafts message variants; SMS steps work in
  `sequenzy sequences create --steps-*`, `update --insert-steps-*`, and
  `update --sms-steps-*`
* **MCP** - the `generate_sms`, `get_sms_settings`, and `send_test_sms` tools
  plus SMS steps in `create_sequence`, `insert_sequence_step`, and
  `update_sequence.smsSteps` let AI agents build and maintain SMS journeys end
  to end
* **Outbound webhooks** - subscribe to `sms.sent`, `sms.delivered`,
  `sms.failed`, and `sms.opted_out` events (included in the default event set
  for new webhooks) to track SMS delivery from your own systems; see
  [Outbound Webhooks](/integrations/outbound-webhooks)

Generated and API-provided messages should never include opt-out text or a
brand prefix - Sequenzy adds the brand prefix to every message and the
compliance footer to the first message automatically.

## Related

* [Subscribers](/concepts/subscribers)
* [Sequences](/concepts/sequences)
* [Create subscriber API](/api-reference/subscribers/create) - set `phone` and
  `smsConsent` programmatically
* [Generate SMS API](/api-reference/generate/sms)
* [SMS settings API](/api-reference/sms/settings)
