Spring til indhold

Skift fra Synsbasen API til Motorbay: endpoints, felter og en tjekliste

Du kalder i dag Synsbasens API og overvejer at flytte opslag på nummerplade og stelnummer til Motorbay. Her er forskellene i adgang, svarformat og felter, hvad Synsbasen kan ud over 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 Synsbasens API og mest bruger køretøjets grunddata: nummerplade, stelnummer, status, mærke, model, variant, seneste syn og tekniske data. Så kan du som regel flytte til Motorbay på en eftermiddag. Bruger du Synsbasens gældsdata, forsikring, vurderinger, overvågning eller statistik, så læs afsnittet om det, Synsbasen kan ud over Motorbay, før du går videre.

Vi har læst Synsbasens dokumentation og forside den 9. okt. 2026, og alt, hvad der står om Synsbasen 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, vi nævner hos Motorbay, står i OpenAPI-filen, som er API'ets kontrakt.

Synsbasen Motorbay
Base-URLhttps://api.synsbasen.dk/v1https://api.motorbay.app/v1
NøgleAuthorization: Bearer <APIKEY> og Content-Type: application/jsonX-Api-Key: <nøgle>
Opslag på nummerpladeGET /v1/vehicles/registration/:registrationGET /v1/vehicles/plate/{plate}
Opslag på stelnummerGET /v1/vehicles/vin/:vinGET /v1/vehicles/vin/{vin}
Opslag på IDGET /v1/vehicles/:id, ID er et heltalGET /v1/vehicles/{id}, ID er tekst
Svarets formObjektet ligger i dataKøretøjet er selve svaret. Lister har data og metadata
Feltnavnesnake_case, fx first_registration_datecamelCase, fx firstRegisteredOn
Flere oplysningerexpand[]=emission og andre udvidelser i samme kaldEgne endpoints pr. køretøj, fx /engine og /inspection
DatoerTekst som yyyy-mm-ddDage som …On og tidspunkter i UTC som …At
FejlHTTP-statuskoderne 400, 401, 403, 404, 429 og 500application/problem+json med en stabil code, fx VehicleNotFound

Samme kilde, forskellige rettelser

Begge bygger på Motorstyrelsens ugentlige udtræk. Synsbasen skriver, at den primært bygger på udtrækket og lægger gæld, forsikring og syn fra andre kilder oven i. Motorbay importerer udtrækket, som det er, uden at rette eller udfylde værdier. Synsbasen skriver til gengæld, at den retter og udfylder fx modelår og EF-typegodkendelse. En værdi kan derfor afvige mellem de to, selv om begge kommer fra samme fil.

Data er data pr. udtrækkets dato, ikke i realtid. Hvert svar fra Motorbay har headeren Motorbay-Data-As-Of med tidspunktet for det udtræk, du får. 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.

Feltoversigt: fra Synsbasen til Motorbay

Tabellerne følger Synsbasens køretøjsobjekt og dets udvidelser. Kolonnen Endpoint siger, hvor Motorbay-feltet ligger: Køretøjet er svaret fra opslag på nummerplade, stelnummer eller ID, og de andre er endpoints under /v1/vehicles/{vehicleId}. Står der Nærmeste felt, er det den bedste match i begge dokumentationer, men ingen af dem siger, at det er det samme. Sammenlign dem på en stikprøve, før du stoler på dem.

Køretøjet

