Data & Tools · API Access

Build on the freshest
automotive data.

Real-time vehicle, listing, and pricing data through a clean REST API. Build marketplaces, valuation tools, and analytics on the freshest data in the industry.

99.9% SLA · public status page OpenAPI 3.0 · code-gen ready Sandbox + production
GET /v2/vehicles/:vin/pricing
# Look up any 17-character VIN — full vehicle record + price band
curl -X GET "https://api.vinassessment.com/v2/vehicles/1HGBH41JXMN109186/pricing" \
     -H "Authorization: Bearer $VINASSESSMENT_API_KEY" \
     -H "Accept: application/json"

# → 200 OK
{
  "vin": "1HGBH41JXMN109186",
  "year": 2023,
  "make": "Honda",
  "model": "CR-V",
  "trim": "EX",
  "pricing": {
    "market_low": 28400, "median": 31750, "market_high": 35900,
    "rank": 3, "competitor_count": 14, "radius_miles": 100
  },
  "data_as_of": "2026-04-29T14:22:07Z"
}
import os
import requests

resp = requests.get(
    "https://api.vinassessment.com/v2/vehicles/1HGBH41JXMN109186/pricing",
    headers={"Authorization": f"Bearer {os.environ['VINASSESSMENT_API_KEY']}"},
    timeout=10,
)
resp.raise_for_status()

vehicle = resp.json()
print(f"{vehicle['year']} {vehicle['make']} {vehicle['model']}")
print(f"Price band: ${vehicle['pricing']['market_low']:,} – ${vehicle['pricing']['market_high']:,}")

# → 2023 Honda CR-V
# → Price band: $28,400 – $35,900
const res = await fetch(
  "https://api.vinassessment.com/v2/vehicles/1HGBH41JXMN109186/pricing",
  { headers: { Authorization: `Bearer ${process.env.VINASSESSMENT_API_KEY}` } }
);

if (!res.ok) throw new Error(`HTTP ${res.status}`);
const vehicle = await res.json();

console.log(`${vehicle.year} ${vehicle.make} ${vehicle.model}`);
console.log(`Median price: $${vehicle.pricing.median.toLocaleString()}`);

What It Does

The same data that powers our dealer dashboard. Through a clean REST API.

No second-tier feed. No stale exports. The endpoints below are the same ones the VinAssessment app calls — every minute, every dealer.

Live data

Every VIN query returns pricing data updated within the last 15 minutes — not a daily batch. Competitor listings, market price bands, and rank are all computed from the same dataset powering the dealer dashboard. 2M new listings ingested every day across 10 major platforms and 50,000+ dealer websites.

2M+ new listings indexed every day

Clean REST

OpenAPI 3.0 spec, versioned endpoints (v1, v2), and consistent JSON response schemas. Every field is documented — including nullable fields, enum values, and deprecation notices. Rate limits return a standard retry-after header, not a silent 429. Breaking changes ship with 90-day advance notice and a parallel version window.

OpenAPI 3.0 downloadable, code-gen ready

Built for production

Sandbox environment for integration testing before you go live. Webhook events for price changes and new competitor listings — no polling required. Batch endpoints for processing up to 500 VINs per request. 99.9% uptime SLA with a public status page. API key auth with per-key rate limits and revocation.

99.9% SLA-backed uptime, monthly

Code Snippets

Three endpoints. Three languages. Same answer.

Copy any of these into a fresh script and you've got real automotive data in your terminal in under a minute. Replace $VINASSESSMENT_API_KEY with your sandbox key — no card required.

VIN pricing lookup

Resolve a 17-character VIN into year/make/model/trim, plus the live local-market price band, rank, and competitor count.

GET /v2/vehicles/:vin/pricing
curl -X GET "https://api.vinassessment.com/v2/vehicles/1HGBH41JXMN109186/pricing" \
     -H "Authorization: Bearer $VINASSESSMENT_API_KEY" \
     -H "Accept: application/json"
import os, requests

resp = requests.get(
    "https://api.vinassessment.com/v2/vehicles/1HGBH41JXMN109186/pricing",
    headers={"Authorization": f"Bearer {os.environ['VINASSESSMENT_API_KEY']}"},
)
print(resp.json()["pricing"]["median"])
const res = await fetch(
  "https://api.vinassessment.com/v2/vehicles/1HGBH41JXMN109186/pricing",
  { headers: { Authorization: `Bearer ${process.env.VINASSESSMENT_API_KEY}` } }
);
const { pricing } = await res.json();
console.log(pricing.median);

Batch pricing (up to 500 VINs)

Reprice an entire inventory in a single round-trip. Returns a price band, rank, and competitor count for every VIN in the batch.

POST /v2/vehicles/pricing/batch
curl -X POST "https://api.vinassessment.com/v2/vehicles/pricing/batch" \
     -H "Authorization: Bearer $VINASSESSMENT_API_KEY" \
     -H "Content-Type: application/json" \
     -d '{"vins":["1HGBH41JXMN109186","1FTFW1ET4DFC10312"],"radius_miles":100}'
import os, requests

