Справочные эндпоинты

Справочные эндпоинты OMNI API OTP-кодов — каналы, отправители, баланс, шаблоны, Telegram Gateway

Коротко: кроме отправки кодов, OMNI API предоставляет справочные методы — узнать доступные каналы, статус отправителей, баланс, шаблоны и работу Telegram Gateway.

Кому подходит

  • Роль: Разработчик, Интегратор
  • Уровень: Опытный

Что это

Справочные эндпоинты возвращают данные, которые нужны для настройки и проверки интеграции. Они не отправляют сообщения, а показывают текущее состояние вашего аккаунта.

МетодЭндпоинтДля чего
GET/channelsСписок каналов, доступных компании
GET/sendersСписок имён отправителей
GET/balanceБаланс договора
GET/templatesСписок шаблонов сообщений
GET/wa_templatesСписок шаблонов WhatsApp
POST/messages/revokeОтозвать верификационное сообщение Telegram Gateway
POST/messages/verificationПроверить статус верификации Telegram Gateway

Каналы, доступные компании

Эндпоинт: GET /channels

Возвращает список каналов, которые подключены у вашей компании. Не все каналы из общей таблицы могут быть доступны — этот метод покажет фактические.

Пример запроса:

curl --location 'https://web.otpcod.ru/api/v1/channels' \
  --header 'X-API-Key: <ваш-ключ>'

Успешный ответ 200 OK:

{
  "error": false,
  "data": [
    {
      "id": 1,
      "type": "SMS",
      "description": "Sms channel type"
    },
    {
      "id": 2,
      "type": "RCS",
      "description": "Rcs channel type"
    },
    {
      "id": 3,
      "type": "VIBER",
      "description": "Viber channel type"
    },
    {
      "id": 4,
      "type": "WHATSAPP",
      "description": "Whatsapp channel type"
    },
    {
      "id": 6,
      "type": "WECHAT",
      "description": "Wechat channel type"
    },
    {
      "id": 7,
      "type": "EMAIL",
      "description": "Email channel type"
    },
    {
      "id": 8,
      "type": "TELEGRAM_GATEWAY",
      "description": "Telegram Gateway"
    },
    {
      "id": 10,
      "type": "PUSH",
      "description": "Push"
    },
    {
      "id": 11,
      "type": "TTS",
      "description": "Text To Speech (TTS)"
    },
    {
      "id": 14,
      "type": "FLASH_CALL",
      "description": "Flash call"
    }
  ]
}

Поля ответа:

ПолеЧто означает
idНомер канала (совпадает с номером в общем списке)
typeТехническое имя канала (SMS, WHATSAPP, TTS и т. д.)
descriptionОписание канала

Если нужного канала нет в списке — его можно подключить. Обратитесь в поддержку OTP-кодов: support@otpcod.ru.

Имена отправителей

Эндпоинт: GET /senders

Возвращает список имён отправителей компании с их статусами и каналами.

Пример запроса:

curl --location 'https://web.otpcod.ru/api/v1/senders' \
  --header 'X-API-Key: <ваш-ключ>'

Успешный ответ 200 OK:

{
  "data": [
    {
      "channel": 1,
      "displayName": "SMS Sender",
      "senderId": "1112223334",
      "status": 2,
      "vendorType": "transit_http_sms",
      "webhookGuid": "8ed6b786-9701-4984-9c50-bc2c66b2ffed",
      "webhookUrl": "https://test.site.com/webhook"
    }
  ],
  "error": false
}

Поля ответа:

ПолеЧто означает
channelНомер канала, к которому привязано имя
displayNameОтображаемое имя
senderIdТехнический идентификатор отправителя
statusСтатус отправителя (см. таблицу ниже)
vendorTypeТип провайдера
webhookGuidGUID вебхука
webhookUrlURL вебхука для статусов

Статусы отправителя:

КодСтатусЧто означает
-1BlockedЗаблокировано
0DraftЧерновик
1In testsНа тестировании
2ActiveАктивно

Когда использовать:

  • Проверить, что имя отправителя имеет статус 2 (Active) перед отправкой.
  • Узнать, к какому каналу привязано имя.
  • Проверить, что новое имя уже одобрено.

