Sleutel

Elke aanroep heeft je sleutel nodig in de header Authorization als Bearer-token. De sleutel is geheim: gebruik hem vanaf je eigen server, nooit in code die in de browser draait.

Authorization: Bearer JOUW_SLEUTEL

Ontvang een gratis sleutel

Endpoints

GET /v1/plates/{country}/{plate}

Zoekt een kenteken op. country is DK of NL. Hoofdletters, spaties en streepjes in het kenteken maken niet uit.

GET /v1/catalog/{country}/makes

Alle merken in een land met het aantal voertuigen, meeste eerst. country is dk, nl, fi of all (de som van de landen). Finland staat alleen in de catalogus, niet in opvragingen. Slugs zijn in alle landen hetzelfde.

GET /v1/catalog/{country}/makes/{make_slug}/models

Alle modellen van een merk, samengevoegd over de registers, dus ID.3 en ID.3 Pro 150 kW zijn één model. make_slug is de slug uit de lijst met merken. Een land toont alleen modellen met voertuigen in dat land.

Zonder ?type= toont de catalogus personenauto's en bestelauto's (car,van). Je kunt een of meer voertuigsoorten opgeven, gescheiden door komma's, bijv. ?type=motorcycle. De catalogus bevat alleen car, van en motorcycle, en een model heeft minstens 100 voertuigen in totaal nodig. Het antwoord mag een dag worden bewaard.

Antwoord van de catalogus

[
  { "name": "Volkswagen", "slug": "volkswagen", "count": 312456 },
  { "name": "Toyota", "slug": "toyota", "count": 254321 },
  …
]

Velden

Het antwoord bevat altijd alle velden. Een veld zonder waarde is null. Tekstvelden staan in de taal van de bron (Deens uit het Deense register, Nederlands van de RDW), terwijl de _code-velden voor beide landen gelijk zijn. Datums zijn JJJJ-MM-DD. We geven nooit gegevens over de eigenaar.

VeldTypeVoorbeeldLandenOmschrijving
country string "DK" DK · NL Het land uit het adres: DK of NL.
plate string "AB12345" DK · NL Het kenteken in hoofdletters, zonder spaties of streepjes.
make string "Volkswagen" DK · NL Merk.
model string "Golf" DK · NL Model.
variant string "1.5 TSI EVO 150 DSG7" DK Variant, zoals in het register.
make_slug string "volkswagen" DK · NL Het merk als slug, zoals in het register.
model_slug string "golf" DK · NL Het model als slug, zoals in het register.
catalog_make_slug string "volkswagen" DK · NL Het merk in de catalogus. null als het merk niet in de catalogus staat.
catalog_model_slug string "golf" DK · NL Het model in de catalogus, bijv. id-3 voor een ID.3 Pro 150 kW. null als het model niet in de catalogus staat.
vehicle_type string "Personbil" DK · NL Voertuigsoort in de taal van de bron.
vehicle_type_code string "car" DK · NL Voertuigsoort als code. Zie de codes hieronder.
body_type string "Stationcar" DK · NL Carrosserie in de taal van de bron.
colour string "Rød" DK · NL Kleur in de taal van de bron.
colour_code string "red" DK · NL Kleur als code.
doors integer 5 DK · NL Aantal deuren.
seats integer 5 DK · NL Aantal zitplaatsen, inclusief de bestuurder.
fuel string "Benzin" DK · NL Brandstof in de taal van de bron.
fuel_code string "petrol" DK · NL Brandstof als code. Hybrides worden onderscheiden van plug-in hybrides.
power_kw number 110 DK · NL Motorvermogen in kW. Vermenigvuldig met 1,36 voor pk.
engine_volume_cc integer 1498 DK · NL Cilinderinhoud in cm³.
cylinders integer 4 DK · NL Aantal cilinders.
kerb_weight_kg integer 1310 DK · NL Massa ledig voertuig in kg. Zelden ingevuld voor Deense auto’s.
total_weight_kg integer 1830 DK · NL Toegestane maximummassa in kg.
towbar boolean true DK Of het voertuig met trekhaak is geregistreerd.
max_trailer_weight_kg integer 1500 DK · NL Maximaal te trekken massa geremd, in kg.
max_trailer_weight_unbraked_kg integer 670 DK · NL Maximaal te trekken massa ongeremd, in kg.
status string "Registreret" DK Registratiestatus.
usage string "Privat personkørsel" DK Gebruik.
first_registration date "2019-04-25" DK · NL Datum eerste toelating.
model_year integer 2019 DK Modeljaar.
vin string "WVWZZZAUZKP000000" DK Chassisnummer (VIN).
euro_norm string "Euro VI" DK · NL Euronorm.
co2_g_km number 116 DK · NL CO₂-uitstoot in g/km.
last_inspection date "2025-04-01" DK Datum van de laatste keuring.
next_inspection date "2027-04-25" NL Vervaldatum APK. Alleen Nederland.
odometer_km integer 77000 DK Kilometerstand bij de laatste keuring.
odometer_date date "2025-04-01" DK Datum van de kilometerstand.
source string "dmr" DK · NL dmr (Deens kentekenregister) of rdw (RDW).
data_date date "2026-11-01" DK · NL De datum van de gegevens waarop het antwoord is gebaseerd.

Voorbeeldantwoord

