1. Backend без данных
RSID docs
Russian
  • English
  • Russian
  • Uzbek
  • Обзор интеграции
  • Веб SDK
    • Руководство по интеграции
    • Авторизация (sign-in)
      POST
    • Обновление токена (refresh)
      POST
    • Создание сессии
      POST
    • Получение данных пользователя
      GET
  • Мобильный SDK
    • Руководство по интеграции
    • Авторизация (sign-in)
      POST
    • Обновление токена (refresh)
      POST
    • Создание сессии
      POST
    • Получение данных пользователя
      GET
  • Backend с данными
    • Руководство по интеграции
    • Авторизация (sign-in)
      POST
    • Обновление токена (refresh)
      POST
    • Вариант 1 — сравнение фото с фото из паспорта
      POST
    • Вариант 2 — сравнение двух фото с данными гражданина
      POST
    • Вариант 3 — сравнение двух фото без данных гражданина
      POST
    • Получение результата
      GET
  • Backend без данных
    • Руководство по интеграции
    • Авторизация (sign-in)
      POST
    • Обновление токена (refresh)
      POST
    • Вариант 1 — сравнение фото с фото из паспорта
      POST
    • Вариант 2 — сравнение двух фото с данными гражданина
      POST
    • Вариант 3 — сравнение двух фото без данных гражданина
      POST
  • Авторизация и QR-подписание
    • Вход через RS-ID (OAuth2)
    • Подписание по QR-коду
    • Получение данных пользователя по коду
      POST
    • Авторизация (sign-in)
      POST
    • Обновление токена (refresh)
      POST
    • Создание QR-токена
      POST
    • Статус QR-токена по qr_id
      GET
    • Статус QR-токена по external_id
      GET
  • Schemas
    • ErrorResponse
    • AuthCodeRequest
    • ClientCredentials
    • Token
    • UserInfo
    • TokenResponseEnvelope
    • DocumentInfo
    • Signer
    • StringResponseEnvelope
    • ContactInfo
    • CallbackEvent
    • UserProfile
    • QrTokenCreateRequest
    • PhotoItem
    • Address
    • UserProfileResponseEnvelope
    • AdditionalParams
    • WebSessionCreateRequest
    • QrToken
    • UserProfileResponse
    • CompareFaceRequest
    • UserResponseEnvelope
    • CompareImagesWithInfoRequest
    • QrTokenResponseEnvelope
    • CompareImagesRequest
    • SignCallback
    • ComparisonResult
    • MobileSessionCreateRequest
    • ComparisonResultEnvelope
  1. Backend без данных

Руководство по интеграции

Интеграция с Backend API (без данных)#

1. Что такое RS-ID Backend API#

RS-ID Backend API — интеграция сервер-сервер. Ваш бэкенд отправляет фотографии лица напрямую в RS-ID и получает результат сравнения. При необходимости данные гражданина проверяются по государственному реестру Республики Узбекистан.
Без данных. В этой интеграции RS-ID возвращает только результат сравнения — оценку сходства и причину неудачи. Персональные данные гражданина (ФИО, документ, адрес) после идентификации не возвращаются.
Страницы RS-ID и SDK здесь нет. Вы делаете фото в своём приложении или на сайте, а ваш бэкенд обращается к RS-ID. RS-ID:
1.
по желанию проверяет, что на каждом фото живой человек, а не фото, экран или маска (анти-спуфинг);
2.
сравнивает лица: либо фото пользователя с фото из паспорта из государственного реестра, либо два присланных вами фото;
3.
возвращает оценку сходства и причину неудачи, если она есть. Персональные данные гражданина не возвращаются.

Сценарии использования#

СценарийПример
Идентификация в вашем собственном интерфейсеБанк делает селфи в своём приложении и сверяет его с фото из паспорта из реестра.
Проверки в офисе / киоске / колл-центреСистема оператора отправляет фото, сделанное в офисе или киоске.
Сверка селфи с фото документаСравнение селфи пользователя с фото из отсканированной ID-карты.
Сверка двух фотоПроверка, что на двух фото один человек, например новое селфи и селфи, сохранённое при регистрации.
Пакетные проверки / бэк-офисПовторная проверка существующих клиентов из вашей системы.

2. Терминология#

