Skip to main content

Vehicle

Two shapes — VehicleSummary (list view) and Vehicle (single fetch detail).
Eagle Eye reuses VehicleSummary for vehicles returned in search results, match rows, and eagle_eye.match webhook additions / price_changes. Eagle Eye-specific fields such as watch_id, match_reason, and signal_detail wrap this shared vehicle model.

VehicleSummary

Returned by GET /v1/vehicles.
FieldTypeNullableNotes
idstringnoVehicle ID. Two formats: auction listing/appearance ID with a source prefix (glovis_…, sk_…, aj_…, lotte_…, kcar_… — e.g., glovis_20260420_1064_2345), or dealer ID encar_<numeric>. Use this for GET /v1/vehicles/{id} and (auction only) POST /v1/orders. Auction IDs are not permanent physical-car IDs; the same car can receive a different ID when re-listed.
sourceenumnodealer | glovis | sk | aj | lotte | kcar. dealer listings are fulfilled via a live proxy to a third-party retail inventory; see endpoint docs for dealer-specific constraints.
makestringno
modelstringno
trimstringyesDealer (encar_*) uses encar’s canonical English grade name.
yearintegerno
mileage_kmintegerno
fuelenumyesgasoline | diesel | hybrid | electric | lpg | hydrogen | gasoline_hybrid | diesel_hybrid | plug_in_hybrid, or null for rare upstream gaps. Multi-word values use snake_case (e.g. gasoline_hybrid, never "gasoline hybrid") to match the options_include convention and avoid URL-encoding ambiguity. hydrogen covers Hyundai Nexo and similar FCEVs.
transmissionenumyesauto | manual | cvt | dct. Populated for dealer (encar_*) too as of 2026-06-03.
colorstringyes
engine_ccintegeryesPopulated for dealer (encar_*) too as of 2026-06-03.
drivetrainstringyese.g., FWD, AWD, 4WD.
optionsarray of stringsnoEquipment list. Empty array if none known. To filter by option, use the options_include query param — the full token catalog (62 dealer-filterable tokens + 2 dealer-unsupported) lives in Vehicles → options_include for dealer (full catalog).
accident_gradeenumyesA | B | C | D | F (no E). null for dealer source.
exterior_gradeenumyesA | B | C | D | F. null for dealer source.
auction_dateISO 8601 with offsetyesKST +09:00. null for dealer source.
order_cutoff_atISO 8601 with offsetyesauction_date − N minutes, where N is your integration’s pre-negotiated lead time (default 1440 = 24h; lower for integrations without a secondary inspection step). null for dealer/buy-now. Updated 2026-04-29.
thumbnail_urlstring (HTTPS URL)yes
pricingobjectnoSummary shape: { listing_price, sold_price, discount_config, breakdown }. Monetary values are whole USD. As of 2026-05-26, discount_config and breakdown are returned on the summary too (same shape as detail) so list-view cards can show landed-cost without a per-row detail fetch. auction_fee_config, history, and market_assessment remain detail-only. See pricing.
auction_resultenumyesupcoming | sold | negotiation_sold | no_bid | negotiation_requested. null for dealer.
auction_countintegeryesNumber of times listed at auction. null for dealer.

Vehicle (Detail)