{
  "country": "DK",
  "plate": "AB12345",
  "make": "Volkswagen",
  "model": "Golf",
  "variant": "1.5 TSI EVO 150 DSG7",
  "make_slug": "volkswagen",
  "model_slug": "golf",
  "catalog_make_slug": "volkswagen",
  "catalog_model_slug": "golf",
  "vehicle_type": "Personbil",
  "vehicle_type_code": "car",
  "body_type": "Stationcar",
  "colour": "Rød",
  "colour_code": "red",
  "doors": 5,
  "seats": 5,
  "fuel": "Benzin",
  "fuel_code": "petrol",
  "power_kw": 110,
  "engine_volume_cc": 1498,
  "cylinders": 4,
  "kerb_weight_kg": null,
  "total_weight_kg": 1830,
  "towbar": true,
  "max_trailer_weight_kg": 1500,
  "max_trailer_weight_unbraked_kg": 670,
  "status": "Registreret",
  "usage": "Privat personkørsel",
  "first_registration": "2019-04-25",
  "model_year": 2019,
  "vin": "WVWZZZAUZKP000000",
  "euro_norm": "Euro VI",
  "co2_g_km": 116,
  "last_inspection": "2025-04-01",
  "next_inspection": null,
  "odometer_km": 77000,
  "odometer_date": "2025-04-01",
  "source": "dmr",
  "data_date": "2026-11-01"
}

Codes

De codevelden hebben altijd een van deze waarden, zodat je kunt sorteren zonder te vertalen. Kennen we de waarde niet, dan is de code other.

vehicle_type_codecar, van, truck, bus, motorcycle, moped, trailer, caravan, tractor, other
fuel_codepetrol, diesel, electric, hybrid_petrol, hybrid_diesel, plugin_hybrid, lpg, cng, hydrogen, other
colour_codeblack, white, grey, silver, blue, red, green, yellow, orange, brown, beige, purple, other

Foutcodes

Bij een fout krijg je een HTTP-statuscode en een JSON-antwoord met het veld error. Fouten tellen niet als opvraging.

{ "error": "not_found" }
StatuserrorBetekenis
400 unsupported_country Het land is geen DK of NL (in de catalogus: dk, nl, fi of all).
400 invalid_type Een code in ?type= bestaat niet (alleen catalogus).
401 unauthorized De sleutel ontbreekt, is onjuist of is uitgeschakeld.
403 key_paused De sleutel is gepauzeerd vanwege ongebruikelijk gebruik. Het antwoord bevat een message. Schrijf naar kontakt@platerunner.dk.
404 not_found Het kenteken staat niet in het register.
429 rate_limited Meer dan 20 aanroepen per seconde. Wacht het aantal seconden uit Retry-After.
429 monthly_limit_reached De opvragingen van deze maand zijn op. Koop een extra pakket of een groter abonnement.
502 upstream_unavailable RDW reageert nu niet (alleen Nederland). Probeer het zo opnieuw.
503 catalog_unavailable De catalogus is tijdelijk niet beschikbaar. Probeer het zo opnieuw.
503 dk_data_unavailable De Deense gegevens zijn tijdelijk niet beschikbaar. Probeer het zo opnieuw.

Limieten

Elk antwoord van /v1/plates en /v1/catalog met een geldige sleutel, ook fouten, heeft drie headers met het verbruik van deze maand:

HeaderVoorbeeldBetekenis
X-Lookups-Used 1234 Opvragingen gebruikt deze maand, deze aanroep meegerekend.
X-Lookups-Limit 15000 De limiet van de maand inclusief extra pakketten. unlimited bij Onbeperkt.
X-Lookups-Reset 2026-12-01 De eerste dag van de volgende maand (UTC), wanneer de opvragingen opnieuw beginnen.

Bekijk de prijzen

Voorbeelden

De voorbeelden lezen de sleutel uit de omgevingsvariabele PLATERUNNER_KEY.

curl

curl https://api.platerunner.dk/v1/plates/DK/AB12345 \
  -H "Authorization: Bearer JOUW_SLEUTEL"

JavaScript

const response = await fetch('https://api.platerunner.dk/v1/plates/DK/AB12345', {
  headers: { Authorization: `Bearer ${process.env.PLATERUNNER_KEY}` },
});
if (response.status === 404) {
  // The plate is not in the register
} else if (!response.ok) {
  const { error } = await response.json();
  throw new Error(error);
}
const vehicle = await response.json();
console.log(vehicle.make, vehicle.model, vehicle.power_kw);

PHP

<?php
$ch = curl_init('https://api.platerunner.dk/v1/plates/DK/AB12345');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('PLATERUNNER_KEY')],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$vehicle = json_decode($body, true);
if ($status === 200) {
    echo $vehicle['make'] . ' ' . $vehicle['model'];
} else {
    echo 'Error: ' . $vehicle['error'];
}

Python

import os
import requests

response = requests.get(
    "https://api.platerunner.dk/v1/plates/DK/AB12345",
    headers={"Authorization": f"Bearer {os.environ['PLATERUNNER_KEY']}"},
    timeout=10,
)
if response.status_code == 200:
    vehicle = response.json()
    print(vehicle["make"], vehicle["model"], vehicle["power_kw"])
else:
    print("Error:", response.json()["error"])