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

Главная → Документация → Плюсы и минусы модели

Портрет модели: плюсы и минусы

Характеристика модели автомобиля по VIN или номеру кузова: надёжность, кузов и коррозия, ликвидность на вторичном рынке, сильные стороны и типичные болячки. То, что покупатель обычно собирает по форумам и отзывам владельцев, одним запросом в JSON.

Хост api.avtovincod.ruМетод GET /pros-consПоиск VIN или кузов

О модели, а не о конкретной машине

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

Готовые списки prosList и consList и короткие оценки reliabilityLevel и liquidityLevel можно сразу выводить в интерфейсе: в карточке объявления, в отчёте о проверке, в подборе автомобиля.

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

Токен передаётся заголовком Authorization: Bearer <токен> либо параметром ?token=. Токен один для всех API, он выдаётся в личном кабинете сразу после регистрации.

Эндпоинт

GET https://api.avtovincod.ru/pros-cons

Параметры

ПараметрОписаниеОбязателен
vinVIN автомобиля, 17 символоводин из двух
bodyномер кузова, 6-17 символов, с дефисом или без (для машин без VIN, например KSP90-5197643)один из двух

Передайте ровно один параметр: vin или body. По номеру кузова модель определяется по регистрационным данным автомобиля, поэтому ответ может занять до минуты. Госномер метод не принимает (ошибка INPUT_VIN_ONLY): если у вас только госномер, получите VIN или номер кузова методом /gos2vin.

Пример запроса

curl -H "Authorization: Bearer $TOKEN" \
  "https://api.avtovincod.ru/pros-cons?vin=X6D234900E0002307"

# по номеру кузова
curl -H "Authorization: Bearer $TOKEN" \
  "https://api.avtovincod.ru/pros-cons?body=KSP90-5197643"

Пример ответа: характеристика найдена

{
  "success": 1,
  "query": { "vin": "X6D234900E0002307" },
  "found": 1,
  "model": "LADA 234900 (ВИС-2349 Гранта)",
  "reliability": "Средняя. Простая конструкция, высокая ремонтопригодность, дешевые запчасти.",
  "reliabilityLevel": "Средняя",
  "bodyCorrosion": "Слабое ЛКП, коррозия рамы и порогов, уязвимость стыков кабины и грузового отсека.",
  "liquidity": "Высокая в коммерческом сегменте за счет низкой цены и востребованности для малого бизнеса.",
  "liquidityLevel": "Высокая",
  "pros": "Низкая стоимость владения, тяговитый 8-кл двигатель, доступность сервиса, грузоподъемность.",
  "prosList": [ "Низкая стоимость владения", "Тяговитый 8-кл двигатель",
                "Доступность сервиса", "Грузоподъемность" ],
  "cons": "Шум КПП, слабые рессоры, малый ресурс ступичных подшипников, сбои датчиков двигателя.",
  "consList": [ "Шум КПП", "Слабые рессоры",
                "Малый ресурс ступичных подшипников", "Сбои датчиков двигателя" ],
  "vehicle": {
    "brand": "Lada", "model": "Granta", "generation": "I",
    "yearFrom": 2011, "yearTo": 2018,
    "bodyType": "van", "transmission": "MT", "drive": "FWD"
  }
}

Поля ответа

