Документация API

Проверка транспортного средства по VIN: данные ГИБДД — история регистрации, периоды владения, характеристики, ПТС/СТС, ограничения и розыск — одним GET-запросом, ответ в JSON.

Хост api.avtovincod.ru Протокол HTTPS / REST Формат JSON (UTF-8) Метод GET Версия v1.0

1. Обзор

API возвращает данные базы ГИБДД по VIN-номеру транспортного средства. Один запрос — полный ответ: характеристики, история владения, документы, действующие ограничения и статус розыска.

МетодЭндпоинтНазначение
GET /score?vin={VIN}Полная проверка ТС по VIN (характеристики + ограничения + розыск)Основной эндпоинт
GET /stats.phpСтатистика и баланс клиентаСлужебный

Принцип работы

1. Клиент отправляет GET-запрос с VIN и токеном. 2. API проверяет токен, IP, лимиты и баланс. 3. VIN нормализуется (кириллица → латиница) и валидируется. 4. API запрашивает данные у ГИБДД — асинхронно, до 45 секунд. 5. При получении данных списывается стоимость запроса. 6. Клиент получает JSON с характеристиками, ограничениями и розыском.

2. Аутентификация

Каждый клиент получает уникальный Bearer-токен (96 символов hex) при подключении. Передать его можно двумя способами.

Способ 1 — заголовок Authorization (рекомендуется)

GET /score?vin=Z94K241BBJR061674 HTTP/1.1
Host: api.avtovincod.ru
Authorization: Bearer ВАШ_ТОКЕН_96_СИМВОЛОВ

Способ 2 — параметр token в URL

GET /score?vin=Z94K241BBJR061674&token=ВАШ_ТОКЕН_96_СИМВОЛОВ

Первый способ предпочтителен: токен не попадает в логи сервера и историю браузера. Параметр в URL используйте только там, где заголовки недоступны.

3. Эндпоинт и параметры

GET https://api.avtovincod.ru/score?vin={VIN}
ПараметрТипОбязательныйОписание
vinstringдаVIN-номер, 17 символов; кириллица нормализуется автоматически
tokenstringнет** Не нужен, если токен передан в заголовке Authorization
force_refreshstringнетЗначение 1 — игнорировать кэш и запросить данные заново

Требования к VIN

Ровно 17 символов; латинские буквы A–Z (кроме I, O, Q) и цифры 0–9. Регистр не важен — API приводит его к верхнему. Примеры валидных VIN: Z94K241BBJR061674, WAUZZZ8UXER030082, WBALM71090E298475.

4. Нормализация VIN

Кириллические буквы, визуально совпадающие с латинскими, заменяются автоматически. Это снимает проблему VIN, скопированных из СТС, документов и старых баз, где кириллица и латиница перемешаны.

Кириллица→ ЛатиницаКириллица→ Латиница
А, В, С, ЕA, B, C, EК, М, Н, ОK, M, H, O
Р, Т, У, ХP, T, Y, XПример: WВАLМ71090Е298475WBALM71090E298475

Буквы I, O, Q запрещены стандартом VIN (ISO 3779) — путаются с 1, 0 и 9. Такой VIN вернёт ошибку VIN_INVALID с подсказкой замены.

5. Формат ответа

Успешный ответ (success=1)

{
  "success": 1,
  "record": {
    "vin": "Z94K241BBJR061674",
    "bodyNumber": "Z94K241BBJR061674",
    "regNumber": null,
    "sts": { "num": null, "date": "2021-01-27" },
    "pts": { "num": null, "date": "2017-11-17" },
    "model": "HYUNDAI SOLARIS",
    "engineVolume": "1368",
    "color": "Белый",
    "powerHp": "99.6",
    "powerKwt": "73.3",
    "year": "2017",
    "maxWeight": "1600",
    "weightWithoutLoading": "1210",
    "category": "B",
    "lastRegAction": "В связи с изменением собственника",
    "recordStatus": "действующая",
    "ownershipPeriods": [
      { "personType": "Юридическое лицо", "from": "2017-12-23", "to": "2021-01-27" },
      { "personType": "Физическое лицо", "from": "2021-01-27", "to": null }
    ]
  },
  "restrictions": [],
  "searches": [],
  "status": {
    "restricted": false,
    "wanted": false,
    "spec_wanted": false
  }
}

Данные не найдены или ошибка (success=0)

{ "success": 0 }

Ответ success=0бесплатный: стоимость запроса не списывается.

