К содержимому документации
Обзор API
CarHub/Разработчикам
API v2 HTTP · JSON · OpenAPI 3.1.0

Документация API каталога автомобилей

CarHub (Кархаб) API — автомобильные данные из Японии, Кореи и Китая для проектов по всей России. Каталог, характеристики, фотографии и расчёт стоимости — в одном формате.

Базовый адресhttps://carhubauto.ru/api/v2
8 методов чтения3 страныБез ключа для публичных методов

Начало работы

Первый запрос

Начните с небольшой страницы каталога. Запрос возвращает data с автомобилями, pagination с курсором и время формирования generated_at.

  1. Запросите GET /cars с limit=3.
  2. Возьмите id из ответа и запросите GET /cars/{car_id} для полной карточки.
  3. Для продолжения передайте pagination.next_cursor в следующий запрос с теми же фильтрами.

Все методы ниже выполняют чтение. В публичном контуре не нужны регистрация и API-ключ.

Примеры JavaScript рассчитаны на Node.js 18+ и выполнение на вашем сервере. Python использует стандартную библиотеку.

curl --fail-with-body --max-time 15 'https://carhubauto.ru/api/v2/cars?limit=3&photo_only=true'
200 · сокращённый пример ответа
{
  "data": [
    {
      "id": 2309234,
      "identity": {
        "manufacturer": "Daihatsu",
        "model": "Mira Cocoa",
        "title": "Daihatsu Mira Cocoa",
        "trim": "L"
      },
      "listing": {
        "year": 2014,
        "mileage_km": 127000,
        "price": 348000,
        "currency": "JPY",
        "city": null,
        "sell_status": "active",
        "published_at": "2026-10-12T18:33:57.518761Z"
      },
      "specs": {
        "vehicle_type": "hatchback",
        "body_type": "Хэтчбек, 5 дверей",
        "fuel_type": "Бензин",
        "drive_type": "Передний",
        "transmission": "Автомат",
        "engine_power_hp": 52,
        "engine_displacement_cc": 660,
        "powertrain_type": "ice",
        "powertrain_label": "Двигатель внутреннего сгорания",
        "traction_power_kw": null,
        "traction_power_hp": null,
        "max_30_min_power_kw": null,
        "combustion_engine_power_hp": null,
        "combustion_engine_role": null,
        "electric_motors": []
      },
      "media": {
        "main_photo": "https://carhubauto.ru/api/v2/cars/2309234/photo",
        "has_panorama": false
      },
      "pricing": {
        "status": "estimated",
        "presentation": {
          "amount_rub": 629773,
          "kind": "estimated",
          "label": "Предварительная цена во Владивостоке",
          "notice": "Нужно подтвердить: мощность комплектации. Итог может измениться."
        }
      },
      "source": {
        "country": "JP",
        "name": "Aucnet.jp",
        "listing_id": null,
        "url": null
      },
      "links": {
        "carhub": "https://carhubauto.ru/car/2309234/"
      }
    }
  ],
  "pagination": {
    "limit": 3,
    "next_cursor": "eyJ2IjoxLCJzb3J0IjoiZnJlc2hfZ29vZF9lbm91Z2hfZGVzYyIsInF1YWxpdHlfYnVja2V0IjowLCJjb21wbGV0ZW5lc3Nfc2NvcmUiOjEyLCJwYXJzZWRfYXRfdHMiOiIyMDI2LTEwLTEyVDIzOjQ5OjEyLjY3MzQ1OSswMDowMCIsImNhcl9pZCI6MjMxMDA4MiwibW9kZSI6Im1peGVkX3NlZW4iLCJzZWVuX2lkcyI6WzIzMDkyMzQsMjMxMDA5NSwyMzEwMDgyXX0",
    "has_more": true
  },
  "generated_at": "2026-10-19T02:34:50.790319Z"
}

Доступ и подключение

Публичный API