Synsbasen Motorbay Endpoint Bemærkning
ididKøretøjetHeltal hos Synsbasen, tekst hos Motorbay. Gå ikke ud fra, at værdierne er ens. Slå op på nummerplade eller stelnummer og gem Motorbays ID.
registrationregistrationNumberKøretøjetnull, når køretøjet ikke har en nummerplade.
vinvinKøretøjetSamme navn.
first_registration_datefirstRegisteredOnKøretøjetEn dag, eller null.
statusstatusKøretøjetDanske tekster hos Synsbasen, faste værdier hos Motorbay. Se værditabellen.
status_updated_atstatusUpdatedAtKøretøjetTidspunkt i UTC, ikke kun en dag.
registration_statusregistrationStatusKøretøjetSe værditabellen.
registration_status_updated_atregistrationStatusUpdatedAtKøretøjetTidspunkt i UTC, eller null.
kindkindKøretøjetObjekt med id, name og originalName. Navnet er dansk, fx Personbil, så læs kind.name.
usageprimaryUsageKøretøjetNærmeste felt. Objekt som kind. Motorbay har også GET /v1/vehicles/{vehicleId}/secondary-usages.
brandmakeKøretøjetObjekt, læs make.name.
model, variantmodel, variantKøretøjetObjekter, eller null hvis køretøjet ingen har.
versiondesignationTypeKøretøjetNærmeste felt. Motorstyrelsens typebetegnelse, objekt eller null.
brand_id, model_id, variant_idmakeId, modelId, variantIdKøretøjetTekst hos begge. Sammenlign værdierne, før du bruger dem som nøgler.
color (under expand[]=body)colorKøretøjetObjekt, læs color.name. Hos Motorbay ligger farven på køretøjet selv.
model_yearmodelYear/technical-detailsHos Motorbay værdien fra udtrækket. Synsbasen retter og udfylder den.
categorytypeApprovedCategory/technical-detailsNærmeste felt.
fuel_typefuelType.name/fuel-typesÉn værdi hos Synsbasen, en liste hos Motorbay med det primære drivmiddel først. Navnene er danske, fx Benzin.
mileageodometerReading/engineNærmeste felt. Motorbay opgiver tusinde km: 228 betyder ca. 228.000 km. Synsbasens enhed er km.
ncap_fivehasFiveStarNcapRating/technical-detailsSandt eller falsk.
eu_version, eu_varianteuVersion, euVariant/technical-detailsSamme indhold, nye navne.
ec_type_approvaltypeApprovalNumber/technical-detailsNærmeste felt. Motorbay har ingen rettet udgave som ec_type_approval_corrected.
extra_equipmentadditionalEquipment/technical-detailsNærmeste felt.
body_typebodyType/technical-detailsEn fast liste af værdier, fx sedan, hatchback og stationcar.

Seneste syn

Synsbasen Motorbay Endpoint Bemærkning
last_inspection_dateinspectedOn/inspectionEn dag.
last_inspection_resultresult/inspectionSe værditabellen.
last_inspection_kindtype/inspectionSe værditabellen.
mileage (på /v1/inspections/:id)odometerReading/inspectionNærmeste felt. Synsbasen opgiver km, Motorbay tusinde km.
Ikke i det samme objektstatus, statusUpdatedOn/inspectionSynets status og dagen, den ændrede sig. Værdien er i dag altid active.

Hos Synsbasen ligger de tre last_inspection_*-felter på køretøjet. Hos Motorbay er seneste syn sit eget kald, og det svarer 204 uden indhold, når der ikke er noget syn at vise. Behandl 204 som "intet syn", ikke som en fejl.

Motor, miljø og drivmidler

Synsbasen Motorbay Endpoint Bemærkning
emission.co2co2Emission/fuel-typesNærmeste felt. g/km pr. drivmiddel. Brug ikke co2Emission fra /environmental-information, det er et tal for lastbiler i g/tkm.
emission.cocoEmission/environmental-informationmg/km.
emission.hc_plus_noxhcPlusNoxEmission/environmental-informationmg/km.
emission.noxnoxEmission/environmental-informationmg/km.
emission.particlesparticleEmission/environmental-informationmg/km.
emission.particle_filterhasParticleFilter/environmental-informationSandt eller falsk.
emission.smoke_density, emission.smoke_density_engine_speedsmokeDensity, smokeDensityRpm/environmental-informationSamme to størrelser.
emission.euronormemissionStandardKøretøjetObjekt, læs emissionStandard.name. Skrivemåden kan være en anden: Synsbasens dokumentation viser Euro V, Motorbays OpenAPI nævner Euro 6 som eksempel.
engine.engine_powermaximumPower/enginekW begge steder.
engine.engine_displacementdisplacement/enginecm³ begge steder.
engine.cylinderscylinderCount/engineSamme indhold.
engine.engine_codeengineMarking/engineNærmeste felt.
engine.top_speedmaximumSpeed/technical-detailskm/h.
engine.gearsnumberOfGears/technical-detailsSamme indhold.
engine.fuel_efficiencykilometersPerLiter/fuel-typeskm/l. Synsbasen opgiver ét samlet tal, Motorbay et tal pr. drivmiddel.
engine.electricity_efficiencyelectricConsumption/fuel-typesWh/km hos Motorbay. Synsbasens dokumentation bruger Wh/km under engine og km/kWh under fuel_types, så tjek enheden.
fuel_types[].name, primary_fuel, fuel_cellfuelType.name, isPrimary, hasFuelCell/fuel-typesEn liste med sider, primært drivmiddel først.

Vægt, mål og udstyr