VehicleSummary plus:
FieldTypeNullableNotes
vinstringyesDealer (encar_*, added 2026-06-03): from the listing, or promoted from the inspection report’s 차대번호 when the listing omits it. null only when encar publishes no VIN for the listing (a minority — e.g. listings whose inspection is an abbreviated record with no structured form). Treat null as “not available from source” and request the VIN from the dealer where needed — do not infer it.
license_platestringyesKorean format.
photosarray of HTTPS URLsnoAll photos (not just thumbnail).
photo_tagsarraynoSame photo URLs with a tag such as front, side_l, side_r, rear, interior, dashboard, front_seats, rear_seats, trunk, engine, odometer, vin, other. Each item is { url, tag }; array order follows photos. Most tags are positional heuristics from photo array order. vin is precision-tagged — when present, that photo shows the VIN plate (차대번호) and can appear at any index. At most one vin tag per car; vin may be absent when the upstream listing did not include a VIN plate photo or when one could not be identified with confidence.
body_conditionobjectyes{ image_url, panels[] } — panel-level damage map, for both auction and dealer sources. panels[] lists damaged panels only; a clean car returns { image_url, panels: [] } (an empty array, not null) so you still render the diagram. image_url is LMN-mirrored HTTPS media when available (Glovis), else null; upstream auction-site image URLs are not exposed. null only when the source has no inspection record.
inspection_reportobjectyesSource’s inspection, normalized to English-only keys for partner use. Populated for both auction and dealer sources whenever the inspection is reachable — a clean car returns a report with zero damage and a populated checklist[] (not null). Includes inspection_sheet_url (string | null — original inspection PDF; SK/AJ only, else null). Dealer (encar_*) reports carry a dealer_inspection block ({ critical_frame_damage, exterior_damage, rank_counts, frame_status, panel_status, simple_repair, insurance_history, insurance_amount, vehicle_info, overall_status[], photos[], certification, registration_no }; rank_counts is { rank_one, rank_two, rank_a, rank_b, rank_c } — integer per-rank damaged-panel counts, where rank_a + rank_b + rank_c === critical_frame_damage and rank_one + rank_two === exterior_damage; vehicle_info holds only inspection-form-specific fields — Valid Period, Warranty, Engine Model, etc. — identity like make/model/year/plate/VIN is top-level only) and surface accident state via has_accident / accident_summary rather than accident_history[]. null only when the source has no inspection record (e.g. dealer upstream 404) or the fetch failed transiently. Retains category_grades[] and issues[] for backward compatibility (auction-rich; dealer emits category_grades as frame/exterior and an empty issues[]). Any monetary fields in accident_cost_summary, and dealer_inspection.insurance_amount, are whole USD (FX-converted server-side).
comparablesobjectno{ past_sales, upcoming_sales }. Each comparable includes vehicle_id, vin, license_plate, USD price fields, and auction metadata. upcoming_sales does not include sold_price.
pricingobjectnoAdds fee config, landed-cost breakdown, same-car history, and market assessment. See pricing.

pricing

pricing groups this vehicle’s prices, fee estimates, same-car history, and market assessment. Every monetary number inside this object is a whole USD integer.
FieldTypeNullableNotes
listing_priceintegernoCurrent listed/estimated vehicle price. For auction vehicles this is the estimated final price when comparable-market data exists, otherwise the auction starting price. For dealer vehicles this is the asking price. Summary + detail.
sold_priceintegeryesFinal sold price when the auction result is sold or negotiation_sold; otherwise null. Summary + detail.
discount_configobjectno{ bid_threshold, rate_below, rate_at_or_above, fixed_discount_amount, vehicle_discount_pct }. Always populated. For auction: bid-based fields drive the discount, fixed_discount_amount is 0. For dealer: bid-based fields are all 0; fixed_discount_amount carries the entire economic effect (300 USD, offsets the flat dealer fee). bid_threshold is compared against the partner’s bid amount, not the listing price. vehicle_discount_pct is a whole-percent integer; partner-specific — 0 for partners without a configured discount. When vehicle_discount_pct > 0, the basis is discounted before fees/freight/LMN are added, and the bid-rate fields (bid_threshold, rate_below, rate_at_or_above) and dealer fixed_discount_amount are all 0 (the vehicle discount replaces them entirely). Summary + detail (added to summary 2026-05-26).
breakdownobjectnoIllustrative landed-cost estimate. Contains auction_fee, dealer_fee, lmn_commission, ocean_freight, and estimated_landed. ocean_freight varies per vehicle by body type and maker — it is not a fixed value: Mercedes-Benz is 1800 (any body type); other makers are 1800 for SUV-class (SUV, minivan, van, truck) and 1500 for sedan-class (sedan, compact, wagon, coupe, convertible); vehicles with an unknown body type use 1500. Read the value from each response rather than hardcoding it. Fee shape is symmetric — both auction_fee and dealer_fee are always integers (0 where the concept doesn’t apply, real value where it does); branch on source, not on null. For auction: auction_fee populated, dealer_fee: 0. For dealer: auction_fee: 0, dealer_fee: 300 (flat USD). estimated_landed for auction: basis + auction_fee + lmn_commission + ocean_freight − (bid_rate_discount + fixed_discount_amount). For dealer: listing_price + dealer_fee + lmn_commission + ocean_freight − fixed_discount_amount (dealer_fee and fixed_discount net to zero, so this reduces to listing_price + lmn_commission + ocean_freight). For exact auction totals at the partner’s own bid, recompute using auction_fee_config and discount_config. Summary + detail (added to summary 2026-05-26).
auction_fee_configobjectyes{ percentage, minimum, maximum }, where minimum and maximum are source/category fee caps converted to USD. null for dealer. Detail only — fee schedule is constant per source/category so partners can hold a static copy.
historyarraynoSame physical vehicle’s auction appearances, not comparable cars.
market_assessmentobjectyesServer-side price verdict over sold comps; null for dealer.

