For providers
Three reads and two writes, touring caravans and motorhomes on one key. Every call carries your key in the x-api-key header. 60 calls a minute per key. JSON in, JSON out. Every write is logged in your organisation's name.
The key is shown once in the portal. Send it on every call. A missing or wrong key gets a 401 with a sentence saying so.
curl https://caravanhistorycheck.co.uk/api/v1/vin/SGBS000BYA1234567 \ --header "x-api-key: YOUR KEY"
GET https://caravanhistorycheck.co.uk/api/v1/vin/{vin}?kind=CARAVAN or MOTORHOME. Reads the number as the industry describes a CRiS number and says whether it is on the register.
{
"ok": true,
"vin": "SGDS000DMA1000001",
"kind": "CARAVAN",
"valid": true,
"problems": [],
"wmi": "SGD",
"ukMaker": true,
"axles": 1,
"makerCode": "DM",
"maker": null,
"yearLetter": "A",
"yearCandidates": [2010],
"yearLikely": 2010,
"serial": "1000001",
"onRegister": true,
"registeredAt": "2026-09-24T01:00:00.000Z",
"plate": null,
"demo": true,
"activeFlags": 0
}GET https://caravanhistorycheck.co.uk/api/v1/caravans/{vin}. What the public page shows. Never an owner's name or email. A motorhome can also be read by its plate at https://caravanhistorycheck.co.uk/api/v1/caravans/{plate}.
{
"ok": true,
"caravan": {
"vin": "SGDT000DMH1000005",
"kind": "CARAVAN",
"name": null,
"make": "Demo Caravans",
"model": "Demo Twin 6",
"year": 2017,
"berths": 6,
"axles": 2,
"plate": null,
"demo": true,
"source": "Demo Caravan Dealer",
"hasOwner": false,
"proofOnFile": false,
"registeredAt": "2026-09-24T01:00:00.000Z",
"photos": [],
"flags": [
{
"kind": "STOLEN",
"active": true,
"reporterLabel": "Demo Police Unit",
"reference": "DEMOCRN6005",
"reportedAt": "2026-08-14T00:00:00.000Z",
"clearedAt": null
}
]
}
}GET https://caravanhistorycheck.co.uk/api/v1/caravans/{vin}/flags. Active and cleared, each with who placed it and when. A plate works here too.
POST https://caravanhistorycheck.co.uk/api/v1/caravans with one object or an array. vin is required and is 17 characters. kind is CARAVAN, the default, or MOTORHOME. A row may carry a flag too.
curl https://caravanhistorycheck.co.uk/api/v1/caravans \
--header "x-api-key: YOUR KEY" \
--header "content-type: application/json" \
--data '[
{ "vin": "SGDS000DMA1000009", "kind": "CARAVAN", "make": "Demo Caravans", "model": "Demo 4", "year": "2019", "berths": "4", "axles": "1" },
{ "vin": "SGDMH0DM0K1000019", "kind": "MOTORHOME", "make": "Demo Motorhomes", "plate": "AB19 CDE", "flag": "FINANCE", "reference": "AGR55555", "note": "Hire purchase, started today." }
]'
{ "ok": true, "created": 2, "updated": 0, "flagsAdded": 1, "flagsCleared": 0, "skipped": [] }POST https://caravanhistorycheck.co.uk/api/v1/flags with vin. flag is STOLEN, FINANCE or WRITTENOFF. action is add, the default, or clear. You can only clear a flag your own organisation placed.
curl https://caravanhistorycheck.co.uk/api/v1/flags \
--header "x-api-key: YOUR KEY" \
--header "content-type: application/json" \
--data '{ "vin": "SGDMH0DM0K1000019", "flag": "FINANCE", "action": "clear", "note": "Settled in full." }'Upload it in the portal. Header row, then one record per line. Only vin is required. Kind is CARAVAN or MOTORHOME. Caravans and motorhomes can sit in one file.
vin,kind,make,model,year,berths,axles,plate,name,flag,action,reference,note SGDS000DMA1000009,CARAVAN,Demo Caravans,Demo 4,2019,4,1,,,,,, SGDMH0DM0K1000019,MOTORHOME,Demo Motorhomes,Demo Van,2019,2,,AB19CDE,,STOLEN,add,CRN44556,Taken from a storage site overnight SGDS000DMA1000009,,,,,,,,,FINANCE,add,AGR12345,Hire purchase started today SGDS000DMA1000009,,,,,,,,,FINANCE,clear,AGR12345,Settled in full
x-ratelimit-reset header.