Spring til indhold

Skift fra MotorAPI.dk til Motorbay: endpoints, felter og en tjekliste

Du kalder i dag MotorAPI.dk og overvejer at flytte opslag på nummerplade og stelnummer til Motorbay. Her er forskellene i adgang og endpoints, hvad MotorAPIs dokumentation siger om felter, hvor felterne ligger hos Motorbay, kode før og efter, og en plan for at skifte uden at gætte.

Af · Sidst tjekket

Hvem vejledningen er til, og hvad der ændrer sig

Vejledningen er til dig, der kalder MotorAPI til opslag på nummerplade eller stelnummer og vil flytte til Motorbay. Der er tre ting, der ændrer sig i din kode: adressen og nøglen, at opslag på nummerplade og stelnummer er to endpoints, og at miljø og udstyr hentes med køretøjets ID i stedet for med pladen.

Vi har læst MotorAPIs dokumentation og forside den 9. okt. 2026, og alt, hvad der står om MotorAPI her, kommer derfra. Motorbay er et REST API til danske køretøjsdata fra Motorstyrelsens offentlige ugentlige udtræk. Hvad udtrækket er, forklarer Motorregistret som API. Hvert felt og hver sti, vi nævner hos Motorbay, står i OpenAPI-filen, som er API'ets kontrakt.

MotorAPI Motorbay
Base-URLhttps://v1.motorapi.dkhttps://api.motorbay.app/v1
NøgleHeaderen X-AUTH-TOKENHeaderen X-Api-Key
Opslag på nummerplade eller stelnummerGET /vehicles/{reg-no-or-vin}, ét endpoint til beggeGET /v1/vehicles/plate/{plate} og GET /v1/vehicles/vin/{vin}
MiljøGET /vehicles/{reg-no-or-vin}/environmentGET /v1/vehicles/{vehicleId}/environmental-information og /fuel-types
UdstyrGET /vehicles/{reg-no-or-vin}/equipmentGET /v1/vehicles/{vehicleId}/equipment, en liste med sider
Liste over køretøjerGET /vehicles med registration_number og valgfrit statusGET /v1/vehicles?registrationNumber=, en liste med sider uden statusfilter
Ikke fundet404404 med koden VehicleNotFound
BrugGET /usage, gratis og tæller ikke medIntet endpoint til eget forbrug i OpenAPI-filen
FejlDokumentationen nævner 404 og, for /usage, 401application/problem+json med en stabil code

Hvad dokumentationerne siger om data

MotorAPIs dokumentation siger ikke, hvilken kilde dataene kommer fra, eller hvor ofte de opdateres. Derfor skriver vi heller ikke noget om det her. Motorbay importerer Motorstyrelsens ugentlige udtræk, som det er, uden at rette eller udfylde værdier. Data er data pr. udtrækkets dato, ikke i realtid, og hvert svar fra Motorbay har headeren Motorbay-Data-As-Of med tidspunktet for det udtræk, du får.

Kommer to værdier ikke fra samme dato, kan de afvige. Det er den første ting at kigge efter, når du sammenligner. Motorstyrelsen yder ikke support på brug af udtrækket og kan ikke garantere, at opdateringerne finder sted.

Motorbay har ingen tilknytning til Motorstyrelsen. Motorbay leverer tekniske oplysninger om køretøjer, ikke om personer.

Felter: hvad der er dokumenteret, og hvor de ligger hos Motorbay

MotorAPIs dokumentationsside beskriver endpoints, nøgle og fejl, men ikke svarets felter. Vi kan derfor ikke give dig en tabel, der kobler MotorAPIs feltnavne til Motorbays, uden at gætte, og det gør vi ikke. Du har feltnavnene i din egen kode og i de svar, du har gemt. Brug dem sammen med tabellen herunder, der viser, hvor Motorbay lægger hver slags oplysning.

Oplysning Motorbay-felter Endpoint
Nummerplade og stelnummerregistrationNumber, vinKøretøjet
Statusstatus, statusUpdatedAt, registrationStatus, registrationStatusUpdatedAtKøretøjet
Første registreringfirstRegisteredOnKøretøjet
Art og anvendelsekind, primaryUsageKøretøjet
Mærke, model og variantmake, model, variant, designationTypeKøretøjet
FarvecolorKøretøjet
EuronormemissionStandardKøretøjet
Modelår, vægte, aksler, sæder, døre og målmodelYear, totalWeight, ownWeight, axleCount, minimumSeats, maximumSeats, numberOfDoors, isCouplingPossible og flere/technical-details
KarrosseribodyType/technical-details
Cylindre, slagvolumen og effektcylinderCount, displacement, maximumPower/engine
KilometerstandodometerReading, i tusinde km/engine
Drivmidler, forbrug og CO₂fuelType, isPrimary, kilometersPerLiter, electricConsumption, co2Emission/fuel-types
Udledninger og partikelfiltercoEmission, hcPlusNoxEmission, noxEmission, particleEmission, hasParticleFilter/environmental-information
Seneste syninspectedOn, type, result, odometerReading/inspection
Udstyrname, originalName, count/equipment