Synsbasen Motorbay Endpoint Bemærkning
weight.technical_total_weighttechnicalTotalWeight/technical-detailskg.
weight.total_weighttotalWeight/technical-detailskg.
weight.vehicle_weightownWeight/technical-detailsNærmeste felt. kg.
weight.driveable_weight_minimum, weight.driveable_weight_maximumminimumRoadWorthyWeight, maximumRoadWorthyWeight/technical-detailsNærmeste felt. Køreklar vægt, kg.
weight.road_train_weightroadTrainWeight/technical-detailskg.
weight.coupling_deviceisCouplingPossible/technical-detailsNærmeste felt. Sandt eller falsk.
weight.trailer_with_brakes_weight_maximum, weight.trailer_without_brakes_weight_maximumcouplingWeightWithBrakes, couplingWeightWithoutBrakes/technical-detailskg.
weight.trailer_total_weight_maximumtrailerTotalWeight/technical-detailskg.
axle.axlesaxleCount/technical-detailsSamme indhold.
axle.axle_trackaxleDistance/technical-detailsNærmeste felt. mm.
axle.pulling_axlesdrivingAxles/technical-detailsNærmeste felt. Tekst.
body.doors, body.passengersnumberOfDoors, passengerCount/technical-detailsHeltal.
body.seats_minimum, body.seats_maximumminimumSeats, maximumSeats/technical-detailsHeltal.
body.track_width_front, body.track_width_rearfrontTrackWidth, rearTrackWidth/technical-detailsmm.
body.vin_placement, body.rims_and_tiresvinPlacement, wheelAndTire/technical-detailsNærmeste felt for hjul og dæk. Tekst.
equipment[].name, equipment[].quantityname, count/equipmentEn liste med sider (page, pageSize). Navnet er Motorstyrelsens, og originalName ændrer sig aldrig. Sammenlign skrivemåden, før du matcher på tekst.

Værdier

Synsbasen bruger Motorstyrelsens danske tekster som værdier. Motorbay bruger faste værdier i camelCase. Navnene på art, anvendelse, mærke, farve og drivmiddel er derimod stadig danske tekster i name. Motorbays lister over værdier står i OpenAPI-filen.

Felt Synsbasen Motorbay
statusOprettetcreated
statusRegistreretregistered
statusAfmeldtderegistered
statusSkrottetscrapped
statusEksporteretexported
statusSlettetdeleted
statusUnderOprettelseunderCreation
statusDelvistOprettetpartiallyCreated
statusAdministrativOprettelseadministrativeCreation
statusHarGennemførtRegistreringssyncompletedRegistrationInspection
registration_statusRegistreretregistered
registration_statusAfmeldtderegistered
registration_statusUnderUdarbejdelsepending
last_inspection_resultGodkendtapproved
last_inspection_resultIkkeFuldstaendigtSynincomplete
last_inspection_resultIkkeGodkendtrejected
last_inspection_resultIkkeGodkendtKanGenfremstillesrejectedReinspectionAllowed
last_inspection_resultKanGodkendesVedOmsynAfOmsynsvirksomhedreinspectionCompanyReinspectionAllowed
last_inspection_resultKanGodkendesVedOmsynAfSynsvirksomhedinspectionCompanyReinspectionAllowed
last_inspection_kindKontrolSynscrutiny
last_inspection_kindMOTmot
last_inspection_kindPeriodiskSynperiodic
last_inspection_kindRegistreringsSynregistration
last_inspection_kindRegistreringssynToldsyncustoms

Motorbays status har tre værdier, som Synsbasens dokumenterede liste ikke viser: exportMarking, declaredByImporter og declaredByImporterAndDealer. Motorbays registrationStatus har desuden unknown. Skriv derfor en default-gren, når du oversætter værdierne i din kode.

Det, Synsbasen kan ud over Motorbay

Det her bruger du måske i dag. Motorbay har det ikke, så læs listen, før du flytter noget.

  • Gæld: tinglysning_data giver hæftelser og meddelelser fra Tinglysningen, fx om konkurs. Motorbay har ingen gældsdata.
  • Forsikring og næste syn: dmr_data slår live op hos DMR og giver forsikringsselskab og forsikringsstatus, datoen for næste periodiske syn og indkaldelser. Motorbay har ingen af delene.
  • Vurderinger: appraisals giver vurderinger af værdi og registreringsafgift. Motorbay har ingen vurderinger.
  • Opslag samme uge: dmr_fallback=true slår nye eller ændrede nummerplader op live, før næste udtræk er hentet. Motorbay svarer kun fra det seneste udtræk og er ikke i realtid.
  • Overvågning og webhooks: med watched_vehicles og webhooks får du besked, når et køretøj ændrer sig, eller et nyt syn kommer til. Motorbay har ingen webhooks. Du kan læse Motorbay-Data-As-Of eller GET /v1/dataset for at se, om et nyt udtræk er importeret.
  • Søgning og statistik: POST /v1/vehicles/search har søgeprædikater, COUNT, gennemsnit og gruppering. Motorbays GET /v1/vehicles filtrerer på mærke, art, anvendelse, farve, modelår og nummerplade, men tæller og grupperer ikke.
  • Alle syn: /v1/inspections giver hvert syn med testcenter, fejlkoder, PDF og dokumentation. Motorbay giver kun det seneste syn med type, dag, resultat og kilometerstand.
  • Spærringer, tilladelser og leasing: registration_blocks, permits, leasing_periods og leasing_period_start. Motorbay har dem endnu ikke. De er under udvikling.
  • Rettede og beregnede felter: rettet modelår og EF-typegodkendelse, energiklasse, miljøzonestatus, hestekræfter, kilometer pr. år, alder og estimeret næste syn. Motorbay giver værdierne, som de står i udtrækket.
  • Øvrige udvidelser: periodiske afgifter, EU Safety Gate-varsler, nummerpladegenkendelse på billeder, nummerplader til forhandlere og widgets til forhandlersider. Motorbay har ingen af dem.

