1. Мобильный SDK
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. Мобильный SDK

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

Интеграция с Mobile SDK#

1. Что такое RS-ID Mobile SDK#

RS-ID Mobile SDK позволяет вашему мобильному приложению (Android / iOS) подтвердить, что перед ним реальный, живой человек и что он действительно тот, за кого себя выдаёт, — по лицу и по данным государственного реестра Республики Узбекистан.
Вам не нужно разрабатывать работу с камерой, проверку «живости» (liveness) или сравнение лиц. Ваш бэкенд создаёт сессию, ваше приложение запускает RS-ID SDK (нативную библиотеку внутри приложения), пользователь делает селфи, а RS-ID:
1.
проверяет, что на селфи живой человек, а не фото, экран или маска (анти-спуфинг);
2.
получает официальное фото из паспорта и данные гражданина из государственного реестра;
3.
сравнивает селфи с фото из паспорта;
4.
возвращает результат в ваше приложение и передаёт вашему бэкенду подтверждённый профиль гражданина.

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

СценарийПример
Удалённая идентификация клиента (KYC)Приложение банка, микрофинансовой или страховой компании открывает счёт без визита в офис.
Подтверждение личности перед важным действиемПодтверждение владельца аккаунта перед крупным переводом, сбросом пароля или сменой номера телефона.
Онлайн-подписание договоровПроверка того, что договор займа или аренды в приложении подписывает именно этот гражданин.
Проверка возраста / личностиМаркетплейсы, телеком, игровые приложения или службы доставки, которым нужно подтвердить возраст или реальную личность.
Автозаполнение регистрацииПользователь только делает селфи, а форма регистрации заполняется подтверждёнными ФИО, документом и датой рождения.
Повторная проверкаВернувшийся пользователь проходит проверку повторно по данным из прошлой сессии, не вводя их заново.

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

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

3. Тип интеграции — нативный SDK#

Экраны RS-ID работают внутри вашего приложения через RS-ID SDK. Пользователь не покидает приложение.
1.
Добавьте RS-ID SDK в Android / iOS проект. Пакет и инструкцию по установке RS-ID предоставляет вместе с учётными данными.
2.
Разрешите доступ к камере в приложении:
Android — android.permission.CAMERA в AndroidManifest.xml;
iOS — NSCameraUsageDescription в Info.plist (текст, который увидит пользователь при запросе камеры).
3.
Запустите SDK с session_id, полученным от вашего бэкенда (7.4).
4.
Обработайте результат, который SDK вернёт в приложение, — успех, неудача или отмена пользователем (7.6).
5.
Подтвердите результат на бэкенде через GET /v1/user/{session_id} (7.7).
В отличие от Web SDK, сессии Mobile SDK не привязаны к IP-адресу и не используют redirect_url — результат возвращается в ваше приложение из SDK.

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

integration-flow-mobile-sdk.png

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

ОкружениеБазовый URL API
Stage (тестовое)https://sdk.stage.rsid.uz/mobile/api
Productionhttps://sdk.rsid.uz/mobile/api
Для stage и production используются разные client_id / client_secret. Учётные данные Mobile SDK отличаются от учётных данных Web SDK — клиент Web 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
Accept-Languageuz / ru / enНеобязательно — язык поля message
Безопасность. client_secret должен храниться только на бэкенде клиента. Никогда не добавляйте его в приложение — файлы приложения можно извлечь. Вызывайте sign-in и создание сессии только с бэкенда.

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

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

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

