Перейти к основному содержимому

Verify (OTP)

API для создания и проверки одноразовых кодов верификации (OTP) через SMS, Email и другие каналы.

Запросы POST должны содержать заголовок Content-Type: application/json. Проверка кода (verify) также поддерживает метод GET.


Создание кода — синхронный

Создаёт код верификации и отправляет его по SMS или Email. Шлюз обрабатывает запрос сразу и возвращает verify_id.

URI: /api/verify.php

Метод: POST

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

{
"auth": "API_KEY",
"command": "verify/create",
"phone": "441501234567",
"type": "sms",
"sender_name": "MyBrand",
"lang": "en",
"code_length": 6,
"code_type": "numeric",
"service_id": 1,
"custom_id": "abcdef1234567",
"hook": "https://example.com/webhook"
}

Пример ответа:

{
"success": true,
"verify_id": "14fb5f3d-20be-41ef-b31a-b9f5e499bc7a"
}

Ошибки HTTP: 400 (неверный формат/JSON), 401 (неверный auth), 413 (слишком большое тело запроса).


Создание кода — асинхронный

Постановка создания кода в очередь для фоновой обработки. Тело запроса такое же, как при синхронном создании, но поле command необязательно (воркер автоматически устанавливает verify/create).

URI: /v1/verify/create

Метод: POST

Content-Type: application/json

Пример ответа:

{
"request_id": "cf-ray-1234567890-ABC",
"success": true
}

verify_id в этом ответе не возвращается. Если запрос отклонён при обработке, причина приходит на URL из поля hook — см. Вебхук. Сам результат проверки получают командой verify.

Коды ошибок HTTP:

CodeОписание
400Неверный JSON
401Отсутствует или неверный auth
405Метод, отличный от POST
413Слишком большое тело запроса
415Отсутствует или неверный Content-Type (должен быть application/json)
503Очередь недоступна

Проверка кода

URI: /api/verify.php

Проверяет код, введённый пользователем, и возвращает статус верификации (только синхронный API).

Пример запроса (GET)

/api/verify.php?auth=API_KEY&command=verify&phone=380501234567&code=123456&verify_id=14fb5f3d-20be-41ef-b31a-b9f5e499bc7a

Пример запроса (POST, JSON)

{
"auth": "API_KEY",
"command": "verify",
"phone": "380501234567",
"code": "123456",
"verify_id": "14fb5f3d-20be-41ef-b31a-b9f5e499bc7a"
}

Пример успешного ответа:

{
"success": true,
"verify_id": "14fb5f3d-20be-41ef-b31a-b9f5e499bc7a",
"phone": "441501234567",
"type": "sms",
"status": "approved",
"service_id": 1
}

Возможные значения status:

statusОписание
approvedКод верный, верификация успешна
pendingКод неверный, попытки ещё остались
expiredКод истёк
blockedПревышен лимит попыток

Коды ошибок HTTP:

  • 400 — неверный формат запроса или JSON
  • 401 — отсутствует или неверный auth
  • 413 — слишком большое тело запроса

Вебхук

Если в запросе был передан параметр hook и запрос отклонён при обработке, шлюз отправляет уведомление на этот адрес.

Payload повторяет формат вебхука сообщений: плоский объект со status и причиной в error. Отдельного payload для ошибок нет.

HTTP метод: POST
Content-Type: application/json
X-Signature: sha256(json_body + api_key)

ПараметрТипОписание
verify_idstringИдентификатор верификации
statusstringВсегда REJECTED — запрос отклонён при обработке
errorstringПричина, по которой запрос отклонён
updatedstringДата и время события
Формат: YYYY-MM-DDThh:mm:ss±hh:mm
request_idstringИдентификатор запроса, который вернул асинхронный API

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

{
"verify_id": "14fb5f3d-20be-41ef-b31a-b9f5e499bc7a",
"status": "REJECTED",
"error": "Access denied",
"updated": "2026-08-21T10:12:33+03:00",
"request_id": "a1436d496bf11a59"
}

Ответ

В ответе будет получен код 200. Вебхук отправляется один раз, без повторов.


Ограничения

  • Время жизни кода: по умолчанию 300 секунд (5 минут), диапазон 60–3600 секунд.
  • Максимальное число попыток: по умолчанию 5.