ПолеЗначение
found1: характеристика найдена, 0: модель по этому номеру не найдена
modelмодель и модификация, к которой относится автомобиль
reliabilityнадёжность: оценка и пояснение
reliabilityLevelкороткая оценка надёжности ("Высокая", "Средняя", "Низкая") либо null
bodyCorrosionкузов и лакокрасочное покрытие: слабые места, коррозия
liquidityликвидность: как модель продаётся на вторичном рынке
liquidityLevelкороткая оценка ликвидности либо null
pros / prosListсильные стороны: строкой и готовым списком
cons / consListслабые стороны и типичные болячки: строкой и списком
vehicleкакая это машина, отдельными полями (поля ниже). Блок есть всегда, неизвестные значения равны null
vehicle.brand / vehicle.modelмарка и модель латиницей, в официальном написании: Toyota / Vitz, Lada / Vesta
vehicle.generationпоколение или код кузова модели (XP90, B8, II) либо null
vehicle.yearFrom / vehicle.yearToгоды выпуска поколения; yearTo null, если выпускается до сих пор или неизвестно
vehicle.bodyTypeтип кузова, только если у модели он один: sedan, hatchback, liftback, wagon, coupe, convertible, suv, minivan, van, pickup; иначе null
vehicle.transmissionкоробка, только если вариант один: MT механика, AT автомат, CVT вариатор, AMT робот, DCT робот с двумя сцеплениями; иначе null
vehicle.driveпривод, только если вариант один: FWD передний, RWD задний, AWD полный; иначе null

Схема ответа всегда одна и та же: если источник не дал поле, ключ остаётся со значением null (у списков пустой массив).

Пример ответа: модель не найдена

Ответ успешный, но пустой. Такой запрос бесплатный.

{
  "success": 1,
  "query": { "vin": "..." },
  "found": 0,
  "model": null, "reliability": null, "reliabilityLevel": null,
  "bodyCorrosion": null, "liquidity": null, "liquidityLevel": null,
  "pros": null, "prosList": [], "cons": null, "consList": [],
  "vehicle": { "brand": null, "model": null, "generation": null, "yearFrom": null,
               "yearTo": null, "bodyType": null, "transmission": null, "drive": null }
}

Как показать пользователю

  1. Заголовок карточки: model. Под ним можно показать годы выпуска, кузов, коробку и привод из vehicle, если они не null.
  2. Две колонки: "Плюсы" из prosList и "Минусы" из consList, по пункту в строке.
  3. Бейджи "Надёжность" и "Ликвидность" из reliabilityLevel и liquidityLevel, полный текст ниже.
  4. Отдельной строкой "Кузов и коррозия" из bodyCorrosion: это то, что стоит осмотреть при покупке.

Коды ошибок

КодЗначение
NO_TOKENтокен не передан
TOKEN_INVALIDтокен недействителен или деактивирован
NOT_ALLOWEDAPI не подключён вашему токену
API_DISABLEDAPI временно отключён
IP_NOT_ALLOWEDзапрос с IP вне вашего белого списка
INPUT_REQUIREDне передан ни vin, ни body
INPUT_VIN_ONLYпередан госномер: метод работает по VIN или номеру кузова
BAD_VINVIN не 17 символов либо содержит I, O, Q
BAD_BODYномер кузова короче 6 символов
INSUFFICIENT_BALANCEнедостаточно средств на балансе
RATE_LIMITпревышен лимит запросов в минуту
RATE_LIMIT_IPслишком много запросов с одного IP
SERVICE_UNAVAILABLEсервис временно недоступен, повторите позже
PROVIDER_FAILисточник не ответил, повторите позже

Ошибка приходит в виде {"success": 0, "error": "...", "code": "..."} и никогда не тарифицируется.

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

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

curl -s --max-time 30 -G "https://api.avtovincod.ru/pros-cons" \
  --data-urlencode "vin=X7TEST00000000001" \
  -H "Authorization: Bearer $AVC_TOKEN"