Order

Returned by POST /v1/orders, GET /v1/orders, GET /v1/orders/{id}, DELETE /v1/orders/{id}, POST /v1/orders/{id}/status. Use GET /v1/orders/{id}/vehicle for the purchased vehicle snapshot. That response is the same VehicleDetail schema as GET /v1/vehicles/{id} and is stored at order creation so dealer purchases remain readable after the live Encar listing is removed.
FieldTypeNullableNotes
idstring (ULID)no
vehicle_idstringnoAuction listing/appearance ID the order was placed against. Not a permanent physical-car ID.
vinstringyesVIN snapshotted from the upstream listing at order creation. null when the upstream listing carried no VIN. Self-contained — webhook consumers can match dealer records without a follow-up GET /v1/vehicles/{id}.
license_platestringyesKorean license plate snapshotted at order creation. null when the upstream listing carried no plate.
optionsarray of stringsnoEnglish Title-case feature names (e.g. Sunroof, Leather Seats, LED Headlamps) snapshotted from the vehicle at order creation. Byte-equal to Vehicle.options on GET /v1/vehicles/{id} so consumers don’t need a follow-up lookup. Both auction and dealer (encar_*) sources return Title-case English. Empty array ([]) when the upstream listing exposed no options, or for orders created before v1.21.
statusenumnoSee state machine below.
max_bid_amount_usdintegeryesWhole USD. Set at creation. null for buy-now/dealer. Settlement obligation applies only on secured.
is_highest_bidbooleannoComputed; true when no competing orders.
current_max_bid_usdintegernoComputed across all active orders for the vehicle.
amountsobjectno{ purchase_price_usd, auction_fee_usd } — both null until secured. Computed from the auction’s KRW final price using the order’s locked fx_rate.
fx_ratenumberyesKRW-per-USD rate locked at order creation time. Does not change on PATCH or status updates — the settlement amount is deterministic from day one. null only if the FX provider was unavailable when the order was created; in that case LMN applies the secured-day rate (communicated offline).
auction_dateISO 8601yesnull for dealer orders.
order_cutoff_atISO 8601yesnull for dealer/buy-now.
acquired_atISO 8601yesSet at secured.
shipped_atISO 8601yesSet at in_transit.
shipmentobjectyesnull until export_processing. See below.
failure_reasonenumyesSet only when status: failed. Mutually exclusive with cancellation_reason.
cancellation_reasonenumyesSet only when status: cancelled. Mutually exclusive with failure_reason.
created_atISO 8601no
updated_atISO 8601no

shipment object

null until in_transit; populated by LMN at vessel loading. Stable for the rest of the shipping leg.
FieldTypeNotes
vessel_namestringe.g., Glovis Sky.
voyagestringe.g., GS-2604E.
bl_numberstringBill of Lading number from the carrier, e.g., MAEU1234567890. Carrier-specific format; free-form alphanumeric. Use as the correlation key when filing customs entries or raising disputes — every party sees the same value.
container_idstringContainer holding the vehicle, e.g., MSKU7654321. Typically follows ISO 6346 (4 letters + 6 digits + 1 check digit); format is not enforced at the API layer.
etd_koreaISO 8601Departure from Korean port.
eta_destinationISO 8601Estimated arrival at destination port.
destination_portstringe.g., Tin Can Island, Lagos.