Тело запроса
ПолеТипОбязательноДлина / форматОписание
client_idstringДаНе пустое; не может начинаться с цифрыИдентификатор клиента Mobile SDK, выданный RS-ID.
client_secretstringДаНе пустоеСекрет клиента, выданный RS-ID.
{
  "client_id": "mobile-sdk-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ДаНе пустое; не может начинаться с цифрыИдентификатор клиента Mobile SDK, выданный RS-ID.
client_secretstringДаНе пустоеСекрет клиента, выданный RS-ID.
{
  "client_id": "mobile-sdk-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 Создание сессии#

Создаёт сессию идентификации для одного пользователя. Сессия принадлежит вашему клиенту: использовать её можно только с токеном вашего клиента.
Метод - POST
Endpoint - {base_url}/v1/sessions
Authorization (заголовок) - Bearer {access_token}
Content-Type (заголовок) - application/json

Тело запроса
ПолеТипОбязательноДлина / форматОписание
client_typestring (enum)ДаMOBILEКанал интеграции. Для Mobile SDK всегда MOBILE.
user_infoobjectНет—Данные гражданина. Передайте, чтобы создать сессию с user_info; не передавайте для сессии без user_info.
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 лет.
session_idstringНетUUID, 36 символовПрошлая сессия вашего клиента для этого же пользователя. Новая сессия берёт из неё данные гражданина, и пользователю не нужно вводить их снова. Игнорируется, если передан user_info.
external_idstringНет—Ваш собственный идентификатор (заказа, заявки или клиента) для связи сессии с вашими данными. Рекомендуется случайный uuid.
retry_countintegerНет> 0Максимальное число попыток. Если не передано, равно 0 или больше системного максимума — используется системный максимум.
thresholdnumberНет0.0 – 1.0Минимальный порог сходства лиц для прохождения. По умолчанию 0.5. См. примечание ниже.
localestring (enum)НетUZ, RU, ENПо умолчанию UZ.
additional_paramsobjectНетТолько ключи нижеНастройки экранов RS-ID SDK. Любой другой ключ отклоняется.
additional_params.langstringНетuz, ru, enЯзык экранов SDK.
additional_params.themestringНетнапример light, darkТема экранов SDK.
additional_params.primary_colorstringНетЦвет в HEX, например #1A73E8Акцентный цвет экранов SDK.
Порог (threshold). threshold — минимальная оценка сходства лиц (от 0.0 до 1.0), которую селфи должно получить при сравнении с фото из паспорта, чтобы идентификация прошла. Если параметр не передан, используется значение по умолчанию 0.5. Если вы передаёте его сами, рекомендуем значение выше 0.5. Для высокоточной (строгой) идентификации передавайте значение выше 0.7. Чем выше значение, тем строже проверка и ниже риск, что пройдёт другой человек, но настоящим пользователям может понадобиться больше попыток.
Без привязки к IP и без перенаправления. Мобильные сессии не используют ip_address и redirect_url. Результат возвращается в ваше приложение из SDK (7.6).
Примеры запросов — выберите вариант:
Сессия с user_info

Вариант 1 — Сессия с user_info#

Бэкенд клиента уже знает данные пользователя. SDK сразу откроет камеру.
{
  "client_type": "MOBILE",
  "external_id": "ORDER-123",
  "retry_count": 3,
  "threshold": 0.7,
  "locale": "UZ",
  "user_info": {
    "pinfl": "12345678901234",
    "birth_date": "01.01.1990"
  },
  "additional_params": {
    "lang": "uz"
  }
}
С номером документа вместо ПИНФЛ:
"user_info": { "id_number": "AA1234567", "birth_date": "01.01.1990" }
Сессия без user_info
Повторная проверка (session_id)
Ответ
ПолеТипДлина / форматОписание
datastringUUID, 36 символовsession_id новой сессии. Передайте его в RS-ID SDK и используйте для получения результата.
codeinteger0 при успехе.
messagestringТекст результата.
{
  "data": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "code": 0,
  "message": "Success"
}
Ошибки
КодПричина
-1000Некорректный запрос — например, в user_info переданы оба поля pinfl / id_number или ни одного.
-1002Учётные данные не принадлежат клиенту Mobile SDK, или session_id принадлежит другому клиенту.
-1024Неверный формат id_number.
-1025Неверный формат pinfl.
-1026Не передан birth_date.
-1029session_id не найден.
-1034Неизвестный ключ в additional_params.
-1052threshold вне диапазона 0–1.
-1090Пользователю меньше 16 лет.
400Ошибка валидации поля или не передан client_type.

7.4 Запуск RS-ID SDK#

По session_id приложение клиента запускает RS-ID SDK.
1.
Ваш бэкенд создаёт сессию (7.3) и возвращает session_id в приложение.
2.
Приложение запускает RS-ID SDK с параметрами:
ПараметрОписание
session_idИз 7.3.
access_tokenДействующий токен доступа вашего клиента Mobile SDK. SDK использует его для запросов к серверу RS-ID; сервер принимает запросы по сессии только с токеном клиента, который её создал.
ОкружениеStage или production — должно совпадать с окружением, где создана сессия.
У сессии ограничены срок жизни и число попыток. Запускайте SDK сразу после создания сессии; если сессия истекла, создайте новую.

7.5 Действия пользователя в RS-ID SDK#

У SDK два режима. Какой из них увидит пользователь, зависит от того, как была создана сессия в 7.3:
Режим SDKКогда показываетсяЧто делает пользователь
with_infoСессия создана без user_info и без session_id (Вариант 2)Вводит свои данные, затем делает селфи
without_infoСессия создана с user_info (Вариант 1) или с прошлым session_id (Вариант 3)Только делает селфи

with_info — ввод данных, затем камера#

SDK начинается с экрана ввода данных.
1.
Пользователь вводит серию и номер паспорта или ПИНФЛ (JSHSHIR) и дату рождения (DD.MM.YYYY).
mobile-sdk-1-form_1.png
2.
Пользователь принимает Пользовательское соглашение и Политику конфиденциальности переключателем. Кнопка Продолжить (Davom etish) становится активной; пользователь нажимает её.
mobile-sdk-2-form-filled_1.png
3.
Приложение запрашивает доступ к камере (системное окно). Пользователь разрешает доступ.
4.
Открывается камера с подсказкой «Держите лицо внутри круга» (Yuzingizni doira ichida tuting). Пока лицо не найдено, круг красный; как только лицо в нужном положении, делается селфи.
mobile-sdk-3-camera_1.png
5.
RS-ID проверяет «живость» и сравнивает лицо с фото из паспорта указанного человека. SDK показывает «Идёт идентификация» (Identifikatsiya amalga oshirilmoqda).
mobile-sdk-4-processing_1.png
6.
При успехе SDK показывает «Идентификация успешно выполнена!» (Identifikatsiya qilish muvaffaqiyatli amalga oshirildi!) и возвращает результат в приложение (7.6).
mobile-sdk-5-success_1.png

without_info — только камера#

1.
Приложение запрашивает доступ к камере (системное окно). Пользователь разрешает доступ.
2.
Открывается камера. Пользователь размещает лицо в рамке, и делается селфи.
mobile-sdk-3-camera_1.png
3.
RS-ID проверяет «живость» и сравнивает лицо с фото из паспорта.
mobile-sdk-4-processing_1.png
4.
SDK возвращает результат в приложение (7.6).
mobile-sdk-5-success_1.png

Неудачные попытки#

Если пользователь запретил доступ к камере, SDK не может продолжить — пользователю нужно разрешить камеру для вашего приложения в настройках телефона.
Если селфи отклонено (обнаружена подделка, лицо не совпало, гражданин не найден), SDK показывает причину и позволяет повторить попытку, пока остаются попытки (retry_count). Когда попытки закончились или сессия истекла, SDK возвращает неудачу, и клиенту нужно создать новую сессию.

7.6 Результат в приложении#

Когда пользователь завершает проверку, SDK возвращает результат в ваше приложение:
РезультатЧто делать
УспехСообщите бэкенду, что сессия завершена; бэкенд получает профиль (7.7).
НеудачаПопытки закончились или сессия истекла. Создайте новую сессию (7.3), если пользователь хочет попробовать снова.
ОтменаПользователь закрыл SDK. Пока сессия активна, SDK можно запустить снова с тем же session_id.
Не считайте результат в приложении подтверждением идентификации — приложение работает на устройстве пользователя и может быть изменено. Всегда проверяйте результат с бэкенда через 7.7.

7.7 Получение результата идентификации#

Бэкенд клиента получает подтверждённый профиль гражданина.
Метод - GET
Endpoint - {base_url}/v1/user/{session_id}
Authorization (заголовок) - Bearer {access_token}

Параметры пути
ПолеТипОбязательноДлина / форматОписание
session_idstringДаUUID, 36 символовИз 7.3.
Ответ
ПолеТипОписание
data.session_idstringИдентификатор сессии.
data.comparison_valuenumberОценка сходства лиц, 0–1.
data.notestringПримечание об ошибке, если есть.
data.profile.user_info.first_namestringИмя.
data.profile.user_info.last_namestringФамилия.
data.profile.user_info.middle_namestringОтчество.
data.profile.user_info.pinflstringПИНФЛ, 14 цифр.
data.profile.user_info.genderstringПол.
data.profile.user_info.birth_datestringyyyy-MM-dd.
data.profile.user_info.birth_placestringМесто рождения.
data.profile.user_info.birth_countrystringСтрана рождения.
data.profile.user_info.nationalitystringНациональность.
data.profile.user_info.citizenshipstringГражданство.
data.profile.document_info.documentstringСерия и номер документа.
data.profile.document_info.typestringТип документа.
data.profile.document_info.issued_bystringКем выдан.
data.profile.document_info.issued_atstringДата выдачи, yyyy-MM-dd.
data.profile.document_info.expiry_atstringСрок действия, yyyy-MM-dd.
data.profile.permanent_addressobjectcountry, country_id, region_id, district_id, address.
data.profile.temporary_addressobjectМожет быть null.
{
  "data": {
    "session_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "comparison_value": 0.93,
    "profile": {
      "user_info": {
        "first_name": "ALISHER",
        "last_name": "KARIMOV",
        "middle_name": "BAXTIYOROVICH",
        "pinfl": "12345678901234",
        "gender": "MALE",
        "birth_date": "1990-01-01",
        "birth_place": "TOSHKENT",
        "birth_country": "UZBEKISTAN",
        "nationality": "UZBEK",
        "citizenship": "UZBEKISTAN"
      },
      "document_info": {
        "document": "AA1234567",
        "type": "PASSPORT",
        "issued_by": "IIV 26283",
        "issued_at": "2018-05-10",
        "expiry_at": "2028-05-09"
      },
      "contact_info": {},
      "permanent_address": {
        "country": "UZBEKISTAN",
        "country_id": 182,
        "region_id": 26,
        "district_id": 2603,
        "address": "..."
      },
      "temporary_address": null
    }
  },
  "code": 0,
  "message": "Success"
}
Ошибки
КодПричина
-1005Идентификация не прошла.
-1027Сессия истекла — запрашивайте результат сразу после успеха в SDK.
-1029Сессия не найдена.
-1002Сессия принадлежит другому клиенту.

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

КодНазваниеЗначение
0SUCCESSУспех.
-5BAD_CREDENTIALSНеверные учётные данные или пользователь токена не найден.
-9SYSTEM_ERRORНепредвиденная ошибка сервера.
-1000BAD_REQUESTНекорректный запрос.
-1002CLIENT_NOT_PERMITTEDНедоступно для этого клиента.
-1005UNSUCCESS_JOBИдентификация не прошла.
-1008IDENTIFICATION_FAILEDЛицо не совпало.
-1024INVALID_ID_NUMBERНеверный номер документа.
-1025INVALID_PINFLНеверный ПИНФЛ.
-1026BIRTH_DATE_NOT_NULLТребуется дата рождения.
-1027SESSION_EXPIREDСессия истекла.
-1029JOB_SESSION_NOT_FOUNDСессия не найдена.
-1031RETRY_COUNT_EXPIREDПопытки закончились.
-1032SUCCESS_JOB_EXISTS_FOR_SESSIONСессия уже успешно пройдена.
-1033SPOOFED_FILE_DETECTEDПроверка «живости» не пройдена.
-1034ADDITIONAL_PARAMS_INVALIDНеизвестный ключ в additional_params.
-1052INVALID_THRESHOLD_LIMITthreshold вне диапазона 0–1.
-1090USER_AGE_OLDER_THAN_16Пользователю должно быть не меньше 16 лет.
-2001AI_ERRORОшибка сервиса распознавания лиц.

Modified at 2026-11-10 07:03:15
Previous
Получение данных пользователя
Next
Авторизация (sign-in)
Built with