ТерминКто это
КлиентКомпания, которая интегрирует RS-ID (вы). Зарегистрирована в RS-ID и получила client_id / client_secret для Backend API. К RS-ID обращается только бэкенд клиента.
ПользовательЧеловек, лицо которого проверяется, — ваш клиент, гражданин Узбекистана.
СерверСервер RS-ID: Backend API (<rsid_base_url>).
СессияОдин запрос на сравнение. Каждый вызов сравнения создаёт новую сессию и возвращает её session_id (UUID). По нему получают результат.
Исходное / эталонное фотоДва фото, которые сравниваются в Вариантах 2 и 3: фото пользователя и фото, с которым его сравнивают.
ПИНФЛПерсональный идентификационный номер физического лица — 14 цифр.
Номер документа (id_number)Серия и номер паспорта или ID-карты, например AA1234567.

3. Варианты интеграции#

Выберите вариант в зависимости от того, что нужно сравнить. Все три работают асинхронно и возвращают session_id; результат всегда получают через 7.6 Получение результата.
ВариантEndpointЧто сравниваетсяuser_info
Вариант 1POST /v1/authentication/async/compareОдно фото пользователя ↔ фото из паспорта гражданина из реестраОбязательно
Вариант 2POST /v1/authentication/async/compare-imagesДва фото, присланных клиентомОбязательно
Вариант 3POST /v1/face/async/compare-imagesДва фото, присланных клиентомНе используется
Общий порядок:
1.
Ваш бэкенд проходит авторизацию (7.1).
2.
Вызывает один из вариантов (7.3–7.5).
3.
Если результат готов в течение 3 секунд, в ответе code = 0. Иначе code = -200 (ещё обрабатывается). В обоих случаях в data возвращается session_id.
4.
Ваш бэкенд получает результат через GET /v1/user/{session_id} (7.6).

4. Схема интеграции#

integration-flow-backend-api-without-info.png

5. Окружения#

ОкружениеБазовый URL API
Stage (тестовое)https://stage.rsid.uz/backend/api
Productionhttps://rsid.uz/backend/api
Для stage и production используются разные client_id / client_secret. Учётные данные Backend API отличаются от учётных данных Web и Mobile SDK — клиент SDK не может вызывать методы сравнения (-1002).

6. Общие правила#

Формат ответа#

Все ответы API имеют одинаковую структуру:
{ "data": { }, "code": 0, "message": "Success" }
ПолеТипОписание
codeinteger0 — успех. Любое другое значение — ошибка или состояние (см. таблицы ошибок). Всегда проверяйте code, а не только HTTP-статус.
messagestringТекст на языке запроса (uz / ru / en). Не разбирайте его программно.
dataanyДанные ответа. Отсутствует при ошибке.

Заголовки#

ЗаголовокЗначениеГде используется
Content-Typeapplication/jsonВсе POST-запросы
AuthorizationBearer {access_token}Все запросы, кроме sign-in и refresh
Idempotency-KeyUUID, новый для каждого запросаОбязателен для методов сравнения (7.3–7.5)
Accept-Languageuz / ru / enНеобязательно — язык поля message
Idempotency-Key. Генерируйте новый UUID для каждого запроса на сравнение. Если повторить запрос с тем же ключом в течение 5 минут, RS-ID вернёт сохранённый ответ первого запроса, а не запустит новое сравнение, — это позволяет безопасно повторять запрос после сетевой ошибки. Повтор, пока первый запрос ещё выполняется, возвращает HTTP 409. Без ключа возвращается HTTP 400.

Фотографии#

Передавайте фото строкой base64, без префикса data:image/...;base64,.
Используйте чёткое фронтальное фото одного лица. JPEG или PNG.
Размер всего запроса — не более 20 МБ.

7. Описание API#

7.1 Авторизация (Sign in)#

Обменивает учётные данные клиента на токен доступа.
Метод - POST
Endpoint - {base_url}/v1/auth/sign-in — без заголовка Authorization
Content-Type (заголовок) - application/json

Тело запроса
ПолеТипОбязательноДлина / форматОписание
client_idstringДаНе пустое; не может начинаться с цифрыИдентификатор клиента Backend API, выданный RS-ID.
client_secretstringДаНе пустоеСекрет клиента, выданный RS-ID.
{
  "client_id": "backend-api-client",
  "client_secret": "s3cr3t-value"
}
Ответ
ПолеТипОписание
data.access_tokenstring (JWT)Токен для заголовка Authorization: Bearer.
data.token_typestringВсегда Bearer.
data.expires_inintegerСрок жизни токена в секундах.
data.scopestringВыданные права, через пробел.
data.refresh_tokenstring (JWT)Токен для получения нового access_token без повторной отправки учётных данных.
codeinteger0 при успехе.
messagestringТекст результата.
{
  "data": {
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "token_type": "Bearer",
    "expires_in": 3600,
    "scope": "read write",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
  },
  "code": 0,
  "message": "Success"
}
Используйте access_token повторно до истечения срока, а не авторизуйтесь заново для каждого запроса.

