Skip to main content
1

Send it

sms.send takes one recipient in E.164 — a leading + and the country code — and either a template with variables or an inline body.topic marks a marketing send, which consent governs. Omit it for transactional, which only a suppression stops.
2

Your first one is probably blocked, and that is not an error

If the environment has no active carrier registration, or no number to send from, the message is stored and the reply carries blocked saying which. It is not a failure and it is not queued.So do not poll its status waiting for it to change — it cannot, until the registration clears. Read blocked on the reply and act on that instead. A send API that returned 200 and left you watching a status that will never move is the thing this is written to avoid.sms.registration.* is where a registration is filed and followed.
3

Billing counts segments, not messages

A text is billed per segment. A body that stays inside the GSM alphabet fits far more characters per segment than one that does not — a single emoji or curly quote switches the whole message to a different encoding and more than doubles the per-character cost.The reply says how many segments were counted, so the number is visible at send time rather than at the end of the month.
4

STOP is handled before you are called

A number that has replied STOP is recorded as suppressed rather than sent to — the audience policy is asked before the send, not after.STOP, HELP and START replies are answered by the carrier and by Lath, and the replies are configurable. You do not have to implement the keywords to be compliant, and you cannot accidentally text someone who opted out.
Last modified on September 13, 2026