// GET /v0/labor · preview

Labor time for every service, labelled.

Labor time estimates for every applicable service, each labelled with its method and a confidence score. Measured labor from completed jobs, with sample size and spread, will appear as it accumulates.
1.4 h
estimated_hours for brake pad replacement on the reference CR-V.
model_estimate
estimate_source: how that figure was produced.
0.3
estimate_confidence for that figure.
preview
/v0/labor, shape may change with notice.

Hours for every service, labelled.

estimates[] covers every applicable service, each with estimate_source and a confidence score. services[] carries measured hours, with the sample size and the p25 to p75 spread, once completed jobs exist for a config. For this vehicle it is empty today.

Preview · sample · /v0
2019_honda_cr_v_ex_l15be
Estimates, every applicable service · tier T1
Fuel System Cleaning0.5 hestimate
Differential Service1.15 hestimate
Battery Replacement0.4 hestimate
Battery Test0.2 hestimate
Brake Fluid Flush0.7 hestimate
Rotor Replacement1.8 hestimate
Brake Pad Replacement1.4 hestimate
Tire Replacement1.25 hestimate
Wheel Alignment1 hestimate
Tire Balance0.6 hestimate
Tire Rotation0.4 hestimate
Transmission Service1.5 hestimate
Coolant Flush1 hestimate
Spark Plugs1.15 hestimate
Filter Replacement0.3 hestimate
Oil Change0.5 hestimate
Emissions Test0.3 hestimate
State Inspection0.5 hestimate
Check Engine Light Diagnosis1 hestimate
Pre-Purchase Inspection1.75 hestimate
Diagnostic Scan0.5 hestimate
Serpentine Belt Replacement1 hestimate
Wiper Blade Replacement0.2 hestimate
Transfer Case Fluid Service0.75 hestimate
AC Recharge / Service1 hestimate
Engine Air Intake Cleaning1 hestimate
Wheel Bearing Replacement1.5 hestimate
Multi-Point Inspection0.75 hestimate

estimates[] covers every applicable service, each labelled with its method (estimate_source: empirical or model_estimate) and a confidence score. services[] carries hours measured from completed repair jobs once this config has them. Licensed book-time blends are never served by this API.

one estimate, as returned
Brake Pad Replacement
brake_pad_replacement
1.4 h
estimate_source
model_estimate
estimate_confidence
0.3

services[] has 0 measured rows for this config. Measured hours, with sample size and spread, appear there as completed jobs accumulate.

Where an estimate comes from.

estimates[] fills every applicable service. estimate_source says whether a figure was measured or came from the tier model, so your UI can label it.

estimate_source: empirical

Enough completed jobs on this exact config to compute a median. The figure in estimates[] equals empirical_hours in services[], where the spread and sample size live.

estimate_source: model_estimate

Not measured yet on this config. A tier model anchored on a reference vehicle supplies the hours (this vehicle is tier T1). Label it as an estimate; it will flip to measured as jobs complete.

estimates[]

Fuel System Cleaning0.5 hestimate
Differential Service1.15 hestimate
Battery Replacement0.4 hestimate
Battery Test0.2 hestimate
Brake Fluid Flush0.7 hestimate
Rotor Replacement1.8 hestimate
Brake Pad Replacement1.4 hestimate
Tire Replacement1.25 hestimate
Wheel Alignment1 hestimate
Tire Balance0.6 hestimate
Tire Rotation0.4 hestimate
Transmission Service1.5 hestimate
Coolant Flush1 hestimate
Spark Plugs1.15 hestimate
Filter Replacement0.3 hestimate
Oil Change0.5 hestimate
Emissions Test0.3 hestimate
State Inspection0.5 hestimate
Check Engine Light Diagnosis1 hestimate
Pre-Purchase Inspection1.75 hestimate
Diagnostic Scan0.5 hestimate
Serpentine Belt Replacement1 hestimate
Wiper Blade Replacement0.2 hestimate
Transfer Case Fluid Service0.75 hestimate
AC Recharge / Service1 hestimate
Engine Air Intake Cleaning1 hestimate
Wheel Bearing Replacement1.5 hestimate
Multi-Point Inspection0.75 hestimate

Preview endpoint, stated plainly.

Labor lives on /v0 while the dataset grows. The shape may change with notice on the changelog, and any version gets at least 90 days before retirement.

