Поле extra — блок данных рынка encar

Справочник для клиентов API: структура поля extra и правила его интерпретации после получения через Union API.

Поле extra в ответах Union API по рынку encar содержит два набора данных о конкретном автомобиле:

Все данные относятся к самому автомобилю (его истории и комплектации), а не к объявлению.

Как получить

Запросите поле extra в списке fields:

GET /api/v2/cars?market=encar&fields=id,brand,model,year,price,extra&limit=10

Значение extra приходит строкой с JSON (не вложенным объектом). Перед использованием его нужно распарсить: JSON.parse(row.extra). В CSV-выгрузках extra также лежит одной колонкой-строкой с JSON, а разделитель колонок — ; (кавычки внутри значений удвоены, RFC-4180).

Поле attributes — это ключи фильтрации (status, total_price_rub, recycling_fee_rub) и для отображения в карточке не предназначено.

Структура

extra = { risk_data, options, <блок таможни> }

1. risk_data (объект)

Поле Тип Ед. Значение
is_rental bool — 렌트 — автомобиль использовался в прокате/аренде. Это не залог
pledge_count int шт. Залоги (저당). Ключа может не быть
seizing_count int шт. Аресты (압류). Ключа может не быть
insurance_gaps array[5] of string|null — Периоды без страховки, формат "YYYYMM~YYYYMM". null = пробела нет
accidents array of object — Список ДТП (см. 1.1)
accident_summary object — Сводка по ДТП (см. 1.2)
car_changes array of object — Смены номерных знаков (см. 1.3)
flood object — Затопление (см. 1.4)
theft object — Угон (см. 1.4)
total_loss object — Полная гибель (см. 1.4)
ownership object — Смены владельцев (см. 1.5)
usage object — Характер использования (см. 1.6)

Ключи pledge_count, seizing_count, is_rental могут отсутствовать — это значит «нет данных», а не «нет залогов/арестов». Отражайте это различие в интерфейсе.

1.1 accidents[] — элемент

Поле Тип Значение
date string Дата ДТП, "YYYY-MM-DD"
type string "1"/"2"/"3" Код типа ДТП (см. ниже). Тип — строка, не число
part_cost int Стоимость запчастей, KRW
labor_cost int Работы, KRW
painting_cost int Покраска, KRW
insurance_benefit int Выплата страховой, KRW

Массив приходит по убыванию даты, но надёжнее сортировать самостоятельно (date desc).

Коды type (кодировка Encar):

Код Значение
"1" 차대차 — авто-авто
"2" 차대인 — авто-человек
"3" 차량단독 — одиночное (без второго участника)

Семантика кодов предварительная (из справочника Encar, уточняется). Если тип не критичен, для интерфейса безопаснее показывать сам факт и стоимость ДТП, чем опираться на код.

1.2 accident_summary — объект

Поле Тип Значение
cnt int Всего ДТП (число событий, не элементов accidents[])
my_car_cnt int 내차피해 — ДТП с ущербом своему автомобилю
other_car_cnt int 타차피해 — ДТП с ущербом чужому автомобилю
my_car_cost int, KRW Сумма ущерба «своему»
other_car_cost int, KRW Сумма ущерба «чужому»

my_car_cnt + other_car_cnt не равно cnt: одно ДТП может попасть в обе категории. Не выводите одну величину из другой.

1.3 car_changes[] — элемент

Поле Тип Значение
date string "YYYY-MM-DD"
plate_no string Номер, замаскирован (например, "34누XXXX")

1.4 flood / theft / total_loss

Объект Поля
flood date (string|null), partial_loss_cnt (int), total_loss_cnt (int) — частичное/полное затопление
theft cnt (int), date (string|null) — угон
total_loss cnt (int), date (string|null) — полная гибель/списание

Счётчики — всегда int: 0 означает «не было». date может отсутствовать.

1.5 ownership

Поле Тип Значение
changes array of string Даты смен владельцев, "YYYY-MM-DD", по убыванию
change_cnt int Число смен

1.6 usage

