GET STARTED

Turn any Android
into an SMS gateway

Route messages through phones you already own. No carrier fees, no third-party APIs, dead-simple REST API.

GET STARTED DOWNLOAD APK READ THE DOCS
SEND AN SMS — 3 LINES
# Authenticate with an API key
$ export API_KEY="your_key_here"

# Send a message
$ curl -X POST your-worker.workers.dev/api/sms/send \
  -H "Authorization: Bearer $API_KEY" \
  -d '{"to":"+14155552671","message":"Hello from SMS Flare!"}'

# Response
{
  "job_id": "a1b2c3d4e5f6a7b8",
  "status": "assigned",
  "assigned_device": "b2c3d4..."
}
$0
Per-message cost
<30s
Max delivery latency
100+
Concurrent devices
CF
Workers free tier

Three steps to your
own SMS infrastructure

No carrier contracts. No SLA negotiations. Deploy in minutes and start sending.

01
Deploy the backend
Run the setup script. It creates your Cloudflare D1 database, applies all migrations, generates a random JWT secret, and deploys the Worker — completely automated.
bash setup.sh
02
Pair Android devices
Install the SMS Flare app on any Android phone. Scan the QR code from your dashboard — it encodes both the pairing token and API URL so you don't type a thing.
Download APK
03
Send via API or dashboard
POST to the REST API using an API key or your session JWT. Jobs are assigned to available devices within seconds and dispatched over the device's SIM card.
POST /api/sms/send
Message delivery pipeline
Your App
REST API call
CF Worker
Job queue · D1
Android App
30s poll cycle
SIM Card
SMS dispatched
Recipient
Delivered

Everything you need,
nothing you don't

Built for developers who want control without the overhead of a managed SMS provider.

Zero carrier fees
Use your existing SIM plan. The only cost is the phone and its data plan — no per-message markup, no monthly minimums, no surprise bills.
Full infrastructure ownership
Cloudflare Workers + D1 SQLite. Your data never touches a third-party SMS provider's servers. GDPR-compliant by architecture.
Clean REST API
Authenticate with a user JWT or a long-lived API key. Works with any language or HTTP client. Full response schemas documented.
Real-time delivery tracking
Every job has a full status timeline: pending → assigned → sent → delivered. Check the dashboard or poll the API for live updates.
Multi-device pool
Register 100+ Android devices. Jobs are assigned to whichever device sent the most recent heartbeat. Add more devices at any time without downtime.
Batch sending
POST up to 50 messages in one request. All validated before any job is created — a single invalid number rejects the whole batch cleanly.

One endpoint
to send anything

Three auth modes — user JWT, long-lived API key, or device token for Android. One consistent response shape. No SDK required.

  • ✓
    POST /api/sms/sendsingle message
  • ✓
    POST /api/sms/send/batchup to 50 at once
  • ✓
    GET /api/jobspaginated history with status filter
  • ✓
    GET /api/statsdelivery rate, device counts
  • ✓
    DELETE /api/jobs/:idcancel queued jobs
  • ✓
    GET /api/devices/:iddevice detail + heartbeat history
batch-send.js
// Send to multiple recipients in one call const res = await fetch(`${BASE}/api/sms/send/batch`, { method: 'POST', headers: { 'Authorization': `Bearer ${API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ messages: [ { to: '+14155550001', message: 'Hi Alice' }, { to: '+14155550002', message: 'Hi Bob' }, ], }), }); const data = await res.json(); // { // results: [{ job_id, status, assigned_device }, ...], // count: 2 // }

One script.
Everything configured.

Clone the repo and run setup.sh. It handles Cloudflare auth, database creation, migrations, JWT secrets, and dashboard deployment — fully interactive, one pass.

SETUP.SH
1# Clone the repository
2git clone https://github.com/RAN-GAN/smsFlare
3cd smsflare
4 
5# Run the interactive setup (local or Cloudflare deploy)
6bash setup.sh
DOWNLOAD APK READ THE DOCS