Версия 1.18 · 30.09.2026 · ООО «АвтоОнлайн»
Инструкция содержит минимальный путь от входа до готового отчёта. Состав данных зависит от приобретённого пакета доступа.
partyid, password и accessId.POST /api/login и сохраните поле token.POST /api/graphql-data с заголовком
Authorization: Bearer <token>.
completed: false, повторяйте тот же запрос через 5–30
секунд.
| Окружение | Базовый URL | GraphQL |
|---|---|---|
| Production | https://avtoonline.pro |
https://avtoonline.pro/api/graphql-data |
| Sandbox | https://int-graphql.avtoonline.tech |
https://int-graphql.avtoonline.tech/api/graphql-data |
curl -X POST https://int-graphql.avtoonline.tech/api/login \
-H "Content-Type: application/json" \
-d '{"partyid":"<PARTY_ID>","password":"<PASSWORD>"}'
{
"token": "<JWT_TOKEN>",
"party": {
"accessPackages": [
{
"id": "<ACCESS_ID>"
}
]
}
}
Срок действия токена — 7 суток. После истечения получите новый через
POST /api/login; ответ 401 на запросы данных означает отсутствующий
или истёкший токен.
curl -X POST https://int-graphql.avtoonline.tech/api/graphql-data \
-H "Content-Type: application/json; charset=utf-8" \
-H "Authorization: Bearer <JWT_TOKEN>" \
-d '{
"query": "query History($vin:String!,$accessId:String!){getCarHistoryPackage(vin:$vin,accessId:$accessId){vin completed baseInfo}}",
"variables": {"vin":"<VIN>","accessId":"<ACCESS_ID>"}
}'
{
"data": {
"getCarHistoryPackage": {
"vin": "<VIN>",
"completed": false,
"baseInfo": null
}
}
}
completed: false — штатный ответ: часть данных ещё собирается.
completed: true означает, что все выбранные секции завершены или для них получен
финальный ответ об отсутствии данных.
В GraphQL-запрос включайте только нужные поля:
baseInfo, customs, regActions,
ownershipPeriods, hijacked, mileageHistory,
pledges, repairs, repairsBy, repairsKz,
accidents, auctions, bidCars, encar,
osago, restrictions, taxi, avtoonline,
photos, audatex_photos, fines,
serviceData, marketPrice, recyclingFee.
Машиночитаемый состав полей: car_history_package.openapi.json.
{
"query": `
query History($vin:String!,$accessId:String!,$counterpartyId:String,$encarVehicleId:String) {
getCarHistoryPackage(vin:$vin,accessId:$accessId,counterpartyId:$counterpartyId,encarVehicleId:$encarVehicleId) {
vin
completed
baseInfo
ownershipPeriods
accidents
repairs
bidCars
encar
avtoonline
photos
audatex_photos
fines
serviceData
marketPrice
recyclingFee
}
}
`,
"variables": {
"vin": "<VIN>",
"accessId": "<ACCESS_ID>",
"counterpartyId": null,
"encarVehicleId": null
}
}
Большинство секций возвращается как JSON-строка. Распарсите её на стороне клиента. Типичная обёртка:
{
"value": [],
"success": true,
"status": "completed",
"checkDateTime": "2026-07-21T10:00:00Z",
"createdDateTime": "2026-07-21T10:00:00Z"
}
Поле секции может быть null, если она не входит в пакет, не была запрошена, ещё
не готова или данные не найдены.
В секциях repairs, repairsBy и repairsKz каждый элемент
value[] содержит объекты стоимости labourCost,
partsCost, paintCost и totalCost. Объект стоимости
состоит из полей:
| Поле | Тип | Описание |
|---|---|---|
text |
string | Сумма в виде строки. |
cur |
string | null |
Код валюты суммы в том виде, как его передаёт источник, например
RUR, RUB, BYN, BYR,
KZT. Равен null, если источник не передал валюту.
|
withVAT |
string | null |
Значение в виде, полученном от источника, без интерпретации. Равно null,
если источник не передал атрибут.
|
"totalCost": { "text": "807.31", "cur": "BYN", "withVAT": "0" }
Суммы приходят в валюте расчёта и между валютами не пересчитываются: сравнивать их между собой
можно только с учётом cur. В частности, в истории Беларуси встречаются суммы в
BYR и BYN, различающиеся на четыре порядка.
Записи ремонтов, сохранённые до версии 1.18, могут приходить без полей cur и
withVAT до следующего обновления данных по этому VIN.
Используйте getCarHistoryPackageV2, если повторные обращения должны относиться к
одному заказу. Первый вызов выполняется без orderId:
{
"query": `
query HistoryV2($vin:String!,$accessId:String!,$counterpartyId:String) {
getCarHistoryPackageV2(vin:$vin,accessId:$accessId,counterpartyId:$counterpartyId) {
order {
id
accessId
vin
counterpartyId
expiresAt
requestLimit
requestsUsed
}
package {
vin
completed
baseInfo
}
}
}
`,
"variables": {
"vin": "<VIN>",
"accessId": "<ACCESS_ID>",
"counterpartyId": null
}
}
{
"data": {
"getCarHistoryPackageV2": {
"order": {
"id": "<ORDER_ID>",
"expiresAt": "2026-07-22T10:00:00Z",
"requestLimit": 100,
"requestsUsed": 1
},
"package": {
"vin": "<VIN>",
"completed": false
}
}
}
}
При polling передавайте тот же orderId, accessId, VIN и, если
использовался, тот же counterpartyId.
Списание привязано к заказу: повторные обращения по тому же orderId доступ не
списывают. Границы заказа — срок expiresAt и лимит обращений
requestLimit, оба возвращаются в ответе. По истечении
expiresAt заказ не читается — начните новый вызов без orderId.
Поведение после completed: true зависит от настройки пакета
forceCloseCompletedHistoryOrders — её значение возвращает
getAccessPackage (раздел 5):
orderId работает и после готового
ответа, доступ не списывается: completed: true означает «все данные получены»,
а не «доступ отозван»;
completed: true заказ закрывается, а повтор с
прежним orderId возвращает ошибку «заказ закрыт» (раздел 7). Сохраните готовый
ответ: новые данные запрашиваются вызовом без orderId, то есть новым заказом.
Если пакет разрешает поиск по госномеру, используйте
getCarHistoryPackageByRegNumber. Для сценария с заказом доступен
getCarHistoryPackageByRegNumberV2.
{
"query": `
query HistoryByReg($reg:String!,$accessId:String!) {
getCarHistoryPackageByRegNumber(regNumber:$reg,accessId:$accessId) {
vin
completed
baseInfo
avtoonline
photos
}
}
`,
"variables": {
"reg": "<ГОСНОМЕР>",
"accessId": "<ACCESS_ID>"
}
}
Разрешённый способ поиска указан в vehicleIdentifierMode пакета:
VIN, REG_NUMBER или VIN_OR_REG_NUMBER.
Запрос оформлен одним компактным блоком:
{
"query": `
query AccessPackage($accessId:String!,$offset:Int!,$limit:Int!,$vin:String) {
getAccessPackage(id:$accessId) {
id
downloadsTotal
startDate
endDate
downloadsRemaining
historyOrderTtlSeconds
forceCloseCompletedHistoryOrders
vehicleIdentifierMode
usageLogs(offset:$offset,limit:$limit,sortOrder:"desc",vinPart:$vin) {
totalCount
offset
limit
logs {
timestamp
accessPackageId
vin
deducted
}
}
}
}
`,
"variables": {
"accessId": "<ACCESS_ID>",
"offset": 0,
"limit": 50,
"vin": null
}
}
avtoonline.value[].photos — фотографии конкретного аукциона. Если автомобиль
продавался несколько раз, каждая запись аукциона содержит только свои фотографии.
photos — фотографии автомобиля AutoOnline общим списком по VIN. Поля
url и fileName не гарантируются как стабильные ключи для
сопоставления.
audatex_photos — фотографии повреждений. Поле
audatex_photos.value[].guid содержит GUID, полученный от Audatex без изменений.
repairs.value[].audaHistoryDetails.caseAttachments.audaHistoryCaseAttachment[].
GUID Audatex не заменяется идентификатором AutoOnline, именем файла, URL или идентификатором заказа. В верхнеуровневой секции и во вложении ремонта для одной фотографии возвращается одно и то же значение.
Каждая запись avtoonline.value[] всегда содержит id локального лота,
country со значением RU и wan, равный тому же ID лота.
Эти три поля не зависят от отдельных признаков dataSetAvtoonline. Площадку
показывает поле productName: AVTO_ONLINE или AVTO_PARK.
Оно включается признаком «Наименование продукта» в dataSetAvtoonline и
отсутствует, если признак выключен.
Поля добавлены в строгую JSON Schema с additionalProperties: false. Если клиент
хранит локальную копию схемы, её нужно обновить до чтения нового ответа.
В секции поставщика auctions поля id, country и
wan могут быть null, а в локальной секции
avtoonline они обязательны и не равны null. Для этих секций нельзя
использовать одну модель без учёта различий.
За один запрос avtoonline.value[] содержит записи одной локальной площадки. Если
у VIN есть доступные аукционы AutoOnline, возвращаются они; записи AutoPark возвращаются,
когда доступных аукционов AutoOnline нет.
Поля auctionStartDate и auctionEndDate показывают период проведения
аукциона в ISO 8601. Они включаются одним признаком пакета доступа «Даты проведения аукциона»;
если признак выключен, оба поля отсутствуют.
Блок photos внутри записи аукциона отдаётся, если он включён в вашем пакете
доступа. Он не зависит от секции photos: их можно получать вместе или по
отдельности. Пустой массив означает, что у этого аукциона нет доступных фотографий, а
отсутствие блока — что он не входит в пакет.
Пример для VIN с двумя аукционами: у каждого аукциона свой набор фотографий, они не смешиваются.
{
"value": [
{
"id": "a1b2c3d4",
"country": "RU",
"wan": "a1b2c3d4",
"onAuction": true,
"productName": "AVTO_ONLINE",
"auctionStartDate": "2026-01-14T09:00:00Z",
"auctionEndDate": "2026-01-16T12:00:00Z",
"brand": "Acura",
"model": "TLX",
"photos": [
{
"description": "",
"fileName": "front.jpg",
"url": "https://<временная ссылка>/front.jpg",
"urlValidTill": "2026-01-23T12:00:00Z",
"size": 412
}
]
},
{
"id": "e5f6g7h8",
"country": "RU",
"wan": "e5f6g7h8",
"onAuction": true,
"productName": "AVTO_ONLINE",
"auctionStartDate": "2025-11-25T10:00:00Z",
"auctionEndDate": "2025-11-27T12:00:00Z",
"brand": "Acura",
"model": "TLX",
"photos": [
{
"description": "",
"fileName": "side.jpg",
"url": "https://<временная ссылка>/side.jpg",
"urlValidTill": "2026-01-23T12:00:00Z",
"size": 388
}
]
}
],
"success": true,
"status": "OK"
}
Ссылки во вложенном блоке временные и работают по тем же правилам, что и в секции
photos.
Временная ссылка открывается без JWT до urlValidTill. Не публикуйте её и не
записывайте целиком в логи. 403 означает повреждённую ссылку, 410 —
истёкший срок. Для новой ссылки повторно запросите готовый пакет.
| HTTP | Причина | Действие |
|---|---|---|
| 400 | Ошибка JSON, query или variables | Сверьте запрос со схемой. |
| 401 | JWT отсутствует или истёк |
Проверьте Authorization: Bearer <token> или получите новый токен.
|
| 403 | Нет прав или способ поиска запрещён пакетом | Проверьте accessId и vehicleIdentifierMode. |
| 429 | Превышен лимит | Снизьте частоту запросов и добавьте задержку. |
| 5xx | Временная ошибка сервиса | Повторите запрос позже. |
GraphQL-ошибки возвращаются в массиве errors. HTTP 200 не гарантирует отсутствие
бизнес-ошибки — всегда проверяйте этот массив.
При включённой настройке пакета forceCloseCompletedHistoryOrders повторное
обращение по orderId выполненного заказа возвращает HTTP 200 с ошибкой в
errors:
{
"errors": [
{
"message": "полная информация по заказу передана, заказ закрыт",
"path": [
"getCarHistoryPackageV2"
]
}
],
"data": null
}
Это не сбой сервиса: заказ уже отдал готовый ответ. Пока ответ не готов (completed: false), повторы по тому же orderId остаются доступны. Для новых данных выполните
вызов без orderId — создаётся новый заказ.
Технические вопросы: hello@avtoonline.pro. Sandbox GraphQL: https://int-graphql.avtoonline.tech/api/sandbox-data.
В версии 1.18 в объекты стоимости секций ремонтов добавлены поля cur и
withVAT (раздел 2.1). Поля добавлены в строгую JSON Schema с
additionalProperties: false. Если клиент хранит локальную копию схемы, её нужно
обновить до чтения нового ответа. Остальной внешний контракт версии 1.17 сохранён.
В версии 1.17 добавлены срок действия JWT, правило списания по заказу и описание ошибки
повторного запроса по закрытому заказу при включённой настройке
forceCloseCompletedHistoryOrders. Остальной внешний контракт версии 1.16
сохранён.
В версии 1.16 уточнён контракт guid фотографий Audatex. Обычная секция
photos не содержит GUID Audatex; остальной внешний контракт версии 1.15 сохранён.
Дополнение без смены версии: в записях аукциона avtoonline.value[] появился
необязательный блок photos с фотографиями этого аукциона. Изменение обратно
совместимо — существующие поля и секция photos работают как прежде.
