Key Takeaways
- Failover on a SIM gateway means another radio takes the queue — not a cloud POP. Size device count for peak, including the spare.
- Detect on last-seen, queue age, and DLR failure rate. Do not wait for a user tweet.
- Keep OTP on a stable MSISDN when you can. Jumping senders looks like phishing.
- Dual SIM is operator diversity; two phones are failure-domain diversity.
- You bring phones and airtime. Plans meter devices plus send volume.
Android sms gateway failover is the difference between “we have two phones” and “jobs actually moved.” Brochures love the first sentence. Production is the second: detection, routing, and a human who is allowed to flip it at 03:00.
Multi-device product: dual SIM and multi-device. Dual-SIM nuance: dual SIM in-depth. You bring the hardware and operator credit. We meter devices and volume.
Device 3
Last-seen 11 min
Queue stuck
Device 8
Taking jobs
Failover that moves jobs
HTTP accept still happens on the control plane when a device is sick — until you stop assigning to it. Failover is: health signal → stop routing to the dead radio → remaining devices send. Live assignment fields belong in the Developer Center; this page is the operating model. API patterns: Android SMS Gateway API.
A spare phone in a drawer with a flat battery is inventory. A spare phone paired, charged, and in the routing set is failover.
Slot vs phone vs region
| Mode | Survives | Dies with | MSISDN |
|---|---|---|---|
| Second SIM, same phone | One operator outage | Battery, OEM, chassis | Usually changes |
| Second phone, same country | Hardware + OEM + operator (if SIMs differ) | Your whole site power, if both on one strip | Plan the sender story |
| Second phone, second country | Local outage | ILD cost surprises | Almost always different |
What you detect on
- Last-seen older than N minutes (your SLO, often 2–5 for OTP).
- Queue age / depth on that deviceId.
- DLR failed ratio vs a daytime baseline.
- Doze-shaped night gaps — fix power, don’t only fail over. Doze guide
Device health in the panel is the human view; your backend should subscribe to the same idea via status and webhooks, not screenshots.
Routing without surprising users
Pass deviceIds when you must pin or split. Omit for primary only if that primary is monitored. Random spread across unknown numbers trains users to distrust the sender. Pin OTP to a known MSISDN; use the spare as a cold standby with the same operator and, if possible, a number customers already saw — or tell the app UI that the code may arrive from a backup line.
OTP-specific rules
Idempotency keys on send. Invalidate codes when you resend on the spare. Do not blast the same six digits from two SIMs two seconds apart. Isolate OTP devices from bulk so a campaign cannot steal the only healthy radio.
Runbook and spare hardware
Write who can unpair, who can change routing, and where the spare charger lives. Incident: incident response for outage. Rotate hardware before it dies: rotate devices for volume.
Put the two phones on separate USB adapters. Shared power strips are a single failure dressed as redundancy.
How devices meter
The idle spare still counts as a device. Free: 1 device, 300 SMS lifetime. Developer: 1 device, 25,000 SMS/year. Starter 2, Professional 5, Business 15 — platform send volume uncapped on those three, carrier airtime still yours. Pause on Free/Developer when SMS allowance is exhausted. No silent overage.
Checklist
- Second phone paired, charged, in the routing set — not only in a box.
- Alerts on last-seen and queue age.
- OTP sender identity documented if MSISDN changes.
- Idempotency keys; canary failover on staff numbers quarterly.
Next steps
Unplug device 3 in staging and watch whether device 8 sends the next staff OTP within your SLO. Setup · downloads.
Related product pages
Jump to the live product docs for this topic—not another long-form article.
- multi-device and dual SIM routingCapacity and failover
- device and SMS volume pricingPlans and allowances
- Android SMS gateway product guideDefinition, product, and how to buy
- SMS API documentationLive endpoint reference