7.2 Обновление токена (Refresh token)#

Выдаёт новый access_token по refresh_token без повторной авторизации. Вызывайте, когда access_token истёк (через expires_in секунд).
Метод - POST
Endpoint - {base_url}/v1/auth/refresh?token={refresh_token} — без заголовка Authorization.
Content-Type (заголовок) - application/json

Query-параметры
ПолеТипОбязательноДлина / форматОписание
tokenstringДаJWTrefresh_token из авторизации (7.1) или из предыдущего ответа обновления.
Тело запроса
ПолеТипОбязательноДлина / форматОписание
client_idstringДаНе пустое; не может начинаться с цифрыИдентификатор клиента Backend API, выданный RS-ID.
client_secretstringДаНе пустоеСекрет клиента, выданный RS-ID.
{
  "client_id": "backend-api-client",
  "client_secret": "s3cr3t-value"
}
Ответ
ПолеТипОписание
data.access_tokenstring (JWT)Новый токен для заголовка Authorization: Bearer.
data.token_typestringВсегда Bearer.
data.expires_inintegerСрок жизни токена в секундах.
data.scopestringВыданные права, через пробел.
data.refresh_tokenstring (JWT)Новый refresh-токен для следующего обновления.
codeinteger0 при успехе.
messagestringТекст результата.
{
  "data": {
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "token_type": "Bearer",
    "expires_in": 3600,
    "scope": "read write",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
  },
  "code": 0,
  "message": "Success"
}
Если refresh-токен истёк или недействителен, авторизуйтесь заново (7.1).

7.3 Вариант 1 — Сравнение фото с фото из паспорта#

Сравнивает одно фото пользователя с фото из паспорта гражданина из государственного реестра. RS-ID находит гражданина по user_info, берёт его фото из паспорта и данные и сравнивает лица.
Метод - POST
Endpoint - {base_url}/v1/authentication/async/compare
Authorization (заголовок) - Bearer {access_token}
Idempotency-Key (заголовок) - {uuid}
Content-Type (заголовок) - application/json

Тело запроса
ПолеТипОбязательноДлина / форматОписание
photostringДаBase64Фото пользователя (селфи).
is_spoofing_requiredbooleanНетtrue / falseВыполнить проверку «живости» (анти-спуфинг) для фото. По умолчанию false. Для живых селфи рекомендуется true.
user_infoobjectДа—Данные гражданина, по которым ищется фото из паспорта.
user_info.pinflstringУсловноРовно 14 цифрПИНФЛ. Передавайте либо pinfl, либо id_number, но не оба.
user_info.id_numberstringУсловно9 символов: 2 буквы + 7 цифр, например AA1234567Номер паспорта / ID-карты. Передавайте либо pinfl, либо id_number, но не оба.
user_info.birth_datestringДа, если передан user_infodd.MM.yyyyДата рождения. Пользователю должно быть не меньше 16 лет.
thresholdnumberНет0.0 – 1.0Минимальный порог сходства лиц для прохождения. По умолчанию 0.5. См. примечание ниже.
external_idstringНет—Ваш собственный идентификатор для связи запроса с вашими данными. Рекомендуется случайный uuid.
localestring (enum)НетUZ, RU, ENПо умолчанию UZ.
Порог (threshold). threshold — минимальная оценка сходства лиц (от 0.0 до 1.0), при которой сравнение считается пройденным. Если параметр не передан, используется значение по умолчанию 0.5. Если вы передаёте его сами, рекомендуем значение выше 0.5. Для высокоточной (строгой) идентификации передавайте значение выше 0.7. Чем выше значение, тем строже проверка и ниже риск, что пройдёт другой человек, но настоящие пользователи могут чаще не проходить проверку.
Пример запроса
{
  "photo": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8U...",
  "is_spoofing_required": true,
  "user_info": {
    "pinfl": "12345678901234",
    "birth_date": "01.01.1990"
  },
  "threshold": 0.7,
  "external_id": "9b1d2c7e-4f3a-4b8e-a1c5-6d2f0e9a7b31",
  "locale": "UZ"
}
С номером документа вместо ПИНФЛ:
"user_info": { "id_number": "AA1234567", "birth_date": "01.01.1990" }
Ответ
ПолеТипДлина / форматОписание
datastringUUID, 36 символовsession_id этого сравнения. Используйте его в 7.6.
codeinteger0 — завершено; -200 — ещё обрабатывается. Любое другое значение — ошибка.
messagestringТекст результата.
{
  "data": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "code": 0,
  "message": "Success"
}
Ещё обрабатывается (результат будет доступен в 7.6):
{
  "data": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "code": -200,
  "message": "Waiting for async process"
}
Ответ — это не вердикт. code = 0 означает, что сравнение завершено, а не что лица совпали или фото живое. Всегда получайте результат через 7.6 и проверяйте comparison_value и note.
Ошибки
КодПричина
-1000Некорректный запрос — например, нет user_info, переданы оба поля pinfl / id_number или ни одного; гражданин не найден в реестре.
-1002Учётные данные не принадлежат клиенту Backend API.
-1024Неверный формат id_number.
-1025Неверный формат pinfl.
-1026Не передан birth_date.
-1052threshold вне диапазона 0–1.
-1090Пользователю меньше 16 лет.
-2001Ошибка сервиса распознавания лиц.
400Ошибка валидации поля (например, photo cannot be blank) или не передан заголовок Idempotency-Key.
409 (HTTP)Запрос с тем же Idempotency-Key ещё выполняется.