6. Описание полей

Корневые поля

ПолеТипОписание
successinteger1 — запрос выполнен, 0 — ошибка или нет данных
recordobject / nullХарактеристики ТС, документы, периоды владения
restrictionsarrayОграничения на регистрационные действия (может быть пустым)
searchesarrayЗаписи о розыске (может быть пустым)
statusobjectБыстрые флаги: restricted, wanted, spec_wanted
error, codestringОписание и код ошибки — только при ошибках

Объект record

ПолеТипОписание
vinstring/nullVIN из базы ГИБДД, нормализованный
bodyNumberstring/nullНомер кузова
regNumberstring/nullГосударственный регистрационный номер
sts.num / sts.datestring/nullСерия-номер и дата выдачи СТС (YYYY-MM-DD)
pts.num / pts.datestring/nullСерия-номер и дата выдачи ПТС (YYYY-MM-DD)
modelstring/nullМарка и модель
engineVolumestring/nullОбъём двигателя, куб. см
colorstring/nullЦвет ТС
powerHp / powerKwtstring/nullМощность в л.с. и кВт
yearstring/nullГод выпуска
maxWeightstring/nullМаксимальная масса, кг
weightWithoutLoadingstring/nullМасса без нагрузки, кг
categorystring/nullКатегория ТС (A, B, C, D)
lastRegActionstring/nullПоследнее регистрационное действие
recordStatusstring/nullСтатус записи: действующая / архивная
ownershipPeriodsarrayПериоды владения — см. ниже

Элемент ownershipPeriods

ПолеТипОписание
personTypestringФизическое лицо / Юридическое лицо
fromstring/nullДата начала владения (YYYY-MM-DD)
tostring/nullДата окончания; null — текущий владелец

7. Ограничения и розыск

Блок restrictions

Массив объектов, каждый — отдельное ограничение (запрет на регистрационные действия, наложенный судебными приставами):

ПолеОписание
restriction_nameВид ограничения
regionРегион инициатора ограничения
organization_nameОрган, наложивший ограничение
reasonsОснование; ФИО маскируется автоматически
enforcement_numberНомер исполнительного производства
enforcement_dateДата ИП (YYYY-MM-DD)
osp_addressАдрес отдела судебных приставов
Пример ответа с ограничением
"restrictions": [
  {
    "restriction_name": "Запрет на регистрационные действия",
    "region": "Краснодарский край",
    "organization_name": "Судебный участок № 62...",
    "reasons": "Документ: 709722738/2340 от 17.03.2026, П*******а О***а В********а...",
    "enforcement_number": "152126/26/23040-ИП",
    "enforcement_date": "2025-12-05",
    "osp_address": "350075, г. Краснодар, ул. Стасова, 180/1"
  }
]

Персональные данные в поле reasons маскируются: Петрусева Ольга Валерьевна → П*******а О***а В********а.

Блок searches

ПолеОписание
modelМарка и модель ТС
model_yearГод выпуска
regionРегион розыска
search_dateДата постановки на учёт в розыске

Блок status

ПолеОписание
restrictedtrue — есть ограничения на рег. действия
wantedtrue — ТС находится в розыске
spec_wantedtrue — ТС в спецрозыске

Для быстрой проверки достаточно блока status. Подробности — в restrictions и searches.

8. Коды ошибок

При ошибке API возвращает success=0 плюс поля error и code:

{ "success": 0, "error": "Токен не передан.", "code": "NO_TOKEN" }
HTTPКодОписаниеПлатный
400VIN_INVALIDНекорректный формат VINНет
401NO_TOKENТокен авторизации не переданНет
401TOKEN_INVALIDТокен недействителенНет
402INSUFFICIENT_BALANCEНедостаточно средствНет
403SCORE_NOT_ALLOWEDЭндпоинт не подключён для токенаНет
403IP_NOT_ALLOWEDIP не в белом спискеНет
429RATE_LIMITПревышен rate limitНет
429SCORE_LIMIT_DAY / _MONTH / _YEARИсчерпан дневной / месячный / годовой лимитНет
200— (success=0)Данные не найдены / техническая ошибкаНет
503Технические работы на сервисеНет

9. Тарификация

СитуацияСписание
Данные получены от ГИБДДСписывается стоимость запроса
VIN не найден в базе (success=0)Бесплатно
Ошибка API / таймаутБесплатно
Ошибка авторизации, лимит, неверный VINБесплатно
Ответ из кэша (charge_on_cache=0)Бесплатно
Ответ из кэша (charge_on_cache=1)Списывается стоимость запроса

