Проверка возраста
Полный поток интеграции см. в Обзор 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 (не пройдено) -- присутствует только при включённой проверке живости. |
Тело запроса содержит ошибки, изображение недействительно или обязательные поля отсутствуют.
Bearer-токен или APIKEY отсутствует, истёк или недействителен. См. Аутентификация.
Указанный processId уже существует для данного тенанта. См. Коды ошибок ниже.
Достигнут лимит запросов. Когда ваша система получает ошибку HTTP 429, необходимо реализовать механизмы для предотвращения каскадных сбоев и ухудшения ограничения.
Лучшие практики:
- Период ожидания (backoff): Немедленно остановите или ограничьте последующие запросы из вашей системы. Не повторяйте неудачные запросы непрерывно в плотном цикле.
- Очередь и ограничение: Буферизуйте или ставьте в очередь исходящие запросы на вашей стороне для управления потоком трафика перед повторной отправкой.
- Экспоненциальный backoff с jitter: При повторных попытках увеличивайте время ожидания экспоненциально между попытками (например, 1 с, 2 с, 4 с, 8 с) и добавляйте небольшую случайную задержку ("jitter"), чтобы предотвратить эффект стада, когда все поставленные в очередь запросы повторяются в один и тот же момент.
Непрерывные запросы к эндпоинту с ограничением без отступления могут продлить период ограничения и серьёзно повлиять на операционную пропускную способность вашей системы. Правильное ограничение запросов на вашей стороне обеспечивает более плавную и устойчивую интеграцию.
Для получения информации о лимитах по умолчанию, увеличении запросов и дополнительных деталях см. Лимиты запросов.
Непредвиденная ошибка сервера.
Коды ошибок
- 400 Bad Request
- 403 Forbidden
- 409 Conflict
- 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. |
| Код | Сообщение | Описание |
|---|---|---|
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 уже существует для данного тенанта. |
| Код | Сообщение | Описание |
|---|---|---|
99999 | Internal failure! Try again later. | Ошибка на стороне сервера. |
Что дальше
- Для запроса существующего процесса см. Получение процесса.