---
title: "Коды подтверждения по SMS и Email через API"
nav_title: "Коды подтверждения"
url: https://docs.tuk-tuk.online/api/verification
markdown: https://docs.tuk-tuk.online/api/verification.md
section: "API для разработчиков"
description: "Отправка кодов верификации клиентам по SMS или Email одним POST-запросом на персональный вебхук tuk-tuk.online. Свой текст сообщения с плейсхолдером {{code}}, HTML-письма, режим rawEmail."
keywords: ["подтверждение личности", "верификация по SMS", "код подтверждения API", "OTP API", "one-time password", "верификация email", "отправка кода", "webhook верификация", "{{code}}", "HTML письмо с кодом"]
lang: ru
product: tuk-tuk.online
app: https://lk.tuk-tuk.online
api_base: https://back.tuk-tuk.online
---

> [!AI] Кратко
> Вебхук верификации tuk-tuk.online: один POST-запрос генерирует 6-значный код и отправляет его клиенту по SMS или Email, код возвращается в ответе для сверки на вашей стороне. Для сервисов, которым нужно подтверждать телефон или почту клиента.
>
> - Эндпоинт: `POST https://back.tuk-tuk.online/api/verify/:token`, авторизация токеном в URL, заголовки не нужны.
> - Система создаётся в кабинете: Связки → Подтверждение личности; там же копируется вебхук-URL. Доступно на платном тарифе.
> - Тело: `recipient` (обязательно, телефон или email), `recipientName`, `text` (свой текст, применяется только с `{{code}}`), `rawEmail` (письмо как есть).
> - Ответ: `{ "success": true, "code": "123456" }`; при ошибке `{ "success": false, "error": "..." }`.
> - Тип получателя по `recipient`: есть `@`, уходит Email, иначе SMS; нужен активный канал соответствующего типа.
> - Код 6-значный, отправка списывается с баланса. Для Email `text` может быть HTML; по умолчанию оборачивается в шаблон с футером отписки.
>
> Связанные страницы: https://docs.tuk-tuk.online/api, https://docs.tuk-tuk.online/api/rest, https://docs.tuk-tuk.online/channels/sms, https://docs.tuk-tuk.online/channels/email, https://docs.tuk-tuk.online/sms-gateway

# Коды подтверждения

Система подтверждения отправляет клиенту 6-значный код по SMS или Email по одному POST-запросу на ваш персональный вебхук. Платформа сама генерирует код, подставляет его в шаблон и отправляет через настроенные каналы. В ответе код возвращается вам: сверяете его на своей стороне.

Доступно на платном тарифе. Система создаётся в личном кабинете: [Связки → Подтверждение личности](https://lk.tuk-tuk.online/bindings).

## Как подключить

1. Откройте [Связки → Подтверждение личности](https://lk.tuk-tuk.online/bindings) в личном кабинете.
2. Создайте систему: задайте название, выберите канал или каналы (SMS и/или Email) и шаблон сообщения с плейсхолдером `{{code}}`.
3. Скопируйте вебхук-URL вида `https://back.tuk-tuk.online/api/verify/ВАШ-ТОКЕН`.
4. Отправляйте на него POST-запросы из своего сервиса: в ответе придёт `{ "success": true, "code": "..." }`.

Авторизация: сам токен в URL. Заголовков не нужно, токен держите в секрете.

## Эндпоинт

### POST /api/verify/:token

Сгенерировать код и отправить его получателю по SMS или Email. Авторизация по токену в пути, заголовки авторизации не нужны.

| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
| `token` (в пути) | string | да | Персональный токен вебхука из кабинета |
| `recipient` | string | да | Телефон (для SMS) или email (для Email) получателя |
| `recipientName` | string | нет | Имя получателя для персонализации |
| `text` | string | нет | Свой текст сообщения. Применяется только если содержит `{{code}}` |
| `rawEmail` | boolean | нет | EMAIL: `true`, отправить письмо как есть, без обёртки и футера с отпиской |

**Запрос**

**JavaScript**

```javascript
await fetch("https://back.tuk-tuk.online/api/verify/ВАШ-ВЕБХУК-ТОКЕН", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    recipient: "+79991234567",
    text: "Ваш код подтверждения: {{code}}",
  }),
});
```

**PHP**

```php
$ch = curl_init("https://back.tuk-tuk.online/api/verify/ВАШ-ВЕБХУК-ТОКЕН");
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
  CURLOPT_POSTFIELDS => json_encode([
    "recipient" => "+79991234567",
    "text" => "Ваш код подтверждения: {{code}}",
  ]),
]);
$json = json_decode(curl_exec($ch), true);
echo $json["code"];
```

**Python**

```python
import requests
r = requests.post(
    "https://back.tuk-tuk.online/api/verify/ВАШ-ВЕБХУК-ТОКЕН",
    json={
        "recipient": "+79991234567",
        "text": "Ваш код подтверждения: {{code}}",
    },
)
print(r.json()["code"])
```

**Ответ**

```json
{ "success": true, "code": "123456" }
```

Сохраните `code` у себя и попросите клиента ввести его.

**Ошибки**

```json
{ "success": false, "error": "Описание ошибки" }
```

## Своё сообщение в поле text

По умолчанию текст берётся из шаблона, заданного в системе. Поле `text` в запросе заменяет его: так удобно отправлять письмо, собранное на вашей стороне.

> [!WARNING]
> Поле `text` применяется только если содержит плейсхолдер `{{code}}`. Без него поле игнорируется и используется шаблон системы, чтобы код не потерялся. На месте `{{code}}` подставляется сгенерированный код.

Для Email-каналов `text` может быть HTML: платформа определит разметку, обернёт её в адаптивный шаблон и добавит футер отписки (подробнее в [REST API v1](https://docs.tuk-tuk.online/api/rest), поле `rawEmail`). Чтобы отправить письмо ровно как есть, без обёртки и футера, добавьте `"rawEmail": true`: уйдёт только ваш HTML, вёрстка и ссылка на отписку на вашей стороне. Тот же режим включается один раз в редакторе системы тумблером «Отправлять письмо как есть», тогда флаг в каждом запросе не нужен.

HTML-письмо с кодом:

```json
{
  "recipient": "ivan@example.com",
  "recipientName": "Иван",
  "text": "<h2 style='color:#1a73e8;margin:0 0 12px'>Подтверждение входа</h2><p>Здравствуйте, Иван!</p><p>Ваш код:</p><p style='font-size:28px;font-weight:700;letter-spacing:6px;color:#1a73e8'>{{code}}</p><p style='color:#888;font-size:12px'>Код действует 10 минут.</p>"
}
```

Для SMS достаточно текста: `"text": "Ваш код: {{code}}"`.

## Ограничения

- Каналы и тариф настраиваются в системе; код генерируется и списывается с баланса при отправке.
- Тип получателя определяется автоматически: есть `@` в `recipient`, уходит Email, иначе SMS. Нужен подходящий активный канал.
- `{{code}}` единственный обязательный плейсхолдер; без него ваш `text` игнорируется.
