Drop-in Compatible

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

https://sms-activate.org/stubs/handler_api.php
https://smsbulk.net/stubs/handler_api.php

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.50

Action Reference

All 7 actions supported. Action names, parameters, and response formats are identical to SMS-Activate.

getBalance

Returns your current wallet balance in USD.

Request
GET /stubs/handler_api.php?api_key=KEY&action=getBalance
Response
ACCESS_BALANCE:42.50

getNumber

Reserves a virtual phone number. Required: service code (wa/tg/ig/etc.) and country (integer ID, ISO code, or slug).

Request
GET /stubs/handler_api.php?api_key=KEY&action=getNumber&service=wa&country=187
Response
ACCESS_NUMBER:12345678:79991234567

getStatus

Polls activation status. Returns STATUS_WAIT_CODE, STATUS_OK:<code>, or STATUS_CANCEL.

Request
GET /stubs/handler_api.php?api_key=KEY&action=getStatus&id=12345678
Response
STATUS_OK:123456

setStatus

Updates activation state. status=1 (SMS sent), 3 (request another), 6 (complete), 8 (cancel).

Request
GET /stubs/handler_api.php?api_key=KEY&action=setStatus&id=12345678&status=6
Response
ACCESS_ACTIVATION

getNumbersStatus

Returns stock count per service-country combination. JSON dict with keys like 'wa_187'.

Request
GET /stubs/handler_api.php?api_key=KEY&action=getNumbersStatus&country=187
Response
{"wa_187":1234,"tg_187":567}

getPrices

Returns prices and stock for service+country combinations. JSON nested by country ID.

Request
GET /stubs/handler_api.php?api_key=KEY&action=getPrices&service=wa&country=187
Response
{"187":{"wa":{"cost":0.5,"count":1234}}}

getCountries

Returns the canonical list of supported countries with SMS-Activate IDs and ISO codes.

Request
GET /stubs/handler_api.php?api_key=KEY&action=getCountries
Response
[{"id":187,"iso":"TR"},...]

setStatus Values

What each status code does and what response you get.

ValueActionResponse
1Report SMS sent (no-op)ACCESS_READY
3Request another SMSACCESS_RETRY_GET
6Mark activation completedACCESS_ACTIVATION
8Cancel activationACCESS_CANCEL

Country IDs

Canonical SMS-Activate IDs preserved. Top countries:

Turkey
ID: 187 · ISO: TR
Russia
ID: 0 · ISO: RU
USA
ID: 12 · ISO: US
United Kingdom
ID: 16 · ISO: GB
Germany
ID: 42 · ISO: DE
France
ID: 77 · ISO: FR
India
ID: 22 · ISO: IN
Brazil
ID: 72 · ISO: BR

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.

CodeMeaning
BAD_KEYInvalid or missing API key
BAD_ACTIONAction parameter missing or malformed
BAD_SERVICEService code not recognized
BAD_COUNTRYCountry parameter not recognized
BAD_STATUSInvalid status value for setStatus
WRONG_ACTIONAction name not supported
NO_BALANCEInsufficient wallet balance
NO_NUMBERSNo numbers available for this service+country
NO_ACTIVATIONActivation ID not found or not yours
RATE_LIMITEDDaily API quota exceeded — see Retry-After header
ERROR_SQLInternal server error
Bot library compatibility: Error codes are stable identifiers, never translated. Existing scripts that match against these strings work without modification.

Ready to migrate?

Get your API key and start with a single curl command. No SDK install, no code changes.