VINS = ["1HGBH41JXMN109186", "1FTFW1ET4DFC10312", "1G1BE5SM0G7121456"]
resp = requests.post(
    "https://api.vinassessment.com/v2/vehicles/pricing/batch",
    headers={"Authorization": f"Bearer {os.environ['VINASSESSMENT_API_KEY']}"},
    json={"vins": VINS, "radius_miles": 100},
)
for r in resp.json()["results"]:
    print(r["vin"], r["pricing"]["median"])
const res = await fetch(
  "https://api.vinassessment.com/v2/vehicles/pricing/batch",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.VINASSESSMENT_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ vins: VINS, radiusMiles: 100 }),
  }
);

Competitor listings for a VIN

Pull every dealer selling a similar vehicle within the radius — name, price, distance, days on lot. Power a marketplace, repricing tool, or AI valuation UI.

GET /v2/vehicles/:vin/competitors
curl -G "https://api.vinassessment.com/v2/vehicles/1HGBH41JXMN109186/competitors" \
     -H "Authorization: Bearer $VINASSESSMENT_API_KEY" \
     --data-urlencode "radius_miles=100" \
     --data-urlencode "trim_match=exact"
resp = requests.get(
    "https://api.vinassessment.com/v2/vehicles/1HGBH41JXMN109186/competitors",
    headers={"Authorization": f"Bearer {os.environ['VINASSESSMENT_API_KEY']}"},
    params={"radius_miles": 100, "trim_match": "exact"},
)
for c in resp.json()["competitors"]:
    print(f"{c['dealer_name']}: ${c['price']:,} ({c['distance_miles']} mi)")
const res = await fetch(
  "https://api.vinassessment.com/v2/vehicles/1HGBH41JXMN109186/competitors?radius_miles=100",
  { headers: { Authorization: `Bearer ${process.env.VINASSESSMENT_API_KEY}` } }
);
const { competitors } = await res.json();
competitors.forEach(c => console.log(c.dealer_name, c.price));

Rate limits

Straightforward rate limits. No silent drops.

Three rate tiers. Published in plain numbers — no "fair use" language to interpret. Bursts are absorbed; sustained traffic is governed cleanly with Retry-After.

Rate tier Req / min Req / day Batch size Sandbox SLA
Standard For early-stage products and integration testing. Full access to all endpoints — same schema, same data — at lower throughput. 60 10,000 50 VINs Included 99.5%
Volume For production applications with real user traffic. Batch endpoints at full capacity, webhook access, and 99.9% uptime SLA. 300 100,000 500 VINs Included 99.9%
Enterprise For teams with high-volume or mission-critical requirements — marketplaces, valuation platforms, and data pipelines. Dedicated infrastructure, custom SLAs, and a named account contact. Negotiated Negotiated Negotiated Dedicated Negotiated
Rate-limited requests return HTTP 429 with a Retry-After header in seconds. No silent failures, no dropped data — our SDKs back off automatically.

Walkthrough

From signup to first webhook in five frames.

A guided look at the developer flow — generate a key, fire a request, run the sandbox, wire a webhook, and watch your rate-limit usage in real time.

Authentication setup

Generate a key, set per-key limits.

Authentication setup — generate an API key, set per-key rate limit overrides, and view real-time key usage from your developer dashboard.

Endpoint reference

Every endpoint, fully documented.

Endpoint reference — every endpoint documented with request parameters, response schema, nullable fields, and example JSON. Versioned and searchable.

Sandbox environment

Test against real data, no billing.

Sandbox environment — test any endpoint against real vehicle data without affecting production limits or triggering billing. Sandbox responses match production schemas exactly.

Webhook configuration

Get pinged when prices move.

Webhook configuration — subscribe to price change and new competitor events per VIN or per inventory batch. Retry logic and delivery receipts built in.

Rate-limit monitoring

See every 429, by key and endpoint.

Rate limit monitoring — see requests per minute, daily usage against quota, and 429 events by key and endpoint. Alerts configurable by threshold.

What Makes It Different

Same data as the dealer dashboard — not a second-tier feed.

Five things you'll notice in the first week — that you won't find together on any other automotive data API.

The same dataset that powers every dealer's dashboard.

The API queries the same ClickHouse dataset that powers every dealer's pricing dashboard — the same competitor listings, the same price bands, the same rank computation. There is no separate "API data" that lags or differs from what the UI shows.

OpenAPI 3.0 spec, always current.

Not a PDF last updated in 2024. Schema changes ship with a deprecation notice, a parallel version window, and a changelog. You can generate your own client in TypeScript, Python, Go, Rust, or Java straight from the spec.

Honest rate limits with

Retry-After .

Limits are enforced with a standard retry-after header and HTTP 429 — not silent drops, not 200 responses with empty data. You always know when you've hit a limit and exactly how long to wait.

Batch endpoints, not just single-VIN lookups.

Batch endpoints process up to 500 VINs per request. For dealers and marketplaces repricing large inventories, polling one VIN at a time is not a viable pattern. Batch was designed first, not bolted on.

Webhook events for price changes & new competitors.

