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

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

История регистрации авто по VIN из архива

Периоды владения, характеристики и данные учётной записи автомобиля из архива проверок, в том же формате, что История регистрации. В ответе дата, на которую данные актуальны (checkedAt), и признак "archival": true. Платно только если найдены периоды владения. Поиск по VIN.

Метод GET /gibdd-archiveПоиск VINПлатно только если найдены периоды владенияОтвет обычно за секунду

Когда нужен архив

Архив показывает данные на дату checkedAt. Если нужна регистрация на сегодня, используйте Историю регистрации.

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

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

Эндпоинт

GET https://api.avtovincod.ru/gibdd-archive

Параметры

ПараметрОписаниеОбязателен
vinVIN, 17 символов (латиница и цифры, без I, O, Q). Русские буквы-двойники переводятся в латиницу автоматическида

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

curl --max-time 60 -H "Authorization: Bearer $TOKEN" \
  "https://api.avtovincod.ru/gibdd-archive?vin=KL1NF487J8K801500"

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

{
  "success": 1,
  "archival": true,
  "checkedAt": "2026-04-02",
  "record": {
    "vin": "KL1NF487J8K801500",
    "bodyNumber": "KL1NF487J8K801500",
    "regNumber": "Р819•••98",
    "sts": {
      "num": null,
      "date": null
    },
    "pts": {
      "num": null,
      "date": null
    },
    "model": "ШЕВРОЛЕ LACETTI",
    "engineVolume": "1399",
    "color": "СИНИЙ",
    "powerHp": "95.0",
    "powerKwt": "69.9",
    "year": "2007",
    "maxWeight": null,
    "weightWithoutLoading": null,
    "category": "B",
    "lastRegAction": null,
    "recordStatus": "действующая",
    "ownershipPeriods": [
      {
        "personType": "Физическое лицо",
        "from": "2008-01-26",
        "to": "2017-05-16"
      },
      {
        "personType": "Физическое лицо",
        "from": "2017-05-16",
        "to": "2018-01-18"
      },
      {
        "personType": "Физическое лицо",
        "from": "2018-01-18",
        "to": "2018-01-20"
      },
      {
        "personType": "Физическое лицо",
        "from": "2018-01-20",
        "to": "2019-10-09"
      },
      {
        "personType": "Физическое лицо",
        "from": "2019-10-09",
        "to": "2019-10-22"
      },
      {
        "personType": "Физическое лицо",
        "from": "2019-10-22",
        "to": null
      }
    ]
  },
  "billing": {
    "charged": 1.5,
    "currency": "RUB",
    "billed": true,
    "balance": 998.5,
    "requestId": 1234567
  }
}

Последний период с "to": null: этот владелец владел машиной на дату checkedAt. Госномер в примере скрыт.

Поля ответа

ПолеЗначение
archivalвсегда true: данные из архива, а не из запроса в ГИБДД в момент проверки
checkedAtдата, на которую данные актуальны (YYYY-MM-DD)
record.vin, bodyNumber, regNumberVIN, номер кузова, госномер на дату данных
record.sts, record.ptsномер и дата СТС и ПТС: {"num", "date"}, если были в данных
record.model, year, colorмарка и модель, год выпуска, цвет
record.engineVolume, powerHp, powerKwtобъём двигателя (куб. см), мощность (л.с. и кВт)
record.maxWeight, weightWithoutLoadingразрешённая максимальная масса и масса без нагрузки, кг
record.categoryкатегория ТС (A, B, C, D)
record.lastRegActionпоследнее регистрационное действие, если было в данных
record.recordStatusстатус записи: действующая или архивная
record.ownershipPeriods[]периоды владения по порядку: personType (Физическое лицо / Юридическое лицо), from, to (YYYY-MM-DD; null у последнего - владелец на дату данных)

Поля, которых нет в данных, приходят null. Состав полей record такой же, как у Истории регистрации.

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

По VIN нет периодов владения. HTTP 200, бесплатно:

{
  "success": 0,
  "error": "Данные не найдены.",
  "code": "NOT_FOUND"
}

Коды ошибок

КодЗначение
NOT_FOUNDданные по VIN не найдены (HTTP 200, бесплатно)
NO_TOKENтокен не передан
TOKEN_INVALIDтокен недействителен или деактивирован
NOT_ALLOWEDAPI не подключён вашему токену
API_DISABLEDAPI временно отключён
IP_NOT_ALLOWEDзапрос с IP вне вашего белого списка
INPUT_REQUIREDне передан vin
BAD_VINVIN не 17 символов либо содержит недопустимые знаки
INSUFFICIENT_BALANCEнедостаточно средств на балансе
RATE_LIMITпревышен лимит запросов в минуту
RATE_LIMIT_IPслишком много запросов с одного IP
SERVICE_UNAVAILABLEисточник временно недоступен (HTTP 503), повторите позже

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

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

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

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

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

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

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

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

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

GET https://api.avtovincod.ru/gibdd-archive?vin=KL1NF487J8K801500
Authorization: Bearer ВАШ_ТОКЕН

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

{
  "success": 1,
  "archival": true,
  "checkedAt": "2026-04-02",
  "record": {
    "vin": "KL1NF487J8K801500",
    ...
    "ownershipPeriods": [ ... ]
  },
  "billing": {
    "charged": 1.5,
    "currency": "RUB",
    "billed": true,
    "balance": 998.5,
    "requestId": 1234567
  }
}

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

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

GET https://api.avtovincod.ru/gibdd-archive?vin=KL1NF487J8K80150
Authorization: Bearer ВАШ_ТОКЕН

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

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

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

GET https://api.avtovincod.ru/gibdd-archive?vin=KL1NF487J8K801500
Authorization: Bearer ВАШ_ТОКЕН

Источник временно недоступен: HTTP 503, SERVICE_UNAVAILABLE. Бесплатно, повторите запрос позже.

{
  "success": 0,
  "error": "Источник временно недоступен. Повторите позже, запрос не тарифицирован.",
  "code": "SERVICE_UNAVAILABLE"
}

Тарификация

Списание только когда в ответе есть периоды владения (success: 1). Ответ NOT_FOUND и все ошибки бесплатны. Цена и подключение метода в личном кабинете.

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

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

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

Для генераторов клиентов и ИИ-агентов: OpenAPI-спецификация метода (YAML). Все методы сразу: /openapi.yaml.

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

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

Чем архив отличается от Истории регистрации?

История регистрации запрашивает данные ГИБДД в момент проверки. Архив отдаёт сохранённые данные прошлых проверок на дату checkedAt: ответ быстрее и стабильнее, но изменения после этой даты в нём не видны. Формат ответа одинаковый, поэтому архив легко подключить там, где уже разбирается История регистрации.

Что значит "to": null у последнего периода?

Этот владелец владел машиной на дату данных checkedAt. Владеет ли он ей сейчас, архив не знает: для текущих данных используйте Историю регистрации.

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

Нет, только по VIN. Госномер по VIN и VIN по госномеру есть отдельными методами.

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

Только если в ответе есть периоды владения. Ответ NOT_FOUND и любые ошибки бесплатны.

Почему нет номера СТС или ПТС?

Архив хранит то, что было в данных на дату проверки. Если номера документов не было, поле приходит null. Список периодов владения при этом полный.

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

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

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