// GET /v1/parts · stable

Parts matched to the config, with a fitment confidence.

OEM part numbers matched to the exact config and grouped by service, each with its role, position, quantity and fitment confidence, a reference price, the MSRP and the date it was priced, next to the labor hours for the job.
45022-TLA-A02
the front brake pad set for the reference CR-V.
$70.99
price.amount, the latest trusted price.
$103.07
price.msrp, the list price.
1.4 h
labor for that service (model_estimate), in the same card.

A part number for this config, priced.

Parts are grouped per service. Each line is the OEM part number matched to this config with its role, position, quantity, fitment confidence and a dated price.

Preview · sample

2019 Honda CR-V EX

complete92% filled
Engine
1.5L L15BE 4cyl
Drivetrain
4WD
Transmission
Continuously Variable Transmission (CVT)
Chassis
RW
config_key
2019_honda_cr_v_ex_l15be

Brake Pad Replacement

applicablelabor 1.4 h
45022-TLA-A02Front Brake Padscorefront×1$70.99$103.07
43022-TLA-A00Rear Brake Padscorerear×1$70.62$99.75
Generated Oct 18, 2026
one part, as returned
45022-TLA-A02
Front Brake Pads
corefront×1
$70.99
$103.07 MSRP
price.as_of · Aug 19, 2026

Grouped per service, with labor.

Filter to one service with ?service=. The labor hours for that job sit in the same object as its parts.

parts.sh
curl 'https://vinspeclookup.com/api/v1/parts?config_key=2019_honda_cr_v_ex_l15be&service=brake_pad_replacement' \
-H 'Authorization: Bearer otp_live_…'
{ "object": "parts", "config": { "config_key": "2019_honda_cr_v_ex_l15be", "year": 2019, "make": "Honda", "model": "CR-V", "trim": "EX", "engine": "1.5L L15BE 4cyl", "drivetrain": "4WD" }, "services": [ { "applicable": true, "labor": { "confidence": 0.3, "hours": 1.4, "sample_size": null, "source": "model_estimate", "tier_floor_applied": true }, "name": "Brake Pad Replacement", "parts": [ { "confidence": 0.97, "mechanic_verified": false, "name": "Front Brake Pads", "oem_part_number": "45022-TLA-A02", "position": "front", "price": { "amount": 70.99, "as_of": 1787173928266, "msrp": 103.07, "source_domain": "honda.oempartsonline.com" }, "quantity": 1, "role": "core", "subcategory": "front_brake_pad" }, { "confidence": 0.97, "mechanic_verified": false, "name": "Rear Brake Pads", "oem_part_number": "43022-TLA-A00", "position": "rear", "price": { "amount": 70.62, "as_of": 1787173937854, "msrp": 99.75, "source_domain": "hondapartsnow.com" }, "quantity": 1, "role": "core", "subcategory": "rear_brake_pad" } ], "service": "brake_pad_replacement" } ], "meta": { "generated_at": 1792323140145 } }
200 OK · services[].parts[] and services[].labor

Priced as of a date, not forever.

The price object has three fields. Read all three: a price without its date is a guess.

price.amount
$70.99

The latest trusted market price for this exact part number.

price.msrp
$103.07

The manufacturer's list price, for the discount a customer sees.

price.as_of
August 19, 2026

When the price was last confirmed. A price is a snapshot, never a promise.

Amount is the reference price last seen at a trusted source; MSRP is what the manufacturer lists; as_of is when the amount was last confirmed. A quote should print all three, or at least the first and the last, so the person reading it knows how fresh the number is. Prices refresh on their own schedule; the shape never changes.

// 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.

A quote, not a research project

The exact part number with its price and MSRP lands on the quote with the labor beside it.

The parts line on a work order

oem_part_number, quantity and position tell the parts counter what to pull.

Prices that refresh

price.as_of says when the number was confirmed; refresh on your schedule, the shape never changes.

// QUESTIONS

Details.

Are the part numbers guaranteed to fit?
They are resolved for the exact config (engine, drivetrain, trim), not the model. Where a part depends on a production date split, the response includes both with position and role so you can ask the customer.
How fresh is the price?
Every price carries as_of, the time it was last confirmed. Treat it as a quote input, not a contract, and refresh on your own schedule.
Can I get only one service?
Yes. ?service=brake_pad_replacement limits the response to that service's parts and labor.
What does applicable mean on a service?
Whether the service exists for this config at all. A diesel has no spark plugs and an EV has no oil change; those services come back with applicable false and no parts, so a quote can skip them without a lookup table of its own.

// TRY IT

Run this response yourself.

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