UKVRM lookupHistory by VRMREST API

From a UK number plate to its history, value and the dealers around it

Turn a UK number plate (VRM) into a car's listing history, its market value in GBP, the live listings behind it and the FCA-authorised dealers nearby, with a documented MarketCheck call for each.

MarketCheck5 min read

For developers building UK car-buying, valuation, trade-in and dealer tools

In the UK a car is identified by its number plate, the Vehicle Registration Mark (VRM), the way a VIN identifies one in the US. Developers building UK car tools usually start from that plate: what the car has been listed for before, what it is worth today, which cars like it are for sale, and which dealers nearby hold them. MarketCheck has a UK endpoint for each of those, keyed on the VRM or a postcode.

About the UK market: as of Oct 2026, the UK "number plate check" space is served by providers such as cap hpi (the HPI brand) and MotorCheck, which license official DVLA and finance records for write-off, stolen, finance and mileage checks. MarketCheck's UK data is different: it is market and listing data, what a car has been advertised at, its listing history, and the live market around it. Use it as the pricing and market-history layer beside an official HPI or finance check, not as a replacement for one.

In short. Send a VRM to History by VRM for every past UK listing of that car, with price and mileage over time. Send the VRM with mileage, a postcode and a dealer type to UK MarketCheck Price for a value in GBP, and the comparables tier for the listings behind it. UK Inventory Search returns the live market for cars like it, with price and mileage statistics and ULEZ and FCA filters. UK Dealers Search returns the dealers nearby, each with its FCA authorisation status. Label every figure as MarketCheck's market data, with the count of listings behind it.

What a UK number plate (VRM) lookup usually needs

Need MarketCheck UK endpoint What comes back
Every past listing of this car History by VRM, GET /v2/history/car/uk/{vrm} An array of past listings, price and mileage per date
What it is worth today, in GBP UK MarketCheck Price, GET /v2/predict/car/uk/marketcheck_price A predicted price in GBP
The listings behind the value UK MarketCheck Price comparables, .../marketcheck_price/comparables The comparable listings and their price statistics
The live market for cars like it UK Inventory Search, GET /v2/search/car/uk/active Listings, with stats for price and mileage
The dealers nearby, and are they FCA-authorised UK Dealers Search, GET /v2/dealers/car/uk Dealers, each with fca_status

A car's listing history from its number plate

  1. User enters a number plate
  2. History by VRM
  3. Price and mileage timeline
  4. Buyer or underwriter reads it

History by VRM takes the plate on the path and returns every past UK listing of that car, newest first. There are no other required inputs:

Requestbash
curl "https://api.marketcheck.com/v2/history/car/uk/YF74XHY?api_key=YOUR_API_KEY"

The response is an array, one entry per past listing, trimmed here to two:

Response (trimmed)json
[
  { "id": "l-8f2a4c", "price": 21495, "miles": 18240, "seller_type": "dealer",
    "inventory_type": "used", "first_seen_at_date": "2026-08-02", "last_seen_at_date": "2026-09-14" },
  { "id": "l-3b19e0", "price": 22995, "miles": 12110, "seller_type": "dealer",
    "inventory_type": "used", "first_seen_at_date": "2026-02-11", "last_seen_at_date": "2026-03-20" }
]

Read down the array to see how the asking price and mileage moved between listings: a mileage that jumps backward, or a car that keeps returning to the market, is worth a second look. An unknown or never-listed plate returns an empty array with 200 OK, and the VRM is not validated, so check the array length rather than the status code. The US equivalent, keyed on the VIN, is the listing history guide.

What it is worth today, in GBP

  1. User confirms plate, mileage, postcode
  2. UK MarketCheck Price
  3. Your margin or offer
  4. Appraiser or customer sees it

UK MarketCheck Price takes the VRM, the mileage, a postcode and the dealer type (franchise or independent), and returns a price in GBP:

Requestbash
curl "https://api.marketcheck.com/v2/predict/car/uk/marketcheck_price?api_key=YOUR_API_KEY&vrm=YF74XHY&miles=45000&postal_code=LS11+5HL&dealer_type=franchise"
Responsejson
{ "marketcheck_price": 18650 }

The comparables tier, .../marketcheck_price/comparables, takes the same inputs and adds the listings behind the number, with their price statistics, so a valuation screen can show the prediction beside the market it came from:

Response (trimmed)json
{
  "marketcheck_price": 18650,
  "comparables": {
    "num_found": 73,
    "stats": { "price": { "median": 18995, "percentiles": { "25.0": 17750, "75.0": 19995 } } }
  }
}

Show the prediction with its label and the comparables' median beside it: they answer different questions, the model's price for this car and mileage, and the middle of what cars like it are listed at. The number is in GBP and it is a dealer price for the dealer type you send. The same workflow on the US endpoint is the used car price guide.

The live market for cars like it

UK Inventory Search returns the cars for sale right now, with filters built for the UK market: fuel_type, body_type, postal_code and radius in miles, price_range in GBP, ulez_compliant, and fca_status on the dealer. Ask for statistics without listings with rows=0:

