Поле extra в ответах Union API по рынку encar содержит два набора данных о
конкретном автомобиле:
risk_data— история автомобиля: ДТП, залоги, аресты, угон, затопление, полная гибель, смены владельцев и номеров, характер использования;options— заводские опции в виде кодов;- блок таможни — расчёт пошлины/акциза/утильсбора (может отсутствовать).
Все данные относятся к самому автомобилю (его истории и комплектации), а не к объявлению.
Как получить
Запросите поле 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. Как интерпретировать и отображать
- Экранируйте строковые значения перед вставкой в HTML:
etc,plate_noи любые другие текстовые поля приходят из внешних данных. null/отсутствие ключа ≠false/0. «Данных нет» и «чисто» — разные состояния. Не показывайте «0 ДТП» там, где данных просто нет.- Служебные метки времени не для показа. Поле
first_seen_atприходит в ответе по умолчанию, но это внутренняя метка первой регистрации объявления — в карточке её отображать не нужно. is_rental— это прокат, а не залог. Залог и арест — этоpledge_count/seizing_count.- Автомобили-дубли (в
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": []
}
}