Order status enum (11 values)

placed ─┬─→ acquiring → secured → export_processing → in_transit → customs → delivered
        │      └─→ failed                                (acquiring only)
        ├─→ inspection_in_progress → inspection_ready ─┬─→ acquiring
        │                                              └─→ cancelled (inspection_failed)
        └─→ cancelled                                  (placed only)
Inspection is optional: an order may go placed → acquiring directly (skip inspection) or placed → inspection_in_progress → inspection_ready → acquiring (inspected). When inspection fails, the order is cancelled (reason inspection_failed), never failed.
ValueSet byMeaningTerminal
placedPartnerOrder accepted; LMN has queued it.
inspection_in_progressLMNOptional pre-acquisition inspection underway. On complete → inspection_ready.
inspection_readyLMNInspection completed; LMN can move to acquiring, or cancel with inspection_failed.
acquiringLMNLMN is bidding (auction) or purchasing (dealer).
securedLMNVehicle won/purchased; purchase_price and auction_fee_usd locked.
export_processingLMNTitle transferred to LMN; Korean export workflow in progress (declaration, port trucking, vessel booking, loading).
in_transitLMNBill of Lading issued and vessel has departed Korean port.
customsPartnerVessel arrived at destination port; vehicle in customs-bonded area.
deliveredPartnerCustoms cleared and vehicle handed to the dealer. Partner must push this — terminal.
failedLMNAcquisition did not complete (failure_reason set). Reachable from acquiring only.
cancelledPartner or LMNReachable from placed (Partner via DELETE, or LMN auto-cancel: reschedule-too-soon, source-cancel, seller-withdraw) or from inspection_ready (LMN, reason inspection_failed).
Boundary: statuses up to in_transit are LMN-driven (server-side). From customs onward, the partner pushes via POST /v1/orders/{id}/status.

failure_reason enum

ValueWhenTriggers from
outbidExternal bidder exceeded the partner’s max bid at auction.acquiring
outbid_internallyAnother partner’s higher bid won at auction. All competing placed orders on the same lot enter acquiring together before resolution.acquiring
vehicle_unavailableLMN’s dealer purchase attempt fails because the car was sold to another buyer.acquiring
auction_cancelledAuction house cancels the event after LMN has begun bidding. Pre-acquiring discovery routes to cancelled (see cancellation_reason).acquiring
auction_passedVehicle was passed at auction (no winning bid), OR system zombie cleanup at auction_date + 24h for orders LMN never picked up.acquiring
seller_withdrewSeller withdrew the car after LMN started attempting to acquire. Pre-acquiring discovery routes to cancelled (see cancellation_reason).acquiring

cancellation_reason enum

ValueWhenTriggers from
dealer_cancelledPartner sent DELETE /v1/orders/{id} while placed.placed
auction_rescheduled_too_soonLMN auto-cancel because the auction was rescheduled past the order cutoff.placed
auction_cancelledLMN auto-cancel because the auction event was cancelled before LMN started bidding.placed
seller_withdrewLMN auto-cancel because the seller pulled the dealer listing before LMN started purchase.placed
failure_reason and cancellation_reason are mutually exclusive — an order has one or the other, never both. For reasons that appear in both enums (auction_cancelled, seller_withdrew), the order’s current status at the moment of the upstream event decides which terminal — and therefore which field — applies.

Settlement

At secured: partner owes LMN purchase_price_usd + auction_fee_usd + lmn_commission_usd + ocean_freight_usd − discount_usd, where discount = ceil(purchase_price_usd × rate / 100) + fixed_discount_amount; rate follows pricing.discount_config evaluated against purchase_price_usd (the actual hammer price). The breakdown is communicated via the payment-due report, not exposed via the API. Wire transfer same US business day expected. There is no dealer-deposit concept in this API. Partner-to-dealer arrangements are entirely outside LMN’s scope.