No API key sent
The request carried no API key.
- What to do
- Send your key in the X-API-Key header.
- Retry
- No (retryable: false)
- Charged
- No
- Endpoints
- All endpoints
- Version 1 code
INVALID_API_KEY(HTTP 401)
Last updated: 6 November 2026
Every error the DealerPricing developer API sends has a code you can match on, a plain message, and the same request id as the X-Request-Id header. Each error also says whose side the problem is on (type), whether the same request can succeed later (retryable), whether you were charged (charged, always false unless something went wrong with a refund), and links back to this page (doc_url). Failed requests are never charged.
API version 2 from 1 February 2027: new error codes and corrected responses
We are replacing codes that had several causes with codes that have one, and correcting response shapes. Accounts created from 5 November 2026, and accounts that never had a live key, already get version 2. Accounts that had a live key keep version 1 until 1 February 2027, then move to version 2. Until 2 May 2027 (90 days after the switch) you can still ask for version 1; after that it stops. You can switch now: see how to choose.
YYYY-MM-DD (a moment in time stays a full timestamp). Each endpoint in the API reference lists what differs in version 1, and the OpenAPI file publishes both shapes.DP-Error-Codes: 2 on a request, or choose version 2 on the API version 2 card of your developer dashboard. You can switch back until 1 February 2027.Version 2 (the new codes). legacy_code carries the version 1 code until 2 May 2027.
{
"success": false,
"error": {
"code": "VALUATION_NOT_AVAILABLE",
"message": "We hold no valuation for this vehicle. ...",
"details": { "request_id": "req_...", "cost_pence": 0, "balance_pence": 984 },
"type": "not_available",
"retryable": false,
"charged": false,
"doc_url": "https://www.dealerpricing.co.uk/developer/errors#VALUATION_NOT_AVAILABLE",
"legacy_code": "VEHICLE_NOT_FOUND"
},
"meta": { "request_id": "req_...", "error_codes_version": 2 }
}Version 1 (the current codes). Nothing was removed or renamed; the extra fields were added, and next_code is the version 2 code the same request gets.
{
"success": false,
"error": {
"code": "VEHICLE_NOT_FOUND",
"message": "We hold no valuation for this vehicle. ...",
"details": { "request_id": "req_...", "cost_pence": 0, "balance_pence": 984 },
"type": "not_available",
"retryable": false,
"charged": false,
"doc_url": "https://www.dealerpricing.co.uk/developer/errors#VALUATION_NOT_AVAILABLE",
"next_code": "VALUATION_NOT_AVAILABLE"
},
"meta": { "request_id": "req_...", "error_codes_version": 1 }
}HTTP statuses: version 2 answers 403 (not 401) for a disabled account or an unverified email, 503 (not 502) when a data source's daily limit is reached, and 400 (not 404) on the market endpoints for a registration that cannot exist. Version 1 keeps the statuses it always sent.
DP-Error-Codes: 2 (new codes) or DP-Error-Codes: 1 (current codes). The header wins over the account setting.DP-Error-Codes response header, and meta.error_codes_version on errors.authenticationYour sideThe API key is missing, not recognised or revoked.
permissionYour sideThe key is recognised but this call is not allowed for the account or key.
invalid_requestYour sideSomething in the request needs changing before it can succeed.
billingYour sideThe account cannot pay for this call.
limitYour sideA limit on your key, package or account was reached. It resets on its own.
not_foundAbout the vehicleThe vehicle or request you named does not exist in the data we use.
not_availableAbout the vehicleThe vehicle is known, but we hold no data of this kind for it.
source_errorOur sideA data source we use failed or will not answer us for now. You were not charged.
internalOur sideSomething failed on our side. You were not charged.
No API key sent
The request carried no API key.
INVALID_API_KEY (HTTP 401)API key not recognised
The key is not one of ours, or is not in the right format (dp_live_ or dp_sandbox_ followed by 48 characters).
INVALID_API_KEY (HTTP 401), INVALID_API_KEY_FORMAT (HTTP 401)API key revoked
This key was revoked and no longer works.
API_KEY_DISABLED (HTTP 401)Developer account disabled
The developer account this key belongs to is disabled, so none of its keys work.
API_KEY_DISABLED (HTTP 401)Email not verified
Live keys work only once the account email address is verified. Sandbox keys work without it.
EMAIL_NOT_VERIFIED (HTTP 401)No sandbox for this endpoint
This endpoint has no sandbox data, so sandbox keys cannot call it.
Required field missing
A required field is missing. details.parameter names it.
MISSING_PARAMETER (HTTP 400)Field value not usable
A field has a value we cannot use, for example a callback_url that is not https. details.parameter names it when known.
INVALID_REQUEST (HTTP 400)Registration cannot exist
The registration is not 2 to 8 letters and digits, or the vehicle register refuses it as a registration that cannot exist.
INVALID_VRM (HTTP 400), INVALID_REQUEST (HTTP 400), VEHICLE_NOT_FOUND (HTTP 404)VIN cannot exist
The VIN is not 5 to 17 letters and digits without I, O or Q, or it was refused as a VIN that cannot exist. Service history needs all 17 characters.
INVALID_REQUEST (HTTP 400)Endpoint needs a registration
This endpoint looks vehicles up by registration only. details.vin_endpoints lists the endpoints that take a VIN.
INVALID_REQUEST (HTTP 400)Request id not valid
The service history request id in the URL is not a valid id.
INVALID_REQUEST (HTTP 400)Balance too low
Your balance plus any plan credit is below the price of this call. details.required_pence and details.balance_pence give the figures.
INSUFFICIENT_BALANCE (HTTP 402)Key rate limit reached
Too many calls on this key. details.window says which limit: second, minute or day.
RATE_LIMIT_EXCEEDED (HTTP 429)Sandbox daily limit reached
The account has used its 1,000 sandbox calls for the day, across all its sandbox keys.
RATE_LIMIT_EXCEEDED (HTTP 429)Package limit reached
Your package limit across all live keys on the account was reached.
PACKAGE_LIMIT_EXCEEDED (HTTP 429)Endpoint daily cap reached
Your package's daily cap for this endpoint was reached.
ENDPOINT_DAILY_CAP_REACHED (HTTP 429)Too many requests in progress
The account already has the most service history requests in progress at once (25).
RATE_LIMIT_EXCEEDED (HTTP 429)Vehicle not found
No source we use knows this registration or VIN.
VEHICLE_NOT_FOUND (HTTP 404)Not a sandbox test vehicle
Sandbox keys answer only for the published test vehicles.
SANDBOX_VRM_NOT_ALLOWED (HTTP 404)No such request
There is no service history request with this id on your account.
VEHICLE_NOT_FOUND (HTTP 404)Request expired
The service history request finished more than 7 days ago and can no longer be read.
REQUEST_EXPIRED (HTTP 410)No valuation held
The vehicle is known, but we hold no valuation for it.
VEHICLE_NOT_FOUND (HTTP 404)No specification held
The vehicle is known, but we hold no factory specification for it.
VEHICLE_NOT_FOUND (HTTP 404)History checks not available
The vehicle is known, but the history checks could not be answered for it.
VEHICLE_NOT_FOUND (HTTP 404)No market match
The vehicle is known, but we cannot match it to a model on the market, so there is nothing to compare it with.
VEHICLE_NOT_FOUND (HTTP 404)Service history not available
The manufacturer service network does not recognise this vehicle, or the make is not covered.
VEHICLE_NOT_FOUND (HTTP 404)Data source unavailable
A data source we use failed or did not answer in time. You were not charged.
UPSTREAM_ERROR (HTTP 502)Data source limit reached
A data source will not answer us again until its daily reset. This is our capacity, not yours, and you were not charged.
UPSTREAM_ERROR (HTTP 502)Internal error
Something failed on our side, for example reading your balance. You were not charged.
INTERNAL_ERROR (HTTP 500)Some successful answers carry facts you should know about in meta.warnings. They are not errors: the answer is charged as normal. Warnings are sent in both versions.
"meta": {
"request_id": "req_...",
"cost_pence": 16,
"warnings": [
{ "code": "PLATE_IN_RETENTION", "message": "This registration is on a retention certificate. ..." }
]
}The registration is on a retention certificate. The data returned is for the last vehicle that carried it, which may not be the vehicle in front of you.
What to do: Compare the VIN in the answer with the vehicle before relying on the data.
Endpoints: Decode, spec, valuation, provenance
A field you sent was not used (for example mileage that is not a positive number, rows above the maximum, or a match option that does not apply). parameter names it.
What to do: Correct the field if you meant it to change the answer.
Endpoints: Valuation, market active, market sold, pricing insights
The codes sent before 5 November 2026. They stay available as described above, and every version 2 error carries the matching one in legacy_code until 2 May 2027.
INVALID_REQUESTSeveral causes: bad VIN, VIN on a registration-only endpoint, registration refused, bad callback_url, bad request id.
Version 2: INVALID_PARAMETER, INVALID_VRM, INVALID_VIN, VIN_NOT_SUPPORTED, INVALID_REQUEST_ID
VEHICLE_NOT_FOUNDSeveral causes: unknown vehicle, data not held for a known vehicle, no market match, unknown request id.
Version 2: VEHICLE_NOT_FOUND, VALUATION_NOT_AVAILABLE, SPEC_NOT_AVAILABLE, HISTORY_NOT_AVAILABLE, MARKET_DATA_NOT_AVAILABLE, SERVICE_HISTORY_NOT_AVAILABLE, REQUEST_NOT_FOUND, INVALID_VRM
RATE_LIMIT_EXCEEDEDSeveral causes: key limits, sandbox daily limit, too many service history requests in progress.
Version 2: RATE_LIMIT_EXCEEDED, SANDBOX_DAILY_LIMIT_REACHED, TOO_MANY_OPEN_REQUESTS
UPSTREAM_ERRORA data source failed, or will not answer us until its reset.
Version 2: SOURCE_UNAVAILABLE, SOURCE_LIMIT_REACHED
Questions about an error? Contact support@dealerpricing.co.uk with the request id. The endpoint reference is in the API documentation.