SMS Campaigns

Bulk SMS to a segment — consent-gated, quiet-hours aware, paced per sender.

An SMS campaign sends a published SMS template to every reachable contact in a segment. Marketing SMS is held to the strict bar: only recipients with prior express consent on record receive it, sends respect the recipient-local quiet-hours window (a blast fired at midnight waits for the morning window — deferred, never dropped), and delivery is paced to your sender's carrier throughput. Sending a campaign needs a paid plan. New to the channel? Start with SMS vs email.

Who will actually get it

As soon as you pick a segment and a sender, the form checks every contact in the segment and tells you the outcome before the draft exists: how many will be reached, and how many will be skipped and why — outside the sender's reach (with the countries), without marketing consent, opted out, or without a phone number. "See who" lists them with a link to each contact. The send confirmation repeats the count, so the number on the button is the number that goes out.

Reach is decided per recipient from the phone number's country and the sender's reach (see SMS Senders). A US toll-free or 10DLC number reaches US recipients only, so a UK contact in the segment is skipped with that reason rather than attempted; the skip is never billed. Each skipped country comes with what would fix it and, when Unitpost can provide it, a link that opens the sender wizard on that country — "Request a United Kingdom sender →", "Request a Canadian local number →" — so the fix is one click away. A country that is not available yet says so plainly. Reach is not the only gate: a marketing campaign is also held to the countries Unitpost has a quiet-hours rule for (the US and Canada today), so a recipient a Sender ID reaches in a country without one is reported up front as unsupported_country rather than skipped after you press Send.

Skip reasons — one vocabulary

Every place that says a recipient was skipped uses the same seven words, so what the form warned about is what the campaign page, the message log, the API and your webhooks report: out_of_reach (no sender covers the recipient's country), unsupported_country (Unitpost has no compliance rule for the country yet), no_phone (the contact has no SMS number), opted_out (STOP, suppression list, or unreachable), no_marketing_consent (marketing without express consent), quiet_hours_deferred (held for the recipient's local window — delayed, not dropped) and sender_not_active (the sender lost approval). Each comes with a sentence saying what would fix it. The public API returns the code as error.code on GET /v1/sms/{id}; webhooks send it as reason on sms.suppressed.

Budget pauses, never surprises

If your messaging balance runs out mid-campaign, the campaign pauses — remaining recipients are untouched and you get an email saying why. The same happens if the sender number loses its approval before the send starts. Billing is per segment actually sent.

Following a campaign

Click a campaign to open its page. It shows the sender, template, segment and topic it was built from, then the carrier's numbers: recipients admitted, sent (accepted by the carrier), delivered (confirmed on the handset), failed, suppressed (no consent, STOP, blocklist, or outside the sender's reach), deferred (held for quiet hours), and segments billed. Below that, every recipient is listed with the carrier's status and the reason where one was reported — a failed render, a missing opt-in, a carrier rejection — and the campaign's own activity log. The page updates live while a campaign sends.

From the campaign page you can send a draft, duplicate a campaign into a new draft, cancel one that is scheduled, sending or paused, and delete drafts and finished campaigns. Every send, delivery, failure, opt-out and inbound reply on the channel also appears under SMS activity.

Search docs and guides

Search the docs and product guides.