// GET /v1/maintenance-schedule · stable
The maintenance schedule, as rows.
- 7,500 mi
- interval_miles for an oil change on the reference CR-V.
- 12 mo
- interval_months, whichever comes first.
- 3 fields
- miles, months and a display string per service.
- stable
- /v1/maintenance-schedule is additive-only.
The maintenance schedule as rows.
Each service is one row with a slug, the interval in miles and in months, and a display string you can print as-is.
2019 Honda CR-V EX
complete92% filledMonths and miles, both.
The raw response. Whichever comes first is the rule, and the display string already says it.
curl 'https://vinspeclookup.com/api/v1/maintenance-schedule?config_key=2019_honda_cr_v_ex_l15be' \ -H 'Authorization: Bearer otp_live_…'{
"object": "maintenance_schedule",
"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"
},
"intervals": [
{
"confidence": 0.85,
"display": null,
"interval_miles": 7500,
"interval_months": 12,
"mechanic_verified": false,
"name": "Oil Change",
"service": "oil_change"
},
{
"confidence": 0.9199999999999999,
"display": null,
"interval_miles": 7500,
"interval_months": 6,
"mechanic_verified": false,
"name": "Tire Rotation",
"service": "tire_rotation"
}
],
"meta": {
"generated_at": 1792323140145
}
}Whole vehicle or one group.
The schedule is also a group inside GET /v1/vehicle. Name the groups you want with include=, and the response carries only those.
| Call | Returns | Reads |
|---|---|---|
| GET /v1/maintenance-schedule | config + intervals[] | 1 |
| GET /v1/vehicle?include=intervals | config + intervals[] | 1 |
| GET /v1/vehicle?include=intervals,parts | config + intervals[] + services[] (parts and labor) | 1 |
| GET /v1/vehicle | every group we hold for the vehicle | 1 |
Intervals are resolved per config, not per model: two trims of the same model can carry different schedules where the sources say they do, and the response you get is the one for the engine and drivetrain behind the identifier you sent. Store the config_key with the vehicle and the schedule never has to be re-resolved.
Map a row to its parts with ?service= on GET /v1/parts.
// 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 reminder set from the schedule
interval_miles and interval_months become the two triggers on a service reminder, whichever comes first.
The due-now list
Compare each row with the odometer and the last service date; what is due ticks itself.
A fleet board
Every vehicle's odometer against its own interval, so the board flags the ones to bring in.
// QUESTIONS
Details.
- Miles or months?
- Both, on every row. The rule is whichever comes first, and the display string already says so.
- Do you handle severe-service schedules?
- The schedule returned is the normal-service schedule. Severe-service variants are on the roadmap and will arrive as a new field, never by changing an existing one.
- How do I map a service to parts?
- Each row has a service slug (oil_change, tire_rotation). Pass it as ?service= to GET /v1/parts to get the parts matched to that config and the labor for that service.
- Is the schedule the same for every trim?
- It is resolved per config, which is the engine and drivetrain behind the identifier you sent. Where two configs of one model have different intervals, you get the one that matches.
// 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/maintenance-schedule, and run it with no key. Ready for live data across any vehicle? Request access.