Личный кабинет

Главная → Блог → Как автосалону и площадке собрать аналог автотеки по VIN через API

История автомобиля

Как автосалону и площадке собрать аналог автотеки по VIN через API

· Редакция AvtoVinCod · 11 мин чтения

Как автосалону и площадке собрать аналог автотеки по VIN через API

Сводный отчёт по истории авто собирают из нескольких методов API по одному VIN: история регистрации с владельцами, ДТП по базе ГИБДД, ограничения и розыск, залог, пробег по техосмотрам, сервисная история. Один Bearer-токен, ответы в JSON, оплата только за выполненную проверку, а тестовые значения бесплатны. Бесплатной проверки по боевым данным для бизнеса нет: нужно пополнение от 100 ₽, зато отчёт встраивается в карточку авто на сайте или в CRM и выглядит так, как нужно вам, а не стороннему сервису.

Ниже - из каких блоков состоит такой отчёт, какие методы за что отвечают, как собрать всё одним скриптом и сколько это стоит по прайсу. Если нужно просто понять общую логику проверки по VIN, есть отдельный материал: отчёт по VIN для бизнеса. Здесь - именно сборка полного отчёта по автомобилю.

Из чего состоит полный отчёт по автомобилю

Покупатель, открывая такой отчёт, ищет ответы на несколько вопросов. Сколько было владельцев и как долго. Попадала ли машина в ДТП. Скручен ли пробег. Нет ли запретов на регистрацию, залога и розыска. Не работала ли она в такси или каршеринге. Что с ней делали в сервисе. Всё остальное (растаможка, отзывные кампании, лизинг) - приятные дополнения, но без шести перечисленных блоков отчёт выглядит пустым.

Почему "бесплатно" не работает для бизнеса

Запрос "проверка по VIN бесплатно" - это запрос частного покупателя одной машины. Для бизнеса, который гоняет сотни проверок в день, бесплатных боевых данных нет: за каждым ответом стоит обращение к государственному реестру. Бесплатно у нас вот что:

Всё остальное платно, и это нормально: себестоимость полного отчёта мы посчитаем дальше, она измеряется десятками рублей.

Блоки отчёта и методы

Блок отчётаМетод
Владельцы, периоды, ПТС/vin (история регистрации)
ДТП, быстро/accidents (архив)
ДТП, глубоко/accidents-rt (база ГИБДД)
Запреты, розыск/score
Залог/pledge
Пробег/probeg
Такси/taxi, /osago-history
Каршеринг, лизинг/sharing, /lizing
Ремонты и ТО/service
Суды и долги/lawsuits, /enforcement

Шаг 1. Нормализуем вход: VIN, госномер, номер кузова

Отчёт строится по VIN, но пользователи приходят с чем попало. Продавец на площадке указал госномер, у менеджера выкупа в руках только фото, японская машина вообще без VIN в привычном виде. Поэтому первый слой - приведение входа к одному идентификатору.

Если есть госномер, вызываем VIN по госномеру: GET /gos2vin?plate=А123ВС77. В ответе VIN, номер кузова или шасси, данные СТС, марка, модель, год, мощность и признак такси. Стоит 8 ₽. Обратная операция - /vin2gos, 6 ₽. Для авто без VIN (типичные японские) большинство методов принимает номер кузова: /body для истории регистрации, /score-body для ограничений, /probeg?body=, /pledge?body=.

До платного отчёта полезна быстрая карточка. /brief (1 ₽) отдаёт марку, модель, год, мощность, тип и объём двигателя, руль, массу. /decode (1,6 ₽) расшифровывает сам VIN: поколение, кузов, коробку, привод, завод сборки. Поле full=1 говорит, что определена единственная модификация. Практический приём: сравните расшифровку с тем, что написал продавец. Заявлен полный привод, а VIN говорит о переднем - отчёт можно дальше не строить.

Номер двигателя по VIN (GET /autopark?vin=, 0,8 ₽) нужен там, где сверяют агрегаты: при приёмке на выкуп или трейд-ин. Ответ приходит за доли секунды, а платно только если номер найден.

Шаг 2. ДТП: архив и база ГИБДД

Для ДТП есть два метода, и разница между ними принципиальна.

Проверка ДТП из архивов (GET /accidents?vin=) стоит 0,8 ₽, отвечает быстро и возвращает дату, тип, регион и повреждения. Но данные архивные, не в реальном времени: свежее происшествие там может не оказаться. Для массы объявлений это нормальный первичный фильтр.

