Skip to main content
You can reach FireFlo two ways, and which you pick is mostly about volume and what your stack already speaks.

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.
Everything downstream of acceptance is identical. Same routing, same rating, same approvals, same receipts. The choice affects how you hand a message over, not what happens to it.

Three things that surprise people

Worth knowing before your first integration rather than during your first incident.
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.
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.
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.

Where to go next