REST
JSON over HTTPS. One call, one message. Start here unless you have a reason not to.
SMPP
A persistent bind. Higher throughput, and what carriers themselves speak.
Three things that surprise people
Worth knowing before your first integration rather than during your first incident.A success response does not mean delivered
A success response does not mean delivered
The submit response is sent before routing runs. So
200 — or ESME_ROK — means accepted for
routing, and nothing more.A message can be accepted and then refused, dropped or fail to route, and the only way you learn is a
delivery receipt. If your integration treats acceptance as
delivery, it will be wrong in exactly the cases you care about.Your sender ID and your wording may both need approving
Your sender ID and your wording may both need approving
On an account with whitelisting enforced, an unapproved
from is refused, and so is a message body
that matches no approved template.This is normal for regulated destinations — Indian DLT most visibly. If your sends work in testing
and fail in production, this is the first thing to check.Underscores and hyphens are the same field — except once
Underscores and hyphens are the same field — except once
dlr_url and dlr-url are one field, and sending both is a 400 rather than last-one-wins.The single exception is custom_tlvs, which keeps its underscore. custom-tlvs is an unknown
argument.