Методы этого справочника работают без ключа: каталог, карточки, фасеты, комплектации, марки, модели и курсы валют.

Для сайта на другом домене используйте собственный сервер. Прямые запросы из браузера разрешены только для согласованных CORS-доменов.

Партнёрская интеграция

Отдельный контур /api/v2/partner/… использует заголовок X-CarHub-API-Key. Доступ и индивидуальные условия согласуются при подключении.

Храните ключ только на сервере. Передавайте его в заголовке, сохраняйте вне клиентского кода и URL.

Обсудить подключение →

Адрес /api/v2 закреплён за версией v2. Архивная документация v1 доступна для справки. Публичные /api/v1 и /v1 отключены 5 ноября 2026 года и возвращают 410 Gone; для новых и действующих интеграций используйте v2.

Фильтры, поиск и комплектации

Сначала получите фасеты — доступные варианты и диапазоны. Пользователю показывайте label, в запрос передавайте value.

  • q — текстовый поиск.
  • source_country — JP, KR или CN.
  • manufacturer и model можно повторять в URL для множественного выбора.
  • engine_type принимает значения через запятую: gasoline,hybrid.
  • sort — сортировка по цене, году или пробегу. Точные значения — в параметрах каталога.

Выбор комплектации

После выбора одной марки и одной модели запросите GET /cars/trims. Значение trims[].value передайте в trim у каталога и фасетов.

При смене марки или модели сбрасывайте выбранную комплектацию. В запросах фасетов и каталога сохраняйте одинаковый набор фильтров.

price_min/max — цена объявления в валюте источника. landed_price_min/max — полная или предварительная стоимость во Владивостоке в рублях; частичная сумма в этот фильтр не входит.

Фасеты и фильтры
# Значения фильтров: используйте value, показывайте label
curl --max-time 15 'https://carhubauto.ru/api/v2/cars/facets?source_country=KR'

# Одна марка и одна модель → доступные комплектации
curl --get --max-time 15 'https://carhubauto.ru/api/v2/cars/trims' \
  --data-urlencode 'manufacturer=BMW' \
  --data-urlencode 'model=X3'

# Каталог: варианты берите из ответа фасетов
curl --get --max-time 15 'https://carhubauto.ru/api/v2/cars' \
  --data-urlencode 'source_country=KR' \
  --data-urlencode 'engine_type=gasoline,hybrid' \
  --data-urlencode 'sort=year_desc' \
  --data-urlencode 'limit=10'

Курсорная пагинация

limit задаёт размер страницы: от 1 до 100. Продолжение находится в pagination.next_cursor, наличие следующей страницы — в pagination.has_more.

  1. Первый запрос отправляйте без cursor.
  2. Передавайте полученный курсор без изменения вместе с прежними фильтрами и сортировкой.
  3. Заканчивайте обход при has_more=false или пустом next_cursor.

После изменения фильтров или сортировки начинайте с первой страницы. Курсор — непрозрачная строка; разбирать или конструировать его самостоятельно не нужно.

Параметры page и read_version предназначены для отдельно разрешённого партнёрского режима. Публичная интеграция использует cursor; смешивание режимов приводит к ошибке.

Обход каталога · JavaScript
// Сохраняйте один набор фильтров на протяжении обхода.
const filters = { limit: "50", source_country: "KR", photo_only: "true" };
let cursor = null;

do {
  const url = new URL("https://carhubauto.ru/api/v2/cars");
  url.search = new URLSearchParams(filters).toString();
  if (cursor) url.searchParams.set("cursor", cursor);

  const response = await fetch(url, { signal: AbortSignal.timeout(15000) });
  if (!response.ok) throw new Error(`HTTP ${response.status}`);
  const page = await response.json();
  // Здесь сохраните или отобразите page.data.
  console.log(page.data);

  cursor = page.pagination.has_more ? page.pagination.next_cursor : null;
} while (cursor);

