Отчёт — основная сущность сервиса Автокод. Он используется для предоставления клиенту информации по запрошенному ТС.
Получив запрос на генерацию отчёта, API создаёт пустой отчёт с уникальным идентификатором, который возвращает клиенту, и отправляет запрос к поставщикам данных. Для формирования отчётов используются данные из нескольких источников. После получения ответа от источника данные сразу добавляются в отчёт. Таким образом, все имеющиеся у сервиса сведения по транспортному средству доступны клиенту, даже если генерация отчёта ещё не завершена.
Отчёты уникальны относительно типа отчёта и идентификатора ТС. Запрос на генерацию отчёта с параметрами, которые уже передавались ранее пользователем домена, не создаёт новый отчёт, а возвращает идентификатор последнего сгенерированного по этим параметрам отчёта.
Операция перегенерации используется, чтобы принудительно обновить данные в отчёте. Уникальный идентификатор отчёта при этом не меняется, а имеющиеся данные не затираются.
Сгенерированный отчёт доступен клиенту в течение 6 месяцев. Просматривать отчёты может любой пользователь домена, имеющий права на доступ к используемому типу отчёта.
Изменение баланса происходит только при генерации и перегенерации отчёта. Операция запроса существующего отчёта бесплатна.
Тип отчёта определяет, какие данные будут содержаться в отчёте по транспортному средству.
Чтобы получить список доступных вам типов отчётов, используйте GET-запрос к /user/report_types
. В запросе можно указать дополнительные параметры получения ответа.
Параметр | Тип | Описание |
---|---|---|
Необязательные | ||
_can_generate |
boolean |
Отображение типов отчётов, доступных пользователю для генерации. Значение по умолчанию — false .Возможные значения:
|
_content |
boolean |
Наличие в теле ответа данных о составе отчёта (набор источников и полей). Значение по умолчанию — false .Возможные значения:
|
_query |
string |
Параметры фильтрации данных в ответе. Запрос представляет собой выражение, состоящее из одного или нескольких условий отбора, объединённых логическими операциями. Формат условия отбора: Ключ:[Префикс]Значение .Префикс указывает на отношение неравенства. Допустимые префиксы: ! , < , > . При обращении к полям со строковыми значениями допускается использование только отношений «равно» и «не равно».Допустимые логические операции: ; (OR), , (AND).Строковые значения должны быть заключены в апострофы. Внутри них не допускается использование символов ;:,!<>'" .Пример: _query=month_quote:<10,day_quote:>1
|
_size |
integer | Количество отчётов на одной странице ответа. Допустимые значения: от 1 до 100. Значение по умолчанию — 100 |
_offset |
integer | Количество объектов в ответе, которые необходимо пропустить. Значение по умолчанию — 0 |
_page |
integer | Номер страницы ответа. Значение по умолчанию — 1 |
_sort |
string | Порядок сортировки. Поля указываются через запятую, - перед названием поля указывает на сортировку по убыванию. Пример: -day_quote,name |
_calc_total |
boolean |
Наличие в теле ответа переменной total — количество доступных типов отчётов. Значение по умолчанию — false .Возможные значения:
|
curl -X GET \
--header 'Accept: application/json' \
--header 'Authorization: AR-REST dGVzdF91c2VyQHRlc3RfZG9tYWluOjE0ODM2MzQ3MjM6OTk5OTk5OTk5OjN3ZzgyRXVUd2VjMjkvT3ZRN215eUE9PQ==' \
'https://b2bapi.avtocod.ru/b2b/api/v1/user/report_types'
{
"state": "ok",
"size": 1,
"stamp": "2021-07-08T13:57:44.386Z",
"data": [
{
"state": "PUBLISHED",
"day_quote": 0,
"month_quote": 0,
"total_quote": 2000,
"domain_uid": "test_domain",
"max_age": 0,
"clean_options": {
"Process_Response": 0,
"Process_Request": 0,
"ReportLog": 0,
"Report": 0,
"BizLog": 0
},
"min_priority": 1,
"max_priority": 200,
"max_request": 0,
"period_priority": 0,
"report_make_mode": "",
"uid": "test_report_type@test_domain",
"name": "Отчет по умолчанию",
"comment": "",
"tags": "",
"created_at": "2021-07-07T07:38:48.343Z",
"created_by": "system",
"updated_at": "2021-07-07T07:38:48.343Z",
"updated_by": "system",
"active_from": "1900-01-01T00:00:00.000Z",
"active_to": "3000-01-01T00:00:00.000Z"
}
]
}
Для запуска процесса генерации отчёта отправьте POST-запрос к /user/reports/{REPORT_TYPE_UID}/_make
. В параметре REPORT_TYPE_UID
укажите нужный тип отчёта; в теле запроса передайте тип и значение идентификатора транспортного средства, по которому должен формироваться отчёт.
curl -X POST \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: AR-REST dGVzdF91c2VyQHRlc3RfZG9tYWluOjE0ODM2MzQ3MjM6OTk5OTk5OTk5OjN3ZzgyRXVUd2VjMjkvT3ZRN215eUE9PQ==' \
-d '{<тело запроса>}' \
'https://b2bapi.avtocod.ru/b2b/api/v1/user/reports/test_report_type@test_domain/_make'
{
"queryType": "GRZ",
"query": "А111АА77"
}
После получения запроса API проверяет баланс пользователя, генерирует отчёт и отправляет пользователю уникальный идентификатор отчёта.
В общем случае сгенерированный отчёт хранится в системе в течение 6 месяцев. Для каждого типа отчёта может быть настроен свой срок хранения: в переменной max_age
указывается период жизни отчёта в миллисекундах. По истечению срока хранения отчёта он удаляется, а отправка запроса на генерацию отчёта с теми же идентификаторами объекта создаст новый отчёт.
Если по транспортному средству уже существует отчёт, API вернёт уникальный идентификатор этого отчёта.
Ответ API включает массив data[]
, содержащий:
uid
,isnew
,process_request_uid
,suggest_get
.{
"state": "ok",
"size": 1,
"version": "2.0",
"stamp": "2021-08-12T05:39:23.640Z",
"data": [
{
"uid": "report_2_1628749485392@test_domain",
"isnew": true,
"process_request_uid": "report_2_1628749485392_c0a18626e5df4a50b3e2a21e86c884bc@test_domain",
"suggest_get": "2021-08-12T05:39:23.603Z"
}
]
}
Перегенерация отчёта позволяет получить обновлённые сведения о транспортном средстве, по которому ранее уже выполнялся запрос.
{primary.fa-exclamation} Перегенерация является платной операцией.
Для повторной генерации отчёта добавьте ключ FORCE
со значением true
в поле options
в теле запроса. Если по переданному идентификатору ещё не создавался отчёт, то запускается его генерация.
{
"queryType": "GRZ",
"query": "А111АА77",
"options": {
"FORCE": true
}
}
Идемпотентность при работе с API означает, что выполнение нескольких идентичных запросов не меняет состояние сервера и аналогично выполнению одного такого запроса.
Отправка идемпотентного запроса _make
гарантирует получение результата исходного запроса (uid
отчёта) без повторной генерации и, соответственно, изменения баланса. Такое поведение может использоваться, например, если API запустил процесс генерации отчёта, но пользователь по каким-либо причинам не получил идентификатор отчёта.
Для обеспечения идемпотентности используйте ключ идемпотентности idempotenceKey
в теле отправляемых запросов. Значением ключа может быть строка длиной от 1 до 50 символов.
{
"queryType": "GRZ",
"query": "А111АА77",
"idempotenceKey": "any_key"
}
Если API получает запрос на генерацию отчёта, содержащий ранее отправленные данные ТС и ключ идемпотентности, он обрабатывает его как повторный и возвращает пользователю uid
существующего отчёта. Если данные ТС те же, но ключ идемпотентности новый, запрос считается новым. При его обработке API генерирует новый отчёт с новым uid
и увеличивает счётчик заказанных отчётов.
Запрос с использованием ключа {"FORCE": true}
не является идемпотентным независимо от наличия idempotenceKey
, так как содержит явное указание на необходимость перегенерации отчёта.
API ограничивает количество входящих запросов на генерацию и перегенерацию отчётов за единицу времени. Ограничения на частоту запросов могут отличаться для разных типов отчётов.
В случае превышения установленного лимита запросов API вернёт HTTP-код 429
с типом ошибки TooManyRequests
. При получении такого сообщения рекомендуется увеличить интервалы между запросами. Более полные рекомендации вы можете получить у вашего менеджера.
Вы можете отслеживать изменения в состоянии отчёта, настроив отправку уведомлений о ходе построения отчёта.
API уведомляет о двух видах событий:
on_update
— обновление статуса одного из источников;on_complete
— обработаны ответы от всех источников.Подробнее о статусах источников
Если вы хотите получать уведомления о событиях построения отчёта, добавьте их описание в поле webhook
в разделе options
тела запроса на генерацию отчёта. Для этого передайте событие, на которое хотите подписаться, и URL, на который будет отправляться уведомление.
{
"queryType": "GRZ",
"query": "А111АА77",
"options": {
"webhook": {
"on_update": "http://example.com/2",
"on_complete": "http://example.com/3"
}
}
}
Уведомления представляют собой POST-запросы на адрес, указанный пользователем.
{
"report_uid": "report_2_1628749485392@test_domain",
"timestamp": 1630923487628,
"state": {
"sources": [
{
"_id": "references.base",
"state": "PROGRESS",
"extended_state": "NONE"
},
{
"_id": "base",
"state": "OK",
"extended_state": "OK"
}
]
},
"event": "on_update",
"status": "process"
}
{
"report_uid": "report_2_1628749485392@test_domain",
"timestamp": 1630921842742,
"state": {
"sources": [
{
"_id": "base",
"state": "OK",
"extended_state": "OK"
},
{
"_id": "references.base",
"state": "OK",
"extended_state": "OK"
}
]
},
"event": "on_complete",
"status": "finish"
}
Уведомления могут настраиваться для типа отчёта. Если запрос на генерацию не содержит описание уведомлений, то используются настройки для типа отчёта, указанные в объекте notification_desc
.
{
"notification_desc": {
"on_update": "http://example.com/1",
"on_complete": "http://example.com/0"
}
}
Для того, чтобы обратиться к ранее сформированному отчёту, используйте GET-запрос к /user/reports/{REPORT_DESC}
. В REPORT_DESC
укажите уникальный идентификатор отчёта, который был получен при генерации отчёта.
Используйте параметр запроса _content = true
, чтобы получить в ответе содержимое отчёта, или _content = false
, если вам требуется только заголовочная часть отчёта (например, статусы генерации отчёта и ответа источников или информация о времени последней генерации отчёта).
{primary.fa-info} Запрос на получение сгенерированного отчёта не изменяет баланс. Вы можете обращаться к отчёту неограниченное количество раз.
curl -X GET \
--header 'Accept: application/json' \
--header 'Authorization: AR-REST dGVzdF91c2VyQHRlc3RfZG9tYWluOjE0ODM2MzQ3MjM6OTk5OTk5OTk5OjN3ZzgyRXVUd2VjMjkvT3ZRN215eUE9PQ==' \
'https://b2bapi.avtocod.ru/b2b/api/v1/user/reports/report_2_1628749485392@test_domain?_content=true'
{
"state": "ok",
"size": 1,
"version": "2.0",
"stamp": "2021-09-06T13:01:35.467Z",
"data": [
{
"domain_uid": "test_domain",
"report_type_uid": "test_report_type@test_domain",
"vehicle_id": "А111АА77",
"query": {
"type": "GRZ",
"body": "А111АА77",
"schema_version": "1.0",
"storages": []
},
"progress_ok": 2,
"progress_wait": 0,
"progress_error": 0,
"state": {
"sources": [
{
"_id": "references.base",
"state": "OK",
"extended_state": "OK"
},
{
"_id": "base",
"state": "OK",
"extended_state": "OK"
}
]
},
"requested_at": "2021-07-07T07:42:27.008Z",
"content": {
"identifiers": {
"vehicle": {
"vin": "W1N4632761X366825",
"reg_num": "А111АА77",
"sts": "9931374070"
}
},
"tech_data": {
"brand": {
"name": {
"original": "МЕRСЕDЕS-ВЕNZ G-СLАSS АМG G 63",
"normalized": "Mercedes-Benz"
},
"id": "ID_MARK_MERCEDES_BENZ",
"logotype": {
"uri": "https://vl.imgix.net/img/mercedes-benz-logo.png"
}
},
"type": {
"name": "Универсал"
},
"body": {
"color": {
"name": "Черный",
"type": "Черный"
}
},
"year": 2020,
"engine": {
"fuel": {
"type": "Бензиновый",
"type_id": "ID_ENGINE_TYPE_PETROL"
},
"volume": 3982,
"power": {
"hp": 585,
"kw": 430
}
},
"weight": {
"netto": 2560,
"max": 3200
},
"drive": {
"type": "Полноприводной",
"type_id": "ID_DRIVING_WHEELS_TYPE_ALL"
},
"wheel": {
"position": "LEFT",
"position_id": "ID_STEERING_WHEEL_TYPE_LEFT"
},
"model": {
"id": "ID_MARK_MERCEDES_BENZ_MODEL_G_KLASS_AMG",
"name": {
"normalized": "G-Класс AMG"
}
}
},
"report_meta": []
},
"last_generation_stat": {
"start_time": "2021-07-07T07:42:30.000Z",
"complete_time": "2021-07-07T07:43:30.000Z",
"duration": 60000
},
"uid": "report_2_1628749485392@test_domain",
"name": "NONAME",
"comment": "",
"tags": "",
"created_at": "2021-07-07T07:42:26.919Z",
"created_by": "system",
"updated_at": "2021-07-07T07:42:29.707Z",
"updated_by": "system",
"active_from": "1900-01-01T00:00:00.000Z",
"active_to": "3000-01-01T00:00:00.000Z"
}
]
}
Для получения списка сформированных ранее отчётов отправьте GET-запрос к /user/reports
. В запросе можно указать дополнительные параметры получения ответа.
Параметр | Тип | Описание |
---|---|---|
Необязательные | ||
_content |
boolean |
Наличие в теле ответа содержимого отчёта. Значение по умолчанию — false .Возможные значения:
|
_query |
string |
Параметры фильтрации данных в ответе. Запрос представляет собой выражение, состоящее из одного или нескольких условий отбора, объединённых логическими операциями. Формат условия отбора: Ключ:[Префикс]Значение .Префикс указывает на отношение неравенства. Допустимые префиксы: ! , < , > . При обращении к полям со строковыми значениями допускается использование только отношений «равно» и «не равно».Допустимые логические операции: ; (OR), , (AND).Строковые значения должны быть заключены в апосторофы. Внутри них не допускается использование символов ;:,!<>'" .Пример: _query=query.body:!"А111АА77"
|
_size |
integer | Количество отчётов на одной странице ответа. Допустимые значения: от 1 до 100. Значение по умолчанию — 100 |
_offset |
integer | Количество объектов в ответе, которые необходимо пропустить. Значение по умолчанию — 0 |
_page |
integer | Номер страницы ответа. Значение по умолчанию — 1 |
_sort |
string | Порядок сортировки. Поля указываются через запятую, - перед названием поля указывает на сортировку по убыванию. Пример: -created_at,uid |
_calc_total |
boolean |
Наличие в теле ответа переменной total — количество заказанных отчётов. Значение по умолчанию — false .Возможные значения:
|
curl -X GET \
--header 'Accept: application/json' \
--header 'Authorization: AR-REST dGVzdF91c2VyQHRlc3RfZG9tYWluOjE0ODM2MzQ3MjM6OTk5OTk5OTk5OjN3ZzgyRXVUd2VjMjkvT3ZRN215eUE9PQ==' \
'https://b2bapi.avtocod.ru/b2b/api/v1/user/reports'
{
"state": "ok",
"size": 2,
"stamp": "2021-09-14T13:54:29.246Z",
"data": [
{
"domain_uid": "test_domain",
"report_type_uid": "test_report_type@test_domain",
"vehicle_id": "А111АА77",
"query": {
"type": "GRZ",
"body": "А111АА77",
"idempotenceKey": "2007",
"schema_version": "1.0",
"storages": {}
},
"progress_ok": 2,
"progress_wait": 0,
"progress_error": 0,
"state": {
"sources": [
{
"_id": "base",
"state": "OK",
"extended_state": "OK"
},
{
"_id": "references.base",
"state": "OK",
"extended_state": "OK"
}
]
},
"requested_at": "2021-09-06T10:38:26.682Z",
"last_generation_stat": {
"start_time": "2021-09-06T10:38:27.000Z",
"complete_time": "2021-09-06T10:39:27.000Z",
"duration": 60000
},
"uid": "report_2_1628749481312@test_domain",
"name": "NONAME",
"comment": "",
"tags": "",
"created_at": "2021-09-06T10:38:26.637Z",
"created_by": "system",
"updated_at": "2021-09-06T10:38:28.226Z",
"updated_by": "system",
"active_from": "1900-01-01T00:00:00.000Z",
"active_to": "3000-01-01T00:00:00.000Z"
},
{
"domain_uid": "test_domain",
"report_type_uid": "test_report_type@test_domain",
"vehicle_id": "А111АА77",
"query": {
"type": "GRZ",
"body": "А111АА77",
"idempotenceKey": "1312",
"schema_version": "1.0",
"storages": {}
},
"progress_ok": 2,
"progress_wait": 0,
"progress_error": 0,
"state": {
"sources": [
{
"_id": "references.base",
"state": "OK",
"extended_state": "OK"
},
{
"_id": "base",
"state": "OK",
"extended_state": "OK"
}
]
},
"requested_at": "2021-08-12T05:36:02.879Z",
"last_generation_stat": {
"start_time": "2021-08-12T05:36:03.000Z",
"complete_time": "2021-08-12T05:37:03.000Z",
"duration": 60000
},
"uid": "report_2_1628749485392@test_domain",
"name": "NONAME",
"comment": "",
"tags": "",
"created_at": "2021-08-12T05:36:02.831Z",
"created_by": "system",
"updated_at": "2021-08-12T05:36:06.868Z",
"updated_by": "system",
"active_from": "1900-01-01T00:00:00.000Z",
"active_to": "3000-01-01T00:00:00.000Z"
}
]
}