Ключевое правило: списание происходит только когда ГИБДД вернула данные по VIN. Технические ошибки и отсутствие данных — бесплатно.

10. Лимиты и кэширование

Лимиты раздельные и считаются по платным запросам: дневной (сброс в 00:00 МСК), месячный и годовой. Значение 0 означает отсутствие лимита; лимиты настраиваются администратором. При превышении API возвращает HTTP 429 с соответствующим кодом.

Время кэша задаётся в часах индивидуально для каждого клиента. Повторный запрос того же VIN в пределах кэша возвращается без обращения к ГИБДД. Принудительное обновление:

GET /score?vin=Z94K241BBJR061674&force_refresh=1

11. Примеры интеграции

cURL
curl -X GET "https://api.avtovincod.ru/score?vin=Z94K241BBJR061674" \
  -H "Authorization: Bearer ВАШ_ТОКЕН"
PHP
$token = 'ВАШ_ТОКЕН';
$vin = 'WAUZZZ8UXER030082';

$ch = curl_init("https://api.avtovincod.ru/score?vin={$vin}");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 60,
    CURLOPT_HTTPHEADER => ["Authorization: Bearer {$token}"],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);

if ($data['success'] === 1) {
    $r = $data['record'];
    echo "Модель: {$r['model']}, Год: {$r['year']}\n";
    echo "Владельцев: " . count($r['ownershipPeriods']) . "\n";

    if ($data['status']['restricted']) {
        foreach ($data['restrictions'] as $restr) {
            echo "Ограничение: {$restr['restriction_name']} ({$restr['region']})\n";
        }
    }
    if ($data['status']['wanted']) {
        echo "ТС в розыске!\n";
    }
} elseif (isset($data['code'])) {
    echo "Ошибка: {$data['code']} — {$data['error']}\n";
} else {
    echo "Данные не найдены\n";
}
Python
import requests

response = requests.get(
    "https://api.avtovincod.ru/score",
    params={"vin": "Z94K241BBJR061674"},
    headers={"Authorization": "Bearer ВАШ_ТОКЕН"},
    timeout=60,
)
data = response.json()

if data.get("success") == 1:
    r = data["record"]
    print(f"{r['model']}, {r['year']}, {r['color']}")
    print(f"Ограничения: {data['status']['restricted']}")
    print(f"Розыск: {data['status']['wanted']}")
JavaScript / Node.js
const res = await fetch(
  'https://api.avtovincod.ru/score?vin=Z94K241BBJR061674',
  { headers: { 'Authorization': 'Bearer ВАШ_ТОКЕН' } }
);
const data = await res.json();

if (data.success === 1) {
  const { model, year, color } = data.record;
  console.log(model, year, color);
  console.log('Ограничения:', data.status.restricted);
  console.log('Розыск:', data.status.wanted);
}

12. Безопасность

Токен. Храните как пароль: не публикуйте в открытых репозиториях, конфигах и фронтенде; передавайте только по HTTPS; используйте заголовок Authorization вместо параметра URL. При компрометации — сразу запросите сброс.

Белый список IP. По запросу для токена настраивается список разрешённых IP; запросы с других адресов отклоняются с кодом IP_NOT_ALLOWED.

Rate limiting. Не более 200 запросов в минуту с одного IP (глобально), плюс персональный лимит вашего токена.

13. Рекомендации по интеграции

АспектРекомендация
ТаймаутНе менее 60 секунд — API опрашивает ГИБДД до 45 секунд
RetryHTTP 503 — повторить через 5–10 минут; success=0 без кода — повторить запрос
КэшКэшируйте результаты на своей стороне — экономит лимиты
VINУдаляйте пробелы перед отправкой; кириллицу API нормализует сам
ОшибкиВсегда проверяйте success; при success=0 данных нет
БезопасностьНе передавайте токен на клиентскую сторону (JS в браузере)
МониторингЗапрашивайте /stats.php для контроля баланса и лимитов

14. Поддержка

Вопросы по интеграции и подключению: api@avtovincod.ru. Чтобы разбор был быстрым, приложите: ваш идентификатор клиента, дату и время запроса (UTC), использованный VIN и полный ответ API.

Токен ещё не получен — оставьте заявку: ключ, доступ к тестовым запросам и эта документация приходят в течение рабочего дня.