API SMS-шлюза

API SMS-шлюза для кодов подтверждения на ваших номерах

API BusySMS — это приёмная сторона SMS-шлюза. Ваши телефоны перехватывают коды подтверждения, приходящие на их SIM, а ваш код запрашивает их обычным HTTP-запросом с ключом. На этой странице — практический справочник: авторизация, эндпоинты, что возвращается и что может пойти не так.

$5 за подтверждённый номер в месяц · 7 дней бесплатно · оплата через Stripe на сайте

На этой странице

Что этот API делает, а что нет

Большинство API SMS-шлюзов созданы для отправки: вы передаёте сообщение, оператор его доставляет. Этот создан для приёма. Он хорошо отвечает на один вопрос — какой код только что пришёл на мой номер? — для номеров на телефонах, которые вы подключили и подтвердили.

  • Да: читать коды подтверждения и одноразовые коды, ждать следующий, получать список ваших телефонов-шлюзов и номеров, читать недавно перехваченные сообщения.
  • Нет: отправка SMS, массовые и маркетинговые рассылки, аренда и покупка номеров. BusySMS не выдаёт номера — SIM ваша.

Если нужно отправлять сообщения, воспользуйтесь сервисом SMS-рассылок. Если нужен код, который сайт присылает на ваш номер, — вам нужен этот API. Сторона телефона описана в руководстве по SMS-шлюзу на Android.

Авторизация

Создайте ключ в панели, в разделе REST API. Он начинается с bsk_live_ и показывается один раз, поэтому храните его как секрет, например в BUSYSMS_API_KEY. Передавайте его в каждом запросе в одном из заголовков:

HTTP
Authorization: Bearer bsk_live_xxxxxxxx
# or
X-API-Key: bsk_live_xxxxxxxx

Ключ принадлежит конкретному человеку и видит только его телефоны и номера, которыми с ним поделились. Ключ из панели может читать коды, получать список телефонов и номеров, читать статус аккаунта и будить телефон, поставленный на паузу; удалить устройство или управлять аккаунтом он не может, так что утёкший ключ не изменит ваш счёт. И всё же держите ключи на сервере: любой, у кого есть ключ, может читать ваши коды.

Эндпоинты

Базовый URL — https://busysms.net/api/v1. Запросы — обычные GET, ответы — в JSON.

  • GET /codes: самый свежий код по всем вашим номерам. С timeoutMs ждёт следующий, до 90 секунд. Фильтры: service, phone, deviceId.
  • GET /devices: ваши телефоны-шлюзы с id, именем, номером, платформой и состоянием (в сети, подтверждён, на паузе), а также номера, которыми с вами поделились.
  • GET /numbers: только ваши номера, у каждого — canReceive и, если принимать он не может, reason: unverified, verification_pending, inactive, gateway_off или phone_unreachable.
  • GET /devices/:id/messages: последние перехваченные сообщения одного телефона, сначала новые. Принимает service, limit (по умолчанию 50, максимум 200) и since.
  • GET /account: ваш аккаунт со статусом пробного периода и подписки.

Ожидание кода: curl, Node.js и Python

Вызов, который нужен большинству интеграций, — long polling сразу после действия, отправляющего SMS. Начните ожидание, запустите вход — и запрос вернётся, как только придёт подходящий код.

curl -s -H "Authorization: Bearer $BUSYSMS_API_KEY" \
  "https://busysms.net/api/v1/codes?service=exampleapp&timeoutMs=60000"

Порядок важен меньше, чем можно опасаться: код, пришедший примерно за секунду до начала запроса, всё ещё считается новым, а всё, что старше, — нет. В тестах сначала отправляйте запрос, а потом вызывайте SMS; как это сделать в Playwright, Selenium и Cypress, показано в руководстве по автоматизации OTP.

Что возвращается

Каждый ответ /codes имеет одну и ту же структуру (объект message здесь сокращён):

JSON
{
  "code": "482913",
  "message": {
    "otpCode": "482913",
    "phone": "+447700900123",
    "sender": "ExampleApp",
    "service": "exampleapp",
    "serviceLabel": "ExampleApp",
    "bodyPreview": "Your ExampleApp verification code is 482913",
    "receivedAt": 1792674000000,
    "deviceName": "Test phone"
  }
}