Структура автомобиля

Каталог возвращает компактную карточку. Метод GET /cars/{car_id} дополняет её фотографиями, оснащением, характеристиками и статьями расчёта.

identity
Марка, модель, название и комплектация
listing
Год, пробег, цена объявления, валюта и статус продажи
specs
Кузов, двигатель, мощность, привод и другие характеристики
media
Фотографии и панорамы при наличии
pricing
Стоимость во Владивостоке и полнота расчёта
source
Страна и площадка-источник
links
Ссылка на страницу автомобиля

null означает отсутствие значения, а не ноль. Не все характеристики и медиа присутствуют у каждого объявления.

Подтверждённо проданные объявления могут сохраняться с прежним id и listing.sell_status=sold. Показывайте статус продажи; успешный HTTP-ответ сам по себе не подтверждает доступность автомобиля.

Сокращённый пример карточки
{
  "id": 2309234,
  "identity": {
    "manufacturer": "Daihatsu",
    "model": "Mira Cocoa",
    "title": "Daihatsu Mira Cocoa",
    "trim": "L"
  },
  "listing": {
    "year": 2014,
    "mileage_km": 127000,
    "price": 348000,
    "currency": "JPY",
    "sell_status": "active"
  },
  "specs": {
    "vehicle_type": "hatchback"
  },
  "media": {
    "main_photo": "https://carhubauto.ru/api/v2/cars/2309234/photo"
  },
  "pricing": {
    "presentation": {
      "amount_rub": 629773,
      "kind": "estimated",
      "label": "Предварительная цена во Владивостоке"
    }
  },
  "source": {
    "country": "JP"
  },
  "links": {
    "carhub": "https://carhubauto.ru/car/2309234/"
  }
}

Срез публичного ответа от 19 октября 2026. Значения и наличие могут измениться. Полная схема: CarSummary и CarDetail.

Актуальность данных и наличие автомобиля

CarHub объединяет объявления из Японии, Кореи и Китая. Состав данных и частота обновления зависят от площадки-источника. Наличие карточки в каталоге само по себе не подтверждает, что автомобиль сейчас можно купить: проданные объявления остаются доступны по прежним адресам.

Проверяйте подтверждение статуса

Читайте listing.sell_status: active — в продаже, sold — подтверждённо продано, inactive — снято у источника, possibly_sold — статус уточняется.

listing.sell_status_checked_at — время подтверждения статуса у источника; listing.sell_status_origin указывает его происхождение. Если подтверждения нет, эти поля могут быть null. Время generated_at относится к формированию ответа API и не заменяет проверку источника.

Сохраняйте неизвестные значения

Если listing.price равна null, показывайте «Цена уточняется». Не заменяйте её нулём и не вычисляйте итоговую стоимость из неподтверждённой суммы. Не определяйте продажу или резерв по необычной цене.

Для рублёвой суммы используйте pricing.presentation и полноту расчёта. Частичная сумма не является итогом, а цена объявления в исходной валюте не включает все расходы на приобретение и доставку.

Перед оплатой и оформлением автомобиля подтвердите его наличие и условия у продавца или импортёра. Публичный каталог помогает выбрать предложение; он не подменяет подтверждение сделки.

Расчёт стоимости

Для показа цены используйте pricing.presentation: amount_rub — сумма, kind — её вид, label и notice — пояснение для пользователя.

pricing.statusПоле суммыКак показывать
completetotal_rubПолный расчёт
estimatedestimated_total_rubПредварительная сумма с пояснением
partial / manual_reviewknown_total_rubРассчитанная часть стоимости; требуется уточнение
unavailableСумма может отсутствоватьПояснение о недоступности расчёта

Сохраняйте смысл label и notice. Предварительная цена и известная часть расходов не должны выглядеть как окончательный итог.

