vindex.vin

the identifier crosswalk · a Data member

Vindex.vin

One car. A different identity at every provider.

Chrome, KBB, Edmunds, EVOX, and vPIC each mint their own key for the same car. Vindex resolves them to one YMMTS spine — year, make, model, trim, style — and through it to each other: every edge carries a posted confidence and a verification timestamp, and coverage posts per provider pair.

the identity manifest at vindex.vin/{VIN}: the spine and its structure read free · no account

The crosswalk, demonstratedvindex.vin/7MMVABDM3RN163785
the spine · YMMTS2024 Mazda CX-50 · trim & style: candidates, scored
  • vPICNHTSApatterntrim: candidates — enumerated, scored, postedthe pattern id · the confidence · the verified date
  • Chromestyletrim: onethe style id · the confidence · the verified date
  • KBBvehicletrim: onethe vehicle id · the confidence · the verified date
  • Edmundsstyletrim: onethe style id · the confidence · the verified date
  • EVOXstyle × colortrim: one, per colorthe vif · the confidence · the verified date

Every row binds to the same spine row. An edge posts once verified, with its timestamp; where candidates remain, they are enumerated and scored, never blended. Identifiers, confidences, and timestamps render live at the address.

Provider names are stated nominatively; each mark belongs to its owner. Vindex maps between catalogs — it never republishes them.

01 · the fracture

The fracture.

Every provider minted its own key.

The industry’s catalogs never shared an identifier. The same physical car is a style at one provider, a vehicle at another, a pattern at a third — each under its own ID, its own trim string, its own grain. So the industry’s data joins by hand, by string-matching trim names, or not at all.

And the VIN itself has a ceiling: it decodes to a pattern, and a pattern can end above trim. Where it does, Vindex enumerates the candidates and scores them — posted, not picked.

  • decode → booka decoded VIN priced against a valuation book’s row — the lender’s daily join, done today by string-matching trim names
  • listing → photoa listing’s style bound to the imagery catalog’s style-and-color key — or the wrong car’s pictures
  • compliance → merchandisinga government pattern reconciled with a merchandising style — two grains, no shared key
The pairwise collapsen providers
  • without a hubevery pair is its own maintained map — n·(n−1)/2 crosswalks, each drifting on its own
  • on the spineeach provider maps to YMMTS once — n edges, and every pair resolves through the hub

The spine is the neutral hub. Providers home their identifiers; Vindex serves resolution.

02 · the spine

The spine.

One neutral hub. Every ID a sameAs edge.

YMMTS — year, make, model, trim, style — is the hierarchy every provider’s catalog already describes. A provider’s ID is a sameAs edge on the spine, never a join key: it stays the provider’s identifier, homed in the provider’s catalog. Vindex serves the resolution between them.

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

  • resolve(vin | provider:id) → the identity manifest: every known provider ID, each edge scored
  • Where the pattern ceiling holds, candidate styles enumerate with scores — never a silent pick
  • Withheld depth — full equivalence layers, historical mappings — sits behind the gate: sealed, real, and counted
  • The JSON twin and the typed gate envelope answer agents at the same address
The identity manifestvindex.vin/7MMVABDM3RN163785
// 200 · every provider's ID for one VIN, evidence-stated
{
  "type": "vindex.identity",
  "vin": "7MMVABDM3RN163785",
  "spine": {
    "year": 2024, "make": "Mazda", "model": "CX-50",
    "trim": <resolved, or candidates with scores>,
    "style": <resolved, or candidates with scores>
  },
  "edges": [
    { "provider": <provider mark>, "grain": <pattern | style | vehicle | style×color>,
      "id": <that provider's ID>,
      "confidence": <posted, 0–1>, "verified": <RFC 3339> }
  ],
  "coverage": <posted per provider pair, per model year>,
  "gate": <sealed layers, counted · isAccessibleForFree: false>
}

03 · coverage & confidence

Coverage, posted.

A cell is mapped, or it says unmapped.

The coverage manifest posts per provider pair, per model year: the mapped styles, the confidence distribution, the last-verified date. No coverage figure on this page is hand-written — the slots render from the manifest, and an unmapped cell renders as unmapped.

Posted absence is still posted.

The coverage manifestper provider pair · per model year
  • provider A × provider Bthe mapped styles · the confidence · the last-verified date
  • provider A × provider Cthe mapped styles · the confidence · the last-verified date
  • provider B × provider Cthe mapped styles · the confidence · the last-verified date
  • an unbound pairno mapping posted — stated, never guessed

Cells render from the coverage manifest at the address. The pair grid is data-driven — no provider pair is favored in layout.

04 · pair resolution

Any ID in.

Any provider’s identifier out, scored.

Hand the resolver a VIN or any provider’s identifier; name the target provider. The answer is the mapped identifier, stated as evidence — value · source · timestamp · verification state — with its confidence on the edge. Where a pair has no posted mapping, the answer is the gap, not a guess.

Neutral by construction: every pair resolves through the same spine, in either direction.

  • ina VIN — or provider:id
  • targetany mapped provider — either direction
  • outthe mapped identifier · confidence · verified timestamp — or no mapping posted

The same resolution runs as API and MCP through apis.vin — one answer, both registers.

05 · posted

Posted.

The price is on the page, for people and agents.

The price vindex.vin

  • Freethe spine · the structure · the coverage manifest$0
  • Per resolutionone identifier in, one out, scoredposts live
  • Pair tableone provider pair’s full mapping, licensedposts live
  • Full mapthe whole crosswalk, at portfolio scalepriced on paper

A number is posted or it is absent. Mapped IDs transact when the gate clears: each cross-mapped provider’s license must name crosswalk redistribution before that provider’s mapped IDs transact — the spine structure and the per-pair coverage manifest read free while the gate stands.

The seams data.vin · apis.vin

The crosswalk is a catalog product: coverage, license, and price post at data.vin. Integration — key, SDK, quota, MCP — is apis.vin’s job. This door owns resolution and nothing else.

Every paid resolution returns a typed, machine-readable offer — posted amount, x402 settlement, expiry — so an agent settles per call on its own account and the worst case is on paper before the first byte moves. An agent buying resolution reads this same page.

One account, every address: auth.vin.

the spine’s neighbors

Vindex serves identifiers and equivalences only — never a provider’s specs, values, or photos. The readings live at the member addresses; the record’s canonical address stays vin.company/{VIN}.

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

curl https://vindex.vin/ -H 'accept: text/markdown'        → the markdown twin of this page
curl https://vindex.vin/{VIN} -H 'accept: application/json' → the record as typed evidence objects
curl https://vindex.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 estate MCP server — 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.