API сервиса SMUVA
Введение ¶
Данное API предназначено для интеграции сайтов и мобильных приложений партнёров с сервисом SMUVA.
История изменений
2017-12-09
-
Добавлено описание процесса обработки запросов с помощью API.
-
Исправлен ряд опечаток.
2017-12-08
-
Добавлено описание вызова для создания сессии и пользователя одним запросом.
-
Косметические изменения.
-
Добавлены описания параметров в ряде запросов, где их ещё не было.
2017-12-01
-
Добавлены новые статусы запроса для учёта расчёта агрегатов - см. Приложение 1.
-
Добавлено поле aggregates в данных сессии, равно как и в данных колбека после обработки сессии.
-
В качестве окончательного статуса, свидетельствующего о полном и успешном завершении обработки, добавлен статус
completed_successfully
.
2017-11-15
-
Добавлено описание вызова для отправки кода SMS-подтверждения
-
Добавлены новые статусы запроса и сессии - см. Приложение 1.
-
Исправлены тексты описания ответов.
2017-06-14
- Исправлено описание дополнительных параметров в вызове для создания пользователя
2016-03-03
-
Исправлено описание вызова для клонирования сессии
-
Исправлено описание GET-параметров: теперь генерируются корректные примеры
-
Добавлен пример значения публичного ключа во всех вызовах
2016-02-20
-
Добавлено описание вызова для клонирования сессии
-
В файле описания API применена более современная тема оформления
2016-09-01
-
Добавлено приложение с подробным описанием ответа для провайдеров мобильной связи Казахстана.
-
Убран из документации устаревший вызов API получения данных пользователя.
2016-08-15
-
Добавлены описания новых статусов для Билайн, ОСАГО и АлиЭкспресс
-
Добавлено приложение с подробным описанием ответа для провайдера ОСАГО.
-
Унифицирована структура приложений к API.
2016-06-14
-
Реорганизовано левое меню
-
Переработана общая информация об API, раздел о передаче параметров и возможных ошибках
-
Теперь для всех вызовов API корректно указываются параметры, указываемые в пути URI
2016-02-03
- Добавлен статус details_pipes_request_failed в “Приложения к документации”
2016-02-01
-
Добавлен раздел “Приложения к документации”
-
Таблица статусов запроса и список состояний сессии перенесены в Приложение.
2016-01-20
-
Изменён адрес базового URL API на актуальный
-
Добавлен подраздел во введении про передачу массивов/коллекций в запросах
-
Добавлены предопределённые имена для дополнительных параметров при добавлении пользователя.
-
Добавлен пример запроса на добавление пользователя с дополнительными параметрами
2016-01-18
-
Изменён формат ответа в запросе “Статус сессии” - теперь данные передаются в блоке “data”
-
Изменены поля блока “data” в запросе “Данные сессии”
-
Незначительные косметические изменения
2016-01-07
- Добавлен тип ошибки ‘not_found’ для API-вызова “last_succeeded” (последний успешный запрос пользователя к провайдеру)
2016-01-06
-
Добавлено описание API-вызова “last_succeeded” в группе вызовов “Пользователи”
-
Добавлен параметр state в ответе API-вызова “Данные сессии”
-
Сделаны мелкие улучшения в описаниях некоторых API-вызовов
-
Исправлена ошибка в URL API-вызова “Сгенерировать пользователя”
2016-01-05
- Добавлено описание API-вызова history в группе вызовов “Пользователи”
2015-12-30
-
Исправлена ошибка в формуле сигнатуры для получения данных сессии
-
Исправлены мелкие опечатки
-
Расширена система состояний сессии - вместо статуса processing введены статусы authenticating и collecting_data
2015-12-28
- Все параметры подписи для краткости переименованы из request_signature в signature.
2015-12-24
-
Добавлены поля state и captcha_src в ответе от API-вызова user_sessions/{session_uid}/status
-
Добавлено описание возможных состояний и статусов для API-вызова user_sessions/{session_uid}/status
-
Добавлено общее описание для каждой группы API-вызовов
-
Добавлено указание альтернативных форматов и описание их для соответствующих API-вызовов
2015-12-14
-
Описания вызовов с информацией о пользователях и регистрации нового пользователя.
-
Описания вызовов с информацией о сессиях пользователя, регистрации новой сессии и получения статуса сессии.
2015-12-08
-
Исходная версия документа.
-
Описания вызовов с информацией о категориях провайдеров
-
Описания вызовов с информацией о провайдерах
Формирование запросов ¶
-
API построено в стиле REST с ответами в форматах JSON (формат по умолчанию) или HTML - для отдельных API-вызовов.
-
Базовый URL для обращения к API (обратите внимание на использование HTTPS!):
https://muva.smuva.com/api/v1
-
Указывайте
Content-Type: application/x-www-form-urlencoded
при передаче параметров. -
Передача массивов в GET-запросах (на примере массива чисел)
# array_parameter = [1, 2, 3] https://muva.smuva.com/api/v1/submit?array_parameter[]=1&array_parameter[]=2&array_parameter[]=3
-
Передача массивов в POST-запросах (на примере массива объектов)
# array_parameter[Object] = [ {field1: 1, field2: 'record1'}, {field1: 2, field2: 'record2'} ] # В параметрах командной строки, также можно использовать в GET-запросах https://muva.smuva.com/api/v1/submit?array_parameter[0][field1]=1&array_parameter[0][field2]=record1&array_parameter[1][field1]=2&array_parameter[1][field2]=record2 # В теле запроса array_parameter[0][field1]=1 array_parameter[0][field2]=record1 array_parameter[1][field1]=2 array_parameter[1][field2]=record2
Заметьте, что для передачи массива объектов нужно пронумеровать элементы массива от 0 до N.
Ошибки обработки ¶
При ошибке в формировании адреса запроса (попытки открыть несуществующую страницу) генерируется ошибка 404 без формирования JSON-ответа.
Ошибки, связанные с некорректностью передаваемых данных, возвращают соответствующий код HTTP (400, 401 и т.п.) и содержательное описание ошибки в формате JSON.
Все непредвиденные ошибки генерируют ответ с HTTP-кодом 500 и не гарантируют наличия JSON с описанием ошибок в теле ответа.
Использование API ¶
Терминология
-
Пользователь
- кандидат, предоставляющий личные данные с целью скоринга или экпертизы due diligence. -
Провайдер
- онлайн-сервис, для которого в системе SMUVA реализован сбор и анализ данных из личного кабинета пользователя. -
Капча
- проверочный код, предъявляемый пользователю провайдером для проверки, что запрос выполняется человеком. -
СМС-код
- проверочный код, посылаемый пользователю провайдером на мобильный телефон для проверки, что запрос авторизован абонентом.
Интеграция с сервисом SMUVA
В наиболее обшем случае интеграция с сервисом SMUVA требует реализации 5 шагов:
-
(Опционально) Запрос доступных категорий провайдеров
-
Запрос доступных провайдеров (опционально - с фильтром по категории)
-
(Опционально) Регистрация пользователя в системе
-
Регистрация в системе сессии сбора данных из личного кабинета провайдера (для существующего пользователя или с генерацией новой записи пользователя).
-
Периодическая проверка состояния сессии, требуется специальная обработка для следующих состояний:
captcha
- необходимо осуществить ввод капчи от пользователя и послать дополнительный запрос к API (“Послать ответ капчи”).sms_code
- необходимо осуществить ввод кода из СМС от пользователя и послать дополнительный запрос к API (“Послать код подтверждения из СМС”).failed
- сессия завершилась ошибкой, не все данные получены, необходимо прекратить обработку и проинформировать пользователя о том, что его запрос окончился неудачей.completed
- сессия успешно завершена, можно прекращать процесс проверки.- обработка длится более 10 минут - прервать обработку по таймауту, проинформировать пользователя об отсутствии результатов со стороны сервиса SMUVA.
В случае, если реализуется интеграция только с одним провайдером, шаг 1 можно пропустить, а шаг 2 выполнить однократно, и использовать UID провайдера. В случае, если заведомо один пользователь сообщает данные только по одному провайдеру, шаг 3 можно пропустить, использовав вместо этого специальный вариант вызова для создания сессии (“Создать пользователя и сессию”).
С учётом высокой вероятности появления проверки с помощью капчи и введения рядом провайдеров (например, Мегафон) подтверждения на запрос детализации с помощью СМС корректной реализации пункта 5 нужно уделить особое внимание, реализовав интерактивную обработку.
В следующем разделе приведены диаграммы типовых вариантов интеграции с API.
Диаграммы обработки запросов
На диаграммах ниже приведён предлагаемый ход обработки запросов и требуемые для выполнения запросов данные.
Диаграмма 1 соответствует наиболее простому варианту использования, а Диаграмма 2 - самому детализированному процессу.
Провайдеры ¶
Эта группа API-вызовов позволяет получать данные о провайдерах.
Провайдеры - компании, оказывающие специальные услуги (например, телекоммуникационные, банковские, страховые) и предоставляющие пользователям онлайн-доступ к данным об оказанных услугах.
API-вызовы данной группы позволяют получить как список провайдеров, доступных для партнёра (с возможностью фильтрации по категориям услуг), так и описание формы авторизации с перечнем всех требуемых провайдером данных (как правило, телефон / логин и пароль) для конкретного оператора.
Список провайдеров ¶
GET/providers{?partner_public_key,provider_category_uid}
Возвращает список провайдеров с их UID. Возможно применить фильтр по категории провайдеров, используя соответствующий параметр.
Пример URI вызова:
- partner_public_key
string
(обязательный)
Пример: 00000001-0000-0000-0000-000000000002Публичный ключ партнёра
- provider_category_uid
string
(необязательный)UID категории провайдеров
200
Возвращает список провайдеров.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": true,
"data": [
{
"uid": "<UID провайдера>",
"name": <Название провайдера>,
"category_uid": "UID категории провайдеров"
}, ...
]
}
400
Не удалось получить список провайдеров из-за ошибки в параметрах.
Возможные UID ошибок:
invalid
- Некорректный параметр (Подробности см. в поляхparameter
иreason
ответа)
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "<UID ошибки>",
"reason": "<reason of error, internal description for developers>",
"parameter": "<name of associated parameter or null>"
}, ...
]
}
401
Неизвестный (или некорректный) публичный ключ партнёра.
Возможные UID ошибок:
unauthorized
- Некорректный ключ партнёра
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "unauthorized",
"reason": "Cannot find public_key <partner_public_key>",
"parameter": "partner_public_key"
}
]
}
Данные провайдера ¶
GET/providers/{provider_uid}{format}{?partner_public_key}
Возвращает данные провайдера с конкретным UID, в том числе структуру формы с данными для запроса к ЛК провайдера.
По умолчанию возвращает JSON-ответ, но возможно получить в ответ страницу с HTML-формой, если использовать адрес с index.html или указать text/html в HTTP-заголовке Accept
запроса.
Пример URI вызова:
- format
string
(необязательный)
Пример: .jsonФормат ответа. По умолчанию используется JSON.
- provider_uid
string
(обязательный)UID провайдера
- partner_public_key
string
(обязательный)
Пример: 00000001-0000-0000-0000-000000000002Публичный ключ партнёра
200
Возвращает данные провайдера с конкретным UID.
- Типы полей формы
-
username - логин, используемый для авторизации в ЛК провайдера
-
email - email, используемый в качестве логина для авторизации в ЛК провайдера. Рекомендуется осуществлять превалидацию.
-
phone - телефон, используемый в качестве логина для авторизации в ЛК провайдера. Рекомендуется осуществлять превалидацию.
-
password - пароль, по умолчанию должен скрываться от просмотра “из-за плеча”
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": true,
"data": {
"uid": "<UID провайдера>",
"name": <Название провайдера>,
"category_uid": "UID of provider's category"
"form": [
{
"type" : "<тип поля-1 формы>"
"dom_name" : "<имя поля-1 формы>"
"title" : "<название поля-1 формы для отображения пользователю>"
},
{
"type" : "<тип поля-2 формы>"
"dom_name" : "<имя поля-2 формы>"
"title" : "<название поля-2 формы для отображения пользователю>"
},
...
]
}
}
400
Не удалось получить данные провайдера из-за ошибки в параметрах.
Возможные UID ошибок:
invalid
- Некорректный параметр (Подробности см. в поляхparameter
иreason
ответа)
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "<UID ошибки>",
"reason": "<reason of error, internal description for developers>",
"parameter": "<name of associated parameter or null>"
}, ...
]
}
401
Неизвестный (или некорректный) публичный ключ партнёра.
Возможные UID ошибок:
unauthorized
- Некорректный ключ партнёра
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "unauthorized",
"reason": "Cannot find public_key <partner_public_key>",
"parameter": "partner_public_key"
}
]
}
Категории провайдеров ¶
Эта группа API-вызовов позволяет получать список категорий провайдеров, доступных данном партнёру.
Использование списка категорий позволяет строить интерактивные диалоговые интерфейсы, упрощающие выбор пользователем своего провайдера услуг для последующего сбора данных.
Список категорий провайдеров ¶
Список категорий провайдеровGET/provider_categories{?partner_public_key}
Возвращает список категорий провайдеров с их UID.
Пример URI вызова:
- partner_public_key
string
(обязательный)
Пример: 00000001-0000-0000-0000-000000000002Публичный ключ партнёра
200
Возвращает список категорий провайдеров.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": true,
"data": [
{
"uid": "<UID категории провайдеров>",
"name": <Название категории провайдеров>,
}, ...
]
}
401
Неизвестный (или некорректный) публичный ключ партнёра.
Возможные UID ошибок:
unauthorized
- Некорректный ключ партнёра
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "unauthorized",
"reason": "Cannot find public_key <partner_public_key>",
"parameter": "partner_public_key"
}
]
}
Пользователи ¶
Эта группа API-вызовов позволяет работать с учётными записями пользователей.
Учётные записи пользователя (далее - просто пользователи) предназначены для объединения данных, полученных по одному пользователю от различных провайдеров.
Необходимо создать нового пользователя и запомнить его UID перед тем, как посылать запросы к провайдерам услуг на получение данных о пользователе.
Сгенерировать пользователя ¶
POST/users{?partner_public_key,email,extras}
Создаёт нового пользователя и возвращает его UID.
Пример URI вызова:
- partner_public_key
string
(обязательный)
Пример: 00000001-0000-0000-0000-000000000002Публичный ключ партнёра
string
(необязательный)
Пример: user@mail.ruE-mail адрес пользователя
- extras
object
(необязательный)
Пример: extras[first_name]=<имя>&extras[last_name]=<фамилия>...Дополнительные данные пользователя в форме ключ-значение.
Важно! Предопределённые имена дополнительных параметров (extras):
-
external_user_id - ID пользователя в системе партнёра, передаётся для идентификации пользователя в колбэк-вызове после успешной обработки.
-
success_callback_url - Полный URL адрес страницы на сайте партнёра для уведомлений об успешном завершении обработки.
Также допускаются любые другие дополнительные параметры, которые партнёр может использовать по своему усмотрению.
-
200
Возвращает UID нового пользователя.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": true,
"data": "<UID пользователя>"
}
400
Не удалось создать запись из-за ошибки в параметрах.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "<UID ошибки>",
"reason": "<reason of error, internal description for developers>",
"parameter": "<name of associated parameter or null>"
}, ...
]
}
Возможные UID ошибок:
401
Неизвестный (или некорректный) публичный ключ партнёра.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "unauthorized",
"reason": "Cannot find public_key <partner_public_key>",
"parameter": "partner_public_key"
}
]
}
Возможные UID ошибок:
Данные пользователя ¶
GET/users/{user_uid}/{?partner_public_key,request_time,signature}
Возвращает данные пользователя с конкретным UID. Требует использования приватного ключа, запрещено использовать данный вызов из Javascript-кода.
Пример URI вызова:
- partner_public_key
string
(обязательный)
Пример: 00000001-0000-0000-0000-000000000002Публичный ключ партнёра
- user_uid
string
(обязательный)UID пользователя
- request_time
string
(обязательный)Время генерации запроса (необходимо для формирования подписи запроса)
- signature
string
(обязательный)Подпись запроса с использованием приватного ключа партнёра Формирование подписи запроса:
sha512(request_time . user_uid . private_key)
При генерации подписи время запроса должно быть в формате YYYYMMDDHHmmss без пробелов и разделителей. Время должно быть указано в зоне UTC.
При проверке подписи запросы, подписанные более часа назад, отклоняются.
200
Возвращает данные пользователя.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": true,
"data": {
"uid": <UID пользователя>,
"email": <Email пользователя>,
"extras": {
"<имя-поля-1>" : <значение-поля-1>,
"<имя-поля-2>" : <значение-поля-2>,
...
}
"provider_uids": [
<UID провайдера-1>,
<UID провайдера-2>,
...
]
}
}
400
Не удалось получить данные провайдера из-за ошибки в параметрах. В том числе этот ответ возвращается и при некорректной подписи.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "<UID ошибки>",
"reason": "<reason of error, internal description for developers>",
"parameter": "<name of associated parameter or null>"
}, ...
]
}
Возможные UID ошибок:
401
Неизвестный (или некорректный) публичный ключ партнёра.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "unauthorized",
"reason": "Cannot find public_key <partner_public_key>",
"parameter": "partner_public_key"
}
]
}
Возможные UID ошибок:
История сессий пользователя для провайдера ¶
GET/users/{user_uid}/history?{partner_public_key,provider_uid,request_time,signature}
Возвращает данные пользователя с конкретным UID. Требует использования приватного ключа, запрещено использовать данный вызов из Javascript-кода.
Пример URI вызова:
- partner_public_key
string
(обязательный)
Пример: 00000001-0000-0000-0000-000000000002Публичный ключ партнёра
- user_uid
string
(обязательный)UID пользователя
- provider_uid
string
(обязательный)UID провайдера, для которого будет возвращена история сессий
- request_time
string
(обязательный)Время генерации запроса (необходимо для формирования подписи запроса)
- signature
string
(обязательный)Подпись запроса с использованием приватного ключа партнёра Формирование подписи запроса
sha512(request_time . user_uid . provider_uid . private_key)
При генерации подписи время запроса должно быть в формате YYYYMMDDHHmmss без пробелов и разделителей. Время должно быть указано в зоне UTC.
При проверке подписи запросы, подписанные более часа назад, отклоняются.
200
Возвращает данные пользователя.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": true,
"data": {
"uid": <UID пользователя>,
"email": <Email пользователя>,
"extras": {
"<имя-поля-1>" : <значение-поля-1>,
"<имя-поля-2>" : <значение-поля-2>,
...
}
"session_uids": [
<UID сессии-1>,
<UID сессии-2>,
...
]
}
}
400
Не удалось получить данные провайдера из-за ошибки в параметрах. В том числе этот ответ возвращается и при некорректной подписи.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "<UID ошибки>",
"reason": "<reason of error, internal description for developers>",
"parameter": "<name of associated parameter or null>"
}, ...
]
}
Возможные UID ошибок:
401
Неизвестный (или некорректный) публичный ключ партнёра.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "unauthorized",
"reason": "Cannot find public_key <partner_public_key>",
"parameter": "partner_public_key"
}
]
}
Возможные UID ошибок:
Сессии пользователей в ЛК ¶
Эта группа API-вызовов позволяет работать с сессиями пользователей.
Сессия пользователя предназначены для создания отдельных запросов к личным кабинетам (далее ЛК) пользователя у разных провайдеров. В случае успешного исполнения запросов именно сессии позволяют получить данные о пользователе из ЛК.
Также доступна история запросов для каждого оператора по каждому отдельному пользователю.
Инициировать сессию ¶
POST/user_sessions/{?partner_public_key,user_uid,provider_uid,username,password}
Создаёт новую сессию и возвращает её UID.
Пример URI вызова:
- partner_public_key
string
(обязательный)
Пример: 00000001-0000-0000-0000-000000000002Публичный ключ партнёра
- user_uid
string
(обязательный)UID пользователя
- provider_uid
string
(обязательный)UID провайдера.
- username
string
(обязательный)
Пример: <имя_пользователя>логин пользователя в ЛК провайдера.
- password
string
(обязательный)
Пример: <пароль>пароль пользователя в ЛК провайдера.
200
Возвращает UID новой сессии.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": true,
"data": <UID сессии>
}
400
Не удалось обработать запрос из-за ошибки в параметрах.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "<UID ошибки>",
"reason": "<reason of error, internal description for developers>",
"parameter": "<name of associated parameter or null>"
}, ...
]
}
Возможные UID ошибок:
401
Неизвестный (или некорректный) публичный ключ партнёра.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "unauthorized",
"reason": "Cannot find public_key <partner_public_key>",
"parameter": "partner_public_key"
}
]
}
Возможные UID ошибок:
Создать пользователя и сессию ¶
POST/user_sessions/create_with_fresh_user{?partner_public_key,provider_uid,username,password,email,extras}
Создаёт нового пользователя, а также сессию для него для скрейпинга выбранного провайдера.
Пример URI вызова:
- partner_public_key
string
(обязательный)
Пример: 00000001-0000-0000-0000-000000000002Публичный ключ партнёра
- provider_uid
string
(обязательный)UID провайдера.
- username
string
(обязательный)
Пример: <имя_пользователя>логин пользователя в ЛК провайдера.
- password
string
(обязательный)
Пример: <пароль>пароль пользователя в ЛК провайдера.
string
(необязательный)
Пример: some-user@mail.ruE-mail адрес пользователя
- extras
object
(необязательный)
Пример: extras[first_name]=<имя>&extras[last_name]=<фамилия>...Дополнительные данные пользователя в форме ключ-значение.
Важно! Предопределённые имена дополнительных параметров (extras) перечислены в описании вызова “Пользователи -> Сгенерировать пользователя”.
200
Возвращает UID новой сессии.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": true,
"data": {
"user_uid": "<UID пользователя>",
"session_uid": "<UID сессии>",
}
}
400
Не удалось создать запись из-за ошибки в параметрах.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "<UID ошибки>",
"reason": "<reason of error, internal description for developers>",
"parameter": "<name of associated parameter or null>"
}, ...
]
}
Возможные UID ошибок:
401
Неизвестный (или некорректный) публичный ключ партнёра.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "unauthorized",
"reason": "Cannot find public_key <partner_public_key>",
"parameter": "partner_public_key"
}
]
}
Возможные UID ошибок:
Послать ответ капчи ¶
POST/user_sessions/{user_session_uid}/captcha{?partner_public_key,provider_uid,captcha_code}
Посылает код ответа капчи серверу SMUVA для продолжения обработки запроса.
Пример URI вызова:
- partner_public_key
string
(обязательный)
Пример: 00000001-0000-0000-0000-000000000002Публичный ключ партнёра
- user_session_uid
string
(обязательный)UID сессии
- provider_uid
string
(обязательный)UID провайдера.
- captcha_code
string
(обязательный)
Пример: <ответ на капчу>Код капчи с картинки.
200
Возвращает подтверждение успеха обработки.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": true,
}
400
Не удалось обработать запрос из-за ошибки в параметрах.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "<UID ошибки>",
"reason": "<reason of error, internal description for developers>",
"parameter": "<name of associated parameter or null>"
}, ...
]
}
Возможные UID ошибок:
401
Неизвестный (или некорректный) публичный ключ партнёра.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "unauthorized",
"reason": "Cannot find public_key <partner_public_key>",
"parameter": "partner_public_key"
}
]
}
Возможные UID ошибок:
Послать код подтверждения из СМС ¶
POST/user_sessions/{user_session_uid}/sms_code{?partner_public_key,provider_uid,sms_code}
Посылает код подтверждения из СМС серверу SMUVA для продолжения обработки запроса.
Пример URI вызова:
- partner_public_key
string
(обязательный)
Пример: 00000001-0000-0000-0000-000000000002Публичный ключ партнёра
- user_session_uid
string
(обязательный)UID сессии
- provider_uid
string
(обязательный)UID провайдера.
- sms_code
string
(обязательный)
Пример: <код из СМС>Код подтверждения из СМС.
200
Возвращает подтверждение успеха обработки.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": true,
}
400
Не удалось обработать запрос из-за ошибки в параметрах.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "<UID ошибки>",
"reason": "<reason of error, internal description for developers>",
"parameter": "<name of associated parameter or null>"
}, ...
]
}
Возможные UID ошибок:
401
Неизвестный (или некорректный) публичный ключ партнёра.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "unauthorized",
"reason": "Cannot find public_key <partner_public_key>",
"parameter": "partner_public_key"
}
]
}
Возможные UID ошибок:
Клонировать существующую сессию ¶
POST/user_sessions/{user_session_uid}/clone{?partner_public_key}
Клонирует сессию и возвращает её UID. Новая сессия создается в состоянии ‘new’.
Пример URI вызова:
- partner_public_key
string
(обязательный)
Пример: 00000001-0000-0000-0000-000000000002Публичный ключ партнёра
- user_session_uid
string
(обязательный)UID пользовательской сессии
200
Возвращает UID новой сессии.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": true,
"data": <UID сессии>
}
401
Неизвестный (или некорректный) публичный ключ партнёра.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "unauthorized",
"reason": "Cannot find public_key <partner_public_key>",
"parameter": "partner_public_key"
}
]
}
Возможные UID ошибок:
Данные сессии ¶
GET/user_sessions/{session_uid}/{?partner_public_key,request_time,signature}
Возвращает данные сессии с конкретным UID. Требует использования приватного ключа, запрещено использовать данный вызов из Javascript-кода.
Пример URI вызова:
- partner_public_key
string
(обязательный)
Пример: 00000001-0000-0000-0000-000000000002Публичный ключ партнёра
- session_uid
string
(обязательный)UID сессии
- request_time
string
(обязательный)
Пример: 20170101120000Время генерации запроса (необходимо для формирования подписи запроса)
- signature
string
(обязательный)Подпись запроса с использованием приватного ключа партнёра Формирование подписи запроса
sha512(request_time . user_uid . session_uid . private_key)
При генерации подписи время запроса должно быть в формате YYYYMMDDHHmmss без пробелов и разделителей. Время должно быть указано в зоне UTC.
При проверке подписи запросы, подписанные более часа назад, отклоняются.
200
Возвращает данные сессии.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": true,
"data": {
"uid": <UID сессии>,
"user_uid": <UID пользователя>,
"provider_uid": <UID провайдера>,
"state": <состояние сессии>,
"status": <статус сессии>,
"created_at": <время создания сессии>,
"updated_at": <время последнего изменения сессии>,
"account_info": {
"<поле-1>": <значение-1>,
"<поле-2>": <значение-2>,
...
},
"details_data": [
{
"<поле-1>": <значение-1-1>,
"<поле-2>": <значение-1-2>,
...
},
{
"<поле-1>": <значение-2-1>,
"<поле-2>": <значение-2-2>,
...
},
...
],
"aggregates": {
"basic": [
{
"min_date_time": "<начало отчётного периода>",
"data_rows": <общее количество обработанных записей>,
}
],
"contacts": [
{
"<phone_number>": "<телефонный номер>",
"<total_count>": <общее число разговоров>,
"<outbound_count>": <число исходящих звонков>,
"<inbound_count>": <число входящих звонков>
},
...
],
"competitors": [
{
"<phone_number>": "<телефонный номер>",
"<sms_count>": <общее число смс>,
"<is_client>": <является клиентом?>
},
...
],
"services": [
{
"<phone_number>": "<телефонный номер сервиса>",
"<contact_frequency>": <общее количество контактов>
},
...
],
}
}
}
Список возможных значений статуса запроса и состояний сессии находятся в приложении к документации.
400
Не удалось обработать запрос из-за ошибки в параметрах.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "<UID ошибки>",
"reason": "<reason of error, internal description for developers>",
"parameter": "<name of associated parameter or null>"
}, ...
]
}
Возможные UID ошибок:
401
Неизвестный (или некорректный) публичный ключ партнёра.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "unauthorized",
"reason": "Cannot find public_key <partner_public_key>",
"parameter": "partner_public_key"
}
]
}
Возможные UID ошибок:
Статус сессии ¶
GET/user_sessions/{session_uid}/status{format}{?partner_public_key}
Возвращает статус сессии с конкретным UID.
По умолчанию возвращает JSON-ответ, но возможно получить в ответ страницу с HTML-формой, если использовать адрес с расширением html или указать text/html в HTTP-заголовке Accept
запроса.
Пример URI вызова:
- format
string
(необязательный)
Пример: .jsonФормат ответа, по умолчанию используется json.
- partner_public_key
string
(обязательный)
Пример: 00000001-0000-0000-0000-000000000002Публичный ключ партнёра
- session_uid
string
(обязательный)UID сессии
200
Возвращает данные сессии.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": true,
"data": {
"uid": <UID сессии>
"user_uid": <UID пользователя>
"provider_uid": <UID провайдера>
"status": <статус сессии>
"state": <состояние сессии>
"captcha_src": <картинка капчи для вставки в таг img>
}
}
Список возможных значений статуса запроса и состояний сессии находятся в приложении к документации.
400
Не удалось обработать запрос из-за ошибки в параметрах.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "<UID ошибки>",
"reason": "<reason of error, internal description for developers>",
"parameter": "<name of associated parameter or null>"
}, ...
]
}
Возможные UID ошибок:
401
Неизвестный (или некорректный) публичный ключ партнёра.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "unauthorized",
"reason": "Cannot find public_key <partner_public_key>",
"parameter": "partner_public_key"
}
]
}
Возможные UID ошибок:
Партнер ¶
Эта группа API-вызовов предоставляет информацию о партнере, в частности, обеспечивает доступ к логотипу партнера.
Для доступа к данным необходимо предоставить публичный ключ партнера (partner_public_key) в качестве параметра запроса.
Информация о партнёре ¶
GET/partners/details{?partner_public_key}
Возвращает краткую информацию о логотипе партнера.
Пример URI вызова:
- partner_public_key
string
(обязательный)
Пример: 00000001-0000-0000-0000-000000000002Публичный ключ партнёра
200
Возвращает публичный ключ и URL логотипа (на данный момент не используется) партнера.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": true,
"data": {
"public_key": "<публичный ключ партнера>",
"site_url": "<URL сайта партнера>",
"logo_url": "<URL логотипа>",
}
}
401
Неизвестный (или некорректный) публичный ключ партнёра.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "unauthorized",
"reason": "Cannot find public_key <partner_public_key>",
"parameter": "partner_public_key"
}
]
}
Возможные UID ошибок:
Логотип партнёра в двоичном виде ¶
GET/partners/logo.png{?partner_public_key}
Возвращает логотип в двоичном виде, в формате PNG, с соответствующими HTTP-заголовками.
Пример URI вызова:
- partner_public_key
string
(обязательный)
Пример: 00000001-0000-0000-0000-000000000002Публичный ключ партнёра
200
Заголовки ответа:
Content-Type: image/png
Тело ответа:
Возвращает логотип партнера в двоичном формате png.
401
Неизвестный (или некорректный) публичный ключ партнёра.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "unauthorized",
"reason": "Cannot find public_key <partner_public_key>",
"parameter": "partner_public_key"
}
]
}
Возможные UID ошибок:
Логотип партнёра в виде base64 inline ¶
GET/partners/logo/base64{?partner_public_key}
Возвращает логотип в формате вида: “data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA…”. Строка может быть использована для задания значения атрибута “src” HTML-тега "".
Пример URI вызова:
- partner_public_key
string
(обязательный)
Пример: 00000001-0000-0000-0000-000000000002Публичный ключ партнёра
200
Возвращает логотип партнера в формате base64 inline.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": true,
"data": {
"image_source": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA...",
}
}
401
Неизвестный (или некорректный) публичный ключ партнёра.
Заголовки ответа:
Content-Type: application/json
Тело ответа:
{
"success": false,
"errors": [
{
"uid": "unauthorized",
"reason": "Cannot find public_key <partner_public_key>",
"parameter": "partner_public_key"
}
]
}
Возможные UID ошибок:
Приложение 1. Статусы ¶
Таблица статусов
Возможные статусы (ПЯ = Почтовый Ящик для отчётов о детализации):
Значение | Краткое описание | Примечание |
---|---|---|
new |
Новый запрос | Запрос ещё не обрабатывается |
login_form |
Страница логина получена | Получена форма авторизации от провайдера |
login_form_unavailable |
Страница логина недоступна | Форма авторизации недоступна, запрос не удался |
login_form_invalid |
Форма логина некорректна | Форма авторизации некорректна, запрос не удался |
login_captcha |
Получена капча при попытке логина | Получено требование ввода капчи, необходимы дополнительные действия пользователя |
login_captcha_submitted |
Капча принята от пользователя | Код капчи от пользователя получен и отправляется провайдеру |
login_captcha_incorrect |
Капча отклонена сервисом | Код капчи введён неверно, требуется повторный ввод нового кода |
login_captcha_invalid |
Не удалось определить капчу при попытке логина | Ошибка при обработке капчи, необходимо начать процесс авторизации с начала |
login_service_unavailable |
Сервис ЛК временно недоступен | Авторизация не удалась по причине недоступности сервиса |
login_failed |
Авторизация не удалась | Авторизация не удалась, требуется повторная авторизация |
login_failed_user_not_found |
Авторизация не удалась, пользователь не найден | Авторизация не удалась: пользователь не найден, требуется повторная авторизация (только для Билайн) |
login_failed_bad_login_or_password |
Авторизация не удалась, неправильный логин или пароль | Авторизация не удалась: неправильная комбинация логина и пароля, требуется повторная авторизация (только для Билайн) |
login_failed_server_error |
Авторизация не удалась, ошибка сервера, попробуйте повторить позже | Авторизация не удалась по причине неизвестной ошибки сервиса (только для Билайн) |
login_failed_timeout |
Авторизация не удалась, превышено время ожидания, пожалуйста, попробуйте еще раз | Авторизация не удалась, превышено время ожидания, пожалуйста, попробуйте еще раз (на данный момент определяется только для Билайн) |
login_failed_password_expired |
Авторизация не удалась, пароль недействителен, необходимо получить новый пароль | Авторизация не удалась, пароль недействителен, необходимо получить новый пароль (на данный момент определяется только для Билайн) |
member_area |
Получена главная страница ЛК | Получена главная страница ЛК пользователя |
account_info |
Получены данные абонента в ЛК | Получены данные пользователя в ЛК |
account_info_failed |
Не удалось получить данные абонента в ЛК | Произошла ошибка при получении данных пользователя в ЛК |
account_info_service_unavailable |
Сервис получения данных абонента в ЛК недоступен | Данные пользователя в ЛК недоступны - получен отказ от сервиса провайдера |
details_data |
Получены данные детализации в ЛК | Получены данные детализации, обработка успешно завершена |
details_data_failed |
Не удалось получить данные детализации в ЛК | Не удалось получить данные детализации по неизвестным причинам |
details_data_forbidden |
Запрещён доступ к данным детализации в ЛК | Получение данных детализации для данного пользователя запрещено провайдером |
details_data_request_failed |
Запрос на детализацию не удался | Запрос данных детализации не удался |
details_data_service_unavailable |
Сервис получения данных детализации в ЛК недоступен | Не удалось получить данные детализации, т.к. сервис недоступен |
details_data_service_not_free |
Данные детализации в ЛК не бесплатны | Не удалось получить данные детализации, т.к. сервис платный |
details_data_mailbox_unavailable |
Отчёт о детализации: почтовый ящик недоступен | Не удалось получить данные детализации, т.к. ПЯ недоступен |
details_data_mailbox_empty |
Отчёт о детализации: почтовый ящик пуст | Не удаётся получить данные детализации, так как ПЯ пуст |
details_data_mailbox_query_failed |
Отчёт о детализации не удалось получить с email | Не удалось получить данные детализации, т.к. запрос к ПЯ не удался |
details_data_report_parsing_failed |
Отчёт о детализации не соответствует требуемому формату | Не удалось провести парсинг отчёта детализации (ошибка формата) |
details_pipes_request_failed |
Запрос к внутреннему API подтверждения детализации не удался | Не удалось выполнить запрос к внутреннему API для подтверждения корректности запроса детализации (только для Мегафон) |
details_data_maximum |
Достигнуто максимальное количество последовательных неуспешных попыток автоматического разгадывания капчи, попробуйте повторить запрос | Достигнуто максимальное количество последовательных неуспешных попыток автоматического разгадывания капчи, попробуйте повторить запрос (для ОСАГО) |
details_data_osago_error_response |
Сведения о транспортном средстве с указанными реквизитами не найдены | Сведения о транспортном средстве с указанными реквизитами не найдены (для ОСАГО) |
details_data_no_orders |
Не было совершено ни одного заказа | Не было совершено ни одного заказа (для АлиЭкспресс) |
details_data_verification_code_request |
Ожидается подтверждение получения детализации с помощью кода из СМС | Получено требование подтвердить получение детализации с помощью кода из СМС |
details_data_verification_code_submitted |
Код из СМС принят от пользователя | Код из СМС от пользователя получен и отправляется провайдеру |
details_data_verification_code_incorrect |
Код из СМС отклонён сервисом | Код из СМС введён неверно, требуется повторный ввод посланного кода |
details_data_verification_code_fatal |
Не удалось подтвердить получение детализации с помощью кода из СМС | Ошибка при обработке кода из СМС, необходимо начать запрос на детализацию с начала |
aggregates_calculated |
Агрегаты успешно расчитаны | |
completed_successfully |
Обработка успешно завершена |
Список состояний сессии
-
new
- сессия только создана, не поступила в обработку. -
authenticating
- сессия в процессе авторизации пользователя в ЛК, возможна ошибка авторизации или выдача капчи. -
login_failed
- сессия закончилась ошибкой авторизации. Более подробная информация может быть получена в статусе. -
captcha
- сессия получила запрос на ввод капчи, необходимо дополнительное действие пользователя по вводу капчи. -
sms_code
- сессия получила запрос на подтверждение операции с помощью кода из СМС, необходимо дополнительное действие пользователя по вводу кода из СМС. -
collecting_data
- сессия в процессе сбора данных в ЛК пользователя, требуется дождаться завершения обработки. -
failed
- сессия завершилась ошибкой, не все данные получены. Более подробная информация может быть получена в статусе. -
completed
- сессия успешно завершена, все данные получены.
Приложение 2. ОСАГО: Формат данных ¶
{
'data':
{
'account_info':
{
"car_vin":"4USBT53544LT26841",
"car_lp":"У646НС"
"car_lp_original":"У646НС64"
"errors":[]
},
'created_at': '2016-03-15T21:51:40.161Z',
'details_data':
[
{
"insurance_policy_number":"0337091535",
"insurance_policy_series":"ЕЕЕ",
"insurance_policy_restricted":"0",
"insurance_company_name":"РОСГОССТРАХ",
"insurance_policy_unique_id":"221788955"
"car_vin": "WV2ZZZ7HZDH025257",
"car_chassis_number": "N/A",
"car_body_number": "N/A",
"insurance_policy_valid_thru": "17.09.2016",
"insurance_policy_status": "Находится у страхователя" }
],
'provider_uid': '00000000-0004-0004-0004-000000000000',
'state': 'completed',
'status': 'details_data',
'uid': '9749157c-c06e-4e85-8a84-b57dfada0f20',
'updated_at': '2016-03-15T21:51:42.439Z',
'user_uid': 'f867ff4a-9738-4f72-aa32-fafdbf75ba3e'
},
'success': True
}
В словаре data:account_data
присутствуют поля
-
car_vin
- VIN, используемый при запросе -
car_lp
- ГРЗ, для которого были получены данные (при обработке, если для точного номера не найдены данные, автоматически убирается код региона и производится повторный, расширенный поиск) -
car_lp_original
- ГРЗ, используемый при запросе -
errors
- Список частных ошибок (каждая ошибка - в виде отдельной строки), если таковые встретились.
В списке data:details_data
имеется один словарь с полями:
-
insurance_policy_number
- номер полиса ОСАГО, -
insurance_policy_series
- серия полиса ОСАГО -
insurance_policy_restricted
- наличие ограничения полиса ОСАГО -
insurance_company_name
- страховая компания -
insurance_policy_unique_id
- уникальный ID полиса -
insurance_policy_valid_thru
- дата окончания действия полиса -
insurance_policy_status
- статус полиса -
car_vin
- VIN номер, если найден. В случае отсутствия VIN в полученных данных в качестве замены будут, при наличии, использоватьсяcar_body_number
илиcar_chassis_number
(в указанном порядке приоритета). -
car_chassis_number
- номер шасси, или N/A, если не найден. -
car_body_number
- номер кузова, или N/A, если не найден.
В случае отсутствия данных о страховке data:details_data
имеет такой вид:
[
{
"insurance_error_message":"Сведения о договоре ОСАГО с указанными реквизитами не найдены, но это не является основаниям для отказа в получении выплаты"
}
]
Приложение 3. Мобильные операторы Казахстана: Формат данных ¶
Оператор Билайн-Казахстан
Данные абонента:
email: адрес электронной почты, может быть пустым
name: имя абонента, может быть пустым
balance: баланс
region: регион
blocked: признак блокировки, всегда false
Данные детализации:
date_time: время звонка/операции
service: тип операции
number: номер, на который звонили
duration: длительность звонка/операции
cost: стоимость вызова/операции, всегда false
Оператор Теле2-Казахстан
Данные абонента:
email: адрес электронной почты, всегда пустой
name: имя абонента
balance: баланс
region: регион
blocked: признак блокировки, всегда false
Данные детализации:
date_time: время звонка/операции
service: тип операции
number: номер, на который звонили
duration: длительность звонка/операции
cost: стоимость вызова/операции
Оператор Altel
Данные абонента:
email: адрес электронной почты, может быть пустым
name: имя абонента, может быть пустым
balance: баланс
region: регион, всегда пустой
blocked: признак блокировки, всегда false
Данные детализации:
date_time: время звонка/операции
service: тип операции
number: номер, на который звонили
duration: длительность звонка/операции
cost: стоимость вызова/операции