Oil & Miles API
Free, read-only car data from our pages: what a trouble code means, the coolant your owner's manual names, what a repair costs per car, and which warranty extensions cover your car.
Version v1Read-onlyNo key or sign-upLicense CC BY 4.0
GET /api/v1/codes/P0420.json
Endpoints
| Method | Path | What it returns |
|---|---|---|
| GET | /api/v1/codes.json | Every trouble code we cover, with its page |
| GET | /api/v1/codes/{CODE}.json | One OBD-II code: what it means, what it doesn't prove, what gets checked. The code in capitals, for example P0420 |
| GET | /api/v1/coolant.json | Every car with a coolant record |
| GET | /api/v1/coolant/{make}/{model}/{year}.json | The coolant the owner's manual names, with the manual. Leave out the year, or the model and year, for more cars |
| GET | /api/v1/costs.json | Repair jobs with cost ranges |
| GET | /api/v1/costs/{job}.json | One job: the page's headline range and each car's own shop and dealer range |
| GET | /api/v1/coverage/{make}/{model}/{year}.json | Warranty extensions and coverage programs for a car. Leave out the year, or the model and year, for more |
| GET | /api/v1/openapi.json | The OpenAPI 3.1 description |
Make and model are lowercase, as in the answers: honda/crv, honda/cr-v for coverage.
Use it, credit it
Every answer carries the license, and every record its source and the url of the Oil & Miles page it comes from.
Show the line "Data: Oil & Miles, CC BY 4.0" with a link to that page wherever you use a record.
The figures are the ones on our pages, updated when the pages are. Each car carries its own range, and the headline is the page's own range across the cars it prices.
Examples
GET /api/v1/codes/P0420.json
curl "https://oilandmiles.com/api/v1/codes/P0420.json"
{
"data": {
"area": "Auxiliary emission controls",
"code": "P0420",
"family": "Catalyst",
"meaning": "Bank 1 converter reads weak",
"official_name": "Catalyst System Efficiency Below Threshold Bank 1",
"related_codes": [
"P0430"
],
"source": "Code name from FCA bulletin 08-054-25.",
"system": "Powertrain",
"url": "https://oilandmiles.com/articles/p0420-code",
"what_gets_checked": "Whether the oxygen sensor after the converter stays flat while the one before it swings",
"what_it_does_not_prove": "It doesn't prove the converter is bad. An exhaust leak or the engine's software can set the code with nothing wrong inside it.",
"what_the_computer_saw": "The engine computer swung the fuel mixture rich and lean, and the oxygen sensor after the bank 1 converter started to mirror the one before it."
},
"source": "Oil & Miles",
"license": {
"name": "CC BY 4.0",
"url": "https://creativecommons.org/licenses/by/4.0/",
"attribution": "Oil & Miles (https://oilandmiles.com)"
},
"docs": "https://oilandmiles.com/developers"
}
GET /api/v1/coolant/honda/crv/2017.json
curl "https://oilandmiles.com/api/v1/coolant/honda/crv/2017.json"
{
"data": [
{
"coolant": "Honda Long Life Type 2, 50/50",
"make": "honda",
"model": "crv",
"source": "Honda 2017 CR-V Owner's Manual",
"url": "https://oilandmiles.com/cars/honda/2017-honda-crv",
"year": 2017
}
],
"source": "Oil & Miles",
"license": {
"name": "CC BY 4.0",
"url": "https://creativecommons.org/licenses/by/4.0/",
"attribution": "Oil & Miles (https://oilandmiles.com)"
},
"docs": "https://oilandmiles.com/developers"
}
GET /api/v1/costs/timing-belt.json
curl "https://oilandmiles.com/api/v1/costs/timing-belt.json"
{
"data": {
"cars": [
{
"dealer": {
"high": 740,
"low": 590
},
"independent_shop": {
"high": 570,
"low": 390
},
"vehicle": "2019 Acura TLX 3.5 V6"
},
{
"dealer": {
"high": 680,
"low": 550
},
"independent_shop": {
"high": 520,
"low": 360
},
"vehicle": "2019 Acura RLX 3.5 V6"
}
],
"currency": "USD",
"headline": {
"high": 770,
"low": 360
},
"job": "timing-belt",
"label": "Timing belt replacement",
"note": "Parts and labor per car, as the page shows them. Each car has its own range, never one across cars.",
"source": "Oil & Miles repair-cost page",
"url": "https://oilandmiles.com/articles/timing-belt-replacement-cost"
},
"source": "Oil & Miles",
"license": {
"name": "CC BY 4.0",
"url": "https://creativecommons.org/licenses/by/4.0/",
"attribution": "Oil & Miles (https://oilandmiles.com)"
},
"docs": "https://oilandmiles.com/developers"
}
GET /api/v1/coverage/honda/cr-v/2017.json
curl "https://oilandmiles.com/api/v1/coverage/honda/cr-v/2017.json"
{
"data": [
{
"cars": [
{
"engine": {
"displacement": 1.5,
"turbo": true
},
"model": "cr-v",
"years": {
"from": 2017,
"to": 2018
}
},
{
"engine": {
"displacement": 1.5,
"turbo": true
},
"model": "civic",
"years": {
"from": 2016,
"to": 2018
}
}
],
"id": "honda-powertrain-2019",
"make": "honda",
"name": "Powertrain warranty extension",
"problem": "Oil dilution",
"start": "April 5, 2019",
"term": {
"miles": null,
"years": 6
},
"url": "https://oilandmiles.com/articles/honda-crv-2017-2022-oil-dilution"
}
],
"source": "Oil & Miles",
"license": {
"name": "CC BY 4.0",
"url": "https://creativecommons.org/licenses/by/4.0/",
"attribution": "Oil & Miles (https://oilandmiles.com)"
},
"docs": "https://oilandmiles.com/developers"
}
MCP server
AI assistants and agents can use the same data as tools, through the Model Context Protocol. Add this address as a remote MCP server:
https://oilandmiles.com/api/mcp
| Tool | What it returns |
|---|---|
get_trouble_code | One OBD-II code, the same answer as /api/v1/codes/{CODE}.json |
list_trouble_codes | Every trouble code we cover, with its page |
get_coolant_spec | The coolant the owner's manual names, by make, model and year |
list_repair_cost_jobs | Repair jobs with cost ranges |
get_repair_cost | One job: each car's own shop and dealer range |
find_warranty_coverage | Warranty extensions and coverage programs for a car |
Streamable HTTP, protocol 2026-07-28, and the 2025 versions for older clients. Read-only, no key, no session. Each POST carries one JSON-RPC request.
Every tool gives the same answer as the API files, with the same license. The limit is 60 requests a minute.
{
"mcpServers": {
"oilandmiles": { "type": "http", "url": "https://oilandmiles.com/api/mcp" }
}
}
Errors and limits
A path with no file answers 404: we have no page on it yet. The files may be cached for an hour.
The MCP server answers 405 to anything but POST, and 429 above 60 requests a minute: wait 60 seconds.
Contact
Questions or a dataset you would like to see: contact@oilandmiles.com.