Legacy API Compatibility
If you're already using sms-activate.org or a similar service, switch to SMSBulk by changing only your base URL. All endpoints, action names, and response formats remain identical.
Switch in one line
Your existing scripts, bot libraries, and integrations work without code changes. Country IDs match the canonical mapping (TR=187, US=12, RU=0, etc.).
Authentication
Same as SMS-Activate: pass your API key as a query string parameter.
# Query string (sms-activate convention)
curl "https://smsbulk.net/stubs/handler_api.php?api_key=YOUR_KEY&action=getBalance"
# Response (plain text)
ACCESS_BALANCE:42.50Action Reference
All 7 actions supported. Action names, parameters, and response formats are identical to SMS-Activate.
getBalance
Returns your current wallet balance in USD.
GET /stubs/handler_api.php?api_key=KEY&action=getBalanceACCESS_BALANCE:42.50getNumber
Reserves a virtual phone number. Required: service code (wa/tg/ig/etc.) and country (integer ID, ISO code, or slug).
GET /stubs/handler_api.php?api_key=KEY&action=getNumber&service=wa&country=187ACCESS_NUMBER:12345678:79991234567getStatus
Polls activation status. Returns STATUS_WAIT_CODE, STATUS_OK:<code>, or STATUS_CANCEL.
GET /stubs/handler_api.php?api_key=KEY&action=getStatus&id=12345678STATUS_OK:123456setStatus
Updates activation state. status=1 (SMS sent), 3 (request another), 6 (complete), 8 (cancel).
GET /stubs/handler_api.php?api_key=KEY&action=setStatus&id=12345678&status=6ACCESS_ACTIVATIONgetNumbersStatus
Returns stock count per service-country combination. JSON dict with keys like 'wa_187'.
GET /stubs/handler_api.php?api_key=KEY&action=getNumbersStatus&country=187{"wa_187":1234,"tg_187":567}getPrices
Returns prices and stock for service+country combinations. JSON nested by country ID.
GET /stubs/handler_api.php?api_key=KEY&action=getPrices&service=wa&country=187{"187":{"wa":{"cost":0.5,"count":1234}}}getCountries
Returns the canonical list of supported countries with SMS-Activate IDs and ISO codes.
GET /stubs/handler_api.php?api_key=KEY&action=getCountries[{"id":187,"iso":"TR"},...]setStatus Values
What each status code does and what response you get.
| Value | Action | Response |
|---|---|---|
| 1 | Report SMS sent (no-op) | ACCESS_READY |
| 3 | Request another SMS | ACCESS_RETRY_GET |
| 6 | Mark activation completed | ACCESS_ACTIVATION |
| 8 | Cancel activation | ACCESS_CANCEL |
Country IDs
Canonical SMS-Activate IDs preserved. Top countries:
Triple format support: Country parameter accepts integer ID (187), ISO code (TR), or slug (turkey).
Error Codes
All errors return plain text codes (text/plain). Never internationalized — bot library compatibility.
| Code | Meaning |
|---|---|
| BAD_KEY | Invalid or missing API key |
| BAD_ACTION | Action parameter missing or malformed |
| BAD_SERVICE | Service code not recognized |
| BAD_COUNTRY | Country parameter not recognized |
| BAD_STATUS | Invalid status value for setStatus |
| WRONG_ACTION | Action name not supported |
| NO_BALANCE | Insufficient wallet balance |
| NO_NUMBERS | No numbers available for this service+country |
| NO_ACTIVATION | Activation ID not found or not yours |
| RATE_LIMITED | Daily API quota exceeded — see Retry-After header |
| ERROR_SQL | Internal server error |
Ready to migrate?
Get your API key and start with a single curl command. No SDK install, no code changes.