7.4 Вариант 2 — Сравнение двух фото с данными гражданина#

Сравнивает два фото, присланных клиентом, между собой. Гражданин определяется по user_info.
Метод - POST
Endpoint - {base_url}/v1/authentication/async/compare-images
Authorization (заголовок) - Bearer {access_token}
Idempotency-Key (заголовок) - {uuid}
Content-Type (заголовок) - application/json

Тело запроса
ПолеТипОбязательноДлина / форматОписание
original_photoobjectДа—Первое фото, например живое селфи пользователя.
original_photo.photostringДаBase64Данные фото.
original_photo.is_spoofing_requiredbooleanНетtrue / falseВыполнить проверку «живости» для этого фото. По умолчанию false. Для живого селфи рекомендуется true.
original_photo.orderintegerНет—Порядковый номер фото.
reference_photoobjectДа—Второе фото для сравнения, например фото документа или сохранённое селфи.
reference_photo.photostringДаBase64Данные фото.
reference_photo.is_spoofing_requiredbooleanНетtrue / falseВыполнить проверку «живости» для этого фото. По умолчанию false. Для фото документа оставьте false.
reference_photo.orderintegerНет—Порядковый номер фото.
user_infoobjectДа—Данные гражданина. Правила те же, что в 7.3.
user_info.pinflstringУсловноРовно 14 цифрПИНФЛ. Передавайте либо pinfl, либо id_number.
user_info.id_numberstringУсловно9 символов: 2 буквы + 7 цифрНомер паспорта / ID-карты.
user_info.birth_datestringДа, если передан user_infodd.MM.yyyyДата рождения. Пользователю должно быть не меньше 16 лет.
thresholdnumberНет0.0 – 1.0По умолчанию 0.5. Рекомендуется выше 0.5, для строгого сравнения — выше 0.7.
external_idstringНет—Ваш собственный идентификатор. Рекомендуется случайный uuid.
localestring (enum)НетUZ, RU, ENПо умолчанию UZ.
Пример запроса
{
  "original_photo": {
    "order": 1,
    "is_spoofing_required": true,
    "photo": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8U..."
  },
  "reference_photo": {
    "order": 2,
    "is_spoofing_required": false,
    "photo": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAYAAACAvzbMAAAACXBIWXMAAAsTAAALEwEAmpwY..."
  },
  "user_info": {
    "pinfl": "12345678901234",
    "birth_date": "01.01.1990"
  },
  "threshold": 0.7,
  "external_id": "c4e8a1f2-7b3d-4e6a-9f0c-2b5d8e1a4c77"
}
Ответ — как в 7.3: data = session_id, code = 0 (завершено) или -200 (ещё обрабатывается). Результат получайте через 7.6.
{
  "data": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
  "code": 0,
  "message": "Success"
}
Ошибки — как в 7.3, а также:
КодПричина
400Не передано original_photo или reference_photo (original photo should be exist, reference photo should be exist).

7.5 Вариант 3 — Сравнение двух фото без данных гражданина#

Сравнивает два фото, присланных клиентом, без каких-либо данных гражданина. Обращения к реестру нет.
Метод - POST
Endpoint - {base_url}/v1/face/async/compare-images
Authorization (заголовок) - Bearer {access_token}
Idempotency-Key (заголовок) - {uuid}
Content-Type (заголовок) - application/json

