KYC Magic Link
Этот сценарий использования не использует эндпоинт Unico POST /v1/process и не использует контракт API. Интеграция осуществл яется с Trully.ai (хост api.trully.ai), с аутентификацией через x-api-key вместо Bearer JWT, и собственной схемой ответа. Для других стран используйте Онбординг (Глобальный).
Что решает этот сценарий использования
KYC Magic Link решает задачу выполнения процесса идентификации в Мексике, сбора национальных удостоверений личности (INE) и биометрических данных лица. Благодаря процессу, размещённому Unico, вы устраняете трудности с разработкой front-end с помощью ссылки, отправляемой через ваши собственные каналы (WhatsApp, SMS, электронная почта).
Используйте этот сценарий, когда:
- Вы работаете в Мексике и используемый документ удостоверения личности — INE (обязательно).
Не используйте этот сценарий, когда:
- Пользователь находится за пределами Мексики или использует другие документы → обратитесь к другим сценариям онбординга.
Задействованные возможности
Конвейер, выполняемый в рамках одного процесса:
| Возможность | Обязательность | Роль в процессе |
|---|---|---|
| Захват документа | Обязательно | Захватывает изображение документа INE. Повторное использование документа недоступно в этом сценарии — каждая сессия требует нового захвата. |
| Liveness | Обязательно | Проверка живости — обязательное селфи, которое привязывает процесс. |
| Классификация рисков | Обязательно | Перекрёстно сопоставляет поведенческие сигналы для выявления риска мошенничества, связанного с CPF. |
| Верификация личности | Опционально (при наличии контракта) | Проверяет, принадлежит ли лицо в транзакции владельцу предоставленного государственного идентификатора, используя базу идентификаторов Unico и дополнительные сигналы. |
| RENAPO Verification | Опционально (при наличии контракта) | Запрашивает RENAPO — национальный реестр населения Мексики — по CURP пользователя и возвращает запись реестра наряду с результатом Проверки личности. |
Предварительные требования
- API-ключ — предоставляется вашим менеджером проекта по онбордингу в Unico. Отправляется в заголовке
x-api-key. - Публичный HTTPS-эндпоинт для получения вебхуков (опционально, но рекомендуется).
- Настройка CORS — разрешите источники
https://verification.unico.app(продакшн) иhttps://verification.uat.unico.app(sandbox) на сервере, принимающем вебхук.
Пошаговая реализация
В отличие от других сценариев, Magic Link не имеет пол я flow — интеграция осуществляется напрямую с Trully API. Эндпоинт создаёт уникальную ссылку для верификации, которую вы распространяете среди пользователей через собственный канал.
1. Создайте Magic Link
Эндпоинт: POST https://sandbox.trully.ai/v2/magic-link
Заголовки:
| Заголовок | Обязательность | Описание |
|---|---|---|
x-api-key | Да | API-ключ, предоставленный вашим менеджером проекта по онбордингу в Unico. |
Content-Type | Да | application/json |
Тело (application/json):
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
external_id | string | Нет | Внешний идентификатор запроса, используемый для отслеживания и справочных целей. |
metadata | object | Нет | Контейнер для параметров конфигурации. |
metadata.phone | string | Нет | Номер телефона пользователя в международно м формате (например, 521234567890). |
metadata.redirect_url | string | Нет | URL для перенаправления пользователя после завершения процесса KYC. |
metadata.webhook_url | string | Нет | URL для отправки данных процесса KYC после его завершения. Этот вебхук будет вызываться на стороне клиента. В целях безопасности эндпоинт должен использовать HTTPS. Компонент будет ждать одну минуту ответа от вашего вебхук-сервера — по истечении этого времени связь будет прервана. Процесс никак не пострадает от сбоя вебхук-коммуникации. Убедитесь, что https://verification.unico.app и https://verification.uat.unico.app разрешены в вашей конфигурации CORS для продакшна и sandbox соответственно. |
metadata.track_webhook_url | string | Нет | URL для отправки данных каждого шага KYC, выполненного пользователем (см. события вебхуков ниже). Этот вебхук будет вызываться на стороне клиента. В целях безопасности эндпоинт должен использовать HTTPS. Компонент будет ждать одну минуту ответа от вашего вебхук-сервера — по истечении этого времени связь будет прервана. Процесс никак не пострадает от сбоя вебхук-коммуникации. Убедитесь, что https://verification.unico.app и https://verification.uat.unico.app разрешены в вашей конфигурации CORS для продакшна и sandbox соответственно. |
data.step (отправляется на track_webhook_url) отражает те же шаги, что и Вебхук V2 — см. таблицу поддерживаемых шагов ниже.
Пример запроса:
curl -X POST https://sandbox.trully.ai/v2/magic-link \
-H "x-api-key: $TRULLY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"external_id": "user-mx-12345",
"metadata": {
"phone": "521234567890",
"redirect_url": "https://app.client.com.mx/kyc-done",
"webhook_url": "https://app.client.com.mx/webhook/result",
"track_webhook_url": "https://app.client.com.mx/webhook/track"
}
}'
2. Получите токен и URL ссылки
Поля ответа:
| Поле | Тип | Описание |
|---|---|---|
data.external_id | string (nullable) | Внешний идентификатор запроса, используемый для отслеживания и справочных целей. |
data.created_on | string (date-time) | Дата создания magic link. |
data.is_active | boolean | Если true, magic link активен. |
data.token | string | Токен magic link, который будет использоваться для привязки процессов KYC к magic link. |
data.magic_link_url | string (URI) | Магическая URL-ссылка для начала процесса KYC. |
data.metadata.redirect_url | string (nullable) | URL для перенаправления пользователя после завершения процесса KYC. |
data.metadata.webhook_url | string (nullable) | URL для отправки данных процесса KYC после его завершения. Этот вебхук будет вызываться на стороне клиента. |
data.metadata.track_webhook_url | string (nullable) | URL для отправки данных каждого шага KYC, выполненного пользователем. Этот вебхук будет вызываться на стороне клиента. |
data.version | string | Версия magic link. |
version | string | Версия API, обработавшего запрос, полезна для отслеживания изменений и совместимости. |
status | string | Текстовое представление статуса ответа, указывающее на успех или неудачу операции. |
status_code | integer | HTTP-код статуса ответа, обеспечивающий стандартизированный индикатор результата запроса. |
request_date | string (date-time) | Дата и время запроса в формате ISO 8601. |
request.metadata.redirect_url | string (nullable) | URL для перенаправления пользователя после завершения процесса KYC (эхо запроса). |
request.metadata.webhook_url | string (nullable) | URL для отправки данных процесса KYC после завершения (эхо запроса). |
request.metadata.track_webhook_url | string (nullable) | URL для отправки данных каждого шага KYC, выполненного пользователем (эхо запроса). |
Пример ответа:
{
"data": {
"external_id": null,
"created_on": "2025-07-28T18:11:54.430048399Z",
"is_active": true,
"token": "3f6dbcc1-49ba-4935-be90-dd8dd59b5530",
"magic_link_url": "https://verification.uat.unico.app/link/v2/3f6dbcc1-49ba-4935-be90-dd8dd59b5530",
"metadata": {
"redirect_url": null,
"webhook_url": null,
"track_webhook_url": null
},
"version": "v2"
},
"version": "v1.4.2",
"status": "ok",
"status_code": 200,
"request_date": "2025-07-28T18:11:54+0000",
"request": {
"metadata": {
"redirect_url": null,
"webhook_url": null,
"track_webhook_url": null
}
}
}
Ответы об ошибках — POST /v2/magic-link
| Код | Сообщение | Описание |
|---|---|---|
400 Bad Request | data provided in the field is invalid | Недопустимая структура данных или значения полей в теле запроса. Проверьте обязательные поля и форматы. |
403 Forbidden | Forbidden | API-ключ отсутствует, истёк или не имеет разрешения. Проверьте заголовок x-api-key. |
500 Internal Server Error | internal server error | Ошибка обработки на стороне сервера. Повторите попытку с экспоненциальной задержкой. При сохранении проблемы сообщите в службу поддержки. |
Пример ответа 400:
{
"data": {
"error": "data provided in the field is invalid"
},
"version": "v1.4.2",
"status": "bad request",
"status_code": 400,
"request_date": "2025-07-28T20:22:29+0000",
"request": {
"metadata": null
}
}