Баланс договора

Эндпоинт: GET /balance

Возвращает баланс по всем договорам компании. У одной компании может быть несколько договоров — каждый со своим балансом.

Пример запроса:

curl --location 'https://web.otpcod.ru/api/v1/balance' \
  --header 'X-API-Key: <ваш-ключ>'

Успешный ответ 200 OK:

[
  {
    "agreementId": 0,
    "amount": 0,
    "balanceId": 0,
    "currency": "string",
    "name": "string"
  }
]

Поля ответа:

ПолеЧто означает
agreementIdID договора
amountСумма баланса
balanceIdID баланса
currencyВалюта баланса
nameНазвание договора

Этот эндпоинт возвращает массив, а не объект с error и data. Каждый элемент массива — баланс отдельного договора.

Когда использовать:

  • Перед массовой отправкой — убедиться, что баланса достаточно.
  • В мониторинге — проверять баланс автоматически.
  • При интеграции с биллингом — синхронизировать данные.

Шаблоны сообщений

Эндпоинт: GET /templates

Возвращает список шаблонов сообщений компании.

Пример запроса:

curl --location 'https://web.otpcod.ru/api/v1/templates' \
  --header 'X-API-Key: <ваш-ключ>'

Успешный ответ 200 OK:

{
  "data": [
    {
      "channel": 4,
      "company_id": 1,
      "content": "{\"suggestionsInside\":[],\"cards\":[],\"selectedType\":\"whatsAppText\",\"preview_url\":true,\"text\":{\"body\":\"_test_\"}}",
      "created_at": "2025-01-23T18:31:35.587814Z",
      "created_by": "string",
      "id": 1,
      "message": "{text: {body: \"_test_\"}, type: \"text\", preview_url: true, recipient_type: \"individual\"}",
      "name": "wa_test",
      "updated_at": "2025-01-23T18:31:35.587823Z",
      "updated_by": "string"
    }
  ],
  "error": false,
  "size": 135
}

Поля ответа:

ПолеЧто означает
idID шаблона — используется в template.id при отправке
channelНомер канала
company_idID компании
nameНазвание шаблона
contentСодержимое в виде JSON-строки
messageСодержимое в упрощённом виде
created_at, updated_atДаты создания и обновления
created_by, updated_byКто создал и обновил
sizeОбщее количество шаблонов

Когда использовать:

  • Получить ID шаблона для отправки через template.id.
  • Проверить, что шаблон создан.
  • Синхронизировать шаблоны между своей системой и платформой.

Шаблоны WhatsApp

Эндпоинт: GET /wa_templates

Возвращает список шаблонов WhatsApp со статусами одобрения.

Пример запроса:

curl --location 'https://web.otpcod.ru/api/v1/wa_templates' \
  --header 'X-API-Key: <ваш-ключ>'

Успешный ответ 200 OK:

{
  "data": [
    {
      "category": "MARKETING",
      "content": "[{\"text\": \"1\", \"type\": \"BODY\"}]",
      "created_at": "2025-01-23T18:31:35.587823Z",
      "description": "my_favorite_template",
      "id": 1,
      "language": "en",
      "language_name_en": "English",
      "last_synced_at": "2025-01-23T18:31:35.587823Z",
      "rejection_reason": "custom_reason",
      "sender_display_name": "MySender",
      "sender_id": "test_sender",
      "status": "APPROVED",
      "status_updated_at": "2025-01-23T18:31:35.587814Z",
      "template_name": "test_template",
      "updated_at": "2025-01-23T18:31:35.587823Z"
    }
  ],
  "error": false,
  "size": 135
}

Поля ответа:

ПолеЧто означает
idID шаблона
template_nameИмя шаблона
categoryКатегория: MARKETING, UTILITY, AUTHENTICATION
languageКод языка
language_name_enНазвание языка на английском
sender_idID отправителя
sender_display_nameОтображаемое имя отправителя
statusСтатус одобрения
rejection_reasonПричина отклонения (если есть)
contentСодержимое в виде JSON-строки
descriptionОписание
last_synced_atКогда последний раз синхронизировался с Meta
status_updated_atКогда изменился статус
sizeОбщее количество шаблонов

