Vehicle Intelligence — Signals

All signals returned by GET /v1/vehicle/{registration}

All field names are camelCase. The response is structured into nested objects: summary, signals, scores, fleetFailureProfile, and fleetAdvisoryProfile. DVLA VES data refreshed every 12 hours. MOT intelligence derived from full DVSA test history and stored in the database.

Identity

Normalised registration mark — uppercase, no spaces.

make # string | null

Manufacturer in uppercase (e.g. "FORD", "MERCEDES-BENZ").

model # string | null

Model name from DVSA. DVLA VES does not return model — DVSA is the sole source.

vehicleType # string | null

Vehicle body type from DVLA EU type approval category. Null until DVLA VES enrichment completes.

carvanmotorcyclebushgvtrailertractormotorhomeother
colour # string | null

Primary colour as recorded on the V5C.

fuelType # string | null

Normalised fuel type.

petroldieselelectrichybrid_electricgasother
engineCapacityCc # integer | null

Engine displacement in cubic centimetres. Null for electric vehicles.

yearOfManufacture # integer | null

Four-digit manufacture year.

Month and year of first registration. Format: YYYY-MM.

vehicleAgeYears # number | null

Age in years to one decimal place. Derived at response time. Null when enrichmentPending.

Summary

summary.*

Derived from vehicleRiskLevel, odometer trend, dangerous defect history, recall status, last MOT result, and how long it's been since the vehicle was last tested. avoid = confirmed clocking or a combination of serious safety flags. caution = elevated risk or a recent test failure. consider = some risk signals present without a hard flag. good = no significant flags. Null when no MOT history.

goodconsidercautionavoid

Composite risk band derived from scores.motRiskScore, scores.conditionScore, odometer trend, recall status, MOT result, and how long it's been since the vehicle was last tested. high = confirmed clocking or critical safety flags. medium = elevated risk signals. low = all clear. Null when no MOT history.

lowmediumhigh

Band of scores.motRiskScore.

lowmediumhigh

Band of scores.conditionScore — overall safety and roadworthiness. Null when score is null.

goodfairpoor

Band of scores.maintenanceScore — owner care relative to fleet peers. Null when score is null.

goodfairpoor

high = possible odometer clocking detected. low = unusually high annual mileage. none = consistent readings. null = insufficient odometer data.

nonelowhigh

True when the colour on the current V5C (DVLA) differs from the colour at the last MOT (DVSA). Indicator of a post-accident respray or identity fraud. Null until both DVLA and DVSA enrichments have completed.

True when this vehicle's per-test advisory rate exceeds the fleet average for its make/model/year. Null when there isn't enough benchmark data for that make/model/year, or too few MOT tests on this vehicle.

Emissions

signals.*

CO₂ in grams per kilometre from DVLA type approval record. Used for VED banding.

European emission standard (e.g. "EURO 6", "EURO 4"). Used to derive ulezCompliant.

Derived from euroEmissionStandard + fuelType. Petrol/hybrid Euro 4+ = true. Diesel Euro 6+ = true. Electric = true. Null when standard unknown.

Tax & MOT status

signals.*
signals.taxStatus # string | null

Current road tax status.

taxeduntaxedsorn

When road tax expires. Null for SORN vehicles.

Days until tax expires. Negative = already expired. Derived at response time.

signals.vedBand # string | null

VED (road tax) band. A–M for pre-April 2017 registrations; "standard" for post-2017; "exempt" for pre-1980.

Annual VED cost in GBP at current rates (effective April 2025). Updated annually.

signals.motStatus # string | null

Current MOT status from DVLA.

validexpiredno_motno_details

When the current MOT certificate expires.

Days until MOT expires. Negative = already expired. Derived at response time.

True when the current MOT certificate expires within 30 days.

DVLA has marked this vehicle for export.

Date V5C (logbook) was last issued. Recently re-issued V5C can indicate a keeper change.

Recall

signals.*

True when DVSA has an open safety recall against this vehicle. Null when DVSA returns "Unknown" (recall data unavailable for this make).

Odometer

signals.*

All recorded odometer readings checked in chronological order. Same-day retests are sorted failed-before-passed to avoid false positives from retesting. possible_clocking = any reading lower than the previous. high_mileage = average > 20,000 miles/year. low_mileage = average < 3,000 miles/year. consistent = steady increase within normal range. insufficient_data = fewer than 2 readings.

consistenthigh_mileagelow_mileagepossible_clockinginsufficient_data

Most recent recorded odometer reading in miles.

Average annual mileage from first to last odometer reading.

Compares this vehicle's typical annual mileage to the fleet average for its make/model/year. below_average suggests short trips / city driving; above_average suggests longer regular use. Null when there isn't enough benchmark data for that make/model/year.

below_averageaverageabove_average

Inferred driving pattern from typical annual mileage. short_urban = < 5,000 mi/yr. long_distance = > 15,000 mi/yr. Null when no odometer data.

short_urbanmixedlong_distance

Diesel vehicles only. DPF (diesel particulate filter) clogging risk. Short urban trips don't allow passive regeneration. high = < 3,000 mi/yr. elevated = < 7,000 mi/yr. low otherwise. Null for non-diesel or no data.

lowelevatedhigh

MOT history

signals.*

0.0–1.0. Proportion of MOT tests passed over the vehicle's lifetime.