code равен null, если за отведённое время ничего нового не пришло: во время ожидания API никогда не откатывается к старому коду. receivedAt — время в миллисекундах Unix. service — короткий идентификатор, который BusySMS присваивает каждому сообщению: известный бренд вроде google, telegram или microsoft, а иначе — slug имени отправителя. Передайте его как service=, чтобы ждать код только от этого отправителя.

Ошибки и как их обрабатывать

  • 401: ключ отсутствует, имеет неверный формат или отозван. Об отзыве сообщает key_revoked.
  • 402 payment_required: пробный период закончился, а действующей подписки нет. Чтение кодов прекращается, но /devices продолжает отвечать, чтобы вы видели, в чём дело, а в теле ответа есть billingUrl.
  • 403: устройство принадлежит другому аккаунту или у ключа нет прав на этот маршрут (insufficient_scope).
  • 404: такого устройства нет.
  • 409 number_unverified: номер этого телефона ещё не подтверждён, поэтому его сообщения читать нельзя.
  • 429: превышен лимит запросов. Подождите retryAfterMs и повторите.

Ограничения и полезные практики

  • Одно ожидание длится не больше 90 секунд. Если код может идти дольше, повторите запрос с новым таймаутом, а не держите один запрос открытым.
  • Если номеров несколько, используйте фильтры: phone= с номером получателя или deviceId= для одного из ваших телефонов — так вы не получите код, предназначенный для другого входа.
  • Если в момент начала ожидания ни один ваш телефон не перехватывает коды, BusySMS отправляет на телефон уведомление с просьбой снова включить шлюз. Удалённо перехват он никогда не включает — нажать должен человек.
  • Перехваченные сообщения хранятся до 7 дней, затем удаляются.
  • Для чтения кодов нужен действующий пробный период или подписка: $5 за подтверждённый номер в месяц после бесплатного пробного периода на 7 дней. Платы за запросы нет.

Не только REST API

Те же коды доступны ИИ-агентам через MCP-сервер BusySMS (см. SMS-коды для ИИ-агентов), а людям — через расширение для Chrome, которое само вводит код на сайте.

Номера, которыми с вами поделились, тоже учитываются. Когда коллега делится кодами номера, /codes возвращает их вместе с вашими, а phone= выделяет именно этот номер.

Вопросы и ответы

Частые вопросы

Есть ли бесплатный API SMS-шлюза?

Каждый аккаунт начинается с бесплатного пробного периода на 7 дней с полным доступом к API. Дальше — $5 за подтверждённый номер телефона в месяц. Цена — за номер, а не за сообщение или запрос.

Можно ли отправлять SMS через этот API?

Нет. BusySMS только принимает: он читает коды подтверждения, приходящие на ваши собственные номера. Для отправки используйте сервис SMS-рассылок.

Даёт ли BusySMS номер телефона?

Нет, BusySMS не предоставляет номера. Установите приложение на телефон с нужной SIM и подтвердите номер — после этого его коды доступны вам. iPhone тоже подходит — через автоматизацию в «Командах».

Могут ли коллеги читать коды того же номера?

Да. Поделитесь номером максимум с пятью другими пользователями BusySMS; после принятия приглашения новые коды на этот номер приходят им в панель, приложения, расширение для Chrome, API и MCP — бесплатно для них.

Можно ли вызывать API из браузера или мобильного приложения?

Держите ключ на сервере: любой, у кого он есть, может читать ваши коды. В браузере используйте расширение для Chrome — оно входит через ваш аккаунт BusySMS, а не по ключу.

Блог

Ещё в блоге

Все статьи

Читайте также

Похожие руководства

Все руководства

Попробуйте на своём номере

Установите приложение, подтвердите номер и получите первый код уже сегодня. Каждый аккаунт начинается с бесплатного пробного периода на 7 дней; дальше — $5 за подтверждённый номер в месяц, отменить можно в любой момент.