Документация API
Проверка транспортного средства по VIN: данные ГИБДД — история регистрации, периоды владения, характеристики, ПТС/СТС, ограничения и розыск — одним GET-запросом, ответ в JSON.
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}
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| vin | string | да | VIN-номер, 17 символов; кириллица нормализуется автоматически |
| token | string | нет* | * Не нужен, если токен передан в заголовке Authorization |
| force_refresh | string | нет | Значение 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Е298475 → WBALM71090E298475 | |
Буквы 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. Описание полей
Корневые поля
| Поле | Тип | Описание |
|---|---|---|
| success | integer | 1 — запрос выполнен, 0 — ошибка или нет данных |
| record | object / null | Характеристики ТС, документы, периоды владения |
| restrictions | array | Ограничения на регистрационные действия (может быть пустым) |
| searches | array | Записи о розыске (может быть пустым) |
| status | object | Быстрые флаги: restricted, wanted, spec_wanted |
| error, code | string | Описание и код ошибки — только при ошибках |
Объект record
| Поле | Тип | Описание |
|---|---|---|
| vin | string/null | VIN из базы ГИБДД, нормализованный |
| bodyNumber | string/null | Номер кузова |
| regNumber | string/null | Государственный регистрационный номер |
| sts.num / sts.date | string/null | Серия-номер и дата выдачи СТС (YYYY-MM-DD) |
| pts.num / pts.date | string/null | Серия-номер и дата выдачи ПТС (YYYY-MM-DD) |
| model | string/null | Марка и модель |
| engineVolume | string/null | Объём двигателя, куб. см |
| color | string/null | Цвет ТС |
| powerHp / powerKwt | string/null | Мощность в л.с. и кВт |
| year | string/null | Год выпуска |
| maxWeight | string/null | Максимальная масса, кг |
| weightWithoutLoading | string/null | Масса без нагрузки, кг |
| category | string/null | Категория ТС (A, B, C, D) |
| lastRegAction | string/null | Последнее регистрационное действие |
| recordStatus | string/null | Статус записи: действующая / архивная |
| ownershipPeriods | array | Периоды владения — см. ниже |
Элемент ownershipPeriods
| Поле | Тип | Описание |
|---|---|---|
| personType | string | Физическое лицо / Юридическое лицо |
| from | string/null | Дата начала владения (YYYY-MM-DD) |
| to | string/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
| Поле | Описание |
|---|---|
| restricted | true — есть ограничения на рег. действия |
| wanted | true — ТС находится в розыске |
| spec_wanted | true — ТС в спецрозыске |
Для быстрой проверки достаточно блока status. Подробности — в restrictions и searches.
8. Коды ошибок
При ошибке API возвращает success=0 плюс поля error и code:
{ "success": 0, "error": "Токен не передан.", "code": "NO_TOKEN" }
| HTTP | Код | Описание | Платный |
|---|---|---|---|
| 400 | VIN_INVALID | Некорректный формат VIN | Нет |
| 401 | NO_TOKEN | Токен авторизации не передан | Нет |
| 401 | TOKEN_INVALID | Токен недействителен | Нет |
| 402 | INSUFFICIENT_BALANCE | Недостаточно средств | Нет |
| 403 | SCORE_NOT_ALLOWED | Эндпоинт не подключён для токена | Нет |
| 403 | IP_NOT_ALLOWED | IP не в белом списке | Нет |
| 429 | RATE_LIMIT | Превышен rate limit | Нет |
| 429 | SCORE_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 -X GET "https://api.avtovincod.ru/score?vin=Z94K241BBJR061674" \ -H "Authorization: Bearer ВАШ_ТОКЕН"
$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";
}
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']}")
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 секунд |
| Retry | HTTP 503 — повторить через 5–10 минут; success=0 без кода — повторить запрос |
| Кэш | Кэшируйте результаты на своей стороне — экономит лимиты |
| VIN | Удаляйте пробелы перед отправкой; кириллицу API нормализует сам |
| Ошибки | Всегда проверяйте success; при success=0 данных нет |
| Безопасность | Не передавайте токен на клиентскую сторону (JS в браузере) |
| Мониторинг | Запрашивайте /stats.php для контроля баланса и лимитов |
14. Поддержка
Вопросы по интеграции и подключению: api@avtovincod.ru. Чтобы разбор был быстрым, приложите: ваш идентификатор клиента, дату и время запроса (UTC), использованный VIN и полный ответ API.
Токен ещё не получен — оставьте заявку: ключ, доступ к тестовым запросам и эта документация приходят в течение рабочего дня.