Requestbash
curl "https://api.marketcheck.com/v2/search/car/uk/active?api_key=YOUR_API_KEY&make=Ford&model=Puma&year=2022&fuel_type=Electric&rows=0&stats=price,miles"
Response (trimmed)json
{
  "num_found": 268,
  "listings": [],
  "stats": {
    "price": { "median": 19480, "percentiles": { "25.0": 17995, "75.0": 21250 } },
    "miles": { "median": 14870 }
  }
}

Drop rows=0 to get the listings themselves, each with price, miles, dom_active (days on market), the dealer block with its fca_status, the build specs and media.photo_links. The car search guide covers filters, facets and paging on the same search, and its US counterpart.

Which dealers, and are they FCA-authorised

UK dealers that sell finance must be authorised by the Financial Conduct Authority. UK Dealers Search returns the dealers around a postcode, each with its FCA status and reference, so a lead form or a dealer directory can show it:

Requestbash
curl "https://api.marketcheck.com/v2/dealers/car/uk?api_key=YOUR_API_KEY&postal_code=LS11+5HL&radius=20&dealer_type=franchise&fca_status=Authorised&rows=5"

Each dealer in the response carries its FCA details and listing count:

Response (one dealer)json
{ "id": "d-20714", "seller_name": "Example Motors Leeds", "dealer_type": "franchise",
  "fca_status": "Authorised", "fca_reference_no": "000000", "listing_count": 128,
  "city": "Leeds", "county": "West Yorkshire", "postal_code": "LS11 5HL" }

Filter by fca_status, dealer_type, listing_count_range and a postal_code with a radius in miles, and page with start and rows (up to 50). The dealer directory guide covers resolving a dealer from its website and mapping territories on the US dealer APIs.

A VRM lookup for a buying or valuation screen

  1. Form posts a VRM and mileage
  2. History by VRM and UK MarketCheck Price
  3. History and value in one object
  4. Buyer or appraiser decides

This server-side function takes a plate and mileage and returns the listing history with the current value, ready for a screen:

vrm-lookup.tsts
const BASE = 'https://api.marketcheck.com/v2'

export async function vrmLookup(vrm: string, miles: number, postcode: string) {
  const key = process.env.MARKETCHECK_API_KEY ?? ''

  const history = await fetch(`${BASE}/history/car/uk/${encodeURIComponent(vrm)}?api_key=${key}`)
  if (!history.ok) throw new Error(`History by VRM returned ${history.status}`)
  const listings = await history.json() // [] when the plate has no history on file

  const priceUrl = new URL(`${BASE}/predict/car/uk/marketcheck_price/comparables`)
  priceUrl.searchParams.set('api_key', key)
  priceUrl.searchParams.set('vrm', vrm)
  priceUrl.searchParams.set('miles', String(miles))
  priceUrl.searchParams.set('postal_code', postcode)
  priceUrl.searchParams.set('dealer_type', 'franchise')
  const priceRes = await fetch(priceUrl)
  // 400 is a missing input or a plate that could not be decoded: ask the user to check the plate
  const price = priceRes.status === 400 ? null : await priceRes.json()

  return {
    pastListings: listings.length,
    lastSeen: listings[0]?.last_seen_at_date ?? null,
    valueGbp: price?.marketcheck_price ?? null,
    comparables: price?.comparables?.num_found ?? 0,
    askingMedian: price?.comparables?.stats?.price?.median ?? null
  }
}

The value is MarketCheck's market price, and the history is what the car was listed at. The buying decision, and any finance or write-off check, sits beside them.

What to know before you build

  • Plates are not validated. History by VRM returns an empty array with 200 OK for an unknown or mistyped plate, so check the array length, not the status code.
  • Market data, not an official check. These endpoints return listing and market data. For DVLA, finance, stolen or write-off status, pair them with an HPI or finance check.
  • Everything is in GBP and distances are in miles. The price is a dealer price for the dealer_type you send.
  • FCA status is on the dealer. Use fca_status on Dealers Search and on each search listing's dealer block to show whether a dealer is authorised to sell finance.
  • UK filters. ulez_compliant, fca_status, postal_code with radius, and price_range in GBP are UK-specific. The US endpoints use VIN, ZIP and USD instead.
  • Errors. A 400 is a missing or bad input, a 401 a missing or invalid key, a 403 a tier your key cannot use, and a 429 the rate limit.
  • Cache by input. Store each answer by VRM, mileage, postcode and dealer type for the day.

Who this is for

Developers building UK car-buying sites, trade-in and valuation forms, dealer directories, lead forms and lending or insurance checks who want a car's listing history, its value in GBP and the market around it from one API, keyed on the number plate.

Start here

  1. Create a free account and copy your API key. Start on the Free tier for development; plans are on the pricing page.
  2. Run a VRM through History by VRM and UK MarketCheck Price and compare the past listings with today's value.
  3. Add UK Inventory Search for the live market and UK Dealers Search for the dealers nearby.
  4. Keep the UK History by VRM reference and the UK MarketCheck Price reference open for parameters and error codes.

Start building on the Free tier.

The Free tier is for development and testing, on the same endpoints you will use in production. When you go live, pick a plan on the pricing page.

Building with a coding assistant? Give it the free Docs MCP, so it looks up documented parameters instead of guessing them.

More use cases

All use cases