Opt-outs & STOP

STOP is not a feature you enable. It is handled before anything else, for every account, and it cannot be turned off.

What we honour

EffectKeywords
SuppressSTOP STOPALL UNSUBSCRIBE CANCEL END QUIT OPTOUT REVOKE
Re-subscribeSTART UNSTOP YES OPTIN SUBSCRIBE
HelpHELP INFO

Matched against the whole message once punctuation and case are normalised — never as a substring. Substring matching is the tempting shortcut and it costs a customer their list: "stop by the shop tomorrow" would unsubscribe the sender. Normalising rather than matching literally is also what makes STOP. work.

What happens

That number is suppressed for your account, immediately, before contact resolution or inbox threading — so a recipient who asks to stop is suppressed even if every later step fails.

Suppression applies to every class, including transactional and OTP. There is no "but this one is important" exception, because the law does not have one.

Importing someone again does not un-opt them out. A CSV with a suppressed number in it imports the contact and reports how many were already suppressed; it does not resurrect them. Only START from the person themselves does that.

Carriers intercept STOP too

Many carriers handle STOP at their end and never forward the message to us. When that happens you see a delivery failure with OPTED_OUT rather than an inbound message — and we write the suppression from that too. Handling the keyword is necessary but not sufficient, so both paths lead to the same place.

Managing the list yourself

GET    /v1/suppressions
POST   /v1/suppressions          { "phone_number": "+447400123456", "reason": "manual" }
DELETE /v1/suppressions/%2B447400123456

Note the encoded + in the path. Numbers are matched in E.164, so one stored in national format will not match.

Removals are soft: the record is kept. Deleting a suppression outright is how an account keeps messaging someone who asked it to stop, and under PECR that becomes our regulatory problem as much as yours.

Consent for marketing

Marketing needs recorded prior opt-in. When you import contacts you are asked where that consent came from, and the answer is stored against every contact in the file. If somebody complains, that line is the answer — and the import is the only moment anyone still knows it.

Quiet hours

Marketing is held outside 08:00–21:00 in the recipient's own timezone, falling back to the destination country's default when a contact has no timezone recorded. OTP and transactional messages are never held: a verification code the user asked for thirty seconds ago is not a marketing problem.

A held message comes back as QUIET_HOURS rather than a generic refusal, so you can tell "not now" from "not ever".