/secure/ and take HTTP
Basic authentication; /ping takes none.
The last two ask; they do not grant. A sender ID or template written through them is stored
awaiting your provider’s approval and is not usable until they approve it. They arrived in
gateway 0.9.7; against anything older they answer
404.The envelope
Every response is a JSON object with eitherdata or message — never both, and never a
bare value at the top level.
Success
Failure
res.ok, and the human-readable reason is always at message. There
is no error code field: the HTTP status is the code, and the string is for a person reading a log.
Authenticating
Basic, with your HTTP login as the username:username and password as body fields are not
ignored — they are rejected as unknown arguments, which is how a payload copied from a different
gateway usually announces itself.
Underscores and hyphens are the same field
Every_ is rewritten to - before the body is parsed. So dlr_url and
dlr-url are one field, and you may write whichever your language prefers.
Two consequences worth knowing before they bite:
Sending both spellings is a 400, not last-one-wins
Sending both spellings is a 400, not last-one-wins
{"dlr_url": "…", "dlr-url": "…"} is a duplicate of one field, and the API refuses rather than
silently picking one. This is deliberate: quietly choosing would mean a receipt going somewhere the
caller did not intend.custom_tlvs is the one exception
custom_tlvs is the one exception
It keeps its underscore.
custom-tlvs is an unknown argument and returns a 400, because the
normaliser exempts this one name — see Custom TLVs.This reference is the authoritative one
It describes what the gateway actually accepts, and its examples have been run against a live instance.Related
Errors
Every status this API returns, and what provokes it.
Quickstart
First message in under five minutes.