Sådan kobler du felterne

  • Gem svar. Tag nogle hundrede svar fra MotorAPI fra din egen log, eller kald API'et for en stikprøve af plader.
  • Skriv de felter ned, din kode læser. Det er dem, der skal findes hos Motorbay, ikke alle, MotorAPI sender.
  • Find hvert felt i tabellen, og slå det op i OpenAPI-filen for enhed og format.
  • Sammenlign værdierne for de samme plader hos begge, felt for felt.

Formater hos Motorbay

  • Navne: camelCase. Art, anvendelse, mærke, model, variant, farve og euronorm er objekter med id, name og originalName. name er Motorstyrelsens danske tekst, fx Personbil.
  • Datoer: dage hedder …On og er yyyy-mm-dd. Tidspunkter hedder …At og er UTC.
  • Værdier: status og syn bruger faste værdier som registered, deregistered, approved og periodic. De står i OpenAPI-filen.
  • ID'er: tekst. Behandl dem som uigennemsigtige.
  • Kilometerstand: i tusinde km. 228 betyder ca. 228.000 km.
  • Tomme svar: /inspection, /engine og /environmental-information svarer 204 uden indhold, når der ikke er noget at vise.

Det, MotorAPI kan ud over Motorbay

Det er ikke meget, men læs listen, før du flytter. Alt her er fra MotorAPIs dokumentation.

  • Ét endpoint til plade og stelnummer. MotorAPI tager begge i GET /vehicles/{reg-no-or-vin}. Hos Motorbay vælger du selv endpoint, så hvis din kode ikke ved, hvad den har fået, skal den afgøre det først.
  • Miljø og udstyr direkte på pladen. Hos MotorAPI bruger /environment og /equipment pladen eller stelnummeret. Hos Motorbay skal du først slå køretøjet op og bruge dets id, så et opslag med miljø og udstyr er tre kald.
  • Et statusfilter på listen. MotorAPI kan filtrere GET /vehicles på registreret eller afmeldt. Motorbays GET /v1/vehicles filtrerer på mærke, art, anvendelse, farve, modelår og nummerplade. Læs registrationStatus på hvert køretøj og filtrer i din kode.
  • Et brugsendpoint. GET /usage giver dagens forbrug og månedshistorik uden at tælle med i kvoten. OpenAPI-filen har intet endpoint til eget forbrug.

Dokumentationerne beskriver opslaget på en plade forskelligt. MotorAPI beskriver /vehicles/{reg-no-or-vin} som opslag på et køretøj, der er registreret nu. Motorbay giver det køretøj, der er registreret med pladen nu, og hvis ingen er det, det køretøj med den nyeste registreringsstatusdato, hvor registrationStatus fortæller, at det ikke er registreret. Test derfor plader på afmeldte køretøjer i din stikprøve, og læs registrationStatus.

Motorbays OpenAPI-fil har ingen webhooks, gældsdata eller forsikringsdata, og MotorAPIs dokumentation nævner heller ikke nogen af delene. Hvis du har brug for en af dem, er det ikke et skift, men et andet valg.

Et opslag på nummerplade før og efter

Eksemplerne bruger pladen AB12345 som pladsholder. Først curl. Hos Motorbay henter du miljø og udstyr med køretøjets id fra det første svar.

GET
curl -i -H "X-AUTH-TOKEN: $MOTORAPI_TOKEN" \
  "https://v1.motorapi.dk/vehicles/AB12345"
GET
curl -i -H "X-Api-Key: $MOTORBAY_API_KEY" \
  "https://api.motorbay.app/v1/vehicles/plate/AB12345"

# Miljø og udstyr ligger på køretøjets id fra svaret ovenfor:
curl -H "X-Api-Key: $MOTORBAY_API_KEY" \
  "https://api.motorbay.app/v1/vehicles/$VEHICLE_ID/environmental-information"
curl -H "X-Api-Key: $MOTORBAY_API_KEY" \
  "https://api.motorbay.app/v1/vehicles/$VEHICLE_ID/equipment"

Så JavaScript med fetch. Begge funktioner giver null, når pladen ikke findes. MotorAPIs dokumentation nævner ikke, hvad der sker, når en grænse nås, så den gamle kode tjekker kun 404 og ellers res.ok. Hos Motorbay venter koden på Retry-After én gang ved RateLimitExceeded (60 i minuttet pr. nøgle) og giver op ved QuotaExceeded, fordi månedens forespørgsler så er brugt.

