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

Главная → Документация → Комплектация VAG по ETKA (PDF)

Комплектация VAG по ETKA (PDF)

Заводская комплектация автомобиля концерна VAG по VIN из каталога ETKA: список опций с PR-кодами, двигатель, коробка, цвет и салон - документом PDF для печати. Марки: Volkswagen, Audi, Skoda, Seat, Cupra, Porsche. Удобно сверить объявление с тем, как машина была собрана на заводе.

GET /vag-equipment-docпо VINасинхронно, 5-15 минутPDF по ссылкенет данных - бесплатно

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

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

Эндпоинт

GET https://api.avtovincod.ru/vag-equipment-doc

Можно и POST с теми же параметрами в теле формы.

Параметры

ПараметрОписание
vinVIN, 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 минут (иногда дольше), поэтому метод асинхронный, как ДТП по базе ГИБДД:

  1. Заказ: GET /vag-equipment-doc?vin=VIN. Ответ сразу: status: "processing" и номер задачи taskId. Бесплатно.
  2. Опрос: GET /vag-equipment-doc?task=taskId не чаще, чем через pollAfterSec секунд (обычно 30). Пока отчёт готовится - снова processing и оценка eta_sec. Опросы бесплатны.
  3. Готово: 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
  }
}

Что возвращает

ПолеЗначение
statusprocessing - отчёт готовится; done - готов; error - не сформирован (бесплатно)
taskIdномер задачи для опроса ?task=
eta_sec, pollAfterSecпримерно сколько ждать и через сколько секунд спросить снова
found1 - отчёт есть
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_ALLOWEDAPI не подключён вашему токену
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", "есть ли штрафы по СТС". Удобно менеджерам автосалона, лизинга и страховой без программиста, а разработчику помогает быстро собрать прототип интеграции.