Первый запрос за пять минут.

apiauto.space — REST API с JSON: каталоги подержанных машин Кореи (Encar), Китая (Che168) и аукционов США (Copart, IAAI) в одном формате записи. Базовый адрес — https://api.apiauto.space/v1.

Полная схема — в Swagger UI (можно отправлять запросы) и в Redoc; машиночитаемо — openapi.json.

Быстрый старт

  1. Откройте бота и возьмите демо-ключ: сутки, 100 запросов за данными, до 20 машин за запрос, все три рынка.
  2. Сохраните ключ в переменную окружения APIAUTO_KEY: он показывается один раз.
  3. Отправьте запрос:
curl
curl -s "https://api.apiauto.space/v1/cars?market=kr&brand=Kia&limit=20" \
  -H "X-API-Key: $APIAUTO_KEY"

Ответ — страница машин и курсор следующей страницы. Так выглядит одна запись (сокращено: две ссылки на фото и первые поля raw):

GET /v1/cars/encar:42795070
{
  "id": "encar:42795070",
  "market": "kr",
  "source": "encar",
  "source_id": "42795070",
  "title": "2022 BMW 1 Series (F40) M135i xDrive",
  "brand": "BMW",
  "model": "1 Series (F40)",
  "trim": "M135i xDrive",
  "year": 2022,
  "mileage_km": 49000,
  "fuel": "gasoline",
  "transmission": null,
  "engine_cc": null,
  "body_type": null,
  "color": null,
  "vin": null,
  "price": {
    "amount": "30000000.00",
    "currency": "KRW"
  },
  "price_usd": "21920.18",
  "location": {
    "country": "KR",
    "region": "Gyeonggi",
    "city": null
  },
  "photo_count": 4,
  "listing_url": "https://fem.encar.com/cars/detail/42795070",
  "is_active": true,
  "first_seen_at": "2026-09-25T14:04:10.804411Z",
  "last_seen_at": "2026-09-25T14:04:10.804411Z",
  "disappeared_at": null,
  "updated_at": "2026-09-25T14:04:10.804411Z",
  "source_mode": "replica",
  "photos": [
    "https://api.apiauto.space/img/encar:42795070/1.jpg?exp=…&sig=…",
    "https://api.apiauto.space/img/encar:42795070/2.jpg?exp=…&sig=…"
  ],
  "raw": {
    "badge": "M135i xDrive",
    "has_vin": false,
    "form_year": "202209",
    "sell_type": "normal",
    "body_class": null,
    "office_city": "경기",
    "badge_detail": null,
    "has_accident": false
  }
}

Держите ключ на сервере. API не разрешает запросы из браузера (CORS выключен), а ключ в коде страницы увидит любой посетитель.

Ключ и заголовки

Каждый запрос к данным передаёт ключ в заголовке X-API-Key. Ключ хранится у нас только в виде хеша; потерянный ключ перевыпускается в боте — старый работает ещё 24 часа, квота не сбрасывается.

Заголовок ответаЧто значит
X-Quota-LimitКвота периода: машин в месяц (в демо — запросов за сутки).
X-Quota-RemainingСколько осталось.
X-Quota-ResetКогда квота обновится, ISO 8601 UTC.
X-RateLimit-LimitЗапросов в секунду по тарифу.
X-RateLimit-RemainingОсталось в текущей секунде.
X-RateLimit-ResetСекунд до сброса счётчика (1).
Retry-AfterПри 429 и некоторых 503: через сколько секунд повторить.
X-Data-Age-SecondsВозраст копии рынка в секундах.

Методы

МетодЧто делаетКвота
GET /v1/carsКаталог рынка с фильтрами и курсором.машины в ответе
GET /v1/cars/{id}Одна машина по id (encar:…, che168:…, copart:…, iaai:…).1 запись
GET /v1/changesЛента изменений: новые, снятые, цены. Pro и выше.события в ответе
GET /v1/references/brandsМарки рынка с числом машин.бесплатно
GET /v1/references/modelsМодели марки с числом машин.бесплатно
GET /v1/references/dictionariesДопустимые значения fuel, transmission, body_type и других полей.бесплатно
GET /v1/references/marketsСвежесть рынков, число машин, доступ по тарифу.бесплатно
GET /v1/us/liveЖивой поиск США за пределами копии. Pro и выше.отдельный счётчик
GET /v1/usageРасход квоты по рынкам.бесплатно
GET /img/{id}/{n}.jpgФото машины по подписанной ссылке из записи.бесплатно
GET /healthzПроверка состояния: 503, если какой-то рынок старше порога свежести.бесплатно

GET /v1/cars

Обязателен только market (kr, cn, us). Остальные параметры сужают выборку:

ПараметрЗначение
brand, model, trimТочное совпадение; написание — как в /v1/references/brands и /models.
year_min, year_maxГод выпуска.
price_min, price_maxЦена в валюте рынка (KRW, CNY, USD).
price_usd_min, price_usd_maxЦена в долларах по дневному курсу ЕЦБ.
mileage_maxПробег, км.
fuel, transmission, body_typeЗначения из /v1/references/dictionaries.
has_photostrue / false
is_activeПо умолчанию true; false — снятые с продажи за последние 14 дней.
qДо 6 слов названия (год, марка, модель, комплектация); короткие слова вроде k5, x5 — целиком.
sort-first_seen (default), first_seen, price, -price, year, -year, mileage, -mileage
limit1–100, по умолчанию 20 (в демо до 20).
cursorЗначение next_cursor прошлой страницы.

