Free used car price API
DealScore grades a used car's asking price over REST and MCP. POST /api/score and the MCP tool score_deal take a vehicle, an asking price, and mileage. The response carries a grade, a 0 to 100 score, an expected price band from live US dealer comps, and a short brief.
What you send and what comes back
The REST body and the MCP score_deal arguments are the same object. Send a VIN, or year, make, and model.
| asking_price | number | Required. USD, greater than 0. |
|---|---|---|
| mileage | number | Required. Odometer miles, 0 or more. |
| vin | string | 17 characters. Send this, or year + make + model. |
| year | integer | 1980 through next model year. |
| make | string | For example Toyota. |
| model | string | For example Camry. |
| trim | string | Optional. |
| zip | string | Optional. 5 digits. Narrows comps to a local market; omit for US national comps. |
| grade | string | null | Great, Good, Fair, High, or Overpriced. Null when coverage is cannot_score. |
|---|---|---|
| score | number | null | 0 to 100. Null when coverage is cannot_score. |
| expected_price | number | Market value estimate from comps, USD. |
| expected_price_low / _high | number | Comp price band, USD. |
| delta_pct | number | (asking_price - expected_price) / expected_price. |
| confidence | number | 0 to 1, from comp count and data source. |
| coverage | string | scored, partial, or cannot_score. Only scored is billed. |
| brief / comps_summary / risks | string, string, string[] | Plain-text explanation an agent can quote. |
| comps_count / data_source | number, string | How many comps, and live, mock, or error. |
grade is Great, Good, Fair, High, or Overpriced. score is clamp(100 - delta_pct × 200, 0, 100) under rubric score_v1. coverage: scored is the only result that counts against the meter. cannot_score returns a null grade when comps are too thin to price the car. How the bands are drawn: /guides/how-deal-grades-work.
Free tier
Free includes 5 scored calls a month. Builder is $19/mo (founding price) for 1,000 scored calls a month. MCP, REST, and the /try playground share one meter per account. explain_grade and health are never metered. Over the cap, REST returns HTTP 402 and MCP returns a score_quota_exceeded tool error. The meter resets on the first of the month, UTC. Plan details: /pricing.
Request example
Create a key, then POST the car. Authorization: Bearer YOUR_KEY is accepted on the same route. Replace YOUR_KEY with a key from /keys.
curl
curl -X POST https://cardealscore.com/api/score \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_KEY" \
-d '{"year":2020,"make":"Toyota","model":"Camry","asking_price":18500,"mileage":62000,"zip":"33803"}'The same arguments as a tool call:
score_deal({
"year": 2020,
"make": "Toyota",
"model": "Camry",
"asking_price": 18500,
"mileage": 62000,
"zip": "33803"
})A recorded production response
This is a recorded production score for a 2020 Toyota Camry listed at $18,500 with 62,000 miles, ZIP 33803. The saved example keeps the numeric fields. comps_summary, brief, and risks were not in that recording. Prices move with the market, so a later call returns different numbers.
{
"grade": "Great",
"score": 100,
"expected_price": 22378,
"expected_price_low": 13999,
"expected_price_high": 32997,
"delta_pct": -0.1733,
"confidence": 0.92,
"coverage": "scored",
"rubric_version": "score_v1",
"data_source": "live",
"vehicle": {
"year": 2020,
"make": "Toyota",
"model": "Camry"
},
"comps_count": 17
}The ask is 17.3% under the expected $22,378. That sits in the Great band, 10% or more under the expected price. The score is 100 because an ask below the expected price clamps to 100. ZIP 33803 narrows comps to a local market. This response counted 17 comps with data_source: live and coverage: scored, so the call counted against the meter.
Comps are US dealer listings. A private-party ask may grade lower. Facebook Marketplace and Craigslist URLs are not fetched. Send the fields instead.
MCP
The MCP server is Streamable HTTP at https://cardealscore.com/api/mcp. OAuth is the default. Add the URL with no headers and sign in when the client opens a browser. Tools are score_deal, explain_grade, and health.
Setup pages: Cursor, Claude Code, Claude Desktop, Codex, ChatGPT. The hub with every config is /agents.
API key
Sign in with the email link, then create a key. The plaintext is shown once. Use it as x-api-key on POST /api/score. Full field reference: /docs/api.