API
ДокументацияAPI и интеграции

Как отправить OTP через WhatsApp

Отправка и проверка OTP через WhatsApp: примеры cURL, Node.js, PHP и Python, серверная авторизация и повторные запросы.

WAIX API · Обновлено 22 сентября 2026

Node.js

javascript
import { randomUUID } from 'node:crypto';
const response = await fetch('https://waix.kz/api/v1/otp/send', {
  method: 'POST',
  headers: { Authorization: 'Bearer ' + process.env.WAIX_KEY,
    'Content-Type': 'application/json', 'Idempotency-Key': randomUUID() },
  body: JSON.stringify({ to: '+77011234567', channel: 'whatsapp', ttl: 300 })
});
const result = await response.json();
if (!response.ok) throw new Error(result.code || 'OTP_SEND_FAILED');
// Сохраните result.data.id для запроса verify. Не выводите result в журнал.

Python

python
import os, uuid, requests
request_key = str(uuid.uuid4())
response = requests.post('https://waix.kz/api/v1/otp/send',
    headers={'Authorization': 'Bearer ' + os.environ['WAIX_KEY'],
             'Idempotency-Key': request_key},
    json={'to': '+77011234567', 'channel': 'whatsapp', 'ttl': 300}, timeout=15)
response.raise_for_status()
challenge_id = response.json()['data']['id']

PHP

php
$requestKey = bin2hex(random_bytes(16));
$curl = curl_init('https://waix.kz/api/v1/otp/send');
curl_setopt_array($curl, [
  CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 15,
  CURLOPT_HTTPHEADER => ['Content-Type: application/json',
    'Authorization: Bearer ' . getenv('WAIX_KEY'), 'Idempotency-Key: ' . $requestKey],
  CURLOPT_POSTFIELDS => json_encode(['to'=>'+77011234567', 'channel'=>'whatsapp', 'ttl'=>300])
]);
$body = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_RESPONSE_CODE);
if ($body === false || $status >= 400) { throw new RuntimeException('OTP request failed'); }
$result = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
$challengeId = $result['data']['id'];
curl_close($curl);

Повторы и журналы

Создайте Idempotency-Key один раз на действие пользователя и сохраните до завершения запроса. В примерах новый UUID нужен для новой отправки, а не для каждого сетевого повтора. Храните ключ WAIX в переменной окружения или хранилище секретов. Не записывайте введённый OTP, sandbox test_code или заголовок Authorization в журналы.

Остался вопрос по этой инструкции?Написать в поддержку →