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

Главная → Документация → История техосмотра и пробег

Проверка пробега по VIN и история техосмотра

История прохождения технического осмотра из ЕАИСТО вместе с зафиксированным пробегом: номер диагностической карты, дата диагностики и срок её действия, оператор техосмотра, пробег на момент проверки. Поиск по VIN, госномеру или номеру кузова.

Хост api.avtovincod.ru Метод GET Формат JSON Авторизация Bearer Ответ до 60 сек

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

Единый API-токен для всех API выдаётся сразу после регистрации в личном кабинете. Передавайте его в заголовке:

Authorization: Bearer ВАШ_ТОКЕН

Эндпоинт

GET https://api.avtovincod.ru/probeg?vin=XTA210740A2861234
Authorization: Bearer ВАШ_ТОКЕН
ПараметрОписание
vinVIN, от 11 до 17 символов (латиница без I, O, Q).
plateГосномер, от 6 до 9 символов (буквы АВЕКМНОРСТУХ и цифры). Синоним: car_number.
bodyНомер кузова, от 4 до 25 символов. Синоним: car_body.

Пример успешного ответа

{
  "success": 1,
  "query": { "vin": "XTA210740A2861234" },
  "found": 2,
  "records": [
    {
      "eaisto_number": "075210801234567",
      "date_of_diagnosis": "2025-08-12",
      "date_of_validity": "2027-08-12",
      "car_number": "А123АА77",
      "car_vin": "XTA210740A2861234",
      "car_body": null,
      "car_chassis": null,
      "operator_number": "RA.RU.21АВ01",
      "is_valid": 1,
      "car_mileage": 84500
    }
  ]
}

Обработка запроса асинхронная: сервис отправляет задание источнику и опрашивает результат, поэтому ответ может занимать до минуты. Записи отсортированы по дате диагностики. Даты приводятся к формату ГГГГ-ММ-ДД, пробег car_mileage - в километрах.

Коды ошибок

HTTP · codeЧто означает
400 · VIN_INVALID / PLATE_INVALID / BODY_INVALIDНеверный формат идентификатора.
400 · INPUT_REQUIREDНе указан ни VIN, ни госномер, ни номер кузова.
403 · NOT_ALLOWED / API_DISABLEDAPI не подключён для токена или временно отключён. Запросите доступ в кабинете.
401 · NO_TOKEN / TOKEN_INVALIDТокен не передан, неверен или деактивирован. Возьмите актуальный в кабинете.
402 · INSUFFICIENT_BALANCEНедостаточно средств. Пополните баланс в кабинете (раздел «Платежи»).
403 · IP_NOT_ALLOWEDIP не входит в ваш белый список (если он настроен).
429 · RATE_LIMIT / RATE_LIMIT_IPПревышена частота запросов в минуту. Повторите через минуту.
503 · SERVICE_UNAVAILABLEИсточник временно недоступен. Повторите позже, запрос не тарифицирован.

Пример на cURL

curl -s --max-time 60 "https://api.avtovincod.ru/probeg?vin=XTA210740A2861234" \\
  -H "Authorization: Bearer ВАШ_ТОКЕН"

Примеры кода: PHP, Python, JavaScript, Go, Java, C#, Ruby, 1С

Примеры готовы к запуску: токен берётся из переменной окружения AVC_TOKEN, а в запросе стоит тестовое значение (vin=X7TEST00000000001). По тестовым значениям приходит ответ-образец по схеме метода: бесплатно, без списания и даже при нулевом балансе, с полем "testMode": true. Так интеграцию можно собрать и проверить до первого платного запроса. Все тестовые значения.

curl -s --max-time 120 -G "https://api.avtovincod.ru/probeg" \
  --data-urlencode "vin=X7TEST00000000001" \
  -H "Authorization: Bearer $AVC_TOKEN"
<?php
$url = 'https://api.avtovincod.ru/probeg?' . http_build_query(['vin' => 'X7TEST00000000001']);
$ch  = curl_init($url);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 120,
    CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('AVC_TOKEN')]]);
$d = json_decode(curl_exec($ch), true);
echo $d['success'] ? json_encode($d, JSON_UNESCAPED_UNICODE) : $d['code'] . ': ' . $d['error'];
import os, requests

r = requests.get("https://api.avtovincod.ru/probeg", params={"vin": "X7TEST00000000001"},
                 headers={"Authorization": "Bearer " + os.environ["AVC_TOKEN"]}, timeout=120)
