API для приёма SMS на виртуальные номера
С помощью API для приёма SMS от Turonay ваше приложение, бот или панель смогут получать виртуальный номер и читать пришедший SMS-код. API работает по протоколу handler_api: если у вас уже есть интеграция под этот протокол, чаще всего достаточно сменить базовый адрес и API-ключ. Платить нужно не за выдачу номера, а за полученный код.
Страницы API
Быстрый старт за 3 шага
Сначала зарегистрируйтесь бесплатно, пополните баланс и получите API-ключ в разделе API своего профиля. В примерах вместо YOUR_KEY подставьте свой ключ. Запросы могут быть GET или POST: при POST все параметры, включая api_key, можно передавать полями формы (application/x-www-form-urlencoded) в теле запроса, чтобы ключ не попадал в URL и журналы сервера. Два базовых адреса равнозначны: https://turonay.com/stubs/handler_api.php и https://turonay.com/api/.
1. Проверьте баланс
getBalance возвращает баланс в виде ACCESS_BALANCE:сумма; так же быстро проверяется, что ключ работает. Сумма указана в TRY и показывает доступный остаток за вычетом средств, зарезервированных под открытые активации.
curl "https://turonay.com/stubs/handler_api.php?api_key=YOUR_KEY&action=getBalance"
ACCESS_BALANCE:125.40002. Получите номер
service — код сервиса (wa для WhatsApp), country — идентификатор страны. Успешный запрос вернёт ACCESS_NUMBER:id_активации:телефон. Цена в этот момент резервируется на балансе, но ещё не списывается. Если передать в maxPrice максимальную приемлемую цену, то при её превышении номер не выдаётся, а в ответе приходит WRONG_MAX_PRICE:цена.
curl "https://turonay.com/stubs/handler_api.php?api_key=YOUR_KEY&action=getNumber&service=wa&country=62&maxPrice=20"
ACCESS_NUMBER:184213:9053012345673. Получите код
Пока кода нет, getStatus возвращает STATUS_WAIT_CODE; когда код придёт — STATUS_OK:код. Именно в этот момент оплата становится окончательной. Вместо опроса можно использовать подписанные вебхуки.
curl "https://turonay.com/stubs/handler_api.php?api_key=YOUR_KEY&action=getStatus&id=184213"
STATUS_WAIT_CODE
curl "https://turonay.com/stubs/handler_api.php?api_key=YOUR_KEY&action=getStatus&id=184213"
STATUS_OK:123456Нужен JSON? getNumberV2
getNumberV2 принимает те же параметры, что и getNumber, и при успехе возвращает JSON: id активации, номер телефона, цену, валюту (949 = TRY), страну, время окончания и оператора. Поля activationTime и activationEndTime заданы по времени сервера (Europe/Istanbul, UTC+3) в формате Y-m-d H:i:s без указания часового пояса. При ошибке приходят классические текстовые коды (NO_NUMBERS, NO_BALANCE, WRONG_MAX_PRICE:цена).
{
"activationId": "184213",
"phoneNumber": "905301234567",
"activationCost": "12.50",
"currency": 949,
"countryCode": "62",
"canGetAnotherSms": true,
"activationTime": "2026-10-10 12:00:00",
"activationEndTime": "2026-10-10 12:20:00",
"activationOperator": "any"
}Почему API виртуальных номеров Turonay
Цель — короткая интеграция и предсказуемые расходы.
Совместимый протокол
Распространённый формат handler_api: те же названия action, те же текстовые ответы и дополнительно JSON-методы. Готовые клиенты и боты обычно заработают после смены базового адреса; коды сервисов и идентификаторы стран сверьте через getPrices.
Оплата за полученный код
При выдаче номера сумма только резервируется. Если код не пришёл, провайдер отменил активацию или время истекло, зарезервированная сумма возвращается на баланс.
Подписанные вебхуки
Когда приходит код или активация отменяется, на ваш сервер отправляется HTTPS POST с подписью HMAC-SHA256. Неудачные доставки повторяются с нарастающими паузами.
Актуальные цены и остатки
getPrices отдаёт текущую цену и количество номеров по каждой паре «сервис — страна». Не нужно гадать: получаете список, видите цену и только потом покупаете.
Несколько валют
Цены в API указаны в TRY (код валюты 949 в getNumberV2). На сайте баланс и цены можно смотреть в TRY, USD или RUB.
Сайт и документация на трёх языках
Сайт и документация API доступны на турецком, английском и русском. Если возникнут вопросы при интеграции, напишите нам через систему обращений в поддержку.
Методы API
В каждом запросе передаются api_key и action. В таблице ниже собраны все action с типичными ответами; подробности — на странице «Справочник API».
| Action | Что делает | Ответ |
|---|---|---|
getBalance |
Возвращает доступный баланс (зарезервированные суммы уже вычтены). | ACCESS_BALANCE:125.4000 |
getPrices |
Возвращает в JSON текущую цену и количество номеров по сервисам и странам. Фильтр — service и country; цены учитывают скидку вашего уровня. |
{"62":{"wa":{"cost":12.50,"count":744716}}} |
getCountries |
Список стран, в которых можно получить номер (id и название). | {"62":{"id":62,"eng":"Turkey"}} |
getNumbersStatus |
Остатки номеров по сервисам в выбранной стране. | {"wa_0":"744716"} |
getOperators |
Список доступных операторов; сейчас доступно только any. |
{"status":"success","countryOperators":{"62":["any"]}} |
getNumber |
Выдаёт номер: service, country, необязательные operator и maxPrice. Цена резервируется. |
ACCESS_NUMBER:184213:905301234567 |
getNumberV2 |
JSON-вариант getNumber; дополнительно возвращает цену, валюту, время окончания и оператора. |
{"activationId":"184213","phoneNumber":"905301234567",…} |
getStatus |
Проверяет, пришёл ли код. Оплата фиксируется в момент прихода кода. | STATUS_WAIT_CODESTATUS_OK:123456STATUS_CANCEL |
getStatusV2 |
JSON-вариант getStatus: после прихода кода — объект sms, до этого — текстовый статус. |
{"sms":{"code":"123456",…}} |
getActiveActivations |
Открытые активации аккаунта: чтобы продолжить работу после перезапуска или построить собственную панель. | {"status":"success","activeActivations":[…]} |
setStatus |
1 готов (списание не меняется), 3 запросить ещё одно SMS (бесплатно), 6 завершить (только после кода), 8 отменить (возврат, если кода не было; после кода — EARLY_CANCEL_DENIED). |
ACCESS_READYACCESS_RETRY_GETACCESS_ACTIVATIONACCESS_CANCEL |
Оплата: резерв, списание, возврат
В Turonay за виртуальный номер платят в момент получения кода, а не выдачи номера, поэтому деньги не теряются на недоставленных активациях. Схема состоит из четырёх состояний:
| Момент | Что происходит | Ваш баланс |
|---|---|---|
Номер выдан (getNumber / getNumberV2) |
Цена откладывается на балансе, поэтому getBalance показывает меньшую доступную сумму. |
Зарезервировано |
| Пришёл SMS-код | Оплата фиксируется. Запрос дополнительного SMS на тот же номер (status=3) бесплатен. |
Списано |
| Отмена до прихода кода, отмена провайдером или истечение срока | Зарезервированная сумма освобождается, ничего не списывается. | Возвращено |
Попытка отмены после прихода кода (status=8) |
Возвращается EARLY_CANCEL_DENIED; услуга уже оказана, поэтому возврата нет. Завершите активацию через status=6. |
Без изменений |
Ограничение цены: maxPrice
Баланса должно хватать на цену номера, иначе вернётся NO_BALANCE. Чтобы защититься от неожиданного роста цены, передавайте maxPrice: если текущая цена выше, покупка не выполняется, а реальная цена приходит в ответе WRONG_MAX_PRICE:цена.
Вебхуки: уведомление о коде на ваш сервер
Вместо того чтобы каждую секунду вызывать getStatus, укажите HTTPS-адрес. Когда приходит код или активация отменяется, Turonay отправляет туда подписанный POST. Уведомление ставится в очередь, как только код записан, и обычно доставляется в течение 1–2 минут; опрос getStatus остаётся альтернативой и запасным вариантом. Адрес и секрет настраиваются в профиле, там же можно отправить тестовое событие.
- Подпись: HMAC-SHA256 от строки
timestamp.bodyв заголовкеX-Turonay-Signature. - Заголовки:
X-Turonay-Event,X-Turonay-Timestamp,X-Turonay-Signature,X-Turonay-Delivery. - Принимаются только адреса
https. - Неудачная доставка повторяется до 8 раз с нарастающими паузами; одно и то же событие может прийти повторно, поэтому делайте обработчик идемпотентным.
POST /your-webhook HTTP/1.1
X-Turonay-Event: code_received
X-Turonay-Timestamp: 1791631200
X-Turonay-Signature: sha256=<hex>
X-Turonay-Delivery: dlv_<id>
signature = HMAC_SHA256(secret, timestamp + "." + body)Примеры проверки подписи, схему данных и правила повторов смотрите в разделе «Вебхуки SMS API».
Примеры на вашем языке
Один и тот же сценарий (получить номер, дождаться кода, завершить) разобран на готовых примерах для трёх языков.
Переходите с другого API SMS-активаций?
Turonay совместим с распространённым протоколом handler_api. Если вы переходите от другого провайдера, использующего его, и ваш бот, панель или скрипт написаны под этот протокол, переход обычно сводится к трём изменениям: базовый адрес, API-ключ и сверка кодов сервисов и идентификаторов стран. Перед запуском в работу обязательно проверьте весь сценарий.
Turonay — самостоятельный сервис. Он не связан с другими провайдерами и не заявляет, что заменяет их. Перенос баланса невозможен: счёт в Turonay пополняется отдельно.
Цены и оплата
Цены зависят от сервиса и страны и постоянно обновляются, поэтому вместо фиксированного списка актуальное значение читается через getPrices. Свежие примеры и расчёт стоимости — на странице «Цены SMS API». Все суммы в API указаны в TRY; на сайте можно смотреть TRY, USD или RUB.
Баланс пополняется на странице «Оплата» банковской картой (Shopier, Stripe), криптовалютой (Cryptomus, Heleket) или банковским переводом; доступные способы зависят от валюты и региона. Отдельной платы за доступ к API нет.
Перепродавайте со своей наценкой
Если вы продаёте SMS-активации клиентам через Telegram-бота, панель или сайт, на странице «Реселлерам SMS» разобраны скидки по уровням и расчёт наценки.
Ресурсы для разработчиков
Готовые файлы, которые ускорят интеграцию:
Полный справочник методов и кодов ошибок: «Справочник API».
Частые вопросы
API для приёма SMS платный?
Отдельной подписки или платы за доступ к API нет. Вы платите только за доставленные коды: при выдаче номера сумма резервируется на балансе, а при получении кода списывается.
Нужно ли платить, если код не пришёл?
Нет. Если вы отменили активацию до прихода кода, провайдер отменил её или срок номера истёк, зарезервированная сумма возвращается на баланс.
Заработает ли моя интеграция, рассчитанная на handler_api?
Turonay работает по протоколу handler_api; в большинстве интеграций достаточно сменить базовый адрес (https://turonay.com/stubs/handler_api.php) и API-ключ. Коды сервисов, идентификаторы стран и цены сверьте через getPrices. Turonay — независимый сервис, не связанный с другими провайдерами.
Можно ли отменить активацию после прихода кода?
Нет. После прихода кода setStatus 8 возвращает EARLY_CANCEL_DENIED, а оплата не возвращается, так как услуга оказана. Завершите активацию через setStatus 6.
Опрашивать код или использовать вебхуки?
Оба способа хорошо дополняют друг друга. Вебхук-уведомление ставится в очередь, как только код записан, и обычно доставляется в течение 1–2 минут; getStatus и getActiveActivations — альтернативный путь и страховка от пропущенных событий и перезапусков. Тело вебхука подписано HMAC-SHA256, обязательно проверяйте подпись.
В какой валюте цены и как оплатить?
Цены в API указаны в TRY; на сайте их можно смотреть в TRY, USD или RUB. Баланс пополняется картой (Shopier, Stripe), криптовалютой (Cryptomus, Heleket) или банковским переводом; доступные способы зависят от валюты и региона.
Что будет, если цена внезапно вырастет?
Передавайте максимальную приемлемую цену в maxPrice. Если текущая цена выше, покупка не выполняется, а реальная цена приходит в ответе WRONG_MAX_PRICE:цена.
Для каких задач предназначен API?
Он создан для разработчиков, автоматизации тестирования, QA-команд и реселлеров. Использование должно соответствовать правилам соответствующих платформ и условиям использования Turonay.
Начните интеграцию
Зарегистрируйтесь бесплатно, пополните баланс и получите первый номер за несколько минут.