SMS Gateway for Android is a free, open-source app that turns any Android phone into a real, programmable SMS gateway — send and receive texts over an API, no vendor, no monthly bill, no lock-in. 5,000+ stars, Apache-2.0, and it just works. Here's the breakdown.
Install one app and any Android 5.0+ device becomes an SMS gateway you call over HTTP. Send texts and receive incoming ones programmatically. Free, open-source, 5,000+ GitHub stars, no registration needed in local mode.
Local — the server runs on the phone, reachable on your network. Cloud — messages route through the maker's public server. Private — you self-host the server in your own infrastructure. Same API for all three.
It uses the phone's own SIM, so texts come from a real number people already recognize — no shared shortcode, no "this is an automated message from an unfamiliar sender."
2FA codes, alerts, reminders, transactional texts — the everyday sends that don't need enterprise volume. For actual bulk/marketing sends, pair it with a dedicated SIM plan.
The takeaway: where your messages travel is your choice. Local and Private keep the content in your hands; Cloud trades that for working through firewalls and changing IPs with zero setup.
"No registration required." In local mode you need no account at all — install, toggle on, send. Verified in the docs.
"End-to-end encryption." Message content and recipient numbers are encrypted before they hit the API and decrypted on the device. A real security feature, not a checkbox.
"Send & receive via API + webhooks." A real REST API plus webhooks that fire on incoming SMS/MMS. Multi-SIM and multi-device are supported too.
"Free and open-source." Apache-2.0, no paywall, no tier to unlock — you're running your own SMS on your own hardware, on your own terms.
Everyday sends, not enterprise scale. One phone, one SIM — perfect for 2FA, alerts, and reminders. For high-volume campaigns, run it alongside a dedicated SIM or SMS plan.
Grab the latest release (v1.66.2) from GitHub Releases and sideload it — enable Unknown sources first. Use the secure/release build, never the insecure one.
SEND_SMS is required. Add RECEIVE_SMS / READ_SMS only if you want inbound webhooks or history, and READ_PHONE_STATE to pick a SIM.
Open the app, toggle Local Server on, tap Offline to activate it. The app shows your local/public IP and the basic-auth username + password.
POST JSON to /message with the credentials from the previous step. Swap in the device IP, username, and password:
# send an SMS from your own number, via the phone curl -X POST -u USER:PASS \ -H "Content-Type: application/json" \ -d '{ "textMessage": { "text": "Hello from my phone" }, "phoneNumbers": ["+19162255887"] }' \ http://DEVICE_IP:8080/message
Prefer a CLI? The smsgate tool wraps the same API. For incoming texts, register a webhook URL and the app POSTs you every SMS/MMS it receives.
If the device dies, loses signal, or Android kills the app in the background, your gateway is down. Fine for side projects; risky for anything you can't afford to have silently stop.
Public Cloud mode relays your messages through the maker's server. Convenient, but if your data is sensitive or regulated, use Local or self-hosted Private mode instead.
You're sending from a consumer SIM. High volume or spammy content can get your number throttled or banned. Respect your carrier's ToS — this is not a bulk sender.
You're granting send/read-SMS to a sideloaded APK. Install only the official release build; the "insecure" build allows cleartext traffic and should never run in public.
We did the plain-English read; the project speaks for itself. It's Apache-2.0 on GitHub with full docs. Star it, read the API reference, and grab the APK from Releases.