API

API «История АО+»

Версия 1.18 · 30.09.2026 · ООО «АвтоОнлайн»

Инструкция содержит минимальный путь от входа до готового отчёта. Состав данных зависит от приобретённого пакета доступа.

1. Первый запрос

  1. Получите partyid, password и accessId.
  2. Выполните POST /api/login и сохраните поле token.
  3. Отправьте запрос на POST /api/graphql-data с заголовком Authorization: Bearer <token>.
  4. Если ответ содержит 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

1.1. Получение JWT

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 на запросы данных означает отсутствующий или истёкший токен.

1.2. Минимальный GraphQL-запрос

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 означает, что все выбранные секции завершены или для них получен финальный ответ об отсутствии данных.

2. Доступные секции

В 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, если она не входит в пакет, не была запрошена, ещё не готова или данные не найдены.

2.1. Стоимости в секциях ремонтов

В секциях 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.

3. Запрос с заказом

Используйте 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, то есть новым заказом.

4. Запрос по государственному номеру

Если пакет разрешает поиск по госномеру, используйте 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.

5. Проверка пакета доступа

Запрос оформлен одним компактным блоком:

{
  "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
  }
}

6. Фотографии и временные ссылки

  • 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 или идентификатором заказа. В верхнеуровневой секции и во вложении ремонта для одной фотографии возвращается одно и то же значение.

6.1. Даты и фотографии по каждому аукциону

Каждая запись 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 — истёкший срок. Для новой ссылки повторно запросите готовый пакет.

7. Ошибки

HTTP Причина Действие
400 Ошибка JSON, query или variables Сверьте запрос со схемой.
401 JWT отсутствует или истёк Проверьте Authorization: Bearer <token> или получите новый токен.
403 Нет прав или способ поиска запрещён пакетом Проверьте accessId и vehicleIdentifierMode.
429 Превышен лимит Снизьте частоту запросов и добавьте задержку.
5xx Временная ошибка сервиса Повторите запрос позже.

GraphQL-ошибки возвращаются в массиве errors. HTTP 200 не гарантирует отсутствие бизнес-ошибки — всегда проверяйте этот массив.

7.1. Запрос по закрытому заказу

При включённой настройке пакета forceCloseCompletedHistoryOrders повторное обращение по orderId выполненного заказа возвращает HTTP 200 с ошибкой в errors:

{
  "errors": [
    {
      "message": "полная информация по заказу передана, заказ закрыт",
      "path": [
        "getCarHistoryPackageV2"
      ]
    }
  ],
  "data": null
}

Это не сбой сервиса: заказ уже отдал готовый ответ. Пока ответ не готов (completed: false), повторы по тому же orderId остаются доступны. Для новых данных выполните вызов без orderId — создаётся новый заказ.

8. Поддержка и версия

Технические вопросы: 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 работают как прежде.

  • API «История АО+»
  • 1. Первый запрос
  • 2. Доступные секции
  • 3. Запрос с заказом
  • 4. Запрос по государственному номеру
  • 5. Проверка пакета доступа
  • 6. Фотографии и временные ссылки
  • 7. Ошибки
  • 8. Поддержка и версия
Стать клиентом
После получения Запроса мы свяжемся с Вами по телефону или e-mail в течение 24 часов в рабочее время.
Вы хотите
Продавать
Покупать
Укажите контактные данные