send-sms-from-android
v1.2.1
Published
Twilio alternative for developers. Send SMS from an Android phone via CLI — order alerts, OTPs, 2FA codes, bulk reminders. No Twilio, no Vonage, no MessageBird. No per-SMS fees, no markups, no A2P 10DLC. Real phone number as sender. Free 5-day trial at sm
Maintainers
Readme
send-sms-from-android — send SMS from any Android phone via CLI
Send SMS from Android without writing API code. This CLI routes through your own Android phone — real SIM as sender — and skips Twilio, A2P 10DLC paperwork, and per-message fees. $29/month flat for unlimited messages.
npx send-sms-from-android send +14155550100 "Hi from my Android phone"What this does
- Send SMS from an Android phone to any number — from any script, cron, CI job, AI agent, or shell
- Generate, verify, and wait for OTP codes — perfect for 2FA, signup flows, and integration tests
- Read your inbox programmatically
- No CPaaS account — your Android SIM is the sender
Why send SMS from Android instead of Twilio
| | Twilio / Vonage / Plivo | Send-SMS-from-Android | |---|---|---| | Per-SMS cost (US) | $0.0075 – $0.04 | $0 (flat $29/mo) | | A2P 10DLC paperwork | Required for any bulk SMS | Not required — P2P from real SIM | | Sender ID | Short code or random LCN | Your real mobile number | | Recipient reply rate | Drops near 0% on cold lists | Stays normal — they recognise the number | | Setup time | Days (brand registration) | Minutes (pair Android + paste API key) | | Cancel any time | Hard contracts | $29/mo, cancel anytime |
Install
# Run without installing
npx send-sms-from-android send +14155550100 "Hi"
# Or install globally for the shorthand
npm install -g send-sms-from-android
send-sms-from-android send +14155550100 "Hi"
send-android-sms send +14155550100 "Hi" # short aliasNode 18 or newer.
Get started in 4 steps
- Sign up free at sms8.io (5-day trial, no card)
- Download the SMS8 Android app on any Android phone, scan the QR code from your dashboard to pair
- Copy your API key from app.sms8.io/api.php
- Send your first SMS:
export SMS8_API_KEY=sk_xxx send-sms-from-android send +14155550100 "It works!"
What you can do
# Send SMS
send-sms-from-android send <phone> "<message>"
# Generate / verify / wait for OTP codes
send-sms-from-android otp send <phone>
send-sms-from-android otp verify <phone> <code>
send-sms-from-android otp wait <sender-phone> [--timeout=120]
# Read your inbox
send-sms-from-android inbox [--limit=25] [--received] [--sent] [--phone=+14155550100]
# Inspect your paired phones
send-sms-from-android devices
# Account / balance
send-sms-from-android balance
send-sms-from-android setupPick which Android device or SIM sends each message
By default SMS8 uses your primary paired Android. To route through a specific phone or SIM slot (on dual-SIM phones), or to broadcast across multiple phones:
# Pin a specific paired Android
send-sms-from-android send +14155550100 "Hi" --device-id=10700
# Pin device + SIM 2 (dual-SIM phone)
send-sms-from-android send +14155550100 "Hi" --device-id=10700 --sim-slot=2
# Explicit list (each entry: deviceID or deviceID|simSlot)
send-sms-from-android send +14155550100 "Hi" --devices=10700,10701|0
# Broadcast across every paired phone
send-sms-from-android send +14155550100 "Status update" --option=1
# Broadcast across every SIM of every paired phone
send-sms-from-android send +14155550100 "Status update" --option=2
# Round-robin: pick one random sender from the resolved list
send-sms-from-android send +14155550100 "Hi" --random-deviceThe same routing flags work on otp send and otp wait. Run
send-sms-from-android devices to list your device IDs.
OTP send options
send-sms-from-android otp send +14155550100 --length=8 --expires-in=180
send-sms-from-android otp send +14155550100 --template="Your YourApp code: {code}"OTP verify
otp verify checks the most-recent unverified code for the phone. No device routing
needed (the code lives server-side):
send-sms-from-android otp verify +14155550100 482937OTP wait
otp wait watches incoming SMS on a paired Android and extracts the verification code
from the body. Pass the sender's phone or partial match:
CODE=$(send-sms-from-android otp wait +Google --contains="Google" --timeout=180)Common use cases
- OTP / 2FA login for SaaS and mobile apps
- WooCommerce / Shopify order notifications
- Server / deploy alerts to your real phone
- CI integration tests that need a real incoming SMS
- Bulk reminders for appointments, drip sequences, abandoned carts
- Two-way conversations — replies flow back via webhook
AI / MCP integration
Want Claude Code, Cursor, or Windsurf to send SMS from your AI assistant? Use sms8-mcp — the companion Model Context Protocol launcher. Same API key, zero extra setup.
{
"mcpServers": {
"sms8": {
"command": "npx",
"args": ["-y", "sms8-mcp"],
"env": { "SMS8_API_KEY": "sk_xxx" }
}
}
}Related packages
sms8-cli— same CLI under the SMS8 brandsms8-mcp— MCP server for Claude / Cursor / Windsurfphone-sms-gateway— phone-as-gateway brand of the CLIsms-otp-using-myphone— OTP-focused brand
All four CLI packages share one codebase — pick whichever name fits your project's wording best.
Links
- Android SMS gateway home: sms8.io/android-sms-gateway
- Android app: sms8.io/sms-gateway-apk-android
- Dashboard: app.sms8.io
- API docs: sms8.io/sms-api-documentation
- MCP server: mcp.sms8.io
- GitHub: github.com/1fancy/sms8-sms-gateway
License
MIT
