Главная → Документация → Комплектация VAG по ETKA (PDF)
Комплектация VAG по ETKA (PDF)
Заводская комплектация автомобиля концерна VAG по VIN из каталога ETKA: список опций с PR-кодами, двигатель, коробка, цвет и салон - документом PDF для печати. Марки: Volkswagen, Audi, Skoda, Seat, Cupra, Porsche. Удобно сверить объявление с тем, как машина была собрана на заводе.
Аутентификация
Токен передаётся заголовком Authorization: Bearer <токен> или параметром ?token=. Токен один для всех API, он в личном кабинете.
Эндпоинт
GET https://api.avtovincod.ru/vag-equipment-doc
Можно и POST с теми же параметрами в теле формы.
Параметры
| Параметр | Описание |
|---|---|
vin | VIN, 17 символов (латиница и цифры, без I, O, Q) - заказ отчёта |
task | номер задачи (taskId из ответа на заказ) - опрос готовности |
brand | необязательно: марка латиницей. Сервис определяет её по VIN сам; обязательна, только если по VIN её не определить (ответ INPUT_REQUIRED с brand_candidates) |
lang | язык отчёта: ru (по умолчанию) или en |
Отчёт есть только для марок концерна VAG: Volkswagen, Audi, Skoda, Seat, Cupra, Porsche. Марку сервис определяет по VIN сам; для другой марки сразу ответ BRAND_NOT_SUPPORTED, бесплатно и без заказа. Если по VIN подходят несколько марок концерна (например, Volkswagen и Audi) или марку определить нельзя, ответ INPUT_REQUIRED со списком brand_candidates: повторите запрос с brand, например brand=Audi. Бесплатно.
Как работает: заказ, номер задачи, опрос
Отчёт формируется 5-15 минут (иногда дольше), поэтому метод асинхронный, как ДТП по базе ГИБДД:
- Заказ:
GET /vag-equipment-doc?vin=VIN. Ответ сразу:status: "processing"и номер задачиtaskId. Бесплатно. - Опрос:
GET /vag-equipment-doc?task=taskIdне чаще, чем черезpollAfterSecсекунд (обычно 30). Пока отчёт готовится - сноваprocessingи оценкаeta_sec. Опросы бесплатны. - Готово:
status: "done", ссылки на файлы отчёта вreport.filesи блокbilling- деньги списываются один раз, в этот момент. Повторный опрос той же задачи отдаёт тот же ответ без нового списания.
Задачу не нужно держать открытой: отчёт досчитается на сервере, даже если вы перестали опрашивать, и будет ждать по taskId. Повторный заказ того же VIN, пока первый готовится, вернёт тот же taskId (второй раз не платите).
Пример запроса
curl -H "Authorization: Bearer $TOKEN" "https://api.avtovincod.ru/vag-equipment-doc?vin=WVWZZZ1JZ3W000456"
# через 30 секунд и далее, пока status не станет done:
curl -H "Authorization: Bearer $TOKEN" "https://api.avtovincod.ru/vag-equipment-doc?task=3f2b9c1e-7a4d-4e8b-9c21-5d6e7f8a9b0c"
Пример ответа
1. Заказ принят
{
"success": 1,
"status": "processing",
"taskId": "3f2b9c1e-7a4d-4e8b-9c21-5d6e7f8a9b0c",
"query": {
"vin": "WVWZZZ1JZ3W000456"
},
"eta_sec": 600,
"pollAfterSec": 30,
"poll": "GET /vag-equipment-doc?task=3f2b9c1e-7a4d-4e8b-9c21-5d6e7f8a9b0c"
}
2. Опрос: ещё готовится
{
"success": 1,
"status": "processing",
"taskId": "3f2b9c1e-7a4d-4e8b-9c21-5d6e7f8a9b0c",
"query": {
"vin": "WVWZZZ1JZ3W000456"
},
"eta_sec": 420,
"pollAfterSec": 30,
"poll": "GET /vag-equipment-doc?task=3f2b9c1e-7a4d-4e8b-9c21-5d6e7f8a9b0c",
"note": "Отчёт получен, собираем все файлы."
}
3. Опрос: отчёт готов
{
"success": 1,
"status": "done",
"found": 1,
"taskId": "3f2b9c1e-7a4d-4e8b-9c21-5d6e7f8a9b0c",
"query": {
"vin": "WVWZZZ1JZ3W000456"
},
"report": {
"code": "vag_equipment_doc",
"title": "Комплектация VAG по ETKA (PDF)",
"vin": "WVWZZZ1JZ3W000456",
"brand": "VW",
"created_at": "2026-11-01 12:14:05",
"files": [
{
"type": "pdf",
"name": "vag_equipment_doc_WVWZZZ1JZ3W000456.pdf",
"size": 284113,
"url": "https://api.avtovincod.ru/vv-file/Qm9kZXJfdGVzdF90b2tlbl8xMjM0NTY3"
}
],
"web_url": null,
"text": null,
"files_until": "2027-01-30"
},
"billing": {
"charged": 389,
"currency": "RUB",
"billed": true,
"balance": 1611,
"requestId": 1234567
}
}
Что возвращает
| Поле | Значение |
|---|---|
status | processing - отчёт готовится; done - готов; error - не сформирован (бесплатно) |
taskId | номер задачи для опроса ?task= |
eta_sec, pollAfterSec | примерно сколько ждать и через сколько секунд спросить снова |
found | 1 - отчёт есть |
report.files[] | файлы отчёта: type (pdf, image, txt, html - страница отчёта, открывается в браузере), name, size в байтах, url - ссылка для скачивания |
report.web_url | ссылка на веб-версию отчёта, если она отдаётся для этого метода; иначе null. Поле есть всегда |
report.text | текст отчёта, если источник прислал его текстом; иначе null |
report.files_until | до какой даты файлы можно скачать |
report.brand, report.created_at | марка, по которой заказан отчёт, и время готовности |
Файлы. Ссылки https://api.avtovincod.ru/vv-file/... открываются без токена (ссылка сама служит доступом, не публикуйте её), файл приходит с понятным именем vag_equipment_doc_VIN.pdf. Срок хранения - 90 дней (files_until), потом ссылка отвечает 410 FILE_GONE: сохраните файлы к себе. Параметр ?dl=1 - скачать, а не открыть в браузере. Документ оформлен источником отчёта, мы его не меняем.
Коды ошибок
Все ошибки бесплатны.
| Код | Значение |
|---|---|
NO_TOKEN, TOKEN_INVALID | токен не передан или недействителен |
NOT_ALLOWED | API не подключён вашему токену |
INSUFFICIENT_BALANCE | недостаточно средств: при заказе учитываются и отчёты, которые уже готовятся |
RATE_LIMIT, TOO_MANY_PARALLEL | слишком часто или слишком много отчётов готовится одновременно (до 20) |
INPUT_REQUIRED, BAD_VIN | не передан VIN или он неверный; марку по VIN не определить - укажите brand из brand_candidates |
BRAND_NOT_SUPPORTED | марка не из концерна VAG: отчёт для неё не делается (бесплатно) |
BAD_TASK, TASK_NOT_FOUND | номер задачи неверный, чужой или от другого метода |
NOT_AVAILABLE | отчёт не сформирован: в источнике нет данных по этому VIN |
PROVIDER_TIMEOUT | отчёт не получен за 6 часов; закажите позже |
PROVIDER_FAIL, SERVICE_UNAVAILABLE | сбой источника или сервис временно недоступен; повторите позже |
Примеры кода: PHP, Python, JavaScript, Go, Java, C#, Ruby, 1С
Примеры готовы к запуску: токен берётся из переменной окружения AVC_TOKEN, а в запросе стоит тестовое значение (vin=X7TEST00000000001). По тестовому VIN сразу приходит готовый отчёт-образец (status: "done", файл-образец по ссылке), без задачи и ожидания: бесплатно, без списания и даже при нулевом балансе, с полем "testMode": true. Так интеграцию можно собрать и проверить до первого платного запроса. Все тестовые значения.
curl -s --max-time 90 -G "https://api.avtovincod.ru/vag-equipment-doc" \
--data-urlencode "vin=X7TEST00000000001" \
-H "Authorization: Bearer $AVC_TOKEN"<?php
$url = 'https://api.avtovincod.ru/vag-equipment-doc?' . http_build_query(['vin' => 'X7TEST00000000001']);
$ch = curl_init($url);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 90,
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/vag-equipment-doc", params={"vin": "X7TEST00000000001"},
headers={"Authorization": "Bearer " + os.environ["AVC_TOKEN"]}, timeout=90)
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/vag-equipment-doc?" + new URLSearchParams({ vin: "X7TEST00000000001" });
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.AVC_TOKEN}` },
signal: AbortSignal.timeout(90000) });
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/vag-equipment-doc?"+q.Encode(), nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("AVC_TOKEN"))
resp, err := (&http.Client{Timeout: 90 * 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/vag-equipment-doc?" + q))
.header("Authorization", "Bearer " + System.getenv("AVC_TOKEN"))
.timeout(Duration.ofSeconds(90)).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(90) };
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("AVC_TOKEN"));
var url = "https://api.avtovincod.ru/vag-equipment-doc?" + "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/vag-equipment-doc")
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: 90) { |h| h.request(req) }
d = JSON.parse(res.body)
puts d["success"] == 1 ? d : "#{d["code"]}: #{d["error"]}"Токен = "ВАШ_ТОКЕН";
Соединение = Новый HTTPСоединение("api.avtovincod.ru", 443, , , , 90, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/vag-equipment-doc?" + "vin=" + КодироватьСтроку("X7TEST00000000001", СпособКодированияСтроки.КодировкаURL));
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);
Ответ = Соединение.Получить(Запрос);
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку("UTF-8"));
Данные = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
Если Данные.success = 1 Тогда
Сообщить("Проверка выполнена");
Иначе
Сообщить(Данные.code + ": " + Данные.error);
КонецЕсли;Заказ и опрос готовности (Python)
import os, time, requests
URL = "https://api.avtovincod.ru/vag-equipment-doc"
H = {"Authorization": "Bearer " + os.environ["AVC_TOKEN"]}
while True: # заказ; очередь проверки наличия данных занята (429 SERVICE_BUSY) - повторить через retryAfterSec
d = requests.get(URL, params={"vin": "WVWZZZ1JZ3W000456"}, headers=H, timeout=90).json()
if d.get("code") != "SERVICE_BUSY": break
time.sleep(d.get("retryAfterSec", 10))
while d.get("success") == 1 and d.get("status") == "processing":
time.sleep(max(10, d.get("pollAfterSec", 30)))
d = requests.get(URL, params={"task": d["taskId"]}, headers=H, timeout=90).json()
if d.get("success") == 1:
for f in d["report"]["files"]:
open(f["name"], "wb").write(requests.get(f["url"], timeout=120).content)
print("готово, списано", d.get("billing", {}).get("charged"))
else:
print(d["code"], d["error"])
Бесплатных тестовых периодов и долгих согласований нет: пополните баланс в личном кабинете и сразу проверяйте реальные машины. Токен выдаётся при регистрации, деньги списываются только по правилам метода (раздел "Тарификация"). Нужен доступ из ИИ-ассистента: MCP-сервер.
Примеры ответов: успешный, ошибка, нет данных
Успешный запрос
GET https://api.avtovincod.ru/vag-equipment-doc?task=3f2b9c1e-7a4d-4e8b-9c21-5d6e7f8a9b0c
Authorization: Bearer ВАШ_ТОКЕН
HTTP 200, status: "done": отчёт готов, одно списание по цене метода, сумма и остаток в блоке billing (цифры в примере условные). Ответ на заказ и опросы до готовности блока billing не содержат: они бесплатны.
{
"success": 1,
"status": "done",
"found": 1,
"taskId": "3f2b9c1e-7a4d-4e8b-9c21-5d6e7f8a9b0c",
"query": {
"vin": "WVWZZZ1JZ3W000456"
},
"report": {
"code": "vag_equipment_doc",
"title": "Комплектация VAG по ETKA (PDF)",
"vin": "WVWZZZ1JZ3W000456",
"brand": "VW",
"created_at": "2026-11-01 12:14:05",
"files": [
{
"type": "pdf",
"name": "vag_equipment_doc_WVWZZZ1JZ3W000456.pdf",
"size": 284113,
"url": "https://api.avtovincod.ru/vv-file/Qm9kZXJfdGVzdF90b2tlbl8xMjM0NTY3"
}
],
"web_url": null,
"text": null,
"files_until": "2027-01-30"
},
"billing": {
"charged": 389,
"currency": "RUB",
"billed": true,
"balance": 1611,
"requestId": 1234567
}
}
Бесплатная проба без списания: https://api.avtovincod.ru/vag-equipment-doc?vin=X7TEST00000000001 сразу вернёт готовый отчёт-образец по этой же схеме с полем testMode: true и charged: 0; опрос ?task=TEST-TASK-0001 - тоже образец.
Неуспешный запрос
GET https://api.avtovincod.ru/vag-equipment-doc?vin=WVWZZZ1JZ3W00045
Authorization: Bearer ВАШ_ТОКЕН
Ошибка в параметрах: HTTP 400, текст ошибки можно показать пользователю. Бесплатно.
{
"success": 0,
"error": "VIN должен содержать 17 символов, у вас 16. Проверьте ввод.",
"code": "BAD_VIN"
}
Нет данных
GET https://api.avtovincod.ru/vag-equipment-doc?task=3f2b9c1e-7a4d-4e8b-9c21-5d6e7f8a9b0c
Authorization: Bearer ВАШ_ТОКЕН
Источник ответил, что по этому VIN данных нет: HTTP 200, status: "error", NOT_AVAILABLE. Бесплатно, блока billing нет.
{
"success": 0,
"status": "error",
"taskId": "3f2b9c1e-7a4d-4e8b-9c21-5d6e7f8a9b0c",
"query": {
"vin": "WVWZZZ1JZ3W000456"
},
"error": "По этому VIN отчёт не сформирован: в источнике нет данных. Деньги не списаны.",
"code": "NOT_AVAILABLE"
}
Тарификация
Заказ и опросы бесплатны. Списание одно - когда отчёт готов; повторный опрос готовой задачи не списывает. Нет данных (NOT_AVAILABLE), ошибки, отчёт не получен за 6 часов (PROVIDER_TIMEOUT) - бесплатно.
При заказе проверяется баланс с учётом отчётов, которые уже готовятся (их цена зарезервирована). Если к моменту готовности на балансе не хватает денег, опрос отвечает 402 INSUFFICIENT_BALANCE со status: "unpaid": пополните баланс и повторите опрос - отчёт будет выдан (ждёт 7 дней).
В ответ добавляется блок billing: сколько списано за этот запрос (charged, в рублях), платный ли он (billed), остаток баланса после запроса (balance) и номер в истории запросов (requestId). Те же данные в заголовках X-Charged, X-Balance, X-Request-Id. Нет блока - запрос не списан. Подробнее о блоке billing.
MCP-сервер для ИИ-ассистентов
Подключите проверки к ИИ-ассистенту: Claude, Cursor, VS Code и другим клиентам с поддержкой MCP (Model Context Protocol). Ассистент сам вызывает нужный метод по вашему токену, и проверку можно запросить обычными словами: "проверь залог и ограничения по VIN", "есть ли штрафы по СТС". Удобно менеджерам автосалона, лизинга и страховой без программиста, а разработчику помогает быстро собрать прототип интеграции.
- Адрес сервера:
https://api.avtovincod.ru/mcp, авторизация тем же токеном (Authorization: Bearer ВАШ_ТОКЕН). - Этот метод в MCP - инструмент
vag_equipment_pdf(vin - заказ, task - опрос); всего инструментов 45. - Цены и списания как у API, в результате тоже есть блок
billing. Тестовые значения работают бесплатно. - Инструкция по подключению: avtovincod.ru/docs/mcp/