Sign in

API documentation

Buy SMS activations from your own software. Two formats are available: a simple JSON REST API and an API compatible with SMS-Activate — programs that support SMS-Activate work after you replace the URL and the key.

The API key is created in your profile — available after your first top-up. Prices and the balance are in rubles. Rate limit: 20 requests per second per key.

Price and country selection

  • Each country has several price levels: as a rule, the more expensive, the more reliable.
  • Without max_price (maxPrice) — the cheapest level is bought. With it — the most expensive (most reliable) level not above it.
  • Without a country — Auto mode: the most reliable activation in the price range across all countries.
  • If no SMS arrives, the money returns to the balance automatically (on expiry, cancel or replacement).

REST API

Base URL: https://shifrsms.store/api/v1. Key: Authorization: Bearer <key> (or the X-API-Key header, or ?api_key=).

GET/balanceBalance GET/servicesServices and their codes GET/services/{code}/pricesAuto price levels and per-country levels POST/ordersBuy: {"service": "tg", "country": "6", "max_price": 30} — country and max_price are optional GET/orders?active=1Your orders (active only with active=1) GET/orders/{id}Order status and received SMS POST/orders/{id}/cancelCancel (money returns to the balance) POST/orders/{id}/replaceAnother number for no more than the paid price POST/orders/{id}/anotherRequest another SMS POST/orders/{id}/finishFinish the activation
curl -X POST https://shifrsms.store/api/v1/orders \
  -H "Authorization: Bearer YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"service": "tg", "max_price": 40}'

{"ok": true, "order": {"id": 1842, "status": "waiting", "phone": "6281244170935", "price": "35.00",
  "currency": "RUB", "service": {"code": "tg", "name": "Telegram"},
  "country": {"code": "6", "name": "Indonesia", "iso": "ID"}, "sms": [],
  "expires_at": "2026-10-20T12:20:00Z", "cancel_available_at": "2026-10-20T12:02:00Z"}}

Order statuses: waiting, received, completed, cancelled, replaced, expired. Errors: {"ok": false, "error": "NO_BALANCE", "message": "..."} — BAD_KEY, BAD_SERVICE, BAD_COUNTRY, NO_NUMBERS, NO_BALANCE, WRONG_MAX_PRICE, TOO_MANY_ACTIVE, RATE_LIMIT.

SMS-Activate compatible API

URL: https://shifrsms.store/stubs/handler_api.php?api_key=KEY&action=... — in your program, replace the SMS-Activate URL with ours and enter our key. Service and country codes are the same as SMS-Activate’s (where a service or country has no such code, ours is used: s123, c45 — see getServicesList and getCountries).

actionParametersResponse
getBalance—ACCESS_BALANCE:123.45
getNumberservice, country*, maxPrice*ACCESS_NUMBER:ID:PHONE, NO_NUMBERS, NO_BALANCE, BAD_SERVICE, WRONG_MAX_PRICE:min
getNumberV2service, country*, maxPrice*JSON: activationId, phoneNumber, activationCost…
getStatusidSTATUS_WAIT_CODE, STATUS_OK:CODE, STATUS_CANCEL
setStatusid, status8 — cancel (ACCESS_CANCEL / EARLY_CANCEL_DENIED), 6 — finish (ACCESS_ACTIVATION), 3 — another SMS (ACCESS_RETRY_GET), 1 — ACCESS_READY
getActiveActivations—JSON
getPricesservice*, country*JSON {country: {service: {cost, count}}}
getCountries—JSON
getServicesList—JSON

* — optional. Without a country — Auto mode.

GET https://shifrsms.store/stubs/handler_api.php?api_key=KEY&action=getNumber&service=tg&country=6
ACCESS_NUMBER:1842:6281244170935

GET https://shifrsms.store/stubs/handler_api.php?api_key=KEY&action=getStatus&id=1842
STATUS_OK:51824