IOSOR Learn

Inbound MO to suppressions: STOP on a DID protects reputation

Technical analysis of handling inbound MO opt-out keywords on E.164 DIDs, suppression list execution, webhook status payloads, and prepaid account safeguards.

Inbound MO to suppressions.

The Architecture of Automatic Opt-Out via Inbound MO

When an end-user replies with STOP, UNSUBSCRIBE, or QUIT to an inbound Mobile Originated (MO) message on a dedicated E.164 DID, your platform must process this signal immediately. Storing numbers on a suppression list at the API layer prevents subsequent outbound Mobile Terminated (MT) traffic from violating carrier compliance rules. If an outbound message is attempted toward a suppressed recipient, the gateway must drop or mark the payload as skipped before network transmission occurs. The architecture relies on strict signal integrity.

Mapping Inbound Keywords to Suppression Lists

Incoming MO payloads arrive via webhooks containing the sender E.164 number, destination DID, timestamp, and raw message body. The suppression subsystem parses standard compliance keywords including STOP, CANCEL, END, QUIT, and OPTOUT. Upon detecting a match, the ingestion engine normalizes the string by stripping whitespace and accents, converting characters to uppercase, and running a regular expression parser. If the body contains an isolated match or leading keyword, the engine triggers an atomic write operation to the persistent suppression store.

Webhooks, Status Codes, and Why Skipped Is Not Failed

When an outbound dispatch request targets a suppressed E.164 destination, the CPaaS engine blocks transmission before sending data to upstream routing paths. The platform returns a HTTP 200 OK response with a status payload indicating 'skipped_suppressed'. Returning a 4xx or 5xx HTTP status code for an opt-out block is an anti-pattern, as it implies an infrastructure error or client payload malformation, which triggers unnecessary retry logic in API client SDKs. By returning HTTP 200 OK alongside 'skipped_suppressed', the system maintains clean error logs.

Operational Rules and Prepaid Balance Controls

Managing inbound MO processing and suppression engines requires stable financial guardrails. CPaaS platforms operate on a strict prepaid structure featuring a USD 20 prepaid floor to maintain uninterrupted webhook processing and DID routing. If an account balance falls below this minimum threshold, inbound MO webhooks are buffered in a queue for up to 72 hours rather than dropped, preserving critical opt-out compliance signals. As monthly throughput scales, account managers evaluate inbound volume to ensure sufficient headroom.

Compliance Matrix: Inbound Opt-Out Handling

Keyword Action Taken Outbound Status Billing Impact
STOP Add to Suppression List Skipped (Blocked) No Outbound Fee
UNSTOP Remove from Suppression Allowed Standard Rate
HELP Trigger Info Webhook Allowed Standard Rate
CANCEL Add to Suppression List Skipped (Blocked) No Outbound Fee

Start with IOSOR

When STOP lands on the DID, write the originating MSISDN onto that tenant’s suppression list before the next MT. Prove a follow-up send is refused. Export the MO timestamp and the list row. A webhook 2xx with no list write is not this job; E.164 cleanup is a different gate.

Related: Caller ID vs messaging From: voice live does not mean SMS live E.164 normalize before DID bind: plus, zeros, and spaces Prepaid hold before first debit.

IOSOR takeaway

An inbound MO on a DID is a list write, not a log souvenir.

Do: suppress before the next MT. Don’t: mark STOP as noted while MT continues, or wait for a weekly dump.

Was this guide helpful?

Related guides