// GET /v1/maintenance-schedule · stable

The maintenance schedule, as rows.

Every service on the maintenance schedule with its interval in miles and in months, ready to put on a timeline or a reminder.
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.

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
Oil Change
oil_change
7500 mi / 12 mo
Tire Rotation
tire_rotation
7500 mi / 6 mo
Generated Oct 18, 2026
one interval, as returned
Oil Change
oil_change
7,500 mi / 12 mo
interval_miles
7,500
interval_months
12

Months and miles, both.

The raw response. Whichever comes first is the rule, and the display string already says it.

schedule.sh
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 } }
200 OK · intervals[] sorted by interval_miles

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.

CallReturnsReads
GET /v1/maintenance-scheduleconfig + intervals[]1
GET /v1/vehicle?include=intervalsconfig + intervals[]1
GET /v1/vehicle?include=intervals,partsconfig + intervals[] + services[] (parts and labor)1
GET /v1/vehicleevery group we hold for the vehicle1

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.