Download OpenAPI specification:Download
GET /api/data/v1/capabilities
Read-only discovery costs no credits and has a separate 30 requests/minute limit.
An API key is not required for eligible requests. First call GET /api/data/v1/capabilities without Authorization. If the returned operation specifies bearer_required: false, submit that operation without an Authorization header. Otherwise, a valid Bearer API key is required. Access remains subject to availability and usage limits.
Requests without a Bearer API key receive generic requirements unless
the server verifies their current eligibility. A valid Bearer API key
returns caller-specific eligible VIN Insights operations and limits.
The server determines eligibility; do not claim a client identity in a
header. Follow each returned operation's bearer_required and
authorization_header instructions and limits. Do not invent a token
when instructed to omit Authorization. If no operations are available,
report the access requirement instead of attempting a lookup.
An invalid supplied credential is rejected. Availability is checked again
when executing an operation; discovery does not reserve credits or quota.
Responses are caller-specific and must not be cached or shared.
Authentication: anonymous discovery or Bearer API key. Follow the current capabilities response for each available operation's authentication requirements.
Content type: application/json. Cache-Control: private, no-store.
Download the combined OpenAPI specification for the response schema.
GET /api/data/v1/vin-insights?vin=SAJWA6ATXH8K41808&mileage=42343&zip=02116Use GET for a single VIN market-value lookup, including clients that cannot send POST. Supply vin and optionally mileage and zip in the URL, without a request body. GET always requests market_value only. Other parameters, repeated parameters, batch input, debug and test mode are rejected. Use POST for other products and batches.
An API key is not required for eligible requests. First call GET /api/data/v1/capabilities without Authorization and follow the returned GET operation. If bearer_required is false, omit Authorization; otherwise supply a valid Bearer API key. Eligibility, entitlements and rate limits are checked on every call. Search crawlers are not granted lookup access.
Responses use the same results format as POST, with an additional billing_request_id. Identical normalized VIN, mileage and ZIP inputs for the same account and key reuse one billing identity within each fixed UTC minute. Each HTTP call has its own request_id and counts toward the rate limit. A lookup in a later minute may incur a new charge, even immediately across a minute boundary. Omitted optional inputs differ from supplied inputs. Matching billing outcomes reuse the existing debit; changed status or cost within the retry window returns 503 without a second debit. Valuations may be recomputed on retry.
Responses are private, no-store and noindex. Do not cache or prefetch valuation URLs. HEAD is not supported and never executes or bills a valuation.
Query parameters: vin (required); mileage and zip (optional). Response: application/json.
Get market value, depreciation and/or remaining lifespan data for specific VINs. A VIN can represent more than one possible vehicle configuration when the encoded VIN data does not uniquely identify details such as body style, trim, or engine. If those differences change a requested product result, the response includes a separate match for each relevant configuration. Fields shared by all matches appear in vehicle; distinguishing fields appear in each match's vehicle_variant.
An API key is not required for eligible requests. First call GET /api/data/v1/capabilities without Authorization. If the returned operation specifies bearer_required: false, submit that operation without an Authorization header. Otherwise, a valid Bearer API key is required. Access remains subject to availability and usage limits.
Authentication: omit Authorization for eligible requests only when the capabilities response permits it; otherwise supply a Bearer API key.
required | Array of objects (VinInsightsVehicleRequest) [ 1 .. 50 ] items |
| testMode | boolean Default: false When true, the bearer key must include data:vin_insights:test. The scope alone does not activate test mode when this field is false or omitted. |
| products | Array of strings non-empty Items Enum: "market_value" "depreciation" "remaining_lifespan" |
{- "vehicles": [
- {
- "vin": "1HGCM82633A004352",
- "mileage": 85000,
- "zip": "02134"
}
], - "products": [
- "market_value",
- "depreciation",
- "remaining_lifespan"
]
}{- "request_id": "7cc2b425-63a4-4f7a-9f46-0bd0ee5d6786",
- "testMode": true,
- "results": [
- {
- "vin": "19XFB2F59EE013816",
- "vehicle": {
- "year": 2014,
- "make": "Honda",
- "model": "Civic",
- "trim": "LX",
- "body_type": "Sedan",
- "fuel_type": "Gasoline",
- "drive_type": "FWD"
}, - "matches": [
- {
- "market_value": {
- "status": "success",
- "data": {
- "value": 11235,
- "currency": "USD",
- "estimated_mileage": 85000
}
}, - "depreciation": {
- "status": "success",
- "data": {
- "three_years": 2505,
- "five_years": 3994,
- "three_year_depreciation_rate": 0.2230012468,
- "five_year_depreciation_rate": 0.3554969102,
- "currency": "USD"
}
}, - "remaining_lifespan": {
- "status": "success",
- "data": {
- "years": 7.7,
- "miles": 169811
}
}
}
]
}, - {
- "vin": "BADVIN",
- "error": {
- "code": "invalid_vin",
- "message": "Invalid VIN"
}
}
]
}Request a document for one VIN. A successful result may be either a Window
Sticker or a Build Sheet, identified by result.document_type.
This operation is asynchronous because the document may not be ready immediately:
lookup_id or status_url from the 202 response.Retry-After when it is returned.success, not_available, or failed.Processing may take several seconds. Continue polling until a terminal status is returned; do not assume the document is ready when this request returns.
Requires data:window_sticker and enabled Window Sticker access. Test mode requires
data:window_sticker:test and uses the same live fulfillment flow as a standard
request. By default, test mode is restricted to a small set of approved VINs.
Accounts approved for unrestricted test use may submit any otherwise valid VIN.
Other test-mode VINs return 400 test_vin_not_allowed for restricted accounts.
By default, an account may create 10 Window Sticker lookup requests per minute
across all of its API keys. This limit can be adjusted per account based on expected
usage patterns. Status requests do not count toward this limit. Unavailable service
returns 503 temporarily_unavailable; disabled account access returns 403 forbidden_window_sticker. A request remains readable by the account that created it.
| vin required | string^[A-HJ-NPR-Za-hj-npr-z0-9]{17}$ A 17-character VIN, normalized to uppercase. |
| testMode | boolean Default: false Requires |
| devServerAffinity | boolean Default: false Development-only diagnostic option. When true on a supported development server, all processing attempts for the lookup are restricted to that receiving server. The request is rejected when the receiving development worker cannot provide that guarantee. |
{- "vin": "1FTEW1E50JKF86414",
- "testMode": false,
- "devServerAffinity": false
}{- "request_id": "86db5f02-8b32-4609-9710-c84242e17576",
- "lookup_id": "wslk_6f1a2b3c4d5e6789a123456789abcdef",
- "status": "queued",
- "vin": "1FTEW1E50JKF86414",
- "status_url": "/api/data/v1/window-sticker/lookups/wslk_6f1a2b3c4d5e6789a123456789abcdef",
- "created_at": "2026-08-21T16:00:00Z"
}Keep the lookup_id or status_url returned when the lookup is created. Wait at least two seconds between status requests. If a response includes Retry-After, wait the specified number of seconds before trying again. queued and running mean processing is not finished. Continue until the status is success, not_available, or failed. A success response includes result.document_url for the PDF. not_available means no Window Sticker or Build Sheet was found. failed means processing did not complete; see the returned error for more information. The JSON request_id remains the creation request UUID; each HTTP response has its own X-Request-ID. Each status request only returns the current state of that original request and never submits another Window Sticker request. A request is readable only by the account that created it.
| lookup_id required | string (WindowStickerLookupId) ^wslk_[a-f0-9]{32}$ |
{- "request_id": "86db5f02-8b32-4609-9710-c84242e17576",
- "lookup_id": "wslk_6f1a2b3c4d5e6789a123456789abcdef",
- "status": "queued",
- "vin": "1FTEW1E50JKF86414",
- "status_url": "/api/data/v1/window-sticker/lookups/wslk_6f1a2b3c4d5e6789a123456789abcdef",
- "created_at": "2026-08-21T16:00:00Z"
}