Проверка возраста
Полный поток интеграции см. в Обзор API.
Эндпоинт
| Окружение | URL |
|---|---|
| Production | POST https://api.id.unico.app/processes/v1 |
| Sandbox | POST https://api.id.uat.unico.app/processes/v1 |
Запрос
| Заголовок | Значение |
|---|---|
Authorization | Bearer <access_token> (см. Аутентификация) |
APIKEY | Предоставленный API-ключ -- должен иметь включённые возможности проверки возраста. |
Content-Type | application/json |
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
subject | object | да | Контейнер информации о пользователе. |
subject.code | string | условно | CPF (BR) или CURP (MX), без форматирования. Обязателен, когда поток включает проверку живости или проверку личности (см. Возможность «Проверка возраста»); не требуется для потоков, ограниченных только проверкой возраста. |
subject.name | string | нет | Полное имя пользователя. |
subject.gender | string | нет | M для мужского или F для женского пола. |
subject.birthDate | string (ISO 8601) | нет | Дата рождения (YYYY-MM-DD). |
subject.email | string | нет | Адрес электронной почты пользователя. |
subject.phone | string | нет | Номер телефона: код страны + код региона + номер, без разделителей (например, 5519725570707). |
useCase | string | нет | Идентификатор сценария операции. |
subsidiaryId | string | нет | ID филиала -- обязателен только при наличии нескольких филиалов. |
imageBase64 | string | да | Зашифрованный вывод SDK или base64-изображение (PNG, JPEG, WebP). |
- Минимальное разрешение: 640 x 480 (стандарт HD)
- Максимальный размер файла: 800 КБ (рекомендуется сжатие JPEG92)
- JWT-токены из SDK истекают через 10 минут и могут быть использованы только один раз
Пример
- cURL
- Node.js
curl -X POST https://api.id.unico.app/processes/v1 \
-H "Authorization: Bearer $TOKEN" \
-H "APIKEY: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"subject": {
"code": "12345678909",
"name": "Luke Skywalker",
"birthDate": "2000-05-20",
"email": "[email protected]",
"phone": "5519725570707"
},
"useCase": "AgeVerification",
"imageBase64": "/9j/4AAQSkZJR..."
}'
import fetch from 'node-fetch';
const res = await fetch('https://api.id.unico.app/processes/v1', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.UNICO_ACCESS_TOKEN}`,
'APIKEY': process.env.UNICO_API_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify({
subject: {
code: '12345678909',
name: 'Luke Skywalker',
birthDate: '2000-05-20',
phone: '5519725570707'
},
useCase: 'AgeVerification',
imageBase64: capturedImage
})
});
const result = await res.json();
Ответы
Возвращаемые поля ответа зависят от того, какие возможности включены для вашего APIKEY.
Только проверка возраста (без проверки живости, без проверки личности):
{
"id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
"status": 3,
"idAge": { "result": "yes" }
}
Проверка возраста + Проверка живости + Проверка личности:
{
"id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
"status": 3,
"unicoId": { "result": "yes" },
"idAge": { "result": "yes" },
"liveness": 1
}
| Поле | Тип | Описание |
|---|---|---|
id | string (UUID) | Идентификатор процесса. Используйте с Получением процесса для повторных запросов. |
status | integer | 3 (завершён успешно), 5 (ошибка). Используйте только status = 3 для бизнес-решений. Все возможные значения см. в Получении процесса. |
idAge.result | string | yes, no, inconclusive -- результат проверки возраста. Присутствует во всех ответах. |
unicoId.result | string | yes, no, inconclusive -- присутствует только при включённой проверке личности. |
liveness | integer | 1 (пройдено), 2 (не пройдено) -- присутствует только при включённой проверке живости. |
Коды ошибок
- 400 Bad Request
- 403 Forbidden
- 409 Conflict
- 429 Too Many Requests
- 500 Internal Server Error
| Код | Сообщение | Описание |
|---|---|---|
20900 | O base64 informado não é válido. | Недействительный параметр base64; возможная проблема с изображением или попытка инъекции. |
20807 | A imagem precisa estar no padrão HD ou possuir uma resolução superior a 640 x 480. | Разрешение изображения ниже минимального порога. |
20509 | The subject.name field is invalid. | subject.name содержит недопустимые символы. |
20508 | The subject.gender field is invalid. | subject.gender должен быть M или F. |
20507 | O parâmetro subject.code é inválido. | Некорректный или несуществующий идентификатор. Срабатывает только при включении проверки живости или проверки личности -- не требуется для потоков, ограниченных только проверкой возраста. |
20506 | O base64 informado é muito grande. O tamanho máximo suportado é até 800kb. | Размер данных превышает 800 КБ; сожмите до JPEG92. |
20505 | O base64 informado não é suportado. Os formatos aceitos são png, jpeg e webp. | Неподдерживаемый формат или недействительный префикс base64. |
20062 | The useCase field is invalid. | Нераспознанное значение в поле useCase. |
20021 | The subject.phone field is invalid. | Формат subject.phone недействителен (IDD + код региона + номер, 13 символов). |
20019 | The subject.birthDate field is invalid. | subject.birthDate не соответствует формату ISO 8601 (YYYY-MM-DD). |
20009 | O parâmetro imagebase64 não foi informado. | Отсутствует параметр изображения селфи. |
20008 | The subject.email field is invalid. | Недействительный формат email в subject.email. |
20005 | O parâmetro subject.code não foi informado. | Отсутствует параметр subject.code. Срабатывает только при включении проверки живости или проверки личности -- не требуется для потоков, ограниченных только проверкой возраста. |
20004 | O parâmetro subject não foi informado. | Отсутствует объект subject. |
20003 | The request body is missing or invalid. | Пустое или некорректное тело запроса. |
20002 | O parâmetro APIKey não foi informado. | Отсутствует заголовок APIKEY. |
20001 | O parâmetro authtoken não foi informado. | Отсутствует заголовок токена аутентификации. |
10508 | The JWT with the captured face has already been used. | JWT может быть использован только один раз. |
10507 | The JWT with the captured face is expired. | JWT превысил 10-минутное окно действия. |
10506 | The imageBase64 field is not a valid JWT from SDK. | imageBase64 не является действительным JWT, сгенерированным SDK. |
Bearer-токен или APIKEY отсутствует, истёк или недействителен. См. Аутентификация.
| Код | Сообщение | Опис ание |
|---|---|---|
30017 | User does not have permission to perform this action. | Некорректный JWT или пользователь без разрешения на выполнение этой операции. |
30017 | Jwt header is an invalid JSON. | Access-token содержит недопустимые символы. |
10502 | O token informado está expirado. | Истёкший access-token. |
10501 | O token informado é inválido. | Недействительный токен аутентификации. |
10201 | O AppKey informado é inválido. | Отсутствующий или несуществующий APIKEY. |
| Код | Сообщение | Описание |
|---|---|---|
20073 | The processID already exists. | Указанный processId уже существует для данного тенанта. |
Достигнут лимит запросов. Когда ваша система получает ошибку HTTP 429, необходимо реализовать механизмы для предотвращения каскадных сбоев и ухудшения ограничения.
Лучшие практики:
- Период ожидания (backoff): Немедленно остановите или ограничьте последующие запросы из вашей системы. Не повторяйте неудачные запросы непрерывно в плотном цикле.
- Очередь и ограничение: Буферизуйте или ставьте в очередь исходящие запросы на вашей стороне для управления потоком трафика перед повторной отправкой.
- Экспоненциальный backoff с jitter: При повторных попытках увеличивайте время ожидания экспоненциально между попытками (например, 1 с, 2 с, 4 с, 8 с) и добавляйте небольшую случайную задержку ("jitter"), чтобы предотвратить эффект стада, когда все поставленные в очередь запросы повторяются в один и тот же момент.
Непрерывные запросы к эндпоинту с ограничением без отступления могут продлить период ограничения и серьёзно повлиять на операционную пропускную способность вашей системы. Правильное ограничение запросов на вашей стороне обеспечивает более плавную и устойчивую интеграцию.
Для получения информации о лимитах по умолчанию, увеличении запросов и дополнительных деталях см. Лимиты запросов.
| К од | Сообщение | Описание |
|---|---|---|
99999 | Internal failure! Try again later. | Ошибка на стороне сервера. |
Что дальше
- Для запроса существующего процесса см. Получение процесса.