GET
async function lookupPlate(plate) {
  const res = await fetch("https://v1.motorapi.dk/vehicles/" + encodeURIComponent(plate), {
    headers: { "X-AUTH-TOKEN": process.env.MOTORAPI_TOKEN },
  });
  if (res.status === 404) return null;
  if (!res.ok) throw new Error("MotorAPI: HTTP " + res.status);
  return res.json(); // the whole object, with the field names you use today
}
GET
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

async function lookupPlate(plate, retried = false) {
  const res = await fetch("https://api.motorbay.app/v1/vehicles/plate/" + encodeURIComponent(plate), {
    headers: { "X-Api-Key": process.env.MOTORBAY_API_KEY },
  });
  if (res.status === 404) return null; // VehicleNotFound
  if (res.status === 429) {
    const problem = await res.json();
    if (problem.code === "QuotaExceeded" || retried) throw new Error("Motorbay: " + problem.code);
    await sleep(Number(res.headers.get("Retry-After") ?? 1) * 1000);
    return lookupPlate(plate, true);
  }
  if (!res.ok) throw new Error("Motorbay: HTTP " + res.status);
  const vehicle = await res.json();
  return {
    id: vehicle.id, // use it for /engine, /equipment and the other sub-resources
    plate: vehicle.registrationNumber,
    vin: vehicle.vin,
    registrationStatus: vehicle.registrationStatus, // 'registered', 'deregistered', ...
    make: vehicle.make.name,
    model: vehicle.model?.name ?? null,
  };
}

Nummerplader genbruges, så en plade kan have siddet på flere køretøjer. Vil du se dem alle, så brug GET /v1/vehicles?registrationNumber=.

Pris ved dit volumen

MotorAPI viser sine priser på forsiden, og der står også, hvordan opslag opgøres og faktureres. Læs dem dér, så får du de gældende tal. Forsiden tilbyder også 100 gratis opslag hver dag. Hvilke abonnementer Motorbay har, og hvad de koster, står på Motorbays prisside.

Hos Motorbay starter du gratis uden betalingskort, og de betalte abonnementer har en fast pris pr. måned med forespørgsler inkluderet og derefter en fast pris pr. forespørgsel. Priserne og en beregner står på prissiden, og de læses fra API'et, så de står ikke her.

  • Tæl kald, ikke opslag. Et opslag på nummerplade plus miljø og udstyr er tre kald hos Motorbay, og hvert kald er en forespørgsel.
  • Brug kun de endpoints, du bruger. Har du kun brug for mærke, model og stelnummer, er opslaget på nummerplade nok.
  • Indtast tallene i beregneren. Tag antallet af kald pr. måned fra din egen log, ikke fra et skøn.

Skift over på en eftermiddag: tjekliste

Kør begge API'er side om side, indtil du har set, at forskellene er dem, du forventer.

  • Opret en konto og en API-nøgle, og kør curl-eksemplet med en plade fra din egen test.
  • Saml opslaget ét sted. Lav en funktion, der returnerer dine egne feltnavne, så resten af koden hverken kender MotorAPIs eller Motorbays navne.
  • Koble felterne med tabellen og trinene ovenfor, og tilføj kun de underendpoints, du bruger.
  • Skil plade og stelnummer ad, hvis din kode i dag sender begge til samme endpoint.
  • **Læs registrationStatus,** så afmeldte køretøjer ikke bliver behandlet som registrerede.
  • Kør begge parallelt. Slå en stikprøve på nogle hundrede plader fra din egen log op hos begge, og sammenlign felt for felt.
  • Sortér forskellene. Typiske årsager er udtrækkets dato, tusinde km, skrivemåden af euronorm og udstyr, og plader med flere køretøjer.
  • Håndtér 404, 429 og 204. 404 er VehicleNotFound, 429 kan være RateLimitExceeded eller QuotaExceeded, og 204 betyder, at underressourcen er tom.
  • **Gem Motorbay-Data-As-Of** sammen med det, du gemmer, så du ved, hvor gamle dine data er.
  • Skift trafikken gradvist, fx med en feature-flag, og lad MotorAPI-nøglen stå, til der er kommet mindst ét nyt udtræk.

Kilderne er Motorstyrelsens egne sider, Motorstyrelsens udtræk og Motorbays API-dokumentation.

Lav dit første opslag i dag

Opret en konto, lav en API-nøgle, og send dit første kald. Kom godt i gang-guiden tager cirka fem minutter. De første 1.000 forespørgsler hver måned er gratis, og du skal ikke bruge betalingskort.