labor.sh
curl 'https://vinspeclookup.com/api/v0/labor?config_key=2019_honda_cr_v_ex_l15be&service=brake_pad_replacement' \
-H 'Authorization: Bearer otp_live_…'
{ "config_key": "2019_honda_cr_v_ex_l15be", "estimates": [ { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 0.5, "name": "Fuel System Cleaning", "service": "fuel_system_cleaning" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 1.15, "name": "Differential Service", "service": "differential_service" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 0.4, "name": "Battery Replacement", "service": "battery_replacement" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 0.2, "name": "Battery Test", "service": "battery_test" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 0.7, "name": "Brake Fluid Flush", "service": "brake_fluid_flush" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 1.8, "name": "Rotor Replacement", "service": "rotor_replacement" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 1.4, "name": "Brake Pad Replacement", "service": "brake_pad_replacement" }, { "estimate_confidence": 0.2, "estimate_source": "model_estimate", "estimated_hours": 1.25, "name": "Tire Replacement", "service": "tire_replacement" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 1, "name": "Wheel Alignment", "service": "wheel_alignment" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 0.6, "name": "Tire Balance", "service": "tire_balance" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 0.4, "name": "Tire Rotation", "service": "tire_rotation" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 1.5, "name": "Transmission Service", "service": "transmission_service" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 1, "name": "Coolant Flush", "service": "coolant_flush" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 1.15, "name": "Spark Plugs", "service": "spark_plugs" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 0.3, "name": "Filter Replacement", "service": "filter_replacement" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 0.5, "name": "Oil Change", "service": "oil_change" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 0.3, "name": "Emissions Test", "service": "emissions_test" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 0.5, "name": "State Inspection", "service": "state_inspection" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 1, "name": "Check Engine Light Diagnosis", "service": "check_engine_light" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 1.75, "name": "Pre-Purchase Inspection", "service": "pre_purchase_inspection" }, { "estimate_confidence": 0.3, "estimate_source": "model_estimate", "estimated_hours": 0.5, "name": "Diagnostic Scan", "service": "diagnostic_scan" }, { "estimate_confidence": 0.2, "estimate_source": "model_estimate", "estimated_hours": 1, "name": "Serpentine Belt Replacement", "service": "serpentine_belt" }, { "estimate_confidence": 0.2, "estimate_source": "model_estimate", "estimated_hours": 0.2, "name": "Wiper Blade Replacement", "service": "wiper_blade_replacement" }, { "estimate_confidence": 0.2, "estimate_source": "model_estimate", "estimated_hours": 0.75, "name": "Transfer Case Fluid Service", "service": "transfer_case_service" }, { "estimate_confidence": 0.2, "estimate_source": "model_estimate", "estimated_hours": 1, "name": "AC Recharge / Service", "service": "ac_recharge" }, { "estimate_confidence": 0.2, "estimate_source": "model_estimate", "estimated_hours": 1, "name": "Engine Air Intake Cleaning", "service": "engine_intake_cleaning" }, { "estimate_confidence": 0.2, "estimate_source": "model_estimate", "estimated_hours": 1.5, "name": "Wheel Bearing Replacement", "service": "wheel_bearing_replacement" }, { "estimate_confidence": 0.2, "estimate_source": "model_estimate", "estimated_hours": 0.75, "name": "Multi-Point Inspection", "service": "multi_point_inspection" } ], "note": "estimates[] covers every applicable service, each labelled with its method (estimate_source: empirical or model_estimate) and a confidence score. services[] carries hours measured from completed repair jobs once this config has them. Licensed book-time blends are never served by this API.", "object": "empirical_labor", "services": [], "tier": "T1" }
200 OK · /v0 preview · labor:read scope

// IN USE

Where the fields land.

Three places this response ends up, drawn the way the homepage draws its data groups. Every value in the pictures is from the sample above.

Bay time on the schedule

estimated_hours books the bay; estimate_confidence says how much slack to leave around it.

The labor line, priced

Hours times your shop rate, beside the parts that go with the job, in one quote.

The service lane, planned

An advisor sees how long each car in the lane will take before the first one is written up.

// QUESTIONS

Details.

What makes a labor time empirical?
It is computed from completed jobs on the same config. When a config has measured rows, each one carries the sample size and the p25 and p75 hours so you can judge the confidence yourself; until then estimates[] is the answer, labelled as an estimate.
What is an estimate?
For services without enough measured jobs, a tier model anchored on a reference vehicle fills in estimated_hours, and estimate_source says model_estimate so you can label it.
Why is this endpoint /v0?
The shape is still settling as the dataset grows. Preview endpoints may change with notice on the changelog and get at least 90 days before retirement.
How does an estimate become a measurement?
As completed jobs on the config accumulate past the sample threshold, the service moves into services[] with its spread, and estimate_source in estimates[] flips from model_estimate to empirical. Nothing changes in the shape, only in the label, so a UI that reads estimate_source needs no update.

// TRY IT

Run this response yourself.

Every window on this page is the sandbox's answer for the reference vehicle. Open the console, pick /v0/labor, and run it with no key. Ready for live data across any vehicle? Request access.