ДТП по базе ГИБДД (GET /accidents-rt?vin= или ?body=) покрывает происшествия с 2015 года, оформленные ГИБДД, с повреждениями и участниками. Стоит 19 ₽, и метод асинхронный: вы создаёте задачу, затем опрашиваете результат раз в 30 секунд, до 40 минут. Скрипт опроса выглядит примерно так:

import time, requests

H = {"Authorization": "Bearer TOKEN"}
BASE = "https://api.avtovincod.ru"

def accidents_rt(vin, timeout=2400):
 r = requests.get(f"{BASE}/accidents-rt", params={"vin": vin}, headers=H).json()
 deadline = time.time() + timeout
 while time.time() < deadline:
 if r.get("success") == 1 and not r.get("pending"):
 return r
 if r.get("success") == 0 and not r.get("pending"):
 return None
 time.sleep(30)
 r = requests.get(f"{BASE}/accidents-rt", params={"vin": vin}, headers=H).json()
 return None

Имена полей статуса сверьте со страницей метода в документации: схема задачи там описана точно, а в примере показана только логика цикла. Не крутите опрос чаще раза в 30 секунд и не блокируйте им пользовательский запрос: запускайте в фоне и показывайте блок "ДТП" со статусом "проверяется".

Рабочая схема такая: на всём потоке объявлений дешёвый архив, глубокую проверку по базе ГИБДД запускаем, когда клиент оставил заявку или машина дошла до сделки. Как это устроено в выкупе, разобрано в статье проверка ДТП и розыска для выкупа, повторяться не будем.

Шаг 3. Ограничения, залог, розыск, суды

Это блок стоп-флагов: именно он решает, покупать машину или нет.

Ограничения и розыск (GET /score?vin=, 20 ₽) возвращают запреты на регистрационные действия с типом, основанием, регионом и данными исполнительного производства, а также признак розыска и периоды владения. Смотрим на поле found: 1 - данные есть, 0 - VIN не найден в базе ГИБДД. Важная деталь: /score тарифицируется при выполненной проверке, даже если ограничений нет. Чистый ответ тоже результат. Подробнее о трактовке запретов - в материале проверка ограничений ГИБДД.

Реестр залогов ФНП (GET /pledge?vin=, 2,4 ₽): поле status показывает, действует залог или прекращён, active_count - сколько активных уведомлений. Дополнительно приходят залогодатели, залогодержатели, дата и номер уведомления и история изменений.

Если в /score есть запрет с исполнительным производством, берём его enforcement_number и передаём в /enforcement?number= (0,65 ₽). В ответе proceedings[] со статусом active или closed, долги по видам (штраф, налог, кредит, алименты) и summary.activeDebt. Персональные данные должника скрыты звёздочками. Арбитражные дела по VIN или госномеру даёт /lawsuits (3 ₽): споры о собственности, лизинг, банкротство.

Какие стоп-флаги ставить

Минимальный набор, который мы бы посоветовали зашить в код:

Шаг 4. История владения, пробег и обслуживание

История регистрации (GET /vin?vin=, 12 ₽) даёт периоды владения, характеристики, данные ПТС и СТС. Рядом кладём /plate-history (1,5 ₽): какие госномера были у машины, списком от последнего к первому, без дат. Много смен номера при малом числе владельцев - повод присмотреться, например к перебиванию между регионами.

История техосмотров и пробег (GET /probeg?vin=, 3,5 ₽) берёт диагностические карты ЕАИСТО: дата, срок действия, оператор, зафиксированный пробег. Это опорные точки, по ним строится график. Дальше сверяем с историей объявлений (GET /offers?vin=, 1,5 ₽): прошлые продажи с ценой, пробегом, городом и фото. У каждого объявления есть поле match (vin, car или unknown), а чужие машины убираются и попадают в excluded. В отчёт берите match=vin, а car и unknown показывайте с осторожностью. Если в объявлении 2022 года пробег 80 тысяч, а на ТО в 2024-м 62 тысячи, пробег скручен.

История полисов ОСАГО (GET /osago-history?vin=) показывает все полисы за годы: страховые, периоды, регион, цель использования, ограничение по водителям, тип собственника. Цель "такси" в старом полисе - сильный сигнал, даже если разрешения уже аннулированы. Ответ приходит за 15-60 секунд, учитывайте это в интерфейсе. Актуальную цену метода смотрите в prices.json или в кабинете. Если нужен только текущий полис, есть более лёгкий метод /osago за 1,5 ₽: страховая, серия и номер, статус и срок действия.

