Car service history API: digital records from the manufacturer network
Last updated: 9 November 2026
POST a registration or a full VIN to /api/v1/vehicle/service-history and we ask the manufacturer network for the car's digital service record. The answer is usually 202 pending: poll the free status URL or give us a callback_url, and the finished request carries every service with its date, type, mileage and notes, and a PDF link when the manufacturer stores one. It costs £2.00 a call on Pay As You Go, down to £1.00 on Enterprise, refunded in full when the search finds no records. From 1 December 2026 the price is £4.00 Pay As You Go, £3.00 Starter, £2.00 Pro, £1.00 Enterprise.
Covered manufacturers: Audi, BMW, Cupra, Ford, Jaguar, Land Rover, Lexus, Mazda, Mercedes-Benz, MG, MINI, Nissan, Porsche, Renault, Rolls-Royce, SEAT, Skoda, Smart, Toyota and Volkswagen.
Every request runs a fresh search. A request for the same vehicle made in the last 10 minutes, or still in progress, is shared. Up to 25 requests can be open per account at once.
Sandbox keys are free: SK22AOM answers with a sample report and a sample PDF about 20 seconds after the request, and other test registrations end with no records or as failed, so you can test every outcome.
Prices per call
Prices in force today, per call, by package. Errors are not charged except where the API reference says so. Live keys only: sandbox calls are free.
| Endpoint | Pay As You Go | Starter | Pro | Enterprise |
|---|---|---|---|---|
| Service history (start a request) POST /api/v1/vehicle/service-history Starts a search of the manufacturer network; charged when accepted, refunded when no records are found. Daily cap per account: 10 / 25 / 50 / 100 | £2.00 | £1.70 | £1.40 | £1.00 |
Price change: from 1 December 2026, service history (start a request) is £4.00 Pay As You Go, £3.00 Starter, £2.00 Pro, £1.00 Enterprise.
Pay As You Go has no monthly fee (top up from £10). On Starter, Pro, Enterprise the monthly fee comes back as plan credit to spend on calls, expiring at the end of each monthly billing period. Package limits per second, minute and day are on the pricing page.
Example request and answer
Every endpoint is a JSON POST under https://www.dealerpricing.co.uk/api with your key in the X-API-Key header. This request uses a sandbox test value, so it is free with a sandbox key.
curl -X POST https://www.dealerpricing.co.uk/api/v1/vehicle/service-history \
-H "X-API-Key: your_sandbox_key" \
-H "Content-Type: application/json" \
-d '{"vrm":"SK22AOM","callback_url":"https://example.com/hooks/dealerpricing"}'The answer (long lists shortened; fields not held for a vehicle are left out):
{
"success": true,
"data": {
"request_id": "6c1f4e2a-9b0d-4c3e-8f21-0a7d5b9e3c11",
"vrm": "SK22AOM",
"status": "pending",
"message": "Request accepted. The manufacturer is being asked for this vehicle's digital service records - most complete within a few minutes, some take hours. Poll status_url or wait for your callback.",
"requested_at": "2026-11-05T09:00:00.000Z",
"check_after_seconds": 30,
"status_url": "https://www.dealerpricing.co.uk/api/v1/vehicle/service-history/6c1f4e2a-9b0d-4c3e-8f21-0a7d5b9e3c11",
"callback_url": "https://example.com/hooks/dealerpricing",
"cost_pence": 200,
"refunded_pence": 0
},
"meta": {
"request_id": "req_3f9a1c0d2b7e4a5f6c8d9e01",
"cost_pence": 200,
"balance_pence": 800,
"is_sandbox": false
}
}The finished request, from GET /api/v1/vehicle/service-history/{request_id} (free) or your callback:
{
"success": true,
"data": {
"request_id": "6c1f4e2a-9b0d-4c3e-8f21-0a7d5b9e3c11",
"vrm": "SK22AOM",
"status": "completed",
"message": "Service history retrieved. Sample data for testing. These are not the records of this or any real vehicle.",
"requested_at": "2026-11-05T09:00:00.000Z",
"completed_at": "2026-11-05T09:00:20.000Z",
"status_url": "https://www.dealerpricing.co.uk/api/v1/vehicle/service-history/6c1f4e2a-9b0d-4c3e-8f21-0a7d5b9e3c11",
"cost_pence": 0,
"refunded_pence": 0,
"outcome": "records",
"service_history": {
"record_count": 7,
"services": [
{
"date": "2022-04-21",
"date_raw": "21/04/2022",
"type": "Service / Repair",
"mileage": 12,
"mileage_raw": "12 mi",
"mileage_unit": "mi",
"workshop": "Sample Motors (Main Dealer), Exampleton",
"notes": "Pre-delivery inspection"
},
{
"date": "2023-03-14",
"date_raw": "14/03/2023",
"type": "Service / Repair",
"mileage": 9214,
"mileage_raw": "9,214 mi",
"mileage_unit": "mi",
"workshop": "Sample Motors (Main Dealer), Exampleton",
"notes": "Oil change service"
}
],
"retrieved_at": "2026-11-05T09:00:20.000Z",
"sample": true,
"sample_notice": "Sample data for testing. These are not the records of this or any real vehicle."
},
"pdf_url": "https://www.dealerpricing.co.uk/api/service-history/pdf/5a3b1e00-5a3b-4e00-8000-000000000001?t=1765000000.EXAMPLE",
"pdf_url_expires_in_seconds": 604800,
"readable_until": "2026-11-12T09:00:20.000Z"
},
"meta": {
"request_id": "req_3f9a1c0d2b7e4a5f6c8d9e01",
"cost_pence": 0,
"balance_pence": 1000,
"is_sandbox": false
}
}What you get
- status
- pending, completed or failed, with a message
- outcome
- records, no_records or failed once the request has finished
- service_history.services[].date
- Each service: date, type, mileage and mileage_unit (miles or kilometres)
- service_history.services[].notes
- Notes on the service, where the network gives them
- service_history.record_count
- Number of service records found
- pdf_url
- A link to the manufacturer PDF when one is stored, with its expiry
- cost_pence
- What the request cost and refunded_pence if it was refunded
- readable_until
- A finished request can be read for 7 days
Every field, with its type and meaning, is in the API reference.
What developers use it for
- Show the service record on a used car advert or a customer report.
- Check that a "full service history" claim is backed by manufacturer records before buying.
- Add service history to a history check product.
Questions
How does the service history API work?
It is asynchronous. POST the registration or VIN and you get 202 with status pending and a status_url. Poll the status_url (free) or pass an https callback_url, and when the search is finished you get the records and a PDF link where the manufacturer stores one.
Which manufacturers are covered?
Audi, BMW, Cupra, Ford, Jaguar, Land Rover, Lexus, Mazda, Mercedes-Benz, MG, MINI, Nissan, Porsche, Renault, Rolls-Royce, SEAT, Skoda, Smart, Toyota and Volkswagen. A car from another manufacturer finds no records and is refunded.
How much does a service history search cost?
Pay As You Go £2.00, Starter £1.70, Pro £1.40, Enterprise £1.00. From 1 December 2026 the price is £4.00 Pay As You Go, £3.00 Starter, £2.00 Pro, £1.00 Enterprise. The price is taken when the request is accepted and refunded in full when the search finds no records or fails because of a fault.
How long does it take?
Most searches complete within a few minutes, some take hours. Wait at least check_after_seconds between polls, or use a callback so you do not need to poll.
Does it include the garage name?
Usually not. The workshop field is filled only when the manufacturer network supplies it.
Can I test it without paying?
Yes. Sandbox requests are free: SK22AOM completes about 20 seconds later with a sample report marked sample: true and a sample PDF.
Documentation and next steps
- Service history in the API reference
- Service history in the documentation guide
- Callbacks and webhooks
- API test console (send a request with your sandbox key)
- Example searches (worked examples, once you sign in)
- Error codes and what each one costs
- Create a developer account