Когда использовать:

  • Проверить статус одобрения шаблона в WhatsApp.
  • Найти ID шаблона для отправки через template.id.
  • Узнать причину отклонения.

Telegram Gateway: отзыв сообщения

Эндпоинт: POST /messages/revoke

Отзывает ранее отправленное верификационное сообщение Telegram Gateway. Например, если пользователь запросил новый код — старый нужно отозвать, чтобы он не сработал.

Тело запроса:

ПолеТипОбязательноЧто указать
messageIdstringДаID сообщения, которое нужно отозвать

Пример запроса:

curl --location 'https://web.otpcod.ru/api/v1/messages/revoke' \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <ваш-ключ>' \
  --data-raw '{
    "messageId": "019372a1-d252-7908-9216-028bd36c7af1"
  }'

Успешный ответ 200 OK:

{
  "error": "string",
  "message_id": "019372a1-d252-7908-9216-028bd36c7af1",
  "success": true
}

Поля ответа:

ПолеЧто означает
successtrue — сообщение отозвано
message_idID отозванного сообщения
errorОписание ошибки, если есть

Когда использовать:

  • Пользователь запросил повторную отправку кода.
  • Отправка устарела или была ошибочной.

Telegram Gateway: проверка статуса

Эндпоинт: POST /messages/verification

Проверяет статус доставки и верификации в Telegram Gateway.

Тело запроса:

ПолеТипОбязательноЧто указать
messageIdstringДаID сообщения
codestringДаКод, который нужно проверить

Пример запроса:

curl --location 'https://web.otpcod.ru/api/v1/messages/verification' \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <ваш-ключ>' \
  --data-raw '{
    "messageId": "019372a1-d252-7908-9216-028bd36c7af1",
    "code": "1234"
  }'

Успешный ответ 200 OK:

{
  "delivery_status": "read",
  "error": "string",
  "message_id": "019372a1-d252-7908-9216-028bd36c7af1",
  "success": true,
  "verification_status": "code_valid"
}

Поля ответа:

ПолеЧто означает
successtrue — запрос обработан
message_idID сообщения
delivery_statusСтатус доставки (например, read)
verification_statusСтатус проверки кода (например, code_valid)
errorОписание ошибки, если есть

Когда использовать:

  • Узнать, верифицирован ли пользователь.
  • Проверить, что код дошёл до получателя.
  • Диагностировать проблему, если код не пришёл.

Коды ответов

КодКогда возвращается
200 OKЗапрос обработан успешно
400 Bad RequestНеверный запрос
401 UnauthorizedНеверный или отсутствующий API-ключ
404 Not FoundРесурс не найден
500 Internal Server ErrorВнутренняя ошибка на стороне платформы

Все ошибки возвращают единый формат: {"error": true, "data": {"message": "...", "requestId": "..."}}. Подробнее: Обработка ошибок API.

Исключение — GET /balance: для него документирован только код 500 Internal Server Error. Если баланс не получен — обратитесь в поддержку сервиса.

Лимиты

На один канал действует ограничение — не более 5 одновременных запросов на отправку.

Сообщения становятся в очередь и отправляются асинхронно. Отправка и получение статуса не зависят друг от друга.

Если нужно больше — лимит увеличивается до фактического потребления по запросу в поддержку сервиса.

При превышении лимита API возвращает код 429 Too Many Requests.

Частые проблемы

Причина: заголовок X-API-Key не передан или ключ неверный.

Решение: проверьте заголовок. Подробнее: Ошибка 401.

Причина: у ключа нет нужного scope.

Решение: откройте ключ в разделе API Подключения и добавьте нужный scope.

Причина: превышен лимит одновременных запросов на канал.

Решение: дождитесь обработки очереди. Если лимит критично низкий — обратитесь в поддержку сервиса.

См. также

OMNI API — отправка кодов

Эндпоинты /messages, /omnimessages, 2FA

Broadcasts API

Запуск рассылок, шаблоны

Статусы сообщений

Push и pull

Обработка ошибок API

HTTP-коды и форматы ответов

Нужна помощь?