On this page
What an Android SMS gateway is, and what this one is not
An SMS gateway is anything that sits between the mobile network and your software. Most of them exist to send messages in bulk. BusySMS does the other half: it receives. A phone running the BusySMS app becomes a gateway device on your account, and the one-time codes that reach its SIM become available to your code as they arrive.
It does not send SMS. There is no outbound or bulk messaging API and no pool of numbers to rent. BusySMS supplies no phone numbers at all: you use SIMs you own and have verified, which is exactly why the codes for accounts registered to those numbers reach you and nobody else.
- It syncs the texts on numbers you have verified to your dashboard: every text, or only verification and one-time-code messages. You choose at setup and can change it per SIM anytime; synced texts are visible only to you.
- Each SIM is its own gateway number: a dual-SIM phone with both numbers verified gives you two.
- Codes are readable from the dashboard, the REST API, MCP for AI agents, and the Chrome extension, which types them into the website for you.
- You can share one number's codes with up to five other BusySMS users, so a team can sign in to one service with one phone.
What you need
- An Android phone running Android 8.0 or later, with the SIM whose codes you want. Single- and dual-SIM phones both work, and root is not needed.
- A real phone. Emulators are not supported as gateways: the point is a real SIM on a real mobile network.
- The BusySMS app from Google Play (package
net.busysms.app). - A BusySMS account. You sign in with a one-time code sent to your email; there is no password to create.
Set up the gateway in five steps
- 1
Install the app
Install BusySMS from Google Play on the phone that holds the SIM. Google Play is the only install path, so updates arrive the usual way.
- 2
Sign in with your email address
Enter your email address and type the code we send you. Once your phone number is on the account, it can sign you in too. The same account works on the website, in MCP clients and in the Chrome extension.
- 3
Enroll the phone and verify the SIM
Pick the SIM. BusySMS texts a code to that number and the app captures it, which proves the SIM really holds the number. Until a number is verified, nothing it receives is stored, readable or billed.
- 4
Allow SMS access and turn the gateway on
Allow SMS access when the app asks. Notification access is recommended too, because some phone makers' Messages apps deliver codes as notifications. Turn the gateway on: Android shows a persistent notification for as long as capture runs, and you can stop it from there at any time.
- 5
Read your first code
Open Received SMS in the dashboard, or create an API key under REST API and call
GET /api/v1/codes. Any code that reaches the phone from now on shows up in both.
Read a code over the REST API
Every request carries your API key, which starts with bsk_live_, in the Authorization: Bearer header. The key belongs to your account, so it only ever sees your own phones, plus numbers someone has shared with you.
export BUSYSMS_API_KEY=bsk_live_xxxxxxxx
# Wait up to 60 s for the next code on any of your numbers
curl -s -H "Authorization: Bearer $BUSYSMS_API_KEY" \
"https://busysms.net/api/v1/codes?timeoutMs=60000"// Node 18+ (built-in fetch)
const res = await fetch("https://busysms.net/api/v1/codes?timeoutMs=60000", {
headers: { Authorization: `Bearer ${process.env.BUSYSMS_API_KEY}` },
});
if (!res.ok) throw new Error(`BusySMS ${res.status}: ${await res.text()}`);
const { code, message } = await res.json();
console.log(code ?? "No new code within 60 s", message?.sender);import os
import requests
r = requests.get(
"https://busysms.net/api/v1/codes",
params={"timeoutMs": 60000},
headers={"Authorization": f"Bearer {os.environ['BUSYSMS_API_KEY']}"},
timeout=75, # longer than the long-poll itself
)
r.raise_for_status()
print(r.json()["code"] or "No new code within 60 s")With timeoutMs above zero the call long-polls for up to 90 seconds and only returns a code that arrives after the request started, never an older one, because submitting a spent code wastes a login attempt. Endpoints, filters and error codes are in the SMS gateway API guide.
Four ways to read the codes
Dashboard
Received SMS lists each code with the detected service, the sender and the time. Nothing to install.
REST API
For scripts, test suites and back ends: one GET request waits for the next code.
MCP for AI agents
Connect Claude, Codex or another MCP client to busysms.net/mcp and the agent calls wait_for_code itself.
Chrome extension
BusySMS OTP Autofill finds the code field on a website, fills it (split digit boxes too) and presses Enter.
Limits worth knowing before you start
- On a SIM set to codes only, just the messages that look like a verification code are captured; its other texts stay on the phone. Nothing is captured while the gateway is off.
- If a code lands while the gateway is off, start it again: BusySMS picks up verification texts from the last 15 minutes.
- Battery savers can stop background apps. If codes stop arriving, exclude BusySMS from battery optimisation and leave its notification in place.
- Captured messages are deleted after up to 7 days. Keep anything you need for longer yourself.
- Reading codes needs an active trial or subscription. If it lapses, the phone keeps capturing, but API and MCP reads return
402 payment_requireduntil billing is fixed. - Switching the gateway off does not stop billing a verified number. Remove the number in the dashboard to stop paying for it.
Pricing
$5 per verified phone number per month, with one free week (a 7-day trial) on every account. One subscription covers the whole account and is billed by card through Stripe on the web dashboard: add a number and the bill goes up by $5, remove one and it goes down. The Android app shows your plan but does not sell it.
FAQ
Frequently asked questions
Is there a free Android SMS gateway app?
The BusySMS app is free to install, and every account gets a 7-day free trial with full access. After the trial, reading codes costs $5 per verified number per month. The price is per number, not per message or per request.
Can I download an APK, or is BusySMS open source?
Install it from Google Play: the direct APK download was retired, and Play is the only install path. BusySMS is a hosted service rather than an open-source project; your API keys, MCP access and sharing live on your BusySMS account.
Can BusySMS send SMS or bulk messages?
No. It is a receive-side gateway: it captures verification codes that arrive on your own numbers. It has no outbound, bulk or marketing SMS API.
Does it work with dual-SIM phones?
Yes. Each SIM is a separate gateway number and is verified on its own. If both numbers are verified, they count as two numbers for billing.
Will it read my personal messages?
Only if you choose to. At setup you choose: sync every text, or verification codes only, and you can change it per SIM anytime. Either way it runs only while the gateway is on, and synced texts are visible only to you and never shared.
Can I use an iPhone instead?
Yes. An iPhone forwards codes through a Shortcuts automation that only sends texts that look like a code. See forwarding SMS codes from an iPhone.
Blog
More from the blog
All articlesKeep reading
Related guides
All guidesSMS gateway API
The receive-side API reference: authentication, endpoints, the response shape, errors, and curl, Node.js and Python code.
Read the guideAutomate OTP in tests
Automate SMS two-factor codes in Playwright, Selenium, Cypress and plain scripts by waiting for the code over the API.
Read the guideForward SMS codes from iPhone
Forward verification codes from an iPhone to your computer, Chrome and API with one Shortcuts automation.
Read the guideTry it on a number you own
Install the app, verify your number and read your first code today. Every account starts with a 7-day free trial; after that it is $5 per verified number per month, and you can cancel any time.