Synsbasen tilbyder også en Postman-samling og en Ruby-gem. Motorbay har en OpenAPI-fil, så du kan generere en klient i dit eget sprog. Bruger du noget fra listen i produktion, kan du godt køre begge: behold Synsbasen til det, Motorbay ikke har, og flyt opslagene på grunddata.

Et opslag på nummerplade før og efter

Eksemplerne bruger pladen AB12345 som pladsholder. Først curl. Synsbasens svar kommer med alt, du beder om med expand. Hos Motorbay henter du motor og miljø fra hvert sit endpoint med køretøjets id.

GET
curl -i -H "Authorization: Bearer $SYNSBASEN_API_KEY" \
  "https://api.synsbasen.dk/v1/vehicles/registration/AB12345"
GET
curl -i -H "X-Api-Key: $MOTORBAY_API_KEY" \
  "https://api.motorbay.app/v1/vehicles/plate/AB12345"

# Det, Synsbasen giver med expand[]=engine og expand[]=emission,
# henter du pr. køretøj med id fra svaret ovenfor:
curl -H "X-Api-Key: $MOTORBAY_API_KEY" \
  "https://api.motorbay.app/v1/vehicles/$VEHICLE_ID/engine"
curl -H "X-Api-Key: $MOTORBAY_API_KEY" \
  "https://api.motorbay.app/v1/vehicles/$VEHICLE_ID/environmental-information"

Så JavaScript med fetch. Begge funktioner returnerer det samme objekt, og begge giver null, når pladen ikke findes. 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://api.synsbasen.dk/v1/vehicles/registration/" + encodeURIComponent(plate), {
    headers: {
      Authorization: "Bearer " + process.env.SYNSBASEN_API_KEY,
      "Content-Type": "application/json",
    },
  });
  if (res.status === 404) return null;
  if (res.status === 429) throw new Error("Synsbasen: too many requests");
  if (!res.ok) throw new Error("Synsbasen: HTTP " + res.status);
  const { data } = await res.json();
  return {
    plate: data.registration,
    vin: data.vin,
    firstRegistered: data.first_registration_date,
    make: data.brand,
    model: data.model,
  };
}
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(); // no data wrapper
  return {
    plate: vehicle.registrationNumber,
    vin: vehicle.vin,
    firstRegistered: vehicle.firstRegisteredOn,
    make: vehicle.make.name,
    model: vehicle.model?.name ?? null,
  };
}

Nummerplader genbruges. Hos Motorbay giver opslaget det køretøj, der er registreret med pladen nu. Synsbasen skriver, at opslaget giver det seneste køretøj med pladen, så sammenlign de to på plader, der har siddet på flere køretøjer. Vil du se alle køretøjer, der har haft pladen, så brug GET /v1/vehicles?registrationNumber=.

Pris ved dit volumen

Synsbasen sælger månedlige abonnementer med 500, 2.500 eller 12.500 forespørgsler inkluderet. Forespørgsler ud over det koster et fast beløb stykket, og nogle udvidelser koster tokens. Aktuelle priser står på Synsbasens side. Synsbasen skriver, at kun forespørgsler, der svarer 200, tæller med i kvoten.

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. Ét kald hos Synsbasen med expand kan give det, der hos Motorbay er flere kald. Et opslag på nummerplade plus motor og seneste syn er tre kald, 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 Synsbasens eller Motorbays navne.
  • Oversæt felterne med tabellerne her, og tilføj kun de underendpoints, du bruger: /inspection, /engine, /technical-details, /environmental-information, /fuel-types og /equipment.
  • 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, rettede felter hos Synsbasen, 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 Synsbasen-nøglen stå, til der er kommet mindst ét nyt udtræk.
  • Opsig bagefter, hvis du ikke bruger noget, Synsbasen har ud over Motorbay.

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.