OTP API: отправить и проверить код
Отправка одноразового кода в WhatsApp, проверка введённого значения и статусы доставки. Примеры для Sandbox и Live.
Sandbox и Live
В Sandbox API возвращает тестовый код без сообщения в WhatsApp и без оплаты. В Live код отправляется получателю; нужен действующий OTP-пакет для его страны. Сейчас отправка использует шаблон waix_otp_v1: код и кнопку копирования, без названия проекта в тексте. В WhatsApp отправителем отображается WAIX.
Создать проект и ключ
- Откройте «OTP» → «Проекты» и создайте sandbox-проект. Он не отправляет сообщения и не требует оплаты.
- Выпустите API-ключ. Сохраните его на сервере: не помещайте ключ в JavaScript страницы, мобильное приложение или открытый репозиторий.
- Для реальной отправки откройте «Подписка», оформите OTP-пакет и дождитесь подтверждения оплаты. Создайте Live-проект и его ключ; методы API для обоих режимов одинаковы.
У каждого проекта отдельные ключи и вебхук. Отзыв ключа не затрагивает другие ключи. Приостановка проекта блокирует все его ключи.
Отправить код
curl -X POST https://waix.kz/api/v1/otp/send \
-H "Authorization: Bearer YOUR_PROJECT_KEY" \
-H "Idempotency-Key: YOUR_REQUEST_UUID" \
-H "Content-Type: application/json" \
-d '{"to":"+77011234567","channel":"whatsapp","ttl":300}'channel сейчас принимает только whatsapp. ttl — срок действия кода в секундах; в примере 300. Передавайте срок от 60 до 600 секунд, в Live — не больше лимита вашего пакета. Номер можно передать как +7701…, 7701… или 8701…; WAIX приводит его к международному формату. Сохраните id ответа у себя.
{
"data": {
"id": "11111111-1111-4111-8111-111111111111",
"channel": "whatsapp",
"recipient": "+77011234567",
"mode": "sandbox",
"status": "sent",
"test_code": "123456",
"expires_at": "2026-09-22T12:05:00.000Z"
}
}Проверить введённый код
curl -X POST https://waix.kz/api/v1/otp/verify \
-H "Authorization: Bearer YOUR_PROJECT_KEY" \
-H "Content-Type: application/json" \
-d '{"id":"CHALLENGE_UUID","code":"123456"}'Успешный ответ содержит status: verified. Код одноразовый. После пяти неверных попыток или окончания TTL он больше не принимается. Запрос verify нужно выполнять с вашего сервера. Не выдавайте пользователю сессию только по статусу доставки.
Прочитать статус
GET https://waix.kz/api/v1/otp/CHALLENGE_UUIDПередайте тот же заголовок Authorization. Ответ содержит статус и временные отметки. В sandbox нет настоящей доставки и прочтения в WhatsApp. В Live доступны статусы queued, sent, delivered, read, verified, failed и expired. Подключите вебхук проекта для автоматической обработки событий. outcome_unknown означает, что результат отправки ещё не установлен: не создавайте новый запрос до проверки статуса.
Идемпотентность и ограничения
| Ситуация | Что делать |
|---|---|
| Повтор запроса после сетевой ошибки | Повторите с тем же Idempotency-Key и теми же параметрами. Новый ключ создаёт новую отправку. |
| 409 IDEMPOTENCY_CONFLICT | Этот ключ уже использован с другими параметрами. Исправьте повтор или используйте новый ключ для нового действия. |
| 429 OTP_RESEND_COOLDOWN | Подождите минимум минуту перед новым кодом на этот номер. |
| 402 OTP_QUOTA_EXCEEDED | Пакет исчерпан. Автоматических списаний сверх лимита нет. |
| 402 OTP_SUBSCRIPTION_REQUIRED | Оформите OTP-пакет для страны получателя или дождитесь подтверждения его оплаты. Подписка на обычный WAIX API не заменяет OTP-пакет. |
| 400 OTP_INVALID | Код неверный, использован или просрочен. После пяти ошибок нужен новый код. |
В проекте — до 10 запросов на номер в час, между запросами минимум 60 секунд. Общая защита ограничивает запросы разных проектов на один номер. Sandbox допускает до 20 запросов компании в минуту. IP-лимиты также могут вернуть 429.
Официальные источники и связанные материалы
Названия разделов и доступность функций могут зависеть от настроек аккаунта.
Поможем с подключением и работой WAIX.