Async flow
POST /v1/history-lookupswith exactly one ofplateorvin, anIdempotency-Keyheader, and optionalfreshandreference. The response is202withstatus: queued.- The result arrives as a
history_lookup.completedorhistory_lookup.failedwebhook on your existing endpoint. The event carries the full lookup, so no follow-upGETis needed. Results usually arrive within minutes. - Polling
GET /v1/history-lookups/{id}is the fallback.statusmovesqueued→processing→completedorfailed.
Idempotency-Key with the same body returns the original lookup with 200. The same key with a different body returns 422 idempotency_key_reused, as POST /v1/orders does.
Keys: plate or VIN
- Plate: searches by plate.
- VIN: searches by VIN first. This works for deregistered and exported cars.
- Plate fallback: if CarHistory refuses the VIN and our inventory holds that car’s plate, we retry by plate. The lookup then has
fallback_plate_from_inventory: true,query.key_used: "plate", and anidentity_checkthat tells you whether the report matches the car you asked about. - A car that is still registered in Korea and is not in our inventory needs its plate.
identity_check is matched, mismatch, unverified or not_applicable (null until the lookup is completed; also null for failed). identity_check_basis lists the attributes that agreed (manufacturer, model_year). A mismatch report is still delivered, flagged, and is never billed.
no_record
A failed lookup with failure.code: "no_record" means CarHistory returned nothing for the key. CarHistory does not say why. Causes include a deregistered car searched by plate, a rental-heavy history, or too many accidents. Other failure codes are provider_unavailable and provider_error.
Reading the report
- Null, missing and
[]: every scalar is nullable.nullmeans the source did not state the value or it could not be read. A section absent from the source isnull;[]means the section is present and empty. - Dates: full dates are
YYYY-MM-DD. Fields named*_monthareYYYY-MM. - Money:
*_krwfields are integers in Korean won. There is no FX conversion. - Damage direction:
own_vehicle_damageis damage to this vehicle.other_vehicle_damageis damage this vehicle caused to another vehicle.paid_bysays who paid:own_insurer,other_party_insurerorunknown. - Summary counts are as the source states them. They are not recomputed from the lists, so they can differ from the list lengths.
value_rangeis an insurance reference value only (basis: "insurance_reference"). It is not a market price.ownership_history[].kindisowner_change,plate_change,use_changeornull.plate_masked(e.g.47버XXXX) is the only report field that can contain Hangul.sourceandreport_as_of:source: "fresh"means we fetched the report for this lookup.source: "cache"means we reused an earlier report andreport_as_ofkeeps the original fetch time. Sendfresh: trueto skip the cache.
Billing
billable on the lookup says whether it counts toward your invoice.
Limits
Per-partner caps return429 rate_limited with a Retry-After header:
- 10 lookups in flight at once;
- 200 lookups per KST day.
details.scope is in_flight or daily; details.retry_after_seconds matches the Retry-After header. The daily cap resets at the next KST midnight.
capacity_exceeded (429) is reserved for global capacity admission. It is not returned yet, and sandbox never returns it.
Sandbox
Sandbox is available to every partner and completes lookups from synthetic fixtures. It never calls CarHistory. Any other valid plate or VIN returns the clean fixture.Production availability
Production is enabled per partner after onboarding. Until then,POST /v1/history-lookups returns 403 history_lookup_not_enabled.