Ответ: {"items": [...], "next_cursor": "…" | null, "count": 1834 | null}. count — сколько машин подходит под фильтры, если их не больше 10 000; больше — null. Пагинация только курсором: страница не «плывёт», когда каталог меняется. Параметр offset не поддерживается — запрос с ним получит 400.

Запись о машине

У всех рынков одни и те же ключи. Чего источник не даёт — null, а не догадка. Всё, что есть только у источника, — в raw.

ПолеЧто значит
idsource:source_id, стабилен навсегда.
market, sourcekr · encar, cn · che168, us · copart | iaai
titleГод, марка, модель, комплектация одной строкой.
brand, model, trimЛатиницей; марки написаны одинаково во всех рынках.
year, mileage_km, engine_ccЧисла; пробег в километрах.
fuel, transmission, body_type, colorКанонические английские значения.
vinЕсли источник его дал.
price{amount, currency} — цена в валюте рынка (у США — ставка или «купить сейчас»).
price_usdТа же цена в долларах по дневному курсу ЕЦБ.
location{country, region, city}
photos, photo_countПодписанные ссылки на фото и их число.
listing_urlОбъявление в источнике (у США — null).
is_active, first_seen_at, last_seen_at, disappeared_at, updated_atСтатус и время в UTC.
rawПоля источника как есть, включая исходные написания (raw.source_values).

Фото

Ссылки в photos подписаны и действуют около суток — храните id машины, а не ссылку, и берите свежую запись, когда нужно. Фото отдаёт наш сервер из кэша; запросы к /img квоту не тратят.

GET /v1/changes

Параметры: market, since (обязателен, ISO 8601 с часовым поясом), type (added, disappeared, price_drop, price_up; можно несколько), min_pct (порог изменения цены в процентах, по умолчанию 0.5), limit, cursor. Каждое событие — одна запись квоты. Тарифы Pro, Max и демо.

GET /v1/us/live

Поиск по аукционам США у поставщика данных — для лотов, которых нет в копии. Параметры: make, model, year_min, year_max, price_max, page. Отдельный месячный счётчик: Pro — 2 000, Max — 10 000 запросов. Когда поставщик недоступен или исчерпал свой лимит, ответ — 503 с retry_after.

Квота и лимиты

Каталог и лента изменений списывают число возвращённых машин и событий, а не запросов: ответ с 37 машинами — 37 записей, пустой ответ квоту тарифа не тратит. Демо считает любой запрос за данными.

ТарифКвотаРынковЗапросов/сlimitЛентаLive US
Демо100 запросов за сутки3120✓—
Start100 000 машин в месяц12100——
Pro500 000 машин в месяц25100✓2 000
Max2 000 000 машин в месяц310100✓10 000

Квота месяца обновляется 1-го числа в 00:00 UTC. После окончания оплаченного периода ключ работает ещё 3 дня на пятой части скорости тарифа (но не меньше 1 запроса в секунду), затем отвечает 401 — продление в течение 90 дней сохраняет тот же ключ.

Границы рынков

РынокОбновлениеVINФотоЧего нет
Корея · Encarкаждый часредко (~0,1 %)обычно 4коробка передач, объём двигателя
Китай · Che168каждый часнетмногоVIN
США · Copart, IAAIкаждый часдамногоархив прошедших торгов; кузов у части лотов

Возраст копии рынка приходит в заголовке X-Data-Age-Seconds каждого ответа каталога. Текущая свежесть рынков — на странице статуса и в /v1/references/markets. Подробнее о рынках — на главной.

Ошибки

Тело ошибки — всегда JSON вида {"error": "code", ...} с полезными полями.

HTTPerrorКогда
400bad_requestНеверный параметр, limit выше тарифа, передан offset. Поле detail объясняет.
401unauthorizedНет ключа, ключ неверный, отозван или подписка закончилась.
402quota_exhaustedКвота периода исчерпана; reset_at — когда обновится.
403market_not_in_planРынок не входит в тариф; markets — какие входят.
403feature_not_in_planЛента изменений или живой поиск США не входят в тариф.
403invalid_signature · link_expiredСсылка на фото подделана или устарела.
404not_foundНет такой машины или пути.
429rate_limitedБольше запросов в секунду, чем позволяет тариф; retry_after.
502image_upstream_unavailable · invalid_image_upstreamИсточник не отдал фото.
503upstream_unavailable · upstream_quota_exhausted · upstream_invalid_responseЖивой поиск США: поставщик недоступен; retry_after.
500internal_errorОшибка у нас; администраторы уже знают.

Версии

Внутри /v1 поля не удаляются и не переименовываются; новые необязательные поля могут появляться — не падайте на незнакомых ключах. Несовместимые изменения выйдут под /v2 с переходным периодом, о котором предупредим в боте.

Changelog

2026-09 · v1

  • Каталог, машина по id, лента изменений, справочники, расход, живой поиск США.
  • Подписанные ссылки на фото через /img.
  • Марки и модели во всех рынках пишутся одинаково (Ford, Mercedes-Benz, CX-5, XC60); исходные написания — в raw.source_values.
  • В /v1/references/markets — data_age_seconds и stale: насколько свежа копия каждого рынка.