Тело запроса
ПолеТипОбязательноДлина / форматОписание
original_photoobjectДа—Первое фото.
original_photo.photostringДаBase64Данные фото.
original_photo.is_spoofing_requiredbooleanНетtrue / falseВыполнить проверку «живости» для этого фото. По умолчанию false.
original_photo.orderintegerНет—Порядковый номер фото.
reference_photoobjectДа—Второе фото.
reference_photo.photostringДаBase64Данные фото.
reference_photo.is_spoofing_requiredbooleanНетtrue / falseВыполнить проверку «живости» для этого фото. По умолчанию false.
reference_photo.orderintegerНет—Порядковый номер фото.
thresholdnumberНет0.0 – 1.0По умолчанию 0.5. Рекомендуется выше 0.5, для строгого сравнения — выше 0.7.
external_idstringНет—Ваш собственный идентификатор. Рекомендуется случайный uuid.
localestring (enum)НетUZ, RU, ENПо умолчанию UZ.
Пример запроса
{
  "original_photo": {
    "order": 1,
    "is_spoofing_required": true,
    "photo": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8U..."
  },
  "reference_photo": {
    "order": 2,
    "is_spoofing_required": false,
    "photo": "/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODww..."
  },
  "threshold": 0.7,
  "external_id": "e2a7c9d4-1b6f-4a3e-8c5d-7f0b2e9a6d18"
}
Ответ — как в 7.3: data = session_id, code = 0 (завершено) или -200 (ещё обрабатывается). Результат получайте через 7.6.
{
  "data": "b7c2e1f0-9a8d-4c6b-b5e4-3d2c1b0a9f8e",
  "code": 0,
  "message": "Success"
}
Ошибки
КодПричина
-1002Учётные данные не принадлежат клиенту Backend API.
-1052threshold вне диапазона 0–1.
-2001Ошибка сервиса распознавания лиц.
400Не передано фото или фото не в формате base64, либо не передан заголовок Idempotency-Key.
409 (HTTP)Запрос с тем же Idempotency-Key ещё выполняется.

7.6 Получение результата#

Бэкенд клиента получает результат сравнения по его session_id — для всех трёх вариантов. В результате только session_id, comparison_value и note; персональные данные гражданина не возвращаются.
Метод - GET
Endpoint - {base_url}/v1/user/{session_id}
Authorization (заголовок) - Bearer {access_token}

Параметры пути
ПолеТипОбязательноДлина / форматОписание
session_idstringДаUUID, 36 символовdata из ответа на сравнение (7.3–7.5).
Как читать результат
ПолеЗначение
comparison_valueОценка сходства лиц, 0–1. Сравните её со своим threshold.
noteПусто при чистом прохождении. Иначе содержит причину — например Spoofed file detected («живость» не подтверждена) или Face match failed (оценка ниже порога).
Правило прохождения. Считайте проверку пройденной, только если comparison_value ≥ вашего threshold и note пустое. При is_spoofing_required: true подделка фото не возвращает ошибку в методе сравнения — она отображается здесь, в поле note.
Ответ
ПолеТипОписание
data.session_idstringИдентификатор сессии.
data.comparison_valuenumberОценка сходства лиц, 0–1.
data.notestringПричина неудачи, если есть.
Примеры ответов
Пройдено
{
  "data": {
    "session_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "comparison_value": 0.93
  },
  "code": 0,
  "message": "Success"
}
Лицо не совпало
Обнаружена подделка
Ошибки
КодПричина
-1002Сессия принадлежит другому клиенту.
-1005Сравнение не завершилось успешно. Если метод сравнения только что вернул -200, подождите 1–2 секунды и повторите запрос.
-1027Сессия истекла — запрашивайте результат сразу после сравнения.
-1029Сессия не найдена.

8. Коды ошибок#

КодНазваниеЗначение
0SUCCESSУспех.
-5BAD_CREDENTIALSНеверные учётные данные или пользователь токена не найден.
-9SYSTEM_ERRORНепредвиденная ошибка сервера.
-200WAITING_ASYNC_PROCESSЕщё обрабатывается — получите результат через 7.6.
-1000BAD_REQUESTНекорректный запрос.
-1002CLIENT_NOT_PERMITTEDНедоступно для этого клиента.
-1005UNSUCCESS_JOBСравнение не завершилось успешно.
-1024INVALID_ID_NUMBERНеверный номер документа.
-1025INVALID_PINFLНеверный ПИНФЛ.
-1026BIRTH_DATE_NOT_NULLТребуется дата рождения.
-1027SESSION_EXPIREDСессия истекла.
-1029JOB_SESSION_NOT_FOUNDСессия не найдена.
-1052INVALID_THRESHOLD_LIMITthreshold вне диапазона 0–1.
-1090USER_AGE_OLDER_THAN_16Пользователю должно быть не меньше 16 лет.
-2001AI_ERRORОшибка сервиса распознавания лиц.
Modified at 2026-11-10 07:05:24
Previous
Получение результата
Next
Авторизация (sign-in)
Built with