listing.price_basis=fob означает цену FOB: автомобиль и доставка до экспортного порта Японии уже включены. Повторно не добавляйте японскую доставку; морская перевозка, таможня, утилизационный сбор, комиссия и расходы в России учитываются отдельно. listing.price_observed_at — время проверки исходной цены. Передавайте purchase_price_basis=fob, если используете эту сумму в отдельном запросе расчёта. При неизвестном морском фрахте API вернёт неполный расчёт с ocean_freight в недостающих параметрах.

Уточнение параметров

GET /cars/{car_id}/pricing-preview возвращает предварительный перерасчёт по переданным характеристикам. Требуется хотя бы один уточняющий параметр. Результат не сохраняет изменения в карточку.

Курсы валют и время

GET /currency/rates возвращает текущие доступные курсы за единицу валюты. В готовом расчёте автомобиля проверяйте currency_rate и rates_fetched_at: время расчёта и время получения текущего курса могут различаться.

Фотографии, панорамы и логотипы

Изображения автомобиля

Используйте абсолютные URL из media как есть. main_photo — основное фото, listing_photos — фотографии объявления, configuration_photos — фото комплектации.

При ошибке загрузки сохраняйте данные автомобиля и показывайте состояние «Фото пока недоступно».

Дополнительные материалы

panoramas содержит 360-виды, если они доступны; has_panorama помогает заранее показать элемент интерфейса.

Логотипы марок доступны в logo_url из справочника марок. Для медиа учитывайте заголовки кеширования.

Ошибки и ограничения

Сначала проверяйте HTTP-статус и Content-Type. Ошибки приложения содержат detail; защитный ответ сервера может иметь другой формат.

Публичный лимит приложения — 120 запросов в минуту с одного IP на метод. Дополнительные ограничения сервера могут сработать раньше. При 429 учитывайте Retry-After, если заголовок присутствует.

Повторяйте временные ошибки с увеличением паузы и ограничением числа попыток. Сохраняйте последнюю успешную выдачу и используйте кеширование. Ошибки параметров требуют исправления запроса.

Примеры ошибок
// 404: автомобиль не найден
{ "detail": "Car not found" }

// 422: limit превышает допустимое значение
{
  "detail": [{
    "type": "less_than_equal",
    "loc": ["query", "limit"],
    "msg": "Input should be less than or equal to 100",
    "input": "500"
  }]
}
КодДействие клиента
400Исправить сочетание фильтров или некорректный курсор
403Проверить право на выбранный режим, например нумерованную выдачу
404Проверить ID или slug; обновить сохранённые данные
409В партнёрском режиме с версией начать просмотр заново
422Проверить detail[].loc и исправить параметр
429Снизить частоту, выдержать паузу и повторить
503 / 5xxСохранить текущий экран; повторить с задержкой

Порядок интеграции

  1. Получите фасеты и постройте фильтры по value и label.
  2. Загружайте каталог небольшими страницами; храните фильтры, сортировку и курсор вместе.
  3. Открывайте полную карточку по id. Проверяйте статус продажи и отсутствующие значения.
  4. Показывайте цену через pricing.presentation, сохраняя оговорки о полноте.
  5. Обрабатывайте таймауты, ошибки HTTP, отсутствие фото и пустые результаты. Кешируйте успешные ответы с учётом их заголовков.

Ваша интеграция должна допускать появление новых полей в ответе. Используйте только нужные поля и обрабатывайте неизвестные значения безопасно.

Справочник

Методы, параметры и ответы

Выберите метод слева или переходите по списку. Типы, обязательные параметры, ограничения и схемы ниже собираются из публичной OpenAPI-спецификации.

Откройте справочник с параметрами, примерами запросов и схемами ответов.

Открыть OpenAPI JSON ↗

Схемы данных

Все поля ответов

Выберите схему, чтобы перейти к её полям в справочнике. Ссылки внутри схем раскрывают вложенные объекты. Пометка required означает обязательное поле; null — отдельное допустимое значение.