Total number of MOT tests on record.

Number of tests where the vehicle failed.

Total advisory items across all MOT tests.

Total MAJOR or DANGEROUS defect items across all tests.

Advisory items on the most recent MOT test.

MAJOR/DANGEROUS defect items on the most recent test.

True if any test in history contained a DANGEROUS severity defect.

True when motPassRate < 0.70.

Compares average advisory count in the most recent third of tests against the oldest third. increasing = vehicle condition deteriorating over time. trendWindowTests shows the window size.

increasingstabledecreasinginsufficient_data

Same computation as advisoryTrend with inverted labels (worsening = more advisories recently, improving = fewer). Use this field for display; use advisoryTrend for numeric logic.

improvingstableworseninginsufficient_data

MOT time-series context

signals.*

Days since the most recent MOT failure. Null if no failure on record.

Number of MOT tests that ended in failure in the last 24 months.

Total advisory items across the last 3 MOT tests.

Number of tests used for the advisory trend window (max(1, total_tests / 3)).

Date of the oldest MOT test on record.

Date of the most recent MOT test.

Result of the most recent MOT test.

passedfailed

For new vehicles with no MOT history: date of first MOT eligibility (3 years from first registration).

MOT defect patterns

signals.*
signals.failureClusters # array<string> | null

DVSA failure text is keyword-classified into nine categories. Categories that appeared across more than one separate test are returned here. A vehicle with ["brakes", "suspension"] has had MAJOR or DANGEROUS defects in those systems on multiple separate tests.

brakessuspensiontyreslightssteeringbodyworkexhaustelectricalwipers

Total count of individual failure defect items whose category appeared in a prior test. Measures severity of recurrence — 6 repeat failures is worse than 1 even if both vehicles have the same failureClusters.

signals.advisoryClusters # array<string> | null

Same nine-category classification applied to advisory items across all tests (not just failed ones). These are the early-warning patterns that have not yet caused a failure. Same values as failureClusters.

brakessuspensiontyreslightssteeringbodyworkexhaustelectricalwipers

Composite scores

scores.*

0.0–1.0. Lower = safer (inverted convention). Derived from last test result, lifetime pass rate, advisory trajectory, odometer integrity, dangerous defect history, outstanding recall, and imminent MOT expiry. Null when no MOT history.

0.0–1.0. Safety and roadworthiness composite. Higher = safer. Derived from pass rate, odometer integrity, dangerous defect history, recall status, advisory trend, and advisory performance vs fleet. Null when insufficient data.

National percentile rank of this vehicle's MOT pass rate specifically (0–100), not of conditionScore itself — conditionScore blends six factors, this ranks only one of them, nationally with no make/model/year grouping. Populated by VehicleScoreWorker (weekly batch). Null until first worker run.

0.0–1.0 care quality vs same make/model/year fleet. 0.5 = exactly average. Null when benchmark has < 10 samples.

National percentile rank of this vehicle's raw advisory rate (advisories per test), not of maintenanceScore itself — unlike the score, this ignores failure rate and isn't benchmarked against the same make/model/year, just ranked against all vehicles nationally. Populated by VehicleScoreWorker (weekly batch). Null until first worker run.

This vehicle's per-test failure rate divided by fleet average for same make/model/year. 1.0 = average. Null when < 10 samples.

Same as failureRateRatio but for advisory items.

Number of vehicles in the benchmark group for this make/model/year.

Fleet average advisory items per MOT test for this make/model/year. Use with advisoryRateRatio and summary.aboveAverageAdvisories to contextualise the raw advisory count. Null when benchmark has < 10 vehicles.

Fleet average failure items per MOT test for this make/model/year. Null when benchmark has < 10 vehicles.

0.0–1.0 likelihood the vehicle is off-road (SORN'd, scrapped, or a non-runner), based on how long it's been since the last MOT test. Higher = more likely off-road. Null when no MOT history.

"0_to_1; higher_is_better except motRiskScore and offRoadLikelihoodScore". Reminder that both motRiskScore and offRoadLikelihoodScore are risk-oriented — higher = worse.

Fleet profiles

fleetFailureProfile.* / fleetAdvisoryProfile.*

Mileage band for this vehicle's current odometer reading.

0–20k20k–40k40k–60k60k–80k80k–100k100k+

Number of MOT tests in this mileage band for this make/model/year.

Up to 3 failure categories most common at this mileage. Each item: { category, rate }, where rate is the fraction of the sampleSize MOT tests (not distinct vehicles) that had a failure in that category — e.g. rate: 0.3 means 30% of tests on same make/model/year vehicles at this mileage band flagged that category, not that 30% of those vehicles have ever failed on it. Null when no fleet data.

Up to 3 advisory categories most common at this mileage. Same structure and per-test rate definition as topFailures. Null when no fleet data.

Metadata

True when the vehicle was not in the database and has been queued. All other fields null. Retry after Retry-After header.

Response schema version. Currently "1.0".

dataAsOf # string

ISO 8601 datetime when the stored data was last refreshed from source APIs.

ISO 8601 datetime when this request was processed.

sources # object

Data source attribution. Fields: motHistory ("DVSA MOT History API"), mutableData ("DVLA Vehicle Enquiry Service (VES)"), safetyRating (Euro NCAP source, null when no NCAP match was found for this make/year).