Messaging insights: SMS delivery, stop rate, and abuse alerts
Messaging insights (Reports → Messaging) is the analytics layer over every SMS your workspace sends and receives: volume, carrier errors, per-campaign stop rate, and abuse alerts. This page covers what we actually track, the honesty model behind our delivery statuses, and why the stop rate number matters more than most platforms let on.
What we track per message
Every SMS your workspace sends or receives writes one row: direction, segment count, a status, and, for a failed send, the carrier's raw error string. We also record a kind where the call site knows one: a verification code, a post-interaction rating request, a compliance reply to STOP or HELP, an inbound keyword, or a plain campaign send.
This per-message layer is the ground truth the whole report aggregates on top of. It exists from the point we started writing it forward; history from before that falls back to the daily per-campaign counters our abuse-prevention system already kept, which is why some early days in a wide date range show volume but not a full inbound or failed breakdown, explained next.
Why there is no "delivered" status
Every message shows one of three statuses: accepted, failed, or received. Accepted means the carrier took the message for onward delivery. Failed means the carrier rejected it, with its raw error string attached. Received is an inbound message from a recipient.
There is deliberately no deliveredstatus. Confirming a message actually reached a handset requires a carrier delivery receipt callback, and we don't have one wired up yet. Rather than infer or guess at delivery and label it with a status that implies more certainty than we have, we show carrier handoff truth: accepted or failed. A status we can't back with a real signal is worse than no status at all.
The same rule applies to carrier errors. When a send fails, we store the carrier's error string verbatim, not a re-bucketed or invented category. The errors table on the report groups by that raw code, so what you see is exactly what the carrier told us, with a count and the last time it happened.
Stop rate: the number carriers police and most platforms keep hidden
Every reply of STOP to one of your campaign's messages counts against that campaign's stop rate: STOP replies divided by sends over a trailing window. Carriers watch this number per campaign, not per account, and they throttle or filter a campaign that runs hot regardless of how clean the rest of your sending looks.
message.com's own abuse-prevention system uses a stop-rate governor, with a threshold around 2%, to flag a campaign before a carrier does. Messaging insights surfaces that same per-campaign stop rate directly in the report, color-coded against the threshold, next to sends, segments, blocked sends, and content flags for the range.
Most platforms, Twilio included, do not expose per-campaign stop rate in a dashboard at all. That leaves you finding out your campaign is hot only after a carrier already throttled it. We show the number so you can see a campaign trending toward the threshold and fix your content or targeting before it gets filtered.
Abuse alerts
When our abuse-prevention system flags something, it raises an alert, and the report's alerts feed shows the most recent 200 for the range, newest first. Alerts fall into a few kinds:
| Kind | What triggered it |
|---|---|
| Volume, daily cap | A campaign exceeded its allowed sends for the day. |
| Volume, monthly cap | A campaign exceeded its allowed sends for the month. |
| Stop rate | A campaign's trailing stop rate crossed the threshold. |
| Content flag | Message content matched a pattern our abuse checks reject. |
| Admin suspend | A campaign was suspended directly, outside the automated checks. |
Each alert carries a status (open, acked, or resolved) and, once acknowledged, who acked it and when. An alert that fired inside your selected range but has since been resolved still shows up, so the report stays an honest record of what happened rather than only what is still outstanding.
The report: range, volume, errors, export
Messaging insights lives at Reports → Messagingand, like every report on message.com, respects the range picker at the top: preset windows or a custom start and end date, in your workspace's timezone.
- Volume.Outbound sends, inbound replies, segments, and failed sends per day, charted and in a by-day table. A day with no per-message history renders inbound and failed as an explicit "no data" gap, never a bare zero that would falsely claim we know nothing happened.
- Spam exposure by campaign. The per-campaign stop-rate table described above, with a CSV export button so you can pull the same numbers into a spreadsheet or hand them to whoever owns campaign content.
- Carrier errors. Raw error codes, counts, and last-seen time, sorted by frequency.
- Verify channel mix. A smaller section showing one-time-code volume sent through Verify, kept separate from A2P campaign sends since the two are billed and governed differently.
Access is restricted to admins and supervisors. This is workspace-wide, billing-adjacent data, the same gate applied to the rest of the reports covering phone usage and account cost, so a plain agent role does not see it.
Next steps
- What is A2P 10DLC?: why registration exists and what a campaign has to have before it can send.
- A2P 10DLC campaign registration: the use case and content review that determines what a campaign is allowed to send in the first place.
- Verify API: one-time codes with their own usage dashboard, summarized in this report's Verify channel mix section.