Premium report API · asynchronous workflow
Vehicle history reports by VIN
Start with one 17-character VIN. The API creates a durable report owned by your Vehicles.dev account, gives you a stable report ID, and lets you poll until the provider-backed result is ready. A UUID idempotency key makes retries safe when a client loses the first response.
Coverage is record-dependent. A completed report returns the provider data available for that VIN; it is not a promise that every title, accident, odometer, or ownership category exists for every vehicle.
Pricing
- Starter
- Not available
- Pro
- $1.99per completed report
- Scale
- $0.99per completed report
Vehicle History Reports are available on Pro and Scale. Starter accounts cannot order reports. Billing settles only after the canonical result is stored. Invalid or unsupported VINs, failed generations, and action_required outcomes cost $0.
Create, poll, retrieve
Create the report once
Send
POST /v1/vehicles/history-reportswith the VIN and a UUIDIdempotency-Key. The key needsreports:orderscope. A202response includesLocationandRetry-After. If that durable report is later visible with statussubmittingafter an uncertain create response, callPOST /v1/vehicles/history-reports/{id}/retrywith the same order scope. The server preserves the original provider idempotency key.Poll at the server’s cadence
Call
GET /v1/vehicles/history-reports/{id}withreports:read. RespectRetry-Afterwhile status isqueuedorprocessing; do not hammer the provider.Fetch, view, or print the stored result
Once status is
completedandhasResultis true, callGET /v1/vehicles/history-reports/{id}/result. A result requested too early returns a retryable409 report_not_readyrather than an empty report. The branded dashboard view presents the same account-owned result for viewing or printing; there is no separate file-artifact endpoint.
curl -i https://api.vehicles.dev/v1/vehicles/history-reports \
-X POST \
-H "Authorization: Bearer $VEHICLES_API_KEY" \
-H "Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000" \
-H "Content-Type: application/json" \
-d '{"vin":"1FTFW3L57TKD09376"}'HTTP/2 202
location: /v1/vehicles/history-reports/7ae77ee8-94af-4c25-85f1-45a2ab1c6475
retry-after: 3
{
"id": "7ae77ee8-94af-4c25-85f1-45a2ab1c6475",
"vin": "1FTFW3L57TKD09376",
"status": "queued",
"hasResult": false,
"retryAfterSeconds": 3,
"replayed": false,
"createdAt": "2026-08-16T12:00:00.000Z",
"updatedAt": "2026-08-16T12:00:00.000Z"
}What the result can contain
The result endpoint returns one canonical provider object inside report. Its exact keys vary by VIN and provider coverage, but the report viewer recognizes these groups when they are returned:
Vehicle & equipment
Decoded identity, specifications, installed equipment, options, and feature details.
Ownership
Available owner sequence, registration, location, and use records.
Title & brands
Title events and provider-reported brands such as rebuilt or flood.
Odometer & mileage
Reported mileage events and possible odometer inconsistency signals.
Damage & accidents
Reported collision, damage, severity, and event details.
Theft
Available theft records and recovery status.
Junk, salvage & insurance
Junk, salvage, insurance, and total-loss records when available.
Safety recalls
Provider-returned safety recall records.
Sales & auction history
Sale, auction, and listing events, sometimes including price or media.
Market analysis
Available market, valuation, and depreciation context.
A missing group means coverage was unavailable, not that the vehicle is clean. A present but empty group means no records were returned in that category. Integrations should preserve unrecognized provider fields because new fields can appear without notice.
Vehicle history report guides by model
These pages pair the VIN-specific workflow with truthful model-level asking-price context from our committed marketplace snapshot. The aggregate never substitutes for the report.
- Ford F-150 vehicle history report50,446 listings · $36,115 median asking price · 1978–2026 observed model years
- RAM 1500 vehicle history report46,524 listings · $39,826 median asking price · 2011–2027 observed model years
- GMC Sierra 1500 vehicle history report33,716 listings · $47,145 median asking price · 1970–2026 observed model years
- Jeep Grand Cherokee vehicle history report26,809 listings · $27,076 median asking price · 1993–2027 observed model years
- Honda Civic vehicle history report21,751 listings · $22,948 median asking price · 1976–2026 observed model years
Frequently asked questions
Does every VIN have the same history coverage?
No. Report coverage depends on the records available for that VIN. A completed result may contain title, accident, odometer, or ownership events when the provider has them, but the integration must inspect the returned report instead of promising that every category exists.
How does the asynchronous API workflow work?
Create the account-owned job with POST /v1/vehicles/history-reports, follow the explicit POST /v1/vehicles/history-reports/{id}/retry path only if the durable job remains in submitting after an uncertain create response, follow the Retry-After header while polling GET /v1/vehicles/history-reports/{id}, then fetch GET /v1/vehicles/history-reports/{id}/result after status becomes completed.
How much does a vehicle history report cost?
Pro is $1.99 per completed report. Scale is $0.99 per completed report. Invalid or unsupported VINs, failed generations, and action-required outcomes cost $0.
How do I prevent duplicate report orders?
Send a UUID Idempotency-Key when creating the report. Repeating the same key and VIN returns the same account-owned report; reusing that key for a different VIN is rejected rather than ordering and charging twice.
Can a Starter account order a vehicle history report?
No. Starter accounts cannot order vehicle history reports. Upgrade to Pro or Scale before creating or retrying a report; existing report results remain account-owned.