Real car data,
as an API.
Fluid capacities, OEM part numbers with dated reference prices, service intervals and labor time estimates for the exact configuration — the numbers you need to quote and fix a car, ready to use. Not another VIN decoder.
Every value comes with its source and a confidence score.
// WHAT YOU CAN PULL
Everything a shop needs
to quote a job.
Identify a vehicle once, then pull any group on its own or all at once — clean JSON, ready to drop into a quote, a work order, or your app.
Fluids & capacities
Engine oil viscosity + capacity, coolant, transmission, brake, power-steering and diff/transfer-case fluids — figures for the exact engine, each with its source and a confidence score, not 'takes about 5 quarts'.
Parts & reference prices
OEM part numbers matched to the exact configuration and grouped per service — role, position, quantity, a fitment confidence score, and a reference price stamped with the date observed.
Service intervals
The maintenance schedule for the exact configuration — every service by miles and months, ready to put on a timeline.
Labor time estimates
Labor time estimates for every applicable service, each labelled with its method and a confidence score. Measured labor from completed jobs will appear as it accumulates.
Tires & wheels
Tire and wheel fitment: front/rear sizes, recommended pressures, load index, speed rating, run-flat and staggered flags, plus battery CCA.
VIN & config decode
Resolve a VIN, year/make/model, or config_key to its canonical identity and exact engine — the lightest lookup in the API.
// WHAT YOU GET BACK
Not a VIN blob.
A quote, ready to use.
One call returns clean, grouped, consistent JSON — the same shape every time. Below is a real response, captured on October 18, 2026 and trimmed to fit, annotated. Run it yourself on the live sandbox, no key.
GET /v1/vehicle?vin=5J6RW2H82KL000007&include=fluids,parts,tires,intervals
{
"object": "vehicle",
"config": {
"config_key": "2019_honda_cr_v_ex_l15be",
"year": 2019,
"make": "Honda",
"model": "CR-V",
"trim": "EX",
"engine": {
"code": "L15BE",
"displacement_l": 1.5,
"cylinders": 4,
"aspiration": "turbo"
},
"drivetrain": "4WD",
"transmission": "Continuously Variable Transmission (CVT)"
},
"specs": [
{
"field": "oil_viscosity",
"value": "0W-20"
},
{
"field": "oil_capacity_qts",
"value": "3.7"
},
{
"field": "coolant_type",
"value": "Honda Long Life Antifreeze/Coolant Type 2"
},
{
"field": "lug_nut_torque_ft_lbs",
"value": "80"
}
],
"tires": {
"options": [
{
"size_front": "235/60R18",
"pressure_front_psi": 33,
"load_index": 103,
"speed_rating": "H"
}
],
"is_staggered": false,
"battery_cca": 400
},
"services": [
{
"service": "brake_pad_replacement",
"parts": [
{
"oem_part_number": "45022-TLA-A02",
"price": {
"amount": 70.99,
"msrp": 103.07
}
}
],
"labor": {
"hours": 1.4,
"source": "model_estimate",
"confidence": 0.3
}
}
],
"meta": {
"generated_at": 1792323140145
}
}configThe exact vehicle — not a guess
Resolved to a config_key with the real engine, drivetrain and transmission. A VIN or year/make/model maps to one precise configuration.
specsFluids & service points
Viscosity, capacities, coolant type, lug-nut torque — the numbers a tech needs, each with its source, not “takes about 5 quarts.”
tiresTire & wheel fitment
Sizes, pressures, load index, speed rating, run-flat/staggered flags, and battery CCA — the whole fitment.
services[].parts[].priceOEM part numbers, priced with a date
The OEM part number matched to this configuration, with a fitment confidence score, MSRP and a reference price stamped with the date observed — ready to quote.
services[].laborLabor hours, with where they came from
Every estimate says its method and confidence. Here it's a model_estimate. Measured labor from completed jobs will appear as it accumulates.
Confirm specifications against manufacturer service information before performing work.
Try it free — no signup// WHY WE'RE DIFFERENT
What others don't give you.
To quote and fix a car you'd normally stitch a VIN decoder to a parts catalog and still be missing fluids and labor. OtoIndex is the whole picture, in one API.
| Capability | Basic VIN decoders | Parts catalogs | OtoIndex |
|---|---|---|---|
| VIN / YMMT identity decode | included | partial | included |
| Config-level precision (exact engine & trim) | not available | partial | included |
| Fluid types & capacities for the exact engine | not available | not available | included |
| Service intervals (miles & months) | partial | not available | included |
| OEM part numbers per config, with dated reference prices + MSRP | not available | partial | included |
| Labor with provenance (method + confidence on every row) | not available | not available | included |
| Source + confidence on every value | not available | not available | included |
| Whole vehicle in one call, one JSON shape | not available | not available | included |
Maintenance depth, not just identity
Most APIs stop at decoding a VIN. We go all the way to the numbers you act on — fluid capacities, service intervals and service points, each with its source.
Labor with its method shown
Labor time estimates for every applicable service, each labelled with its method and a confidence score. Measured labor from completed jobs will appear as it accumulates.
Parts matched to the config, priced with a date
OEM part numbers matched to the exact configuration, each with a fitment confidence score, MSRP and a reference price stamped with the date observed — so a response is a quote, not a research project.
One clean, versioned shape
Identity, specs, tires, intervals, parts + labor, and history come back keyed the same way every time. No blob parsing, no surprises.
// HOW IT WORKS
Three calls from VIN
to a bookable quote.
curl 'https://vinspeclookup.com/api/v1/decode?vin=5J6RW2H82KL000007' \-H "Authorization: Bearer $OTOINDEX_KEY"# no key yet? same route, free: curl 'https://vinspeclookup.com/api/sample/v1/decode?vin=5J6RW2H82KL000007'# → { config_key: "2019_honda_cr_v_ex_l15be",# engine: "1.5L L15BE 4cyl" }
curl 'https://vinspeclookup.com/api/v1/vehicle?config_key=2019_honda_cr_v_ex_l15be&include=fluids,parts,tires' \-H "Authorization: Bearer $OTOINDEX_KEY"# no key yet? same route, free: curl 'https://vinspeclookup.com/api/sample/v1/vehicle?config_key=2019_honda_cr_v_ex_l15be&include=fluids,parts,tires'
const v = (f) => data.specs.find((s) => s.field === f)?.valuequote.addFluid(v('oil_viscosity'), v('oil_capacity_qts'))const job = data.services.find((s) => s.service === 'brake_pad_replacement')quote.addPart(job.parts[0])// → 0W-20 · 3.7 qt · 45022-TLA-A02 $70.99
// COVERAGE
A dataset that grows
with every job.
From GET /v1/catalog · as of
- Identity & enginedeep coverage
- Fluids & capacitiesdeep coverage
- Spec sheet & service pointsdeep coverage
- Maintenance scheduledeep coverage
- Parts & reference pricesdeep coverage
- Tires & wheelsdeep coverage
- Labor time estimatesgrowing
- Vehicle mediagrowing
- Service historygrowing
// FOR DEVELOPERS
A REST API that
gets out of your way.
Plain HTTP GETs, an OpenAPI 3.1 spec, and a live try-it console. No SDK required — call it from any stack, or generate one from the spec.
One key, every group
Fluids, parts, labor, tires, intervals and identity — all behind a single bearer token.
Identify any way
VIN, year/make/model, or config_key. Ambiguous YMMT returns the candidate configs to choose from.
Grouped or full
Pull one group — fluids, parts, tires — or the whole vehicle in a single call, field-selectable with include.
Free to try, no signup
Live data for every catalog vehicle in your browser or terminal — no key required.
curl 'https://vinspeclookup.com/api/v1/fluids?config_key=2019_honda_cr_v_ex_l15be' \ -H "Authorization: Bearer $OTOINDEX_KEY"# no key yet? same route, free: curl 'https://vinspeclookup.com/api/sample/v1/fluids?config_key=2019_honda_cr_v_ex_l15be'// curl 'https://vinspeclookup.com/api/sample/v1/vehicle?config_key=2019_honda_cr_v_ex_l15be'
Try it now. Build on it next.
Run live data for every vehicle in the catalog, in your browser or your terminal — no signup, no card. Building it into a product? Request early access for your own key.