API для SMS-активації
Два варіанти: ендпоінт, сумісний із протоколом sms-activate, щоб наявне ПЗ переходило заміною URL і ключа, та JSON REST API для нових інтеграцій. Обидва використовують той самий API-ключ із вашої панелі.
Отримайте API-ключ
Створіть акаунт, відкрийте панель і згенеруйте ключ у розділі «Доступ до API». Тримайте його в таємниці: будь-хто з ключем може витрачати ваш баланс.
РеєстраціяТиповий сценарій
- Викличте getNumber із сервісом і країною.
- Використайте номер у цільовому застосунку.
- Опитуйте getStatus кожні кілька секунд, доки не отримаєте STATUS_OK.
- Викличте setStatus з 6 для завершення або з 8 для скасування, якщо код не надійшов.
Ендпоінт, сумісний з sms-activate
Надсилайте GET- або POST-запити з параметрами api_key і action. Відповіді — простий текст, точно як у sms-activate.
https://smsrota.com/stubs/handler_api.php?api_key=KEY&action=getNumber&service=wa&country=187
Дії
| Дія | Параметри | Відповідь |
|---|---|---|
| getBalance | — | ACCESS_BALANCE:12.5000 |
| getPrices | service?, country? | {"187":{"wa":{"cost":0.4,"count":1563}}} |
| getNumber | service, country, maxPrice? | ACCESS_NUMBER:48151623:15550123456 |
| getStatus | id | STATUS_WAIT_CODE · STATUS_WAIT_RETRY:code · STATUS_OK:code · STATUS_CANCEL |
| setStatus | id, status | ACCESS_RETRY_GET · ACCESS_ACTIVATION · ACCESS_CANCEL |
| getRentNumber | service, country, rent_time (4/24/72/168/720) | {"status":"success","phone":{"id":31,"endDate":"…","number":"447700900001"}} |
| getRentStatus | id | {"status":"success","quantity":"1","values":{"0":{"phoneFrom":"WhatsApp","text":"…"}}} |
| setRentStatus | id, status (1 = finish, 2 = cancel) | {"status":"success"} |
| continueRentNumber | id, rent_time | {"status":"success","phone":{…}} |
Значення setStatus
- 3
- Запросити ще один код на той самий номер
- 6
- Завершити активацію
- 8
- Скасувати й повернути гроші (через дві хвилини після купівлі)
JSON REST API
Передавайте ключ у заголовку Authorization як "Bearer KEY". Суми — рядки в доларах США з чотирма знаками після коми.
GET https://smsrota.com/v1/balance
GET https://smsrota.com/v1/prices?service=wa
POST https://smsrota.com/v1/activations {"service":"wa","country":"187"}
GET https://smsrota.com/v1/activations/:id
POST https://smsrota.com/v1/activations/:id/retry
POST https://smsrota.com/v1/activations/:id/complete
POST https://smsrota.com/v1/activations/:id/cancel
GET https://smsrota.com/v1/rent/prices?service=wa&hours=24
POST https://smsrota.com/v1/rentals {"service":"full","country":"16","hours":24}
GET https://smsrota.com/v1/rentals/:id
POST https://smsrota.com/v1/rentals/:id/extend {"hours":24}
POST https://smsrota.com/v1/rentals/:id/finish
POST https://smsrota.com/v1/rentals/:id/cancel
POST https://smsrota.com/v1/rentals/:id/dispute {"reason":"no_sms"}
PUT https://smsrota.com/v1/webhook {"url":"https://example.com/sms-webhook"}
POST https://smsrota.com/v1/webhook/test
GET https://smsrota.com/v1/webhook/eventsВебхуки
Вкажіть URL у розділі «Доступ до API» в панелі. Для кожної події ми надсилаємо POST з тілом JSON. Відповідайте будь-яким статусом 2xx протягом 10 секунд; інакше повторимо через 1, 5, 30, 120, 360 і 720 хвилин.
- activation.sms_received
- Надійшов код для купленого номера.
- activation.cancelled
- Номер скасовано або його строк минув, і гроші повернулися на баланс.
- rental.sms_received
- На орендований номер надійшло SMS.
- rental.ended
- Оренда завершилася або її скасовано.
Приклад тіла
{
"id": "evt_1042",
"type": "activation.sms_received",
"createdAt": "2026-11-01T10:00:00.000Z",
"data": {
"activationId": 48151623,
"service": "wa",
"country": "187",
"phone": "15550123456",
"code": "123456"
}
}Перевірка підпису
Кожен запит має заголовок X-Webhook-Signature на зразок t=1730000000,v1=…, де v1 — шістнадцятковий HMAC-SHA256 від "t.body", обчислений з вашим секретом підпису. Відхиляйте запит, якщо підпис не збігається або t старший за 5 хвилин.
import { createHmac, timingSafeEqual } from "node:crypto";
// rawBody: the request body exactly as received, before JSON parsing.
function verify(rawBody, header, secret) {
const { t, v1 } = Object.fromEntries(header.split(",").map((p) => p.split("=")));
const expected = createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300;
return fresh && v1.length === expected.length && timingSafeEqual(Buffer.from(v1), Buffer.from(expected));
}Помилки
- BAD_KEY
- API-ключ неправильний або його замінено.
- NO_NUMBERS
- Зараз немає номерів для цього сервісу та країни.
- NO_BALANCE
- Недостатньо коштів на балансі для цього номера.
- EARLY_CANCEL_DENIED
- Скасування можливе через дві хвилини після купівлі.
- NO_ACTIVATION
- Активації з таким id не існує або вона не ваша.