Layer 3 · Data

Everything true about a vehicle that a model cannot see.

Sourced from supported vehicle-data providers, then normalised into one schema behind the same key. You integrate one contract instead of provider-specific formats.

9 domains · supported data sources · normalised into one schema · same key

Why this layer

We do not compute any of this ourselves.

A model cannot see a service history or an outstanding finance claim. Those records come from supported data sources with different formats and availability. You integrate the CarHub schema once instead of building around each source format.

The domains

9 domains behind the same key.

Availability and freshness can vary by source. The public response contract remains consistent across the supported data domains.

01
Identity
VIN decode, build sheet, factory options, plate → VIN lookup
02
Specs
Technical data, equipment, dimensions, powertrain
03
Battery
State of health, usable capacity, range and charging data
04
Value
Market pricing, residuals, depreciation curves
05
History
Mileage records, ownership, accidents, write-off status
06
Compliance
Recalls, service campaigns, emissions, homologation, taxes
07
Financing
Outstanding balances, lender records and settlement data
08
Parts
OEM references and catalogues — feeds pricing/repair
09
Risk
Stolen-vehicle, fraud and risk checks

Where it joins

Data on its own is a lookup. Joined to the models, it is an answer.

You can call these domains directly. Most of their value shows up where a Layer 2 endpoint reads them mid-computation.

  • IdentityPOST/v1/plate/read

    Plate OCR with country detection is the bridge in — read the plate, resolve the VIN, and the build sheet follows

  • ValuePOST/v1/pricing/vehicle

    Market valuation needs both halves: identity and residuals from here, observed condition from the models

  • PartsPOST/v1/pricing/repair

    OEM references turn a detected damage into a part with a price rather than a bounding box

What we do not claim

No country is covered on every domain, and we will tell you which ones are thin before you build on them. Where a source is missing, the field comes back empty rather than guessed.

Start with a plate.

Send one to /v1/plate/read and follow what comes back. That single call is the doorway into all 9 domains.