Ask it about one car and it answers with that car's standing in its local market — not a page of rows for you to reduce yourself.
This is now the shape the engine actually returns, taken from a real reading rather than sketched. Nothing serves it over HTTP yet.
GET /v1/valuation?vin=3C4NJDCN3RT…&mileage=33098&zip=48307 { "ask": { "percentile": 28, "rank": 27, // What `rank` is out of, and NOT the same as `of_n`: the subject // is one of the cars being ranked and the comparables are the others, // so this is always `of_n` + 1. Reading rank against of_n produces // "10th lowest of 9". "rank_of": 103, "of_n": 102, "median": 23357, "p25": 22334, "p75": 24489, "median_at_mileage": 22928, "mileage_adjusted": true, // The subject is priced so far outside its comparables that it is // probably a different specification. The market figures stay true; // "over market by X" is withheld. See the refusals below. "subject_out_of_range": false }, "confidence": { "tier": "high", "n": 102, "radius_mi": 20, "relaxed_dimension": null, // p75/p25. Near 1 is one specification; far above it is a mixed pile. "spread": 1.11, "mixed": false }, "as_of": "2026-09-05", "disclaimer": "Asking prices from public dealer listings. Not sold prices, not a trade appraisal, not a transaction estimate." }
days_on_market is not in this response and will not be until it is real.
The archive began on 3 September 2026 and records every car that leaves from that date; publishing a
median before enough of them have left would be the one number here that cannot be checked by anyone
reading it.
insufficient_comps (fewer than five nearby), comparables_too_varied
(they were found, but they span more than 2.5× from lower to upper quartile, so they are
a base trim and a top trim in one pile rather than one comparable set), and
subject_incomplete. A machine handles a structured refusal far better than an
error, and "we do not know" is a real answer that deserves a real response body.
A refusal carries no prices at all — just the dealerships, mileages and
links — because handing a language model three prices gets them averaged and presented
as an answer.If you are building something that would use this — a CRM, a marketplace, an appraisal tool, an agent — write to hello@lotclock.io and say what shape you need. The contract is easier to change now than after anyone depends on it.