SecureSMS API
Buy virtual numbers, receive SMS codes and manage activations programmatically. Plain HTTP — every request is a single GET with your key. Responses are text or JSON.
https://api.securesms.io/stubs/handler_api.phpAuthentication
Every request takes your private api_key as a query parameter. Keep it server-side — anyone with this key can spend your balance.
Sign in to view your private API key.
Your private key is hidden. Enter your account password to reveal it.
Regenerating immediately invalidates the old key. Never expose it in frontend code.
curl "https://api.securesms.io/stubs/handler_api.php?api_key=YOUR_API_KEY&action=getBalance"
Get balance GET
Returns your account balance in USD.
curl "…/handler_api.php?api_key=YOUR_API_KEY&action=getBalance"ACCESS_BALANCE:2.356Buy a number GET
Reserves a number for a service in a country. getNumberV2 returns JSON with full activation info.
| Param | Description | |
|---|---|---|
| api_key | required | Your API key |
| service | required | Service code, e.g. tg (see Services) |
| country | required | Country id, e.g. 22 (see Countries) |
| maxPrice | optional | Max price you'll pay |
| providerIds | optional | Comma-separated provider ids to buy from |
curl "…?api_key=YOUR_API_KEY&action=getNumberV2&service=tg&country=22&maxPrice=0.5"{
"activationId": "123456",
"phoneNumber": "919876543210",
"activationCost": 0.28,
"countryCode": "22",
"canGetAnotherSms": true,
"activationTime": "2026-06-12 21:14:05",
"activationOperator": "any"
}Get SMS code GET
Poll the activation until the code arrives. Or set a webhook to receive it instantly.
curl "…?api_key=YOUR_API_KEY&action=getStatus&id=123456"STATUS_WAIT_CODE # waiting for SMS
STATUS_WAIT_RETRY:12345 # waiting for the next SMS
STATUS_OK:482910 # code received
STATUS_CANCEL # activation canceledSet status GET
Drive the activation lifecycle.
| status | Meaning |
|---|---|
| 1 | SMS sent — number is ready |
| 3 | Request another code (free) |
| 6 | Confirm code & complete activation |
| 8 | Cancel activation & refund |
curl "…?api_key=YOUR_API_KEY&action=setStatus&status=8&id=123456"
# → ACCESS_CANCEL (only after 2 min from purchase)Prices GET
getPrices gives cost + count. getPricesV3 breaks it down by provider.
curl "…?api_key=YOUR_API_KEY&action=getPricesV3&service=tg&country=22"
{
"22": { "tg": {
"2266": { "price": 0.28, "count": 1, "provider_id": 2266 },
"2260": { "price": 1.51, "count": 168, "provider_id": 2260 }
} }
}Services GET
Full list of services and their codes (1,024+).
curl "…?api_key=YOUR_API_KEY&action=getServicesList"
{ "status": "success", "services": [
{ "code": "tg", "name": "Telegram" },
{ "code": "wa", "name": "WhatsApp" },
{ "code": "go", "name": "Google, Gmail, Youtube" }
] }Countries GET
Country ids with localized names.
curl "…?api_key=YOUR_API_KEY&action=getCountries"
{ "22": { "id": 22, "eng": "India", "rus": "Индия", "chn": "印度" } }Top countries GET
Top-10 countries for a service with the best Gold partners — sorted by sales.
curl "…?api_key=YOUR_API_KEY&action=getTopCountriesByService&service=tg"
{ "colombia": {
"3243": { "price": 0.106, "count": 1206 },
"3406": { "price": 2.211, "count": 21670 }
} }Deposit wallet GET
Static crypto address for top-ups (USDT/TRX on Tron).
curl "…/api/payment/getActualWalletAddress?api_key=YOUR_API_KEY&coin=usdt&network=tron"
{ "wallet_address": "TWXE3jHmPvHYVXUbEyn5aaaAcvp9g4X3ys" }Webhook POST
Set a webhook URL in your profile and we'll POST each incoming SMS — no polling. Whitelist our IP 167.235.198.205 and always return HTTP 200.
{
"activationId": 123456,
"service": "tg",
"text": "Your code is 482910",
"code": "482910",
"country": 22,
"receivedAt": "2026-06-12 21:14:08"
}Errors
| Code | Meaning |
|---|---|
| BAD_KEY | Invalid API key |
| BAD_ACTION | Unknown action |
| WRONG_SERVICE | Unknown service code |
| NO_NUMBERS | No numbers available for that service/country |
| NO_BALANCE | Top up your balance |
| NO_ACTIVATION | Unknown activation id |
| EARLY_CANCEL_DENIED | Cancel is allowed only 2 minutes after purchase |