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

Главная → Документация → Проверка штрафов

API штрафов ГИБДД для юрлиц и автопарков

Проверка штрафов ГИБДД по номеру СТС, водительскому удостоверению или номеру постановления. По каждому штрафу возвращаются сумма, дата, подразделение, наличие и срок действия скидки, статус оплаты.

Нужны размер скидки и сумма со скидкой, статья КоАП, место нарушения и реквизиты для оплаты? Метод Штрафы ГИС ГМП (/fines-gis) принимает те же параметры и отдаёт те же поля плюс новые: запрос уходит через СМЭВ в ГИС ГМП и системы ведомств.

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

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

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

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

Эндпоинт

GET https://api.avtovincod.ru/fines?sts=5058794047
Authorization: Bearer ВАШ_ТОКЕН
ПараметрОписание
stsНомер СТС (свидетельства о регистрации ТС), от 8 до 12 символов.
driverLicenseНомер водительского удостоверения, 10 цифр (серия 4 + номер 6). Синоним: dl.
numPostНомер постановления (УИН), от 15 до 30 цифр. Синоним: uin.

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

{
  "success": 1,
  "query": { "sts": "5058794047" },
  "found": 1,
  "unpaid": 1,
  "total_sum": 500,
  "fines": [
    {
      "num_post": "18810150260211001234",
      "sum": 500,
      "date_post": "2026-02-11",
      "division_name": "ЦАФАП ГИБДД ГУ МВД",
      "enable_discount": true,
      "date_discount": "2026-02-26",
      "paid": null
    }
  ]
}

По номеру СТС и водительскому удостоверению возвращаются только неоплаченные постановления, поэтому поле paid равно null. Статус оплаты (true или false) доступен только при поиске по номеру постановления. Поля unpaid и total_sum - это количество и суммарный размер неоплаченных штрафов в рублях.

Коды ошибок

HTTP · codeЧто означает
400 · STS_INVALID / DL_INVALID / UIN_INVALIDНеверный формат СТС, ВУ или номера постановления.
400 · INPUT_REQUIREDНе указан ни один из параметров поиска.
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/fines?sts=5058794047" \\
  -H "Authorization: Bearer ВАШ_ТОКЕН"

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

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

curl -s --max-time 120 -G "https://api.avtovincod.ru/fines" \
  --data-urlencode "sts=0000000000" \
  -H "Authorization: Bearer $AVC_TOKEN"
<?php
$url = 'https://api.avtovincod.ru/fines?' . http_build_query(['sts' => '0000000000']);
$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/fines", params={"sts": "0000000000"},
                 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/fines?" + new URLSearchParams({ sts: "0000000000" });
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("sts", "0000000000")
	req, _ := http.NewRequest("GET", "https://api.avtovincod.ru/fines?"+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 = "sts=" + URLEncoder.encode("0000000000", StandardCharsets.UTF_8);
        HttpRequest req = HttpRequest.newBuilder(URI.create("https://api.avtovincod.ru/fines?" + 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/fines?" + "sts=" + Uri.EscapeDataString("0000000000");
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/fines")
uri.query = URI.encode_www_form(sts: "0000000000")
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Запрос("/fines?" + "sts=" + КодироватьСтроку("0000000000", СпособКодированияСтроки.КодировкаURL));
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);
Ответ = Соединение.Получить(Запрос);

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

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

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

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

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

GET https://api.avtovincod.ru/fines?sts=5058794047
Authorization: Bearer ВАШ_ТОКЕН

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

{
  "success": 1,
  "query": {
    "sts": "5058794047"
  },
  "found": 1,
  "unpaid": 1,
  "total_sum": 500,
  "fines": [
    {
      "num_post": "18810177260101234567",
      "sum": 500,
      "date_post": "2026-10-01",
      "division_name": "Отдельный батальон ДПС ГИБДД",
      "enable_discount": true,
      "date_discount": "2026-10-21",
      "paid": null
    }
  ],
  "billing": {
    "charged": 0.9,
    "currency": "RUB",
    "billed": true,
    "balance": 999.1,
    "requestId": 1234567
  }
}

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

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

GET https://api.avtovincod.ru/fines?sts=50587
Authorization: Bearer ВАШ_ТОКЕН

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

{
  "success": 0,
  "error": "Неверный номер СТС. Пример: 5058794047.",
  "code": "STS_INVALID"
}

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

GET https://api.avtovincod.ru/fines?sts=5058794047
Authorization: Bearer ВАШ_ТОКЕН

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

{
  "success": 0,
  "error": "Проверка не выполнена",
  "code": "PROVIDER_FAIL",
  "billing": {
    "charged": 0,
    "currency": "RUB",
    "billed": false,
    "balance": 999.1,
    "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", "есть ли штрафы по СТС". Удобно менеджерам автосалона, лизинга и страховой без программиста, а разработчику помогает быстро собрать прототип интеграции.

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

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