One car for sale.
One address.

Search.Resolve.Route.

The market lists a car in many places; the VIN names it once. Every venue where the car is listed renders on one page (dealer, auction, private seller), each fact posted: price · venue · source · timestamp. Free. No account.

Hand the hunt to an agent that works for you: you appear only where you are load-bearing, choosing the car and authorizing the close, and everything it does posts to a receipt that survives being shown to you.

2025 Mazda CX-5 · check digit 1 · verified

JM3KFBXY1S0597748

2025 Mazda CX-5 · decoded from the VIN · check digit 1

  • Every venue this VIN is listedOne row per venue
  • DealerSource · timestamp · verification statePosts live
  • AuctionA lot is a listing in an auction venue · source · timestampPosts live
  • Private sellerSource · timestamp · verification statePosts live

Delta vs. market value: a signed number, never an adjective · basis values.vin/JM3KFBXY1S0597748

The exit is stated: the listing id rides to buy.vin/JM3KFBXY1S0597748; the deal starts from this record.

Figures render live at the address. This page states structure, not prices. Unverified facts read “Reported, not yet verified.”

Live listings2.1M+The live count posts at the address.
VenuesDealer · auction · private sellerOne spine, one grammar: an auction lot is a listing in an auction venue.
Posted per listingPrice · venue · source · timestampVerification state on every row: verified, or “Reported, not yet verified.”

Every venue, one field.

A listing is a record, not an ad.

Dealer, auction, and private-seller supply sit on one spine, keyed to the same seventeen characters. Verified and reported facts are labeled, never blended.

Hunting one car

The by-VIN read

You are not reading a thousand rows; you are resolving one. The car’s page holds every venue it is listed, each price beside its source and timestamp, and the delta against the value spread; then the deal starts from the record.

The price · the delta vs. value · the venue · the verification state

The dealer’s counter

Supply on rails

Your inventory is addressable by its numbers, and the buyer who found the car found your car, not a portal’s ad unit. Leads export as ADF (Auto-lead Data Format, the file a dealer CRM ingests), and the lead is yours; the fee posts on the export sheet before you send. Your entrance is dealers.vin.

The listing state · lead export ADF · fee posted on export

The listing a buyer reads is the listing the dealer posted. Same page, both sides.

No VIN yet. Browse narrows to one.

Facets are the way in, not the destination.

Every search ends at a seventeen-character address: each result row is a VIN, and opening it opens the car’s page, not an ad.

Browse, resolvingFacets to one VIN
YearMakeModelMilesPriceDistance
  • Year make modelPosts liveThe venue
  • Year make modelPosts liveThe venue
  • Year make modelPosts liveThe venue

Results render live at listings.vin/?browse=1, the instrument itself. Every row resolves to listings.vin/{VIN}, the page above. The field takes the same grammar: year make model rides the address bar as year_make_model.

The plan.

Search. Resolve. Route.

  1. 01SearchFacets or the field, every venue: a VIN opens the car; year make model narrows to one. Every result is a VIN.
  2. 02Resolvelistings.vin/{VIN}: one car, every posted fact. Price beside source and timestamp, the delta against the value spread a signed number, unverified facts labeled.
  3. 03RouteThe listing id rides to buy.vin for the close, or the record opens first at vhr.vin. A dealer’s lead exports as ADF into their own CRM.
  • Postedlistings.vin search: $0 · every VIN, every visit · no account
  • Your agentHand the hunt to your agent: it searches, reads every venue, and routes the deal; you appear only where you are load-bearing: choosing and authorizing. Everything it does posts to a receipt that survives being shown to you.

Questions with posted answers.

Is this every car for sale?

Dealer, auction, and private-seller venues on one spine: an auction lot is a listing in an auction venue. Coverage posts on the page as a fact with source and timestamp; gaps are stated, not hidden.

Why does a price read “Reported, not yet verified”?

Because the venue posted it and the record has not confirmed it. Verified and reported facts are labeled; they are never blended.

What does it cost?

$0 for search, every VIN, every visit, posted above like every other number. Developer and agent access is metered per call; the rate card posts at apis.vin. A dealer’s lead fee posts on the export sheet before you send.

I’m a dealer. Who owns the lead?

You do. Leads export as ADF straight into your CRM. No portal sits between you and the buyer. Your entrance is dealers.vin.

Can my agent hunt instead of me?

Yes. It reads the same page (every venue row, every posted fact) as typed JSON at the same address, and where it acts for you, every step posts to a receipt that survives being shown to you. The machine surface is below.

The same corpus, typed.

Agents read this door the way you do: one VIN resolves to one listing.

As typed JSON at the same address. Who buys and who gets the receipt are stated motions.

A typed listing, as an agent reads itapis.vin/mcp
1// tools/call · search_listings
2{
3 "type": "vin.listing",
4 "vin": "JM3KFBXY1S0597748",
5 "vehicle": {
6 "year": 2025,
7 "make": "Mazda",
8 "model": "CX-5"
9 },
10 "venues": [{
11 "id": <listing_id>,
12 "venue": <"dealer" | "auction" | "private">,
13 "price": {
14 "amount": <integer, USD cents>,
15 "currency": "USD"
16 },
17 "source": <string>,
18 "posted": <RFC 3339 timestamp>,
19 "verification": <"verified" | "reported">
20 }],
21 "exit": {
22 "action": "buy",
23 "href": "https://buy.vin/JM3KFBXY1S0597748"
24 }
25}
Who buys, who gets the receipt

For the agent you send.

The agent reads the same record you do.

Same two routes, three representations: the numbers never differ between them.

Three representationslistings.vin
1curl https://listings.vin/ -H 'accept: text/markdown'
2 # the markdown twin of this page
3curl https://listings.vin/{VIN} -H 'accept: application/json'
4 # the record as typed evidence objects
5curl https://listings.vin/{VIN} -H 'accept: text/markdown'
6 # the record's markdown twin
On this host
  • Motionsb2aThe buyer is an agent: no human leaf; discover, bind, pay, worst-case cost posted before the callb2a2dThe capability embeds downstream: reserved acts route back to a credentialed human leaf
  • One MCP serverapis.vin/mcp serves the whole platform: every door’s tools in one server, each result carrying its door’s URL.
  • AttributionX-Client-Type: html | md | json | mcp names which reader arrived; it never changes the record.
  • The gateNo gate on this door's two routes: keyless reads, no account. Gated actions elsewhere return a typed OFFER or a NEEDS_HUMAN handoff, never a dead end.