Key Takeaways
- api how-to multi-country number formats: send E.164 in to[] — plus, country code, national number, no spaces.
- Local trunk prefixes (leading 0) and missing country codes are the top client bugs, not “the gateway.”
- An array of strings, not a comma-separated blob, unless docs say otherwise.
- Wrong numbers still spend operator SMS when the radio accepts them — or they reject after you paid retries.
- Priced by devices and SMS send volume. You use your own phone and operator SMS credit.
- Free 300 SMS lifetime is for proving formats, not blasting a dirty CSV.
API how-tos on multi-country number formats for an android sms gateway fail in the first dirty spreadsheet. The send body wants E.164. Live fields: Developer Center. Example: JSON API.
Priced by devices and SMS send volume. You use your own phone and operator SMS credit.
If your CRM stores “0803…” and “415-555-…” in the same column with no country, you do not have a phone list. You have a reject generator.
to[] is E.164
ITU-T E.164 is the international public numbering plan. ITU E.164. Plus, country code, subscriber number. No spaces, dashes, or trunk zeros in the wire format you POST.
Local shapes that fail
| What you stored | Problem | Wire format |
|---|---|---|
| 4155552671 | No country; could be many nations | +1… if you meant US NANP |
| 0803… | NG trunk 0 | +234803… |
| 0983… | IN trunk 0 | +91983… |
| (415) 555-2671 | Punctuation | Strip then add +1 if US |
| One string of commas | Not an array | to: ["+…","+…"] |
The plus is not decoration
Some stacks strip +. Follow OpenAPI. If docs require +, send +. Dual SIM and local “dial as 0” UX belongs in your app, not in the gateway payload.
Parse once at the edge
libphonenumber-class parsing with a default region at capture time. Reject ambiguous 10-digit. Do not wait until the worker to guess.
Canary per destination country
US NANP, IN, NG, PH all fail differently. USA · India. Isolate OTP so a bad bulk parse cannot occupy the auth radio.
Docs own the field list
Do not copy a stale send.php sample. Bearer JSON. PHP samplesare HTTPS, not a Complete SDK.
Checklist
- E.164 in tests, not only in README.
- Trunk zeros stripped with an explicit region.
tois an array.- Invalid numbers fail closed before radio.
- Canary per country you claim to support.
- Dirty CSV never hits the OTP device.
Next steps
Normalize at intake, then send a staff canary. Devices + volume; operator still bills the SIM.
Related product pages
Jump to the live product docs for this topic—not another long-form article.
- SMS API documentationLive endpoint reference
- device and SMS volume pricingPlans and allowances
- Android SMS gateway product guideDefinition, product, and how to buy
- download the Android gateway appGet the APK




