DealScore Quote Check API
The Quote Check API from DealScore — 1 operation(s) for quote check.
The Quote Check API from DealScore — 1 operation(s) for quote check.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/cardealscore-com:cardealscore-com-quote-check-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: DealScore Quote Check API
version: 1.0.0
summary: Score a used-car asking price, explain a grade, and check a dealer quote.
servers:
- url: https://cardealscore.com
tags:
- name: Quote Check
paths:
/api/quote-check:
post:
operationId: checkQuote
summary: Check a dealer quote
description: Grade a car dealer's quote from A to F against its own MSRP, invoice, and fees. Send paste (the quote text), or selling_price and msrp, or both. A typed field wins over the same number in paste, and typed lines add to pasted lines. With no credential you get 1 free check per browser, marked by the ds_quote_free cookie. A session, API key, or OAuth token gives 3 checks per user per UTC month, shared across keys. A presented key or bearer that does not resolve is a 401. Neither the quote text nor the full VIN is stored.
security:
- {}
- apiKey: []
- bearer: []
requestBody:
required: true
content:
application/json:
schema:
$schema: https://json-schema.org/draft/2020-12/schema
type: object
properties:
paste:
description: The dealer quote as text. Used for this check only and never stored.
type: string
maxLength: 20000
selling_price:
description: Selling price in dollars.
type: number
exclusiveMinimum: 0
maximum: 10000000
msrp:
description: MSRP in dollars.
type: number
exclusiveMinimum: 0
maximum: 10000000
invoice:
description: Dealer invoice in dollars.
type: number
exclusiveMinimum: 0
maximum: 10000000
year:
type: integer
minimum: 1980
maximum: 2027
make:
type: string
minLength: 1
maxLength: 60
model:
type: string
minLength: 1
maxLength: 60
trim:
type: string
minLength: 1
maxLength: 60
vin:
type: string
pattern: ^[A-HJ-NPR-Z0-9]{17}$
lines:
description: Fees and add-ons in dollars. Set kind when known. Otherwise the label decides.
maxItems: 40
type: array
items:
type: object
properties:
label:
type: string
minLength: 1
maxLength: 80
amount:
type: number
minimum: 0
maximum: 10000000
kind:
type: string
enum:
- doc_fee
- dealer_addon
- gap
- service_contract
- market_adjustment
required:
- label
- amount
additionalProperties: false
additionalProperties: false
responses:
'200':
description: Graded quote.
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteReport'
headers:
Set-Cookie:
description: ds_quote_free=1 on a graded check with no credential.
schema:
type: string
'400':
description: Invalid JSON body, a body that failed validation, or a quote with no msrp or selling_price after the paste and the fields are merged.
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/InvalidJson'
- $ref: '#/components/schemas/ValidationFailed'
- $ref: '#/components/schemas/QuoteIncomplete'
'401':
description: A presented API key or bearer token did not resolve.
content:
application/json:
schema:
$ref: '#/components/schemas/Unauthorized'
'429':
description: The free check or this month's checks are used.
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteQuotaExceeded'
'503':
description: Quote checks cannot be recorded right now.
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteCheckUnavailable'
tags:
- Quote Check
components:
schemas:
InvalidJson:
type: object
additionalProperties: false
required:
- error
properties:
error:
const: Invalid JSON body
ValidationFailed:
type: object
additionalProperties: false
required:
- error
- details
properties:
error:
const: Validation failed
details:
type: object
additionalProperties: false
required:
- formErrors
- fieldErrors
properties:
formErrors:
type: array
items:
type: string
fieldErrors:
type: object
additionalProperties:
type: array
items:
type: string
Unauthorized:
type: object
additionalProperties: false
required:
- error
- message
- get_key_url
- docs_url
properties:
error:
const: Unauthorized
message:
const: 'Provide a valid x-api-key header or Authorization: Bearer <key>'
get_key_url:
const: https://cardealscore.com/login?next=%2Fkeys&from=api_401
docs_url:
const: https://cardealscore.com/docs/api#get-a-key
QuoteQuotaExceeded:
type: object
additionalProperties: false
required:
- error
- limit
- resets_at
properties:
error:
const: quote_quota_exceeded
limit:
type: integer
resets_at:
type:
- string
- 'null'
format: date-time
description: Start of the next UTC month for a signed-in caller. null for the free check.
QuoteCheckUnavailable:
type: object
additionalProperties: false
required:
- error
properties:
error:
const: Quote check unavailable
QuoteReport:
type: object
additionalProperties: false
required:
- grade
- price_band
- flags
- pushback
- vehicle
properties:
grade:
enum:
- A
- B
- C
- D
- E
- F
price_band:
type: object
additionalProperties: false
required:
- position
- selling_price
- msrp
- invoice
- vs_msrp
- vs_invoice
- summary
properties:
position:
enum:
- at_or_below_invoice
- below_msrp
- at_msrp
- above_msrp
selling_price:
type: number
msrp:
type: number
invoice:
type:
- number
- 'null'
vs_msrp:
type: number
description: selling_price minus msrp. Negative is under MSRP.
vs_invoice:
type:
- number
- 'null'
summary:
type: string
flags:
type: array
items:
type: object
additionalProperties: false
required:
- code
- line
- amount
- severity
- ask
properties:
code:
type: string
line:
type: string
amount:
type: number
severity:
enum:
- flag
- red
ask:
type: string
pushback:
type: array
maxItems: 5
items:
type: string
description: Sentences to send the dealer. Empty when nothing is flagged.
vehicle:
type: object
additionalProperties: false
required:
- year
- make
- model
- trim
- vin_prefix
properties:
year:
type:
- integer
- 'null'
make:
type:
- string
- 'null'
model:
type:
- string
- 'null'
trim:
type:
- string
- 'null'
vin_prefix:
type:
- string
- 'null'
pattern: ^[A-HJ-NPR-Z0-9]{9}$
description: The first 9 characters of the VIN. Never the full VIN.
QuoteIncomplete:
type: object
additionalProperties: false
required:
- error
- missing
properties:
error:
const: quote_incomplete
missing:
type: array
minItems: 1
items:
enum:
- msrp
- selling_price
securitySchemes:
apiKey:
type: apiKey
in: header
name: x-api-key
description: DealScore API key.
bearer:
type: http
scheme: bearer
description: API key in the Authorization header.
externalDocs:
description: API reference
url: https://cardealscore.com/docs/api