Persons Backend API#
Описание#
Persons Backend API - это REST API для программного управления персонами ( профилями пользователей) в системе. API позволяет создавать, обновлять персоны, а также управлять их алиасами и фотографиями через внешние системы.
Для комфортной интеграции через Backend API воспользуйтесь Swagger (OpenAPI)
Термины#
- Персона - это профиль физического лица в системе, содержащий его идентификационные данные, фотографии и историю проверок.
- Алиас - это идентификатор персоны (телефон, ИИН, номер документа, пользовательский ID), используемый для поиска и предотвращения дубликатов.
- Верификация - статус подтвержденности личности
персоны (
is_verified
). - API KEY - ключ для аутентификации организации при обращении к API.
- Base64 - способ кодирования бинарных данных (изображений) в текстовый формат для передачи через JSON.
Этапы:#
1. Получение API-KEY организации#
Первый этап для использования API - получение API-KEY организации. Чтобы получить API-KEY организации, необходимо зайти в Личный Кабинет по данной ссылке. API-KEY находится в поле Backend Api Key
Пример API-KEY организации:
API-KEY: Efy202XKbVAWRu...
Примечание
Для наглядности используется укороченная длина
API KEY
. Его фактическая длина составляет 47 и более символов.
2. Создание персоны#
Важно
Чтобы использовать данный API, необходимо иметь активную подписку на технологию "Персоны". Подробнее о подписках можно прочитать здесь.
При создании персоны используются данные в формате JSON. Обязательными являются фотография и API-ключ организации.
URL запроса:
https://kyc.biometric.kz/api/v1/backend/persons/
Формат запроса | Метод запроса |
---|---|
JSON | POST |
Наименование поля | Тип | Обязательно | Описание |
---|---|---|---|
api_key | String | Да | API KEY организации в личном кабинете |
image_b64 | String | Да | Изображение персоны в формате Base64 |
photo_type | String | Да | Тип фотографии: digital , scan , live , other |
is_verified | Boolean | Да | Статус верификации персоны |
aliases | Array | Нет | Массив алиасов персоны |
Структура алиаса:
Наименование поля | Тип | Обязательно | Описание |
---|---|---|---|
value | String | Да | Значение алиаса (номер телефона, ИИН, номер документа и т.д.) |
type | String | Да | Тип алиаса: phone , personal_number , document_number , custom |
Примеры запроса:
curl -X 'POST' \
'https://kyc.biometric.kz/api/v1/backend/persons/' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"api_key": "<organization_api_key>",
"image_b64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...",
"photo_type": "other",
"is_verified": true,
"aliases": [
{
"value": "+77071234567",
"type": "phone"
},
{
"value": "123456789012",
"type": "personal_number"
}
]
}'
import requests
import base64
# Кодирование изображения в base64
with open('photo.jpg', 'rb') as image_file:
encoded_image = base64.b64encode(image_file.read()).decode('utf-8')
image_b64 = f"data:image/jpeg;base64,{encoded_image}"
url = 'https://kyc.biometric.kz/api/v1/backend/persons/'
headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
data = {
'api_key': '<organization_api_key>',
'image_b64': image_b64,
'photo_type': 'other',
'is_verified': True,
'aliases': [
{
'value': '+77071234567',
'type': 'phone'
},
{
'value': '123456789012',
'type': 'personal_number'
}
]
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const url = 'https://kyc.biometric.kz/api/v1/backend/persons/';
// Функция для кодирования файла в base64
function fileToBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = error => reject(error);
});
}
const headers = {
'Accept': 'application/json',
'Content-Type': 'application/json'
};
const data = {
api_key: '<organization_api_key>',
image_b64: 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...',
photo_type: 'other',
is_verified: true,
aliases: [
{
value: '+77071234567',
type: 'phone'
},
{
value: '123456789012',
type: 'personal_number'
}
]
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
Пример ответа:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"organization": "550e8400-e29b-41d4-a716-446655440001",
"is_verified": true,
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z",
"aliases": [
{
"id": "550e8400-e29b-41d4-a716-446655440002",
"value": "550e8400-e29b-41d4-a716-446655440000",
"type": "system_id"
},
{
"id": "550e8400-e29b-41d4-a716-446655440003",
"value": "+77071234567",
"type": "phone"
},
{
"id": "550e8400-e29b-41d4-a716-446655440004",
"value": "123456789012",
"type": "personal_number"
}
],
"photos": [
{
"id": "550e8400-e29b-41d4-a716-446655440005",
"type": "other",
"is_default": true,
"is_uploaded": true,
"created_at": "2024-01-15T10:30:00Z"
}
]
}
3. Обновление персоны#
Позволяет изменить статус верификации существующей персоны.
URL запроса:
https://kyc.biometric.kz/api/v1/backend/persons/{person_id}/update
Формат запроса | Метод запроса |
---|---|
JSON | POST |
Наименование поля | Тип | Обязательно | Описание |
---|---|---|---|
api_key | String | Да | API KEY организации в личном кабинете |
is_verified | Boolean | Да | Новый статус верификации персоны |
Примеры запроса:
import requests
person_id = '550e8400-e29b-41d4-a716-446655440000'
url = f'https://kyc.biometric.kz/api/v1/backend/persons/{person_id}/update'
headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
data = {
'api_key': '<organization_api_key>',
'is_verified': False
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const personId = '550e8400-e29b-41d4-a716-446655440000';
const url = `https://kyc.biometric.kz/api/v1/backend/persons/${personId}/update`;
const headers = {
'Accept': 'application/json',
'Content-Type': 'application/json'
};
const data = {
api_key: '<organization_api_key>',
is_verified: false
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
4. Добавление фотографии к персоне#
Позволяет добавить дополнительную фотографию к существующей персоне.
URL запроса:
https://kyc.biometric.kz/api/v1/backend/persons/{person_id}/photo/
Формат запроса | Метод запроса |
---|---|
JSON | POST |
Наименование поля | Тип | Обязательно | Описание |
---|---|---|---|
api_key | String | Да | API KEY организации в личном кабинете |
image_b64 | String | Да | Изображение в формате Base64 |
photo_type | String | Да | Тип фотографии: digital , scan , live , other |
is_default | Boolean | Да | Сделать эту фотографию основной для персоны |
Примеры запроса:
curl -X 'POST' \
'https://kyc.biometric.kz/api/v1/backend/persons/550e8400-e29b-41d4-a716-446655440000/photo/' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"api_key": "<organization_api_key>",
"image_b64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...",
"photo_type": "digital",
"is_default": true
}'
import requests
import base64
# Кодирование изображения в base64
with open('new_photo.jpg', 'rb') as image_file:
encoded_image = base64.b64encode(image_file.read()).decode('utf-8')
image_b64 = f"data:image/jpeg;base64,{encoded_image}"
person_id = '550e8400-e29b-41d4-a716-446655440000'
url = f'https://kyc.biometric.kz/api/v1/backend/persons/{person_id}/photo/'
headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
data = {
'api_key': '<organization_api_key>',
'image_b64': image_b64,
'photo_type': 'digital',
'is_default': True
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const personId = '550e8400-e29b-41d4-a716-446655440000';
const url = `https://kyc.biometric.kz/api/v1/backend/persons/${personId}/photo/`;
const headers = {
'Accept': 'application/json',
'Content-Type': 'application/json'
};
const data = {
api_key: '<organization_api_key>',
image_b64: 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...',
photo_type: 'digital',
is_default: true
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
5. Добавление алиаса к персоне#
Позволяет добавить новый идентификатор (алиас) к существующей персоне.
URL запроса:
https://kyc.biometric.kz/api/v1/backend/persons/{person_id}/alias/
Формат запроса | Метод запроса |
---|---|
JSON | POST |
Наименование поля | Тип | Обязательно | Описание |
---|---|---|---|
api_key | String | Да | API KEY организации в личном кабинете |
value | String | Да | Значение алиаса (номер телефона, ИИН, номер документа и т.д.) |
type | String | Да | Тип алиаса: phone , personal_number , document_number , custom |
Необходимо учесть
- Нельзя создавать алиасы типа
system_id
- они создаются автоматически - Значения алиасов должны быть уникальными в рамках организации
- При попытке добавить существующий алиас вернется ошибка с детализацией конфликта
Примеры запроса:
import requests
person_id = '550e8400-e29b-41d4-a716-446655440000'
url = f'https://kyc.biometric.kz/api/v1/backend/persons/{person_id}/alias/'
headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
data = {
'api_key': '<organization_api_key>',
'value': 'AB1234567',
'type': 'document_number'
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const personId = '550e8400-e29b-41d4-a716-446655440000';
const url = `https://kyc.biometric.kz/api/v1/backend/persons/${personId}/alias/`;
const headers = {
'Accept': 'application/json',
'Content-Type': 'application/json'
};
const data = {
api_key: '<organization_api_key>',
value: 'AB1234567',
type: 'document_number'
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
Типы фотографий#
Значение | Приоритет | Описание |
---|---|---|
digital | 1 | Цифровое фото из чипа документа |
scan | 2 | Портрет со сканированного документа |
live | 3 | Лучший кадр с liveness-проверки |
other | 4 | Загруженные вручную или прочие фотографии |
Автоматическое управление основным фото
При добавлении фотографии с более высоким приоритетом и флагом is_default: true
, она автоматически становится основной, а предыдущая основная фотография теряет этот статус.
Типы алиасов#
Значение | Описание | Особенности |
---|---|---|
system_id | Внутренний UUID персоны | Создается автоматически, неизменяемый |
phone | Номер телефона | Формат: +77071234567 |
personal_number | ИИН (персональный номер) | 12 цифр |
document_number | Номер документа (паспорт, удостоверение) | Любой формат |
custom | Пользовательский идентификатор | Любой формат |
Ошибки#
Код состояния | Ответ | Описание |
---|---|---|
400 | Invalid API key | Неверный или отсутствующий API ключ организации |
400 | Person not found | Персона с указанным ID не найдена или не принадлежит вашей организации |
400 | Invalid image format | Неверный формат изображения или поврежденные данные Base64 |
400 | Invalid photo type | Неверный тип фотографии. Допустимые значения: digital, scan, live, other |
400 | Invalid alias type | Неверный тип алиаса. Допустимые значения: phone, personal_number, document_number, custom |
400 | Cannot create system_id alias | Алиасы типа system_id создаются автоматически и не могут быть добавлены вручную |
400 | Alias already exists | Алиас с таким значением уже существует в организации |
400 | Person limit exceeded | Превышен лимит количества персон для вашей подписки |
400 | Cannot delete default photo | Нельзя удалить единственное основное фото персоны |
400 | Client does not have access to Persons technology | У клиента нет доступа к технологии "Персоны". Причины: подписка отсутствует, истекла, или технология не активна |
400 | Subscription has not started | Подписка еще не активировалась |
400 | No active or future subscription for technology | Нет активной или будущей подписки на технологию "Персоны" |
400 | Client does not have subscription | У клиента отсутствует подписка, подробнее о подписках можно прочитать здесь |
400 | File extension is not allowed | Неподдерживаемое расширение файла. Разрешены только: JPEG, JPG, PNG |
404 | Organization not found | Организация с указанным API ключом не найдена |
422 | Validation error | Ошибка валидации входных данных. Проверьте обязательные поля и их форматы |
500 | Internal server error | Внутренняя ошибка сервера. Обратитесь в техническую поддержку |
Детализация ошибок
Для ошибок валидации (код 400, 422) в ответе будет содержаться детальная информация о том, какое именно поле содержит ошибку и что нужно исправить.
Обработка ошибок алиасов
При попытке добавить уже существующий алиас, в ответе будет указан список всех конфликтующих значений и ID персон, которым они принадлежат.