API ключ
Статистика запитів
Це не просто API, а інтелектуальний шар довіри до автомобільних даних.
Ми перетворюємо розрізнені оголошення з різних джерел на охайну, зіставну і передбачувану базу. Система прибирає шум, склеює дублікати, стандартизує сутності і залишає вам дані, на яких можна будувати продукт без хаосу.
Звіти інспекцій приводяться до єдиного стандарту даних
Джерела надають інспекції в різних форматах: від структурованих API до сканів і PDF. Ми нормалізуємо висновки, перевірки, пошкодження, діагностику, медіа та файли в один передбачуваний контракт, без окремих парсерів для кожного джерела.
Дублікати знаходяться навіть без VIN
Якщо VIN відсутній, система порівнює фотографії, характеристики, історію оголошень і десятки непрямих сигналів. Рішення про склейку приймається за сукупністю індикаторів, тому результат виглядає майже як магія.
Марки і моделі приводяться до єдиного стандарту
Кожна марка і модель може мати десятки або сотні синонімів. Ця база підтримується живою людиною, бо порядок і високу достовірність у цьому шарі не можна повністю довірити ШІ.
Локації стають точними і зіставними
Будь-яка локація приводиться до єдиної бази: країна, регіон, місто і координати. Машина отримує широту і довготу, що відкриває розумне сортування, пошук у радіусі та географічну аналітику.
Опції машин стандартизуються окремою системою
ШІ-моделі допомагають розбирати складні, локальні та багатомовні назви опцій, а людина підключається там, де модель не впевнена. Так taxonomy залишається сильною, розширюваною і придатною для фільтрів.
Запити за днями
—Запити за місяцями
—Важливе зауваження перед використанням API
/cars призначений для завантаження всіх автомобілів. Він використовує scroll-пагінацію: сервер створює тимчасовий scroll-контекст, тому кількість запитів для продовження такої пагінації технічно не може бути безлімітною.
/search призначений для пошуку автомобілів за фільтрами. Він не має такого технічного обмеження scroll-запитів, але максимальне вікно пагінації обмежене 10k результатів.
Рекомендований процес синхронізації: 2-3 рази на добу пройти повний список через /cars і зберегти отримані автомобілі. Усі автомобілі, яких не було в останньому завершеному повному проході, потрібно вважати архівними у вашій системі.
Коли автомобіль архівується, він зникає з /search і /cars, але зазвичай залишається в базі приблизно ще 1 місяць. У цей період /cars/{car_id} і /listing/{domain_id}/{listing_id} можуть ще повернути його з окремою позначкою архівного оголошення. Приблизно через місяць автомобіль може зникнути і з цих ендпоінтів.
Нові поля автомобіля та оголошення
Поля додані без зміни існуючого контракту. Вказані boolean-поля також є фільтрами /search і /search/count.
- cylinders
- Кількість циліндрів у кореневому об’єкті автомобіля.
- doors
- Кількість дверей.
- seats
- Кількість місць. /search і /search/count приймають seats як точний числовий фільтр.
- has_inspections
- Флаг наявності інспекції та фільтр пошуку.
- has_history_reports
- Флаг наявності історії та фільтр пошуку.
- listings[].has_history_reports
- Флаг історії конкретного оголошення.
- listings[].is_manufacturer_certified
- Сертифікація виробником або офіційною дилерською програмою; також фільтр.
- inspections
- Масив повних публічних інспекцій у детальних endpoint-ах.
- vehicle_history_reports
- Масив повних звітів історії, прив’язаних до vehicle_ref оголошення.
Звіти інспекцій автомобілів
Автомобіль може містити стандартизовані звіти інспекцій. Легкий логічний прапорець has_inspections означає, що з активним оголошенням пов’язаний принаймні один опублікований звіт.
Поведінка ендпоінтів
- GET /search
- Повертає лише has_inspections. Масив inspections навмисно пропущено, щоб відповіді пошуку залишалися компактними.
- GET /cars
- Повертає has_inspections та inspections. Масив містить публічні опубліковані звіти для активних оголошень, доступних API-ключу.
- GET /cars/{car_id}
- Повертає всі публічні опубліковані звіти для активних оголошень автомобіля, доступних API-ключу.
- GET /listing/{domain_id}/{listing_id}
- Повертає звіти лише для точної пари domain_id та listing_id.
Публічний формат звіту
{
"schema_version": 1,
"mapper_contract_version": 1,
"report_id": "inspection_987654",
"uuid": null,
"status": "published",
"visibility": "public",
"language": "ko",
"inspected_at": "2026-05-31T04:20:00+00:00",
"valid_until": "2026-08-31T23:59:59+00:00",
"created_at": "2026-05-31T04:27:33+00:00",
"updated_at": null,
"system_updated_at": "2026-07-07T12:30:00+00:00",
"vehicle_ref": {
"domain_id": 123,
"listing_id": "987654",
"site_car_id": null,
"vin": "..."
},
"vehicle_snapshot": {
"title": "...", "brand": "...", "model": "...",
"year": 2024, "vin": "...", "mileage_km": 24000,
"fuel_type": "...", "transmission": "...", "engine_type": "..."
},
"source": {
"source_key": "provider", "source_type": "external_api",
"source_report_id": "987654", "source_language": "ko",
"mapper_version": "provider-v1", "imported_at": "..."
},
"access": {"attach_to_listing": true},
"participants": [{
"role_key": "inspector", "name": "...",
"company_id": 10, "user_id": 20, "source_label": "..."
}],
"conclusions": {
"overall_result_key": "issue", "accident_status_key": "issue",
"water_damage_status_key": "ok", "fire_damage_status_key": "ok",
"chemical_damage_status_key": "ok", "biohazard_status_key": "ok",
"notes": "..."
},
"source_claims": [{
"id": "claim_1", "type_key": "accident", "result_key": "issue",
"source_code": "...", "source_label": "...", "description": "..."
}],
"inspection_blocks": [{
"id": "exterior", "key": "exterior", "result_key": "issue",
"source_code": "...", "source_label": "...",
"description": "...", "sort_order": 10
}],
"checked_items": [{
"id": "item_1", "block_id": "exterior", "block_key": "exterior",
"part_key": "front_fender_left", "part_label": "...",
"location_key": "left_front", "location_label": "...",
"result_key": "issue", "issue_type_keys": ["replaced", "painted"],
"severity_key": "medium", "damage_rank_key": "rank_2",
"accident_relevance_key": "cosmetic", "source_code": "...",
"source_label": "...", "description": "...",
"recommendation_key": "monitor", "clarification": "...",
"evidence_media_ids": ["photo_1"], "visual_map_id": "body_map",
"visual_marker_id": "marker_1", "visual_marker_label": "X",
"visual_x": 42.5, "visual_y": 21.0,
"visual_width": 12.0, "visual_height": 8.0,
"visual_shape_key": "polygon",
"measurements": [{
"id": "measurement_1", "type_key": "paint_thickness",
"value_number": 210, "value_text": null, "unit_key": "micrometer",
"result_key": "issue", "description": "..."
}]
}],
"diagnostic_errors": [{
"id": "dtc_1", "system_key": "engine", "system_label": "...",
"code": "P0001", "description": "...", "status_key": "stored",
"severity_key": "medium", "source_label": "..."
}],
"media": [{
"id": "photo_1", "type_key": "inspection_photo",
"external_url": "https://...", "local_path": null, "server_id": null,
"description": "...", "block_id": "exterior",
"checked_item_id": "item_1", "sort_order": 1
}],
"files": [{
"id": "file_1", "type_key": "source_report",
"external_url": "https://...", "local_path": null, "server_id": null,
"original_name": "report.pdf", "extension": "pdf",
"description": "...", "block_id": null,
"checked_item_id": null, "sort_order": 1
}],
"limitations": [{
"id": "limit_1", "type_key": "partial_coverage",
"description": "...", "source_label": "..."
}]
}Правила контракту
- Якщо звітів немає, inspections є порожнім масивом.
- Повертаються лише звіти з видимістю public і статусом, відмінним від archived.
- Звіти сортуються за system_updated_at за спаданням, потім created_at за спаданням і report_id за зростанням.
- language визначає мову вихідного звіту, а не інтерфейсу. Стандартні ключі слід перекладати в клієнтському застосунку.
- id ідентифікує об’єкт лише всередині одного звіту й не є ключем перекладу. Перекладайте канонічні block_key, part_key, location_key, result_key та інші документовані поля *_key; не створюйте словники зі скорочень джерела.
- Перекладайте за наявності: conclusions.*_result_key; source_claims type_key/result_key; inspection_blocks key/result_key; checked_items block_key/part_key/location_key/result_key/issue_type_keys/severity_key/damage_rank_key/accident_relevance_key/recommendation_key/visual_shape_key; measurements type_key/unit_key/result_key; diagnostic_errors system_key/status_key/severity_key; а також type_key у media, files і limitations.
- result_key — нормалізований загальний результат. Повний поточний набір: ok, issue, not_checked, not_applicable, not_equipped та unknown. None для перевірки витоку, Good і Adequate можуть правильно означати ok; unknown ніколи не означає ok.
- Поточні стабільні issue_type_keys: scratch, dent, crack, broken, missing, replaced, repaired, painted, corrosion, wear, leak, noise, malfunction, contamination, water_damage, fire_damage, chemical_damage, biohazard, structural_damage, damage, accident_trace та other. Стабільні block_key: exterior, interior, body_structure, mechanical, powertrain, electrical, equipment_operation, driver_assistance, tires_wheels, brakes, diagnostics, road_test, documents та other. part_key — розширювана незалежна від джерела taxonomy, спільна для всіх поточних і майбутніх джерел. Значення наявних канонічних ключів не змінюється, але після повторної обробки елемент може перейти з unknown до точнішого ключа. Можуть додаватися нові значення, тому потрібен fallback. Використовуйте namespace поля, наприклад inspection.result.not_checked та inspection.issue_type.replaced.
- source_code ідентифікує поле джерела й може бути словом, шляхом, числом або одним символом на кшталт O. source_label називає перевірку, а description зазвичай містить точну вибрану відповідь. Це докази джерела, а не стабільні ключі перекладу.
- vehicle_snapshot — історичний контекст, збережений зі звітом. Поточні значення головного об’єкта автомобіля мають пріоритет.
- created_at — час створення у джерелі. system_updated_at — час збереження або оновлення звіту в шарі даних API.
Рекомендоване відображення на frontend
Звіти історії автомобіля
Історія є окремим стандартизованим звітом для конкретного оголошення і не змішується з технічною інспекцією.
Поведінка endpoint-ів
- GET /search
- Повертає лише has_history_reports, без vehicle_history_reports.
- GET /cars
- Повертає флаг і повні публічні звіти для доступних активних оголошень.
- GET /cars/{car_id}
- Повертає публічні опубліковані звіти активних оголошень автомобіля.
- GET /listing/{domain_id}/{listing_id}
- Повертає історію лише для точної пари domain_id і listing_id.
Публічний формат звіту
{
"schema_version": 1,
"mapper_contract_version": 1,
"report_id": "provider_vehicle_history_987654",
"status": "published",
"visibility": "public",
"language": "ko",
"created_at": "2026-05-31T04:27:33+00:00",
"checked_at": "2026-05-31T04:27:33+00:00",
"system_updated_at": "2026-07-07T12:30:00+00:00",
"vehicle_ref": {
"domain_id": 123, "listing_id": "987654",
"site_car_id": null, "vin": "..."
},
"vehicle_snapshot": {
"title": "...", "brand": "...", "model": "...",
"year": 2024, "vin": "...", "mileage_km": 24000,
"listing_id": "987654", "source_domain": "cars.example.com",
"fuel_type": "gasoline"
},
"source": {
"source_key": "provider_example", "source_type": "external_api",
"source_report_id": "987654", "source_language": "ko",
"mapper_version": "provider-history-v1", "imported_at": "..."
},
"access": {"attach_to_listing": true},
"coverage": {
"completeness_key": "complete", "period_start": "2024-01-01T00:00:00Z",
"period_end": "2026-05-31T00:00:00Z",
"section_keys": ["registration", "ownership", "insurance", "usage"]
},
"summary": {
"first_registered_at": "2024-01-15T00:00:00Z",
"owner_change_count": 1, "registration_change_count": 0,
"insurance_claim_count": 2, "vehicle_damage_claim_count": 1,
"vehicle_damage_claim_cost": 1200000,
"third_party_damage_claim_count": 1,
"third_party_damage_claim_cost": 350000,
"total_loss_count": 0, "flood_total_loss_count": 0,
"flood_partial_loss_count": 0, "theft_count": 0, "currency": "krw"
},
"checks": [{
"id": "check_1", "type_key": "total_loss_history", "result_key": "not_present",
"count": 0, "source_code": "...", "source_label": "...",
"description": "...", "evidence_type_key": "source_record",
"verification_key": "source_reported"
}],
"events": [{
"id": "event_1", "type_key": "owner_change",
"subtype_key": null, "occurred_at": "2025-03-01T00:00:00Z",
"ended_at": null, "date_precision_key": "day", "status_key": "completed",
"mileage_km": 18000, "source_code": "...", "source_label": "...",
"description": "...", "evidence_type_key": "source_record",
"verification_key": "source_reported", "organization_name": "...",
"organization_role_key": "insurer", "currency": "krw",
"amount_total": 1200000, "amount_insurance_benefit": 1000000,
"amount_parts": 500000, "amount_labor": 300000, "amount_painting": 400000,
"details": [{
"key": "transaction_type", "value_text": "private_transfer",
"value_number": null, "value_date": null, "unit_key": null,
"source_code": "...", "source_label": "..."
}]
}],
"media": [{
"id": "media_1", "type_key": "photo", "external_url": "https://...",
"local_path": null, "server_id": null, "original_name": "history.jpg",
"description": "...", "sort_order": 1
}],
"files": [{
"id": "file_1", "type_key": "source_report", "external_url": "https://...",
"local_path": null, "server_id": null, "original_name": "history.pdf",
"description": "...", "sort_order": 1
}],
"limitations": [{
"id": "limit_1", "type_key": "partial_coverage",
"description": "...", "source_label": "..."
}]
}Правила контракту
- Звіт належить оголошенню, а не склеєному автомобілю. Не копіюйте його автоматично.
- За відсутності звіту vehicle_history_reports є порожнім масивом. Точний пошук може повернути нещодавно архівовану машину, але масиви звітів на рівні машини формуються лише з активних оголошень; використовуйте точний listing endpoint, доки архівне оголошення зберігається.
- Повертаються лише публічні звіти зі статусом, відмінним від archived.
- created_at — час джерела, checked_at — час перевірки, system_updated_at — технічне оновлення API.
- summary є зведенням; events і checks залишаються докладними доказами.
- Для словників використовуйте стабільні checks type_key/result_key та events type_key/subtype_key/date_precision_key. Те саме правило діє для канонічних evidence_type_key, verification_key, status_key, organization_role_key, details[].key та інших документованих полів *_key. Додавайте namespace поля, наприклад history.event.initial_registration.
- Перекладайте за наявності: coverage completeness_key/section_keys; checks type_key/result_key/evidence_type_key/verification_key; events type_key/subtype_key/date_precision_key/status_key/evidence_type_key/verification_key/organization_role_key; key/unit_key деталей події; а також type_key у media, files і limitations.
- Значення history result_key: present, not_present, unknown, not_applicable. Точність дати: datetime, day, month, year, unknown. Типи подій: initial_registration, owner_change, registration_change, insurance_claim, insurance_coverage_started, insurance_coverage_gap, maintenance, statutory_inspection, recall, comparative_quote, total_loss, flood_damage, theft, usage_change. Типи перевірок: accident_history, total_loss_history, flood_total_loss_history, flood_partial_loss_history, theft_history, lien_history, business_use_history, rental_use_history, government_use_history, insurance_gap_history, odometer_rollback. Значення наявних канонічних ключів не змінюється, але повторна обробка може замінити unknown точнішим ключем. Можуть додаватися нові значення, тому потрібен читабельний fallback.
- id, source_code, source_label, description і сирі значення не є ключами перекладу. source_code залежить від джерела й може бути шляхом, числом на кшталт 0, одним символом на кшталт O або іншим технічним значенням.
- API не віддає реєстраційні номери, processing_info та check_tokens.
Рекомендоване відображення на frontend
Значення enum API
В API-запитах використовуйте числовий ID. Кожна група має стислий перегляд; повний список дає змогу шукати, вибирати значення для /search і копіювати готові фрагменти.
Ендпоінти
Параметри автоматично додаються до GET-запиту.
Промпт для AI-агента
Скопіюйте цей блок і передайте його Codex, Claude, Copilot або іншому AI-агенту, щоб він розумів API, обмеження, ендпоінти і поточний контекст ключа.
