data.vin

The record layer

Data.vin

One VIN opens the full record.

Every fact about every car, cataloged: seven canonical addresses, one featured crosswalk, one batch product — posted coverage, posted license, posted price, keyed to the same seventeen characters.

01 · The catalog

The catalog.

Seven canonical addresses.

Vehicle recordvhr.vin/JM3KFBXY1S0597748

JM3KFBXY1S0597748

2025 Mazda CX-5

  • Title recordin the record
  • Odometer readingsin the record
  • Recall checkrecalls.vin
  • Window stickersticker.vin
  • Market valuesvalues.vin
Retailposts live
Private partyposts live
Trade-inposts live
Wholesaleposts live
Auctionposts live

Figures render live at the address. This page states structure, not prices.

02 · Featured

Vindex.vin

The Rosetta Stone of automotive industry data.

One neutral YMMTS spine — year, make, model, trim, style — with every industry provider’s IDs and trim, style, color, and option codes cross-mapped between all of them. A provider’s ID is a sameAs edge on the spine, never a join key; every other row in this catalog joins through it.

A mapping posts only once verified, with its timestamp. Confidence is a number the buyer reads, not an adjective this page uses.

  • resolve(vin | provider:id) → the identity manifest: every known provider ID, each edge scored
  • Pairwise resolution — provider A’s ID to provider B’s, neutral and scored
  • Where the VIN bottoms out at pattern level, candidates enumerate with scores — never a silent pick
  • Coverage posted per provider pair, per model year, before purchase

vindex.vin

The identity manifestvindex.vin/{VIN}
// 200 · every provider's ID for one VIN, evidence-stated
{
  "type": "vindex.identity",
  "vin": "JM3KFBXY1S0597748",
  "spine": {
    "year": 2025, "make": "Mazda", "model": "CX-5",
    "trim": <resolved, or candidates with scores>,
    "style": <resolved, or candidates with scores>
  },
  "edges": [
    { "provider": <provider mark>, "id": <that provider's ID>,
      "confidence": <posted, 0–1>, "verified": <RFC 3339> }
  ],
  "coverage": <posted per provider pair, per model year>
}

03 · The batch product

Enrich.vin

Upload the file. The rows come back enriched.

CSV or XLSX, one VIN column. Every row returns with the VIN decoded and the record appended — year, make, model, trim, and the datasets the license names. The same capability runs as API and MCP through apis.vin.

enrich.vin

Batch enrichmentenrich.vin
  • ininventory.csv · one VIN column
  • outThe same file, every row appended: decode · the licensed datasets
  • viaUpload at enrich.vin · API and MCP through apis.vin

Per-row price posts at the address — a number is posted or it is absent.

04 · The seam

What and how.

data.vin sells the catalog. apis.vin sells the key.

The WHAT data.vin

Coverage · license · posted price · the x402 per-VIN bundle. The manifest at data.vin/{VIN} states which datasets hold rows and prices the full record as one typed bundle. It renders no member’s face and is noindex by construction — the readings live at the member addresses.

The bundle composes the members’ posted prices; it never undercuts a member’s gate, and a bundle containing the history report credits per vhr.vin’s posted rule — the member’s rule, restated, never re-priced.

  • FreeRead the catalog · quote any VIN$0
  • StarterMetered · per-call price postedposts live
  • GrowthMetered · volume tierposts live
  • ScaleMetered · volume tierposts live
  • Bulk / firehoseDataset licensing at portfolio scalepriced on paper

Bundles settle when the gate clears: the upstream data license must name catalog resale before any bundle settles; the manifest quotes today, free.

The HOW apis.vin

Key, SDK, quota, and MCP are apis.vin’s job — this page prices what it integrates. One MCP server for the whole platform: apis.vin/mcp. One account, every address: auth.vin.

Every paid action returns a typed, machine-readable offer — posted amount, x402 settlement, expiry — so the worst case is on paper before the first byte moves. An agent buying data reads this same page.

For the agent you send

The agent reads the same record you do. Same two routes, three representations — the numbers never differ between them.

motions: B2A · B2A2D

curl https://data.vin/ -H 'accept: text/markdown'        → the markdown twin of this page
curl https://data.vin/{VIN} -H 'accept: application/json' → the record as typed evidence objects
curl https://data.vin/{VIN} -H 'accept: text/markdown'    → the record's markdown twin

Machine surfaces on this host: /llms.txt · /icp.json · /.well-known/agents.json · one MCP server for the whole platform — apis.vin/mcp (every door a lens; tool results carry the door URL).

Attribution: X-Client-Type: html | md | json | mcp — read for agent-led demand attribution; it never changes the record.