d = r.json()
print(d if d.get("success") else f'{d["code"]}: {d["error"]}')
// Node.js 18+, файл .mjs (await на верхнем уровне)
const url = "https://api.avtovincod.ru/probeg?" + new URLSearchParams({ vin: "X7TEST00000000001" });
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.AVC_TOKEN}` },
                               signal: AbortSignal.timeout(120000) });
const d = await res.json();
console.log(d.success ? d : `${d.code}: ${d.error}`);
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"os"
	"time"
)

func main() {
	q := url.Values{}
	q.Set("vin", "X7TEST00000000001")
	req, _ := http.NewRequest("GET", "https://api.avtovincod.ru/probeg?"+q.Encode(), nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("AVC_TOKEN"))
	resp, err := (&http.Client{Timeout: 120 * time.Second}).Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(resp.StatusCode, string(body))
}
// Java 11+
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.*;
import java.nio.charset.StandardCharsets;
import java.time.Duration;

public class AvtoVinCod {
    public static void main(String[] args) throws Exception {
        String q = "vin=" + URLEncoder.encode("X7TEST00000000001", StandardCharsets.UTF_8);
        HttpRequest req = HttpRequest.newBuilder(URI.create("https://api.avtovincod.ru/probeg?" + q))
            .header("Authorization", "Bearer " + System.getenv("AVC_TOKEN"))
            .timeout(Duration.ofSeconds(120)).GET().build();
        HttpResponse<String> resp = HttpClient.newHttpClient()
            .send(req, HttpResponse.BodyHandlers.ofString());
        System.out.println(resp.statusCode() + " " + resp.body());
    }
}
// .NET 6+
using System.Net.Http.Headers;

using var http = new HttpClient { Timeout = TimeSpan.FromSeconds(120) };
http.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("AVC_TOKEN"));
var url = "https://api.avtovincod.ru/probeg?" + "vin=" + Uri.EscapeDataString("X7TEST00000000001");
var resp = await http.GetAsync(url);
Console.WriteLine((int)resp.StatusCode + " " + await resp.Content.ReadAsStringAsync());
require "net/http"
require "json"

uri = URI("https://api.avtovincod.ru/probeg")
uri.query = URI.encode_www_form(vin: "X7TEST00000000001")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer #{ENV["AVC_TOKEN"]}"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true, read_timeout: 120) { |h| h.request(req) }
d = JSON.parse(res.body)
puts d["success"] == 1 ? d : "#{d["code"]}: #{d["error"]}"
Токен = "ВАШ_ТОКЕН";
Соединение = Новый HTTPСоединение("api.avtovincod.ru", 443, , , , 120, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/probeg?" + "vin=" + КодироватьСтроку("X7TEST00000000001", СпособКодированияСтроки.КодировкаURL));
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);
Ответ = Соединение.Получить(Запрос);

Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку("UTF-8"));
Данные = ПрочитатьJSON(Чтение);
Чтение.Закрыть();

Если Данные.success = 1 Тогда
    Сообщить("Проверка выполнена");
Иначе
    Сообщить(Данные.code + ": " + Данные.error);
КонецЕсли;

Бесплатных тестовых периодов и долгих согласований нет: пополните баланс в личном кабинете и сразу проверяйте реальные машины. Токен выдаётся при регистрации, деньги списываются только по правилам метода (раздел "Тарификация"). Нужен доступ из ИИ-ассистента: MCP-сервер.

Примеры ответов: успешный, ошибка, источник недоступен

Успешный запрос

GET https://api.avtovincod.ru/probeg?vin=XTA210740A2861234
Authorization: Bearer ВАШ_ТОКЕН

HTTP 200, success: 1. Списание по тарифу метода, сумма и остаток в блоке billing (цифры в примере условные).

{
  "success": 1,
  "query": {
    "vin": "XTA210740A2861234"
  },
  "found": 2,
  "records": [
    {
      "eaisto_number": "000000000000001",
      "date_of_diagnosis": "2025-05-20",
      "date_of_validity": "2027-05-20",
      "car_number": "А123ВС777",
      "car_vin": "XTA210740A2861234",
      "car_body": null,
      "car_chassis": null,
      "operator_number": "00000",
      "is_valid": 1,
      "car_mileage": 64000
    },
    ...
  ],
  "billing": {
    "charged": 1.6,
    "currency": "RUB",
    "billed": true,
    "balance": 998.4,
    "requestId": 1234567
  }
}

Бесплатная проба без списания: https://api.avtovincod.ru/probeg?vin=X7TEST00000000001 вернёт ответ-образец по этой же схеме с полем testMode: true и charged: 0.

Неуспешный запрос

GET https://api.avtovincod.ru/probeg?vin=XTA210740A286123
Authorization: Bearer ВАШ_ТОКЕН

Ошибка в параметрах: HTTP 400, код BAD_VIN, текст ошибки можно показать пользователю. Бесплатно.

{
  "success": 0,
  "error": "VIN должен содержать 17 символов, у вас 16. Проверьте ввод.",
  "code": "BAD_VIN"
}

Источник недоступен

GET https://api.avtovincod.ru/probeg?vin=XTA210740A2861234
Authorization: Bearer ВАШ_ТОКЕН

Источник не выполнил проверку: HTTP 200, PROVIDER_FAIL. Бесплатно, повторите запрос позже. Запрос записан в историю с charged: 0.

{
  "success": 0,
  "error": "Проверка не выполнена",
  "code": "PROVIDER_FAIL",
  "billing": {
    "charged": 0,
    "currency": "RUB",
    "billed": false,
    "balance": 998.4,
    "requestId": 1234569
  }
}

Тарификация

Списание происходит, когда проверка выполнена (success: 1), даже если история техосмотра пуста. Ошибки и недоступность источника не тарифицируются. Актуальная цена и баланс доступны в личном кабинете.

В ответ добавляется блок billing: сколько списано за этот запрос (charged, в рублях), платный ли он (billed), остаток баланса после запроса (balance) и номер в истории запросов (requestId). Те же данные в заголовках X-Charged, X-Balance, X-Request-Id. Нет блока - запрос не списан. Подробнее о блоке billing.

Уже подключены? Ничего менять не нужно.

MCP-сервер для ИИ-ассистентов

Подключите проверки к ИИ-ассистенту: Claude, Cursor, VS Code и другим клиентам с поддержкой MCP (Model Context Protocol). Ассистент сам вызывает нужный метод по вашему токену, и проверку можно запросить обычными словами: "проверь залог и ограничения по VIN", "есть ли штрафы по СТС". Удобно менеджерам автосалона, лизинга и страховой без программиста, а разработчику помогает быстро собрать прототип интеграции.

Попробуйте прямо сейчас. Регистрация за минуту, токен сразу, пополнение картой. Проверить можно и без кода: в кабинете есть консоль проверки.

Создать аккаунт