# 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.

Page: https://cardealscore.com/used-car-price-api

Get a free API key: https://cardealscore.com/login?next=%2Fkeys. See the MCP setup: https://cardealscore.com/agents

## Quick answers

### Is there a free used car price API for developers?

Yes. DealScore's free tier is 5 scored calls a month, no card. Sign in with an email link and create a key at /keys. REST, MCP, and the /try playground share one meter, which resets on the first of the month, UTC.

### How much does the DealScore used car price API cost?

Free is 5 scored calls a month. Builder is $19/mo (founding price) for 1,000 scored calls a month. Only results with coverage: scored count. partial and cannot_score results, explain_grade, and health are not metered.

### Can I get a used car's market value from a VIN?

Yes. POST the 17-character VIN with mileage and an asking price to /api/score. expected_price is the market value estimate from comparable US dealer listings, and expected_price_low and expected_price_high are the band. The response also grades the asking price against that band. Add a 5-digit zip to narrow comps to a local market.

### Does the API return the comparable listings for a VIN?

No. It returns comps_count, data_source, and a plain-text comps_summary, not the listing rows. If your agent needs raw dealer listings, VIN decode, or vehicle history, the car price APIs guide compares APIs that sell that data.

### Can an AI agent call it?

Yes. The MCP tool score_deal takes the same arguments as POST /api/score. The MCP server is Streamable HTTP at https://cardealscore.com/api/mcp with OAuth sign-in or an API key. Setup steps for each client are at /agents.

### What does the API not do?

It does not return listing rows, VIN specs, or vehicle history reports. It does not fetch Facebook Marketplace or Craigslist URLs, so send the fields instead. Comps are US dealer listings, so a private-party price is judged against dealer prices for comparable cars.

## 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:

| Field | Type | Note |
| --- | --- | --- |
| `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. |

Response:

| Field | Type | Note |
| --- | --- | --- |
| `grade` | string \| null | Great, Good, Fair, High, or Overpriced. Null when coverage is cannot_score. |
| `score` | number \| null | 0 to 100. Each grade has its own range, so the score always matches the grade. 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` comes from rubric `score_v2`. Each grade has its own score range: Great 90 to 100, Good 75 to 89, Fair 60 to 74, High 40 to 59, Overpriced 0 to 39. Inside a range, a lower price scores higher, and only a price 20% or more under expected scores 100. `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: https://cardealscore.com/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 (https://cardealscore.com/try) 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: https://cardealscore.com/pricing

## Request example

Example output, illustrative numbers. [Score a real listing](https://cardealscore.com/try). Create a key, then POST the car. `Authorization: Bearer YOUR_KEY` is accepted on the same route. Replace `YOUR_KEY` with a key from https://cardealscore.com/keys.

```bash
curl -X POST https://cardealscore.com/api/score \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_KEY" \
  -d '{"year":2019,"make":"Example","model":"Sedan","asking_price":20000,"mileage":40000}'
```

The same arguments as a tool call:

```
score_deal({
  "year": 2019,
  "make": "Example",
  "model": "Sedan",
  "asking_price": 20000,
  "mileage": 40000
})
```

## Example output

Example output, illustrative numbers. [Score a real listing](https://cardealscore.com/try). A generic 2019 Example Sedan listed at $20,000 with 40,000 miles. The ask is 9% under the expected $22,000 (band $20,000 to $24,000). score_v2 grades that delta_pct Good. The score is 87. comps_count is 20. data_source is example. A live score returns live, mock, or error. These numbers are made up. Text fields such as `comps_summary`, `brief`, and `risks` are omitted here. This example does not count against the meter.

```json
{
  "grade": "Good",
  "score": 87,
  "expected_price": 22000,
  "expected_price_low": 20000,
  "expected_price_high": 24000,
  "delta_pct": -0.09,
  "confidence": 0.8,
  "coverage": "scored",
  "rubric_version": "score_v2",
  "data_source": "example",
  "vehicle": {
    "year": 2019,
    "make": "Example",
    "model": "Sedan"
  },
  "comps_count": 20
}
```

Comps on a live score are US dealer listings, so a private-party price is judged against dealer prices for comparable cars. 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](https://cardealscore.com/integrations/cursor), [VS Code](https://cardealscore.com/integrations/vs-code), [Claude Code](https://cardealscore.com/integrations/claude-code), [Claude Desktop](https://cardealscore.com/integrations/claude-desktop), [Codex](https://cardealscore.com/integrations/codex), [ChatGPT](https://cardealscore.com/integrations/chatgpt), [n8n](https://cardealscore.com/integrations/n8n). The hub with every config is https://cardealscore.com/agents.

## Compare car price APIs

Need raw listings, VIN decode, or history reports instead of a grade? [Car price and deal APIs for AI agents](https://cardealscore.com/guides/car-pricing-apis-for-ai-agents) compares six APIs on what they return, MCP, auth, and free tier.

How does a DealScore grade relate to a KBB value or a CarGurus Deal Rating? [DealScore grade vs KBB value vs CarGurus Deal Rating](https://cardealscore.com/guides/deal-score-vs-kbb-vs-cargurus) lists what each measures and how an agent gets it, from each company's own pages.

## 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: https://cardealscore.com/docs/api

Get a free API key: https://cardealscore.com/login?next=%2Fkeys
