API

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.

Arguments
asking_pricenumberRequired. USD, greater than 0.
mileagenumberRequired. Odometer miles, 0 or more.
vinstring17 characters. Send this, or year + make + model.
yearinteger1980 through next model year.
makestringFor example Toyota.
modelstringFor example Camry.
trimstringOptional.
zipstringOptional. 5 digits. Narrows comps to a local market; omit for US national comps.
Response
gradestring | nullGreat, Good, Fair, High, or Overpriced. Null when coverage is cannot_score.
scorenumber | null0 to 100. Null when coverage is cannot_score.
expected_pricenumberMarket value estimate from comps, USD.
expected_price_low / _highnumberComp price band, USD.
delta_pctnumber(asking_price - expected_price) / expected_price.
confidencenumber0 to 1, from comp count and data source.
coveragestringscored, partial, or cannot_score. Only scored is billed.
brief / comps_summary / risksstring, string, string[]Plain-text explanation an agent can quote.
comps_count / data_sourcenumber, stringHow 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.

Get a free API key