Deliverability
Deliverability is the percentage of your sent messages that actually reach the recipient's handset. This section covers the factors that affect it and what you can do about them.
T-Mobile volume caps
T-Mobile enforces daily volume caps per campaign based on the volume tier you registered:
| Campaign volume | T-Mobile limit |
|---|---|
low | 2,000 SMS segments per day |
high | Up to 200,000 SMS segments per day (subject to TCR trust score) |
Messages that exceed the cap are queued or filtered, not delivered. If you need to send more than 2,000 segments per day to T-Mobile, register your campaign at high volume or request a volume increase after your low campaign is approved.
"SMS segments" are the carrier billing unit, not messages. A single message with 200 characters costs 2 segments (161–306 characters in GSM-7). See SMS Segments & Encoding.
Verizon delivery delays
Verizon delivers messages in batches, which means recipients on Verizon sometimes see messages several minutes after the carrier accepted them — even when Surge receives a delivered status from Verizon. This is a carrier-side behavior, not a Surge bug.
If you're sending time-sensitive messages (appointment reminders 30 minutes ahead, flash sale notifications), build in extra lead time for Verizon subscribers.
Surge's content policy layer
Surge runs a content-policy check on outbound messages before they reach the carrier. This catches links, patterns, and content that carriers commonly filter, before the message is sent and marked as failed.
If your message is blocked by the content policy, you'll see a message_filtered error in the message.failed webhook event.
Common reasons:
- Unregistered link shorteners. Third-party link shorteners (bit.ly, tinyurl.com, etc.) are frequently flagged by carrier spam filters. Use Surge's built-in link shortening or your own branded domain.
- Content not matching your campaign. If your campaign is registered for
customer_carebut your messages contain marketing language and promotional links, the content mismatch will be flagged. - Age-gated or lending content without the flag. If your messages contain age-gated content or direct lending references but you didn't include
age_gatedordirect_lendingin your campaign'sincludesarray, those messages will be filtered.
The includes flags
The includes array in your campaign registration tells carriers what content types your messages contain. Being accurate here directly affects deliverability:
| Flag | When required |
|---|---|
links | Your messages contain any URLs |
phone_numbers | Your messages contain phone numbers |
age_gated | Your messages contain age-restricted content (alcohol, cannabis, etc.) |
direct_lending | Your messages relate to lending or financial products (payday loans, mortgage offers, etc.) |
Missing a flag when the content is present is a deliverability problem, not just a registration problem — carriers can filter messages that don't match the registered content profile. See Canonical Schema Reference for the full list of valid includes values and their descriptions.
Carrier fees
Carriers charge per-message fees that vary by destination network. These fees are passed through in your Surge billing and visible in your usage reports. Fees differ by message type (SMS vs MMS), recipient carrier, and sometimes message content.
Monitoring deliverability
Watch the message.delivered and message.failed webhook events. A sustained spike in message.failed events with message_filtered as the reason is a signal to review your content against your campaign registration.
Blast-level delivery metrics (aggregate deliverability rate, opt-out rate per send) are available in the dashboard under Blasts.