Your application reacts to the market instead of polling for it. Events include the changed field, the old value, the new value, and a timestamp accurate to the minute. HMAC-SHA256 signed payloads, retries with exponential backoff, deliverability dashboard.

Use Cases

Three things developers build on this API.

Real workflows, anonymised — but the volumes and outcomes are the actual numbers our partners ship in production.

Marketplace pricing engine

Power a marketplace with live pricing positions.

Query any VIN for a real-time price band, competitor count, and market rank — within the buyer's or seller's radius. Batch-price an entire inventory of 350+ vehicles in a single request. Update listing prices automatically when the market shifts, based on webhook events rather than nightly batch jobs.

+18% time-on-listing after rolling the widget out — buyers spend longer when they can see the local market in one pane.
Valuation tool

Build a valuation tool backed by real competitor data.

Most valuation APIs return a number from a model. VinAssessment returns the underlying competitor listings — so your AI can show its work. Build the "why" into your valuation UI: not just "$31,500" but "3rd of 14 CR-V EX listings within 100 miles, priced between $28,400 and $35,900."

~3M valuations served per month on a single Volume-tier key — average response under 90 ms.
Internal repricing

Automate repricing across a multi-rooftop dealer group.

12 rooftops repricing 2,400 vehicles. Pull the current pricing position for every VIN across all rooftops in a single batch request. Trigger a webhook on any vehicle that drops out of the top 3 in its radius. Push the suggested reprice back into your DMS via your own internal API.

RMSE down 23% vs. their previous third-party pricing API — same schema for training and inference.

The Numbers

Numbers from the live API, this month.

2M+
New listings ingested every day across 10 platforms and 50,000+ dealer sites.
<100 ms
Median single-VIN pricing response time, measured at the edge.
99.9%
Uptime at the Volume and Enterprise rate tiers, with auto-issued service credits.

Measured in production. Verifiable on the public status page.

FAQ

Frequently asked questions.

If your question isn't here, drop us a note — a real engineer on the API team will reply, usually inside two hours during US business hours.

What endpoints are available?

The v2 API covers five resource families — read the full reference in the OpenAPI 3.0 spec before signing up, not after:

  • Vehicle pricing position — single-VIN price band, rank, competitor count, radius. ( GET /v2/vehicles/:vin/pricing )
  • Batch pricing — up to 500 VINs per request. ( POST /v2/vehicles/pricing/batch )
  • Competitor listings — full array with dealer name, price, distance, and days on lot. ( GET /v2/vehicles/:vin/competitors )
  • Market stats — aggregate price stats by year/make/model/trim and radius. ( GET /v2/pricing/band )
  • Webhooks — subscribe to price-change and new-competitor events. ( POST/GET/DELETE /v2/webhooks )
How does authentication work?

API key authentication, passed as a Bearer token in the Authorization header. Keys are generated per project from your developer dashboard. Each key has its own rate limit, which you can adjust within your tier's ceiling.

Keys can be revoked instantly — no waiting for a support ticket. OAuth 2.0 for multi-tenant applications is available at the Enterprise rate tier.

What is the uptime SLA, and is there a status page?

Standard: 99.5% monthly uptime. Volume and Enterprise: 99.9% monthly uptime. The status page is public and shows real-time API health, historical uptime, and incident reports — no login required.

Status URL: api-status.vinassessment.com. SLA credits are applied automatically if monthly uptime falls below the guaranteed level — you don't have to ask.

Do you support webhooks?

Yes — webhook events are available at the Volume and Enterprise rate tiers. You subscribe to events per VIN or per inventory batch. Two event types: price_change (fires when a competitor within the radius changes their asking price by more than a configurable threshold) and new_competitor (fires when a new listing enters the radius).

Events are delivered via HTTPS POST to your endpoint with HMAC-SHA256 signature verification. Failed deliveries retry with exponential backoff for up to 24 hours. A delivery receipt log is available in the developer dashboard.

Is there a sandbox environment?

Yes. Every rate tier includes sandbox access at sandbox.vinassessment.com. The sandbox runs against the same real vehicle dataset as production — it is not synthetic data or a subset. Sandbox requests do not count against your production rate limits or daily quota. Sandbox keys are evaluation-only: they carry no production or model-training rights.

Sandbox API keys are separate from production keys and are labeled in the developer dashboard. Use the sandbox to test edge cases: VINs with no competitors in range, batch requests at the maximum size limit, and 429 Retry-After behavior at artificially lowered rate limits.

How is the API priced?

API access is provisioned by our team. Dealer plans include programmatic access; volume and non-dealer use are licensed separately. See /pricing for how the two tracks differ.

API access is licensed for live, per-request use inside your own product. It does not carry bulk-export, warehousing, redistribution, or model-training rights — those need a data licence, and if bulk is what you actually need, a licence is usually the cheaper path.

If you're evaluating the API as a build-vs-buy decision for a dealer group's internal tooling, contact us — we offer a scoped proof-of-concept engagement before any contract is signed.

Start building today.

Tell us what you're building — we provision keys the same day. Read the OpenAPI 3.0 spec, run the curl example, and decide if it's right for what you're building before you write us a line.