<?php
$url = 'https://api.avtovincod.ru/pros-cons?' . http_build_query(['vin' => 'X7TEST00000000001']);
$ch  = curl_init($url);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 30,
    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/pros-cons", params={"vin": "X7TEST00000000001"},
                 headers={"Authorization": "Bearer " + os.environ["AVC_TOKEN"]}, timeout=30)
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/pros-cons?" + new URLSearchParams({ vin: "X7TEST00000000001" });
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.AVC_TOKEN}` },
                               signal: AbortSignal.timeout(30000) });
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/pros-cons?"+q.Encode(), nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("AVC_TOKEN"))
	resp, err := (&http.Client{Timeout: 30 * 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/pros-cons?" + q))
            .header("Authorization", "Bearer " + System.getenv("AVC_TOKEN"))
            .timeout(Duration.ofSeconds(30)).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(30) };
http.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("AVC_TOKEN"));
var url = "https://api.avtovincod.ru/pros-cons?" + "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/pros-cons")
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: 30) { |h| h.request(req) }
d = JSON.parse(res.body)
puts d["success"] == 1 ? d : "#{d["code"]}: #{d["error"]}"
Токен = "ВАШ_ТОКЕН";
Соединение = Новый HTTPСоединение("api.avtovincod.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/pros-cons?" + "vin=" + КодироватьСтроку("X7TEST00000000001", СпособКодированияСтроки.КодировкаURL));
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);
Ответ = Соединение.Получить(Запрос);

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

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

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

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

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

GET https://api.avtovincod.ru/pros-cons?vin=XTAGFL110MY463366
Authorization: Bearer ВАШ_ТОКЕН

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

{
  "success": 1,
  "query": {
    "vin": "XTAGFL110MY463366"
  },
  "found": 1,
  "model": "LADA Vesta",
  "reliability": "Средняя. Простая конструкция, доступные запчасти.",
  "reliabilityLevel": "Средняя",
  "bodyCorrosion": "следить за порогами и арками.",
  "liquidity": "Высокая на вторичном рынке.",
  "liquidityLevel": "Высокая",
  "pros": "Недорогое обслуживание, большой клиренс, доступность сервиса.",
  "prosList": [
    "Недорогое обслуживание",
    ...
  ],
  "cons": "Шумоизоляция, ресурс подвески.",
  "consList": [
    "Шумоизоляция",
    ...
  ],
  "vehicle": {
    "brand": "Lada",
    "model": "Vesta",
    "generation": null,
    "yearFrom": 2015,
    "yearTo": null,
    "bodyType": null,
    "transmission": null,
    "drive": "FWD"
  },
  "billing": {
    "charged": 0.55,
    "currency": "RUB",
    "billed": true,
    "balance": 999.45,
    "requestId": 1234567
  }
}

Бесплатная проба без списания: https://api.avtovincod.ru/pros-cons?vin=X7TEST00000000001 (по кузову: ?body=TEST-0000001) вернёт ответ-образец по этой же схеме с полем testMode: true и charged: 0.

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

GET https://api.avtovincod.ru/pros-cons?vin=XTAGFL110MY46336
Authorization: Bearer ВАШ_ТОКЕН

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

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

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

GET https://api.avtovincod.ru/pros-cons?vin=XTAGFL110MY463366
Authorization: Bearer ВАШ_ТОКЕН

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

{
  "success": 0,
  "error": "Проверка не выполнена",
  "code": "PROVIDER_FAIL"
}

Тарификация

Деньги списываются один раз, когда характеристика найдена (found: 1). Ответ "модель не найдена" (found: 0) и ошибки бесплатны. Актуальная цена в личном кабинете.

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

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

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

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

Смежные методы

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

Как узнать плюсы и минусы модели автомобиля по VIN?

Отправьте GET-запрос https://api.avtovincod.ru/pros-cons?vin=VIN с токеном. В ответе модель, надёжность, кузов и коррозия, ликвидность, списки плюсов и минусов.

Это данные о конкретной машине?

Нет, это характеристика модели и модификации, к которой относится VIN. История конкретного автомобиля - в методах истории регистрации, ДТП, пробега.

Можно ли искать по госномеру?

По госномеру нет: передайте VIN или номер кузова (для машин без VIN). Если есть только госномер, сначала получите VIN методом /gos2vin.

Можно ли искать по номеру кузова?

Да, параметр body. Так удобно для японских машин без VIN: модель определяется по регистрационным данным автомобиля, ответ в той же схеме. В блоке vehicle марка и модель латиницей, поколение и годы выпуска.

Когда списываются деньги?

Только когда характеристика найдена (found: 1). Если модель не найдена или произошла ошибка, запрос бесплатный.

Попробовать без программиста

В личном кабинете есть консоль проверки: введите номер и получите ответ в читаемом виде.

Открыть кабинет