Поле Тип Значение
is_business bool Коммерческое использование
is_government bool Государственное использование
type_code string "1".."4" Числовой код; семантика не документирована (по данным чаще всего "2", и это не «бизнес»). Используйте флаги is_business/is_government, а не type_code
use_history array of string История кодов использования

2. options — объект (не массив)

{ "type": "CAR",
  "standard": ["001","002"],
  "choice":   [],
  "tuning":   ["023","026"],
  "etc":      ["..."] }
Поле Тип Значение
type string Тип ("CAR")
standard array of string Базовые опции, коды
choice array of string Опции на выбор, коды
tuning array of string Тюнинг, коды
etc array of string Прочее, свободный текст (корейский)

standard/choice/tuning — числовые коды из справочника опций Encar, не человекочитаемые названия. Поле etc — свободный текст (корейский).

Расшифровка кодов

Коды 3-значные (standard, tuning) расшифровываются встроенным справочником Union API:

GET /api/v2/cars/options/dictionary?market=encar
Authorization: Bearer <token>

Ответ — карта option_code → {name_ru, name_en} (62 записи, коды 001–097). Данные справочные, бесплатные, из баланса не списываются. Используйте name_ru для отображения, name_en — для англоязычного интерфейса.

Коды 4-значные (choice, 1000+) справочником НЕ покрыты — их отображение клиент реализует самостоятельно.

3. Блок таможни — верхний уровень extra (не в risk_data)

Поле Тип Значение
duty_value number Пошлина
duty_currency string Валюта пошлины ("EUR")
customs_fee_rub number Таможенный сбор, RUB
excise_rub number Акциз, RUB
recycling_fee_rub number Утильсбор, RUB
nds_applies bool Применяется ли НДС
vehicle_type string "combustion" / "electric" / "hybrid_other"
calculated_at string Дата/время расчёта (ISO)

Блок может отсутствовать целиком, если расчёт для автомобиля не выполнен (в выборке он есть примерно у 15 % объявлений). Отсутствие блока — норма, а не ошибка.

4. Как интерпретировать и отображать

  1. Экранируйте строковые значения перед вставкой в HTML: etc, plate_no и любые другие текстовые поля приходят из внешних данных.
  2. null/отсутствие ключа ≠ false/0. «Данных нет» и «чисто» — разные состояния. Не показывайте «0 ДТП» там, где данных просто нет.
  3. Служебные метки времени не для показа. Поле first_seen_at приходит в ответе по умолчанию, но это внутренняя метка первой регистрации объявления — в карточке её отображать не нужно.
  4. is_rental — это прокат, а не залог. Залог и арест — это pledge_count/seizing_count.
  5. Автомобили-дубли (в attributes.status = DUPLICATION) несут extra оригинала — это ожидаемое поведение.

5. Пример (реальные данные)

{
  "risk_data": {
    "is_rental": false,
    "pledge_count": 0,
    "seizing_count": 0,
    "insurance_gaps": ["201909~202107", null, null, null, null],
    "accidents": [
      {"date": "2019-06-17", "type": "1", "part_cost": 586682,
       "labor_cost": 518298, "painting_cost": 704598,
       "insurance_benefit": 1590000}
    ],
    "accident_summary": {"cnt": 4, "my_car_cnt": 4, "my_car_cost": 5793633,
                         "other_car_cnt": 2, "other_car_cost": 5225224},
    "car_changes": [{"date": "2011-09-08", "plate_no": "34누XXXX"}],
    "flood": {"total_loss_cnt": 0, "partial_loss_cnt": 0},
    "theft": {"cnt": 0},
    "total_loss": {"cnt": 0},
    "ownership": {"changes": ["2025-11-13", "2023-12-28"], "change_cnt": 2},
    "usage": {"type_code": "2", "is_business": false,
              "is_government": false, "use_history": ["2"]}
  },
  "options": {
    "type": "CAR",
    "standard": ["001", "004", "005"],
    "choice": ["1004", "1003"],
    "tuning": ["024"],
    "etc": []
  }
}

Получите доступ к данным через Union API

1,7 млн объявлений, 11 источников, 50ms — подключение за 5 минут