NumberCodesAPI
Получить ключ

Номера и SMS-коды по API

Купите номер, дождитесь SMS и заберите код. Баланс общий с ботом NumberCodes, деньги списываются в долларах. Подходит для ботов, сервисов автоматизации и скриптов.

REST JSONhttps://numbercodes.shop/api/v1
SMS-Activatehttps://numbercodes.shop/stubs/handler_api.php

Авторизация

Каждый запрос подписывается вашим ключом вида ak_live_…

  1. Откройте @NumberCodes_bot.
  2. Зайдите в «Профиль» или отправьте /api, нажмите «API разработчикам».
  3. Скопируйте ключ. Если он утёк, перевыпустите его: старый перестанет работать сразу.
Как передать ключПримерГде работает
Заголовок X-API-Key (рекомендуем)X-API-Key: ak_live_…REST
Заголовок AuthorizationAuthorization: Bearer ak_live_…REST
Параметр запроса?api_key=ak_live_…SMS-Activate
Храните ключ на сервере. Не публикуйте его в репозиториях и не встраивайте в клиентский код.

Чтобы пробовать методы прямо на этой странице, вставьте ключ в поле вверху. Он остаётся только в этой вкладке браузера.

Быстрый старт

Полный цикл: купить номер Telegram, дождаться кода, завершить заказ.

Пример

      

Идемпотентность

Повторный запрос после обрыва связи не купит второй номер.

Передайте заголовок Idempotency-Key с уникальным значением (например, UUID) при покупке и при создании счёта на пополнение. Для покупки можно использовать и поле idempotency_key в теле запроса.

  • В течение 5 минут тот же ключ вернёт результат первого запроса без повторного списания.
  • Если первый запрос ещё выполняется, придёт ответ 409 Conflict.

Webhooks

Сервер сам сообщит о коде, и опрашивать заказы не нужно.

  • Webhook на заказ. Передайте callback_url при покупке или задайте его позже через PUT /orders/{id}/webhook.
  • Webhook на аккаунт. Один адрес на все события, с подписью и журналом доставок. Настраивается через PUT /webhook, методы описаны в группе «Webhook аккаунта».

События аккаунта

СобытиеКогда приходит
sms_receivedНа номер пришло SMS
order_cancelledЗаказ отменён или истёк, деньги возвращены
rental_expiringАренда скоро закончится
rental_finishedАренда закончилась
balance_topped_upБаланс пополнен

Что приходит на ваш адрес

POST на ваш URL, application/json
{
  "id": "evt_9f3c1a52d7b84e60a1c2",
  "event": "sms_received",
  "created_at": "2026-11-03T14:31:05Z",
  "data": {
    "order_id": 54101,
    "phone": "+79991234567",
    "service": "Telegram",
    "sms_code": "49201"
  }
}

Проверка подписи

Каждый запрос содержит заголовок X-NumberCodes-Signature: t=<unix>,v1=<hex>. Значение v1 — HMAC-SHA256 от строки "<t>.<тело запроса>" с вашим секретом whsec_…. Сравнивайте подпись и проверяйте, что t не старше пяти минут.

Проверка на вашей стороне

      

Доставка и повторы

  • Адрес должен быть публичным и начинаться с https://. Внутренние адреса отклоняются.
  • Ответьте кодом 2xx в течение 8 секунд. Иначе сервер повторит отправку через 3, 15 и 60 секунд.
  • Все попытки видны в GET /webhook/deliveries, неудачную доставку можно отправить заново через POST /webhook/deliveries/{id}/retry.
  • Чтобы не обработать событие дважды, храните id уже принятых событий.

Ошибки и лимиты

Ошибки REST приходят в формате {"status":"error","code":402,"detail":"…"}

КодЗначениеЧто делать
400Неверные параметрыПроверьте сервис, id и условия. Отменить заказ после получения SMS нельзя
401Нет доступаКлюч не передан или недействителен
402Не хватает денегПополните баланс в боте или через POST /deposits
404Не найденоЗаказа нет или он принадлежит другому аккаунту
409Запрос уже выполняетсяДождитесь результата первого запроса с тем же Idempotency-Key
429Слишком много запросовЛимит 120 запросов в минуту. Вместо частого опроса используйте /wait или webhook
502Сбой у поставщикаПовторите через несколько секунд
503Нет свободных номеровПопробуйте другую страну или оператора, проверьте GET /availability

Протокол SMS-Activate

Для готового программного обеспечения, которое умеет работать с SMS-Activate или SMSHub. Выберите этот сервис в настройках и подставьте адрес ниже.

Адрес: /stubs/handler_api.php. Ключ передаётся параметром api_key, действие — параметром action. Ответы приходят обычным текстом.

actionЧто делает
getBalanceБаланс: ACCESS_BALANCE:7.00
getNumberКупить номер, параметры service, country, operator. Ответ ACCESS_NUMBER:id:телефон
getNumberV2То же, но ответ в JSON
getStatusКод по id: STATUS_WAIT_CODE или STATUS_OK:84920. После запроса повторного SMS: STATUS_WAIT_RETRY:84920, пока не придёт новое
getStatusV2То же, но код приходит в JSON: {"sms": {"code": "84920", "text": "…"}}
getFullSmsПолный текст SMS: FULL_SMS:текст
setStatusstatus=1 готов, 3 запросить ещё одно SMS, 6 завершить, 8 отменить с возвратом
getPricesЦены и количество номеров
getServicesListСписок сервисов
getNumbersStatusСколько номеров доступно по сервисам
getCountriesСправочник стран
getOperatorsОператоры по странам
getActiveActivationsАктивные заказы

Ответы протокола

ОтветЗначение
ACCESS_NUMBER:id:phoneНомер выдан
STATUS_WAIT_CODESMS ещё нет. Опрашивайте раз в 2–4 секунды
STATUS_OK:codeКод получен
STATUS_WAIT_RETRY:codeПовторное SMS запрошено (setStatus=3), новое ещё не пришло. В code прежний код. Как только SMS придёт, getStatus вернёт STATUS_OK:новый_код, а на webhook уйдёт sms_received
STATUS_CANCELЗаказ отменён или время вышло
ACCESS_READY · ACCESS_RETRY_GET · ACCESS_ACTIVATIONПодтверждения setStatus 1, 3 и 6
ACCESS_CANCELЗаказ отменён, деньги вернулись на баланс
BAD_KEYКлюч неверный или отключён
BAD_SERVICEНеизвестный код сервиса
BAD_STATUSСтатус недопустим, например отмена после получения кода
BAD_ACTIONНеизвестное значение action
NO_BALANCEНе хватает денег на балансе
NO_NUMBERSСвободных номеров нет
NO_ACTIVATIONЗаказ не найден
ERROR_RATE_LIMITБольше 240 запросов в минуту (HTTP 429)

Загружаю справочник методов…