Сервисная история по VIN (GET /service?vin=, 26 ₽) - самый дорогой блок отчёта: даты, города, виды работ, описание операций. Для BMW и других марок она часто даёт то, чего нет ни в одном реестре: замену узлов после удара, нестыковки по пробегу. Оговорка честная: покрытие зависит от марки и от того, что попало в данные, поэтому пустой ответ не означает, что машину не обслуживали. Блок держите в расширенном отчёте, а не в базовом.

Остальное - по необходимости: /customs (1 ₽) для ввезённых машин, /recalls (0,8 ₽) по отзывным кампаниям, /taxi (1,8 ₽) и /sharing (5,4 ₽) для подтверждения коммерческой эксплуатации, /lizing (2,2 ₽) для лизинговых договоров.

Пример: сборка отчёта одним скриптом

Методы независимы, поэтому вызываем их параллельно. Тестовый VIN X7TEST00000000001 отдаёт образцы бесплатно, токен нужен.

curl -H "Authorization: Bearer TOKEN" \
 "https://api.avtovincod.ru/score?vin=X7TEST00000000001"
import requests
from concurrent.futures import ThreadPoolExecutor

H = {"Authorization": "Bearer TOKEN"}
BASE = "https://api.avtovincod.ru"
VIN = "X7TEST00000000001"
METHODS = ["vin", "score", "pledge", "probeg", "accidents",
 "osago-history", "offers", "service"]

def call(m):
 try:
 r = requests.get(f"{BASE}/{m}", params={"vin": VIN},
 headers=H, timeout=90)
 return m, r.json(), r.headers.get("X-Charged")
 except requests.RequestException:
 return m, None, None

with ThreadPoolExecutor(8) as ex:
 results = list(ex.map(call, METHODS))

report, cost = {}, 0.0
for m, data, charged in results:
 if data and data.get("success") == 1:
 report[m] = data
 cost += float(charged or 0)
 else:
 report[m] = None # блок "нет данных", деньги не списаны
print("Себестоимость отчёта:", cost)

Что здесь важно. В каждом ответе, записанном в историю запросов, есть блок billing: charged, currency, billed, balance, requestId, и те же значения в заголовках X-Charged, X-Balance, X-Request-Id. Нет блока - запрос не списан. Складывая X-Charged по методам, вы получаете точную себестоимость каждого отчёта и можете писать её в CRM рядом с заявкой. requestId сохраняйте: по нему поддержка быстро найдёт спорный запрос.

Правило по ошибкам простое: success: 0 означает, что проверка не выполнена или данных нет, и это бесплатно. Значит, повторять такие запросы можно без риска для бюджета: два-три повтора с паузой в несколько секунд для сбоев источника, и если не помогло, блок в отчёте помечается "не удалось получить, попробуйте позже". Не склеивайте "данных нет" и "источник недоступен" в одно сообщение: для покупателя это разные вещи.

Сценарии для автосалона, площадки и выкупа

Автосалон и трейд-ин. Два уровня. Быстрый отчёт за минуту, пока клиент ещё в салоне: brief, score, pledge, accidents. Полный отчёт после предварительного согласия на цену: плюс vin, probeg, osago, accidents-rt и service. Стоп-лист по ограничениям из третьего шага зашивается в CRM, и менеджер видит красный статус, не читая JSON.

Площадка объявлений. Бейдж "проверено" ставится по дешёвому набору: score, pledge, accidents. Расширенный отчёт продаётся пользователю отдельно, и вы зарабатываете на разнице между ценой отчёта и себестоимостью. Заодно закройте номера на фото: /plate-hide закрывает госномера (размытие, мозаика, заливка или логотип клиента), стоит 0,09 ₽ за фото, до 10 фото за запрос. Распознавание номера по фото (/photo-plate, 0,1 ₽) помогает связать объявление с автомобилем, когда продавец не указал VIN.

Выкуп и большие базы. Когда машин десятки, кодить не обязательно: массовая проверка в кабинете принимает до 100 автомобилей файлом Excel, CSV или вставкой текста, показывает расчёт "не больше" до запуска и присылает итоговую таблицу. А мониторинг автомобилей следит за списком по реестрам и сообщает только об изменениях: новый штраф, залог, запрет, розыск, смена собственника. Уведомления идут в Telegram, на почту или вебхуком (POST JSON, подпись X-AVC-Signature: sha256=HMAC тела вашим секретом). Для стока автосалона это удобно: машина стоит на площадке три месяца, и за это время на неё вполне может лечь запрет.

Себестоимость комплекта

Посчитаем по базовому прайсу. Быстрый набор: score 20 + pledge 2,4 + accidents 0,8 + brief 1 = 24,2 ₽. Стандартный отчёт: vin 12 + score 20 + pledge 2,4 + probeg 3,5 + accidents 0,8 + osago 1,5 + offers 1,5 + plate-history 1,5 = 43,2 ₽. Если добавить ДТП по базе ГИБДД (19 ₽) и сервисную историю (26 ₽), выходит около 88 ₽. В расчёте вместо истории полисов взят текущий полис /osago. Цены базовые, актуальные значения смотрите в prices.json.

Как не гонять лишнее. Не вызывайте /vin и /score одновременно без нужды: /score уже содержит периоды владения. Тяжёлые методы (accidents-rt, service) запускайте только после того, как дешёвые не выбили машину по стоп-флагам. Растаможку проверяйте только у иномарок, сервисную историю - у марок, где она реально есть. Кэшируйте отчёт на разумный срок, например на сутки: повторять запрос по той же машине через десять минут незачем.

С чего начать

Регистрация в личном кабинете занимает минуту, токен выдаётся сразу. Пополнение от 100 ₽ банковской картой или по счёту для юрлиц (акт и акт сверки в конце месяца), депозит действует 90 дней. Договор не нужен. Сначала прогоните весь скрипт на тестовых значениях: бесплатно, но структуру ответов вы увидите целиком и успеете сверстать карточку отчёта.

Если вы строите ИИ-агента для менеджеров, подключите MCP-сервер: https://api.avtovincod.ru/mcp, авторизация тем же токеном, 32 инструмента, каждый вызов тарифицируется как обычный запрос к методу. Общий обзор методов - на странице API ГИБДД, полные описания полей и примеры кода на девяти языках - в документации API.

Частые вопросы

Можно ли проверить автомобиль по VIN бесплатно?

По боевым данным для бизнеса - нет, нужно пополнение от 100 ₽. Бесплатно работают тестовые значения (VIN X7TEST00000000001, госномер Т000ТТ00), а также запросы, где проверка не выполнена: ответ success: 0 не списывается.

Чем отличается проверка ДТП из архива от ДТП по базе ГИБДД?

Архивный метод /accidents стоит 0,8 ₽, отвечает быстро, но данные не в реальном времени. /accidents-rt обращается к базе ГИБДД, показывает происшествия с 2015 года с повреждениями и участниками, стоит 19 ₽ и работает асинхронно: опрос раз в 30 секунд до 40 минут.

Можно ли проверить автомобиль по госномеру, если VIN неизвестен?

Да. Метод /gos2vin по госномеру возвращает VIN, номер кузова или шасси, данные СТС, марку, модель и год. Дальше этот VIN подставляется в остальные методы. Часть методов (ОСАГО, техосмотр, такси, объявления) принимает госномер напрямую.

Как узнать номер двигателя по VIN через API?

Вызовите GET /autopark?vin= (также работают body и chassis). Ответ приходит за доли секунды, стоимость 0,8 ₽, и списание происходит только если номер двигателя найден.

Есть ли история обслуживания BMW и других марок по VIN?

Метод /service?vin= возвращает даты, города, виды работ и описание операций. Покрытие зависит от марки и данных, поэтому пустой ответ не доказывает, что машину не обслуживали. Блок лучше держать в расширенном отчёте.

Сколько стоит полный отчёт по одному автомобилю?

По базовому прайсу быстрый набор (ограничения, залог, ДТП из архива, краткие данные) около 24 ₽, стандартный отчёт с историей, пробегом и текущим полисом ОСАГО около 43 ₽, с ДТП по базе ГИБДД и сервисной историей около 88 ₽. Точные цены смотрите в prices.json.

Что делать, если VIN не найден в базе ГИБДД?

В /score это поле found: 0. Не считайте это "чистой" машиной: помечайте как "не проверено". Попробуйте номер кузова (/score-body), проверьте правильность VIN и пошлите автомобиль на ручную проверку.

Как проверять сразу много автомобилей без программирования?

Используйте массовую проверку в личном кабинете: до 100 машин файлом Excel или CSV, выбор проверок, расчёт стоимости до запуска и итоговая таблица. Для постоянного контроля подключите мониторинг, он сообщает только об изменениях.

Проверка автомобилей через API

Без договора и долгих согласований: пополните баланс от 100 ₽ и проверяйте реальные машины. Тестовые значения бесплатно, документация с примерами на популярных языках.

Получить токен   Документация API

Читайте также