API Documentation

Introduction

The Synsbasen API V1 is organized around REST. Our API has predictable resource-oriented URLs, accepts form-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs. Our API V1 primary acts as an interface to interact with the information available at The Motor Vehicle Agency (DMR). Our API includes all basic vehicle information eg. vin, registration, status, brand, mileage etc. but also includes more advanced information eg. emission, weight, permits and equipment and much more. Additionally our API includes information from the Danish Road Traffic Authority (Færdelsstyrelsen) regarding vehicle inspections and test centers. The Synsbasen API primarily relies on the XML export of the entire vehicle registry, provided weekly by DMR through their public FTP server. We download and update our data to the most recent export every week. Most information included in the DMR export is available through our API V1. We also combine the vehicle data with additional information about debt, insurance and inspections from other data sources. Feel free to submit suggestions/feature requests to info@synsbasen.dk.
Base url
1https://api.synsbasen.dk/v1

Getting Started

We have created a forkable Postman collection. The collection contains examples of our most common requests. We regularly expand the collection with new examples.
NB: Remember to update the collection variables with your own private API key. Ruby Gem In addition, we offer a Ruby gem to make it even easier to interact with the Synsbasen API from Ruby applications. This gem includes pre-built methods for authentication and common requests, streamlining integration with our API for Ruby developers. You can find the gem on GitHub.
Libraries
1Postman Collection
2Ruby Gem

Authentication

Synsbasen uses API keys to authenticate requests. An API key is private and must not be shared or used across different applications and domains. You can view and manage your API keys in your dashboard. Required Headers All requests require you to include the following headers: Authorization: Bearer <APIKEY> Content-Type: application/json Your API keys carry many privileges, so be sure to keep them secure! Do not share your secret API keys in publicly accessible areas such as GitHub, client-side code, and so forth. Requests without authentication will fail. Sign up now and get a free API key.
Authentications
1Authorization: Bearer <APIKEY>
2Content-Type: application/json

Usage Quota

Our API service is available through tiered subscription plans, each with a specific monthly request limit to suit your needs: - Light: 500 requests per month – Ideal for small-scale projects or testing purposes. - Basic: 2.500 requests per month – Suitable for moderate usage and growing applications. - Advanced: 12.500 requests per month – Designed for high-demand use cases and enterprise-level integrations. Important: Your usage quota is only affected by requests that return a 200 OK status. Requests that fail or return other status codes will not count toward your quota. Usage quotas are enforced on a rolling monthly basis following your subscription period. Once the limit is reached, additional requests might be blocked until the next billing cycle begins. To avoid interruptions, we recommend monitoring your usage via our dashboard and upgrading your plan as needed. We'll notify you when you reach 90% of your limit and again when you reach 100%. If you need a higher usage quota, please contact us at info@synsbasen.dk.

Response Codes

Our API uses conventional HTTP response codes to indicate the success or failure of an API request. Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error that failed given the information provided (e.g. a required parameter was omitted, insufficient funds etc.). Codes in the 5xx range indicate an error with Synsbasen’s servers.
HTTP Status Codes
1200OK
2400Bad Request
3401Unauthorized
4403Forbidden
5404Not Found
6429Too Many Requests
7500Internal Server Error

Expand

Some endpoints contains additional information which is not included in the response by default. You can include this information as an expanded response using the expand query parameter on supported endpoints. Expandable resources are noted in this documentation both in the request- and response parameters wherever expanded resourses is available. Example The vehicles endpoint includes 14 expandable resources. You can include the emission data by adding ?expand[]=emission to the request of the vehicles endpoint. You can expand multiple attributes at once by including multiple query parameters eg. ?expand[]=emission&expand[]=weight. See vehicles for the complete list of expandable resources.

Requires: Expand
QUERY STRING
1?expand[]=emission
Response
{
  "data": {
    "id": 1004501200018020,
    "registration": "AS87640",
    "vin": "VF7X1REVF72378327",
    ...,
    "emission": {
      "co2": 100.0,
      "co": 274.9,
      "hc_plus_nox": 0.0,
      "nox": 25.5,
      "particles": null,
      "particle_filter": false,
      "smoke_density": null,
      "smoke_density_engine_speed": 0,
      "energy_class": "A++",
      "euronorm": "Euro V"
    }
  }
}

Search

Some endpoints allows you to include a request body to make advanced searches. The request body object consists of optional parameters regardings filtering, sorting, page index and size etc., which allows you to customize the query to your specific needs. The keys in the query object is called search matchers and consists of the name of the attribute concatenated with a predicate. The predicate determines how to match the attribute with the search value. For instance, using registration_start on the vehicles endpoint will only return vehicles where registration starts with the given search value. Note all predicates are by default case sensitive with the exception of *_i_cont. See available search attributes in the documentation of the individual resources.

Requires: Search

Request parameters
An object where the keys contains of the name of an attribute and a predicate and the values are the term to search for.
A string representing the desired method of the request. If you avoid including a method, the default method is SELECT. The available methods are: - COUNT - SELECT - PERCENTAGE Note: The token cost of a resource is the same regardless of the method used.
A string representing the aggregate function and column to be included in the response. Currently we only support the aggregate function AVG(), but in the future we will support more functions. Example You can calculate the average mileage with the following: select: "AVG(mileage)" NB: You can only specify a single column for now.
A string representing the name of the attribute used to group the results by. group_by is often used with aggregate functions, which you can read more about in the request parameters select and method. Group by supports the following functions: - YEAR(:attribute) - QUARTER(:attribute) - MONTH(:attribute) - WEEK(:attribute) - DAY(:attribute) - ROUND(:attribute) - ROUND(:attribute, :precision) - NEAREST(:attribute, :precision) - SUBSTRING(:attribute, :position, :length) - CONCAT(:attribute, :attribute, ...)
An integer representing the desired page index of the results in the response. The default value is 1.
An integer representing the maximum results in the response. You can set the per page to any integer between 1 and 100. The default value is 10.
A string representing the sorting argument which consists of the name of an attribute and a direction ASC/DESC. You can parse multiple sorting arguments as an array eg. sorts: ["registration ASC", "first_registration_date DESC"].
A string specifying the type of percentage calculation. The default value is RELATIVE. The available types are: RELATIVE: Calculates the percentage based on the sum of each group. This means the values within each group are expressed as a percentage of the group's total. TOTAL: Calculates the percentage based on the total sum of the column. This means the values within each group are expressed as a percentage of the total sum of the column of all groups combined. The percentage type is only used with method: 'PERCENTAGE'.
Response parameters
A hash or array representing the data of the response. The data can be either a hash or an array depending on the method used in the request. If the method is COUNT, the data will be a hash. If the method is SELECT, the data will be an array.
A boolean indicating if there are more pages of results.
An integer representing the current page
An integer representing the total number of pages.
An integer representing the total number of results.
An integer representing the maximum number of results per page.
Predicates
Used to filter results based on an exact match.
Used to filter results based on a value that is not equal.
Used to filter results based on a string starting with a value. This is equivalent to using a LIKE clause in a SQL query with a wildcard suffix.
Used to filter results based on a string ending with a value. This is equivalent to using a LIKE clause in a SQL query with a wildcard prefix.
Used to filter results based on a partial substring. This is equivalent to using a LIKE clause in a SQL query with surrounding wildcards.
Used to filter results based on a partial substring that matches any value in an array.
Used to filter results based on a case insensitive partial substring. This is equivalent to using a ILIKE clause in a SQL query with surrounding wildcards.
Used to filter results based on a case insensitive partial substring that matches any value in an array.
Used to filter results based on an array of values. This is equivalent to using a WHERE clause in a SQL query with an IN operator
Used to filter results based on a value that is false. This is equivalent to using a WHERE clause in a SQL query with a NOT IN operator.
Used to filter results based on a value less than the specified value.
Used to filter results based on a value less than or equal to the specified value.
Used to filter results based on a value greater than the specified value.
Used to filter results based on a value greater than or equal to the specified value.
Used to filter results based on a value that is null.
Used to filter results based on a value that is not null.
Used to filter results based on a value that is true.
Used to filter results based on a value that is false.
Request Body
{
  "query": {
    "registration_start": "AS876"
  },
  "method": "SELECT",
  "page": 1,
  "per_page": 10,
  "sorts": "registration ASC"
}
Response
{
  "data": [
    {
      "id": 1004501200018020,
      "registration": "AS87640",
      "vin": "VF7X1REVF72378327",
      ...
    },
    {
      ...
    },
    {
      "id": 1004501200018020,
      "registration": "AS87644",
      "vin": "VF7X1REVF72378327",
      ...
    }
  ],
  "has_more": true,
  "page": 1,
  "total_pages": 2,
  "total_count": 18,
  "per_page": 10
}

Pagination

In our API, certain endpoints return paginated results to manage large datasets efficiently. When a response is paginated, it will include several additional fields to help you navigate through the data. These fields help ensure that you can track where you are in the dataset and request further data efficiently, without overloading your system with large sets of records at once. For example, if has_more is true, you can continue fetching data by incrementing the page number in your requests until all results are retrieved.

Request parameters
An integer representing the desired page index of the results in the response. The default value is 1.
An integer representing the maximum results in the response. You can set the per page to any integer between 1 and 100. The default value is 10.
Response parameters
A boolean indicating if there are more pages of results.
An integer representing the current page
An integer representing the total number of pages.
An integer representing the total number of results.
QUERY STRING
1?page=1&per_page=10
Request Body
{
  "page": 1,
  "per_page": 10
}
Response
{
  "data": [
    {
      "id": 1004501200018020,
      "registration": "AS87640",
      "vin": "VF7X1REVF72378327",
      ...
    },
    {
      ...
    }
  ],
  "has_more": true,
  "page": 1,
  "total_pages": 2,
  "total_count": 18
}

Tokens

Some endpoints contain information that is more difficult for us to obtain than others, and these endpoints require available tokens to access. Currently, this only applies to our inspections, dmr_data, appraisals, and tinglysning_data endpoints. In the future, we may implement additional advanced endpoints that also require tokens for access. Important: Tokens are only deducted from your account for requests that return a 200 OK status. Requests that fail or return other status codes will not charge tokens. Tokens are associated with your account and reset every period to the amount included in your active subscription. Unused tokens do not roll over to the next month. See all our subscription plans here.
Endpoint
1GET/v1/tokens
Response
{
  "data": {
    "tokens": 1337
  }
}

Vehicles

The vehicles endpoint handles all vehicle related requests. By default the vehicle object includes basic vehicle information eg. brand, model, fuel type, mileage, registration status etc. You can get a specific vehicle record by providing either the unique id, vin or registration in the request. When multiple vehicles share the same registration the endpoint will return the most recent vehicle associated with the specified registration. The vehicles endpoint also supports 14 expandable resources including weight, emission, periodic taxes and much more. To use expand your active subscription must include the expand capability. Read more about using expand here. Additionally the vehicles endpoint also supports searching. To use search your active subscription must include the search capability. See search for more information.

Requires: ExpandRequires: Search

Request parameters
The unique vehicle id proided by the Danish Road Traffic Authority (Færdselsstyrelsen).
The vehicle identification number (VIN) of the vehicle.
The license plate (registration) of the vehicle. Danish license plates have the following format 'AB12345'.
This parameter is only supported and required when using the search endpoint. Expandable searchable attributes - emission.co2 - emission.co - emission.hc_plus_nox - emission.nox - emission.particles - emission.particle_filter - emission.smoke_density - emission.smoke_density_engine_speed - emission.euronorm - engine.fuel_efficiency - engine.electricity_efficiency - body.color See the search endpoint for more information regarding supported predicates.
This parameter is only supported and required when using the search endpoint. A string representing the name of the attribute you want to group your search results by. This is only available with aggregate functions using our search module. The attributes can be any of the following: - id - registration - vin - first_registration_date - registration_status - registration_status_updated_at - kind - usage - model_year - fuel_type - mileage - extra_equipment - brand_id - model_id - variant_id - version_id - co2 - co - hc_plus_nox - nox - particles - particle_filter - smoke_density - smoke_density_engine_speed - technical_total_weight - total_weight - vehicle_weight - driveable_weight_minimum - driveable_weight_maximum - v_value_air_suspension - v_value_mechanical_suspension - road_train_weight - coupling_device - coupling_device_load_maximum - trailer_with_brakes_weight_maximum - trailer_without_brakes_weight_maximum - trailer_total_weight_maximum - axles - axle_track - pulling_axles - drive_shaft_pressure_maximum - trailer_allowed_pressure_maximum - doors - vin_placement - track_width_front - track_width_rear - passengers - seats_minimum - seats_maximum - standing_passengers_minimum - standing_passengers_maximum - rims_and_tires - fuel_efficiency - electricity_efficiency - top_speed - cylinders - engine_displacement - engine_power - color_id - color - gears - euronorm - ncap_five - last_inspection_date - last_inspection_result - last_inspection_kind - category - engine_code - suitable_for_taxi - eu_version - eu_variant - ec_type_approval - body_type - brand - model - variant - version - inspection_frequency - next_inspection_date - insurance_company - insurance_status - insurance_policy_number - insurance_created_at - cached_at - inspection_invocations - status - status_updated_at - horsepower - mileage_annual_average - energy_class - power_to_weight_ratio - age - electricity_efficiency_measured - battery_capacity - electric_range - plugin_hybrid - automatic_transmission - last_modification - next_inspection_date_estimate - brand_and_model - fuel_type_extended - emission_class - emission_class_id - allowed_in_environmental_zones See the search endpoint for more information regarding group_by.
Response parameters
The unique vehicle id proided by the Danish Road Traffic Authority (Færdselsstyrelsen).
The license plate (registration) of the vehicle. Danish license plates have the following format 'AB12345'.
The vehicle identification number (VIN) of the vehicle.
A string representing the date of the first registration date in the format yyyy-mm-dd
A string representing the current status of the vehicle. The status can be either one of these options: - 'Oprettet' - 'Registreret' - 'Skrottet' - 'Afmeldt' - 'Eksporteret' - 'Slettet' - 'UnderOprettelse' - 'DelvistOprettet' - 'AdministrativOprettelse' - 'HarGennemførtRegistreringssyn'
A string representing the date of the most recent change to the status in the format yyyy-mm-dd
A string representing the current registation status of the vehicle. The registration status can be either one of these options: - 'UnderUdarbejdelse' - 'Registreret' - 'Afmeldt'
A string representing the date of the most recent change to the registration status in the format yyyy-mm-dd
A string representing the kind of vehicle. The kind can be either one of these options: - 'Blokvogn' - 'Påhængsvogn' - 'Lastbil' - 'Motordrevet blokvogn' - 'Stor personbil' - 'Motorcykel' - 'Sættevogn' - 'Motorredskab' - 'Traktor' - 'Traktorpåhængsvogn' - 'Personbil' - 'Stor knallert' - 'Campingvogn' - 'Lille knallert' - 'Varebil' - 'Påhængsredskab'
A string representing the usage of the vehicle. The usage can be either one of these options: - 'Særlig anvendelse' - 'Sygetransport' - 'Godstransport (½ OMS.)' - 'Brandsluknings-/redningskørsel ' - 'Ambulancekørsel' - 'Godstransport privat' - 'Kun godkendt til skov-, landbrug og gartneri' - 'Rutekørsel' - 'Godstransport erhverv' - 'Trækkraft for sættevogn' - 'Beboelse' - 'Privat personkørsel' - 'Skov-, landbrug- og gartnerikørsel' - 'Godstransport' - 'Arbejdskørsel' - 'Særtransport' - 'Buskørsel' - 'Mandskabs-/Materielkørsel' - 'Taxikørsel' - 'Godstransport privat/erhverv' - 'Kørsel for offentlig myndighed' - 'Rustvognskørsel' - 'Kun godkendt til rutekørsel' - 'Limousinekørsel' - 'Privat buskørsel'
A string representing the category of the vehicle. Cagegory M → M1, M2 and M3 Motor vehicles designed and constructed primarily for the carriage of persons and their luggage. - M1: Total weight below 3.500 kg and has a maximum of 9 passengers including the driver. - M2: Total weight below 5.000 kg and can carry more then 9 passengers. - M3: Total weight above 5.000 kg and can carry more than 9 passengers. Cagegory N → N1, N2 and N3 Motor vehicles designed and constructed primarily for the carriage of goods. - N1: Total weight below 3.500 kg. - N2: Total weight below 12.000 kg. - N3: Total weight above 12.000 kg. Cagegory O → O1, O2, O3 and O4 Trailers designed and constructed for the carriage of goods or of persons as well as for the accommodation of persons. - O1: Total weight below 750 kg. - O2: Total weight below 3.500 kg. - O3: Total weight below 10.000 kg. - O4: Total weight above 10.000 kg.
An integer representing the model year of the vehicle.
A string representing the fuel type of the vehicle. The fuel type can be either one of these options: - 'Benzin' - 'Diesel' - 'El' - 'Petroleum' - 'Brint' - 'F-Gas' - 'N-Gas'
An integer representing the mileage of the vehicle.
An integer representing the average mileage per year of the vehicle. The number of years is calculated based on the difference between first_registration_date and last_inspection_date. If either of these are null, the average mileage will also return null. Otherwise the mileage is divided by the number of years.
A string representing the combination of the brand and model of the vehicle. See the brand endpoint for more information and the model endpoint for more information.
A string representing the brand of the vehicle. See the brand endpoint for more information.
A string representing the brand id of the vehicle. See the brand endpoint for more information.
A string representing the model of the vehicle. See the model endpoint for more information.
A string representing the model id of the vehicle. See the model endpoint for more information.
A string representing the variant of the vehicle. See the variant endpoint for more information.
A string representing the variant id of the vehicle. See the variant endpoint for more information.
A string representing the version of the vehicle. See the version endpoint for more information.
A string representing the version id of the vehicle. See the version endpoint for more information.
A string representing the body type of the vehicle. See the body_type endpoint for more information.
A string representing the EU version of the vehicle.
A string representing the EU variant of the vehicle.
A string representing the European Community Type Approval of the vehicle.
A string representing the date of the last inspection in the format yyyy-mm-dd.
A string representing the result of the last inspection. The inspection result can be either one of these options: - 'Godkendt' - 'IkkeFuldstaendigtSyn' - 'IkkeGodkendt' - 'IkkeGodkendtKanGenfremstilles' - 'KanGodkendesVedOmsynAfOmsynsvirksomhed' - 'KanGodkendesVedOmsynAfSynsvirksomhed'
A string representing the kind of the last inspection. The inspection kind can be either one of these options: - 'KontrolSyn' - 'MOT' - 'PeriodiskSyn' - 'RegistreringsSyn' - 'RegistreringssynToldsyn'
A string representing the estimated date of the next periodic inspection in the format yyyy-mm-dd. The date is estimated based on available data and is not guaranteed to be correct. You can use the DMR data endpoint to get the official date of the next periodic inspection. Read more about the frequency of periodic inspections here.
A boolean representing if the vehicles has completed the Euro NCAP test with 5 stars. Read more about NCAP test and stars here.
A string in the format yyyy-mm-dd representing the start date of the current leasing period. Returns null if the vehicle is not currently leased. See leasing periods to get a list of all previous leasing periods.
A string in the format yyyy-mm-dd representing the end date of the current leasing period. Returns null if the vehicle is not currently leased. See leasing periods to get a list of all previous leasing periods.
A comma separated string representing the extra equipment of the vehicle. The extra equipment is more detailed than the equipment resource, but isn't available for all vehicles.
An array of objects representing the inspections of the vehicle. By default the vehicles object will include a shallow version of all inspections with limited information. To include the full inspection object use the expand parameter. See the inspections endpoint for more information. NB: Inspections are only included/available with a paid subscription.
Endpoints
1GET /v1/vehicles/:id
2GET /v1/vehicles/vin/:vin
3GET /v1/vehicles/registration/:registration
4POST/v1/vehicles/search
Response
{
  "data": {
    "id": 1004501200018020,
    "registration": "AS87640",
    "vin": "VF7X1REVF72378327",
    "first_registration_date": "2000-08-14",
    "status": "Skrottet",
    "status_updated_at": "2016-04-18",
    "registration_status": "Afmeldt",
    "registration_status_updated_at": "2016-04-18",
    "kind": "Personbil",
    "usage": "Privat personkørsel",
    "category": "M1",
    "model_year": null,
    "fuel_type": "Benzin",
    "mileage": 407000,
    "mileage_annual_average": 25432,
    "brand_and_model": "CITROËN XANTIA",
    "brand": "CITROËN",
    "brand_id": "10045",
    "model": "XANTIA",
    "model_id": "10045053",
    "variant": "2,0 I 16 V",
    "variant_id": "1004505304",
    "version": "UOPLYST",
    "version_id": "10045053040000000",
    "body_type": null,
    "eu_version": null,
    "eu_variant": null,
    "ec_type_approval": null,
    "last_inspection_date": "2020-04-20",
    "last_inspection_result": "Godkendt",
    "last_inspection_kind": "PeriodiskSyn",
    "next_inspection_date_estimate": "2022-04-20",
    "ncap_five": true,
    "leasing_period_start": null,
    "leasing_period_end": null,
    "extra_equipment": null,
    "inspections": [
      {
        ...
      }
    ]
  }
}

Vehicles
Emission
The emission object is an expandable attribute on vehicles, which you can include by adding the query string ?expand[]=emission to the url of the vehicles endpoint. Included in the response is information about gas-, particle emissions and smoke density. Not all vehicles have this information available - especially older vehicles lack this data. You can see a list of included attributes below. To find information regarding fuel efficiency, fuel type and/or energy efficiency of electric vehicles see engine.

Requires: Expand

Response parameters
A float representing the amount of CO₂ emitted in g/km (Grams per kilometer).
A float representing the amount of CO emitted in mg/km (Milligrams per kilometer).
A float representing the total amount of HC and NOx emitted in mg/km (Milligrams per kilometer).
A float representing the amount of NOx emitted in mg/km (Milligrams per kilometer).
A float representing the amount of particles emitted in mg/km (Milligrams per kilometer).
A boolean indicating if the vehicle has a particle filter.
A float representing the smoke density.
An integer representing the engine's RPM (revolutions per minute) at which the smoke density was measured.
A string representing the energy class of the vehicle. The energy class is calculated based on the fuel type and fuel effiency of the vehicle. The energy class can be either one of these options: - 'A+++' - 'A++' - 'A+' - 'A' - 'B' - 'C' - 'D' - 'E' - 'F' - 'G' Read more about energy classes on the officiel website here.
A string representing the emission class of the vehicle. The emission class can be either one of these options: - '1' - '2' - '3' - '4' - '5'
A string representing the euronorm of the vehicle. The euronorm can be either one of these options: - 'Euro I' - 'Euro II' - 'Euro III' - 'Euro IV' - 'Euro V' - 'Euro VI' - 'Euro VII' - 'Ikke Euro' - 'Ingen Norm' - 'EEV' - 'År 2000 miljønorm' - 'År 2005 miljønorm' - 'Miljønorm 2006 maks 150ccm' - 'Miljønorm 2006 over 150ccm'
A boolean indicating if the vehicle is allowed in environmental zones. The value is calculated based on the fuel_type, kind, registration_date, particle_filter and euronorm of the vehicle. Read more about environmental zones here on miljoezoner.dk
QUERY STRING
1?expand[]=emission
Response
{
  "emission": {
    "co2": 100.0,
    "co": 274.9,
    "hc_plus_nox": 0.0,
    "nox": 25.5,
    "particles": null,
    "particle_filter": false,
    "smoke_density": null,
    "smoke_density_engine_speed": 0,
    "energy_class": "A++",
    "emission_class": "1",
    "euronorm": "Euro V",
    "allowed_in_environmental_zones": true
  }
}

Vehicles
Engine
The engine object is an expandable attribute on vehicles, which you can include by adding the query string ?expand[]=engine to the url of the vehicles endpoint. Included in the response is information about fuel efficiency, top speed, horse power etc. Not all vehicles have this information available - especially older vehicles lack this data. You can see a list of included attributes below. To find information regarding gas- and particle emissions see emission.

Requires: Expand

Response parameters
A float representing the combined fuel efficiency in km/l (kilometers per liter). The value is provided by DMR and accounts for both fossil fuel and electricity.
A float representing the electricity efficiency in wh/km (watt-hours per km).
An integer representing the top speed in km/h (kilometers per hour).
A string representing the primary fuel type of the vehicle.
A string representing the extended fuel type of the vehicle. The extended fuel type include hybrid and plug-in hybrid vehicles. The value is calculated based on the model and variant of the vehicle.
An integer representing the number of gears.
An integer representing the number of cylinders.
A string representing the engine code of the vehicle.
A float representing the engine displacement, sometimes referred to as engine capacity or cc (Cubic Centimeters).
A float representing the engine power of the vehicle in kW (Kilowatt) which is the standard unit used by the European manufacturers. See also horsepower.
A float representing the calculated horsepower of the vehicle based on 1 hp = 0.745699872 kW.
A float representing the calculated power to weight ratio of the vehicle in the unit kW/kg. The value is equal to power_to_weight_ratio = engine_power / driveable_weight_minimum. See the weight endpoint for more information.
QUERY STRING
1?expand[]=engine
Response
{
  "engine": {
    "fuel_efficiency": 23.3,
    "electricity_efficiency": null,
    "top_speed": null,
    "fuel_type": "Benzin",
    "fuel_type_extended": "Benzin",
    "gears": 5,
    "cylinders": 3,
    "engine_code": null,
    "engine_displacement": null,
    "engine_power": 140.0,
    "horsepower": 190.0,
    "power_to_weight_ratio": 0.06
  }
}

Vehicles
Weight
The weight object is an expandable attribute on vehicles, which you can include by adding the query string ?expand[]=weight to the url of the vehicles endpoint. Included in the response is information about weight limits, min/max load, coupling device, max trailer weight etc. Not all vehicles have this information available - especially older vehicles lack this data. You can see a list of included attributes below.

Requires: Expand

Response parameters
An integer representing the maximum allowed total weight for the vehicle according to the manufacturer - this includes passengers, oil, fuel, baggage ect.
An integer representing the maximum allowed total weight for the vehicle according to danish law - this includes passengers, oil, fuel, baggage ect.
An integer representing the weight of the vehicle without passengers, oil, fuel, baggage etc.
An integer representing the minimum drivable weight, which includes the vehicle weight, driver and necessary fluids eg. oil, fuel etc.
An integer representing the maximum drivable weight, which includes the vehicle weight and necessary fluids eg. oil, fuel etc.
An integer representing the v-value of the air suspension.
An integer representing the v-value of the mechanical suspension.
An integer representing the maximum allowed total weight of the vehicle including trailer, passengers, oil, fuel, baggage etc.
A boolean indicating if the vehicle has a coupling device.
An integer representing the maximum allowed load of the coupling device.
An integer representing the maximum allowed weight of a trailer with brakes.
An integer representing the maximum allowed weight of a trailer without brakes.
An integer representing the maximum allowed total weight of a trailer.
A string representing the division of the vehicle. The division can be either one of these options: - 'light' - 'heavy'
QUERY STRING
1?expand[]=weight
Response
{
  "weight": {
    "technical_total_weight": 1340,
    "total_weight": 1340,
    "vehicle_weight": null,
    "driveable_weight_minimum": 943,
    "driveable_weight_maximum": null,
    "v_value_air_suspension": null,
    "v_value_mechanical_suspension": null,
    "road_train_weight": 1570,
    "coupling_device": false,
    "coupling_device_load_maximum": null,
    "trailer_with_brakes_weight_maximum": 200,
    "trailer_without_brakes_weight_maximum": 100,
    "trailer_total_weight_maximum": null,
    "division": "light"
  }
}

Vehicles
Axle
The axle object is an expandable attribute on vehicles, which you can include by adding the query string ?expand[]=axle to the url of the vehicles endpoint. Included in the response is information about number of axles, axle track, drive shaft maximum pressure etc. Not all vehicles have this information available - especially older vehicles lack this data. You can see a list of included attributes below. To find information regarding tires/rims, track width, number of seats/doors etc see body.

Requires: Expand

Response parameters
An integer representing the total number of axles.
An integer representing the axle distance in mm.
A string representing the pulling axles.
An integer representing the maximum pressure on the drive shaft in kg.
An integer representing the maximum pressure on the trailer in kg.
QUERY STRING
1?expand[]=axle
Response
{
  "data": {
    "axle": {
      "axles": 2,
      "axle_track": 2450,
      "pulling_axles": "1",
      "drive_shaft_pressure_maximum": 730,
      "trailer_allowed_pressure_maximum": null
    }
  }
}

Vehicles
Body
The body object is an expandable attribute on vehicles, which you can include by adding the query string ?expand[]=body to the url of the vehicles endpoint. Included in the response is information about tires and rims, track width, number of doors, seats and passengers etc. Not all vehicles have this information available - especially older vehicles lack this data. You can see a list of included attributes below. To find information regarding body type see body type.

Requires: Expand

Response parameters
An integer representing the number of doors of the vehicle.
A string description of the physical vehicle inspection number placement.
An integer representing the track width of the front wheels in mm.
An integer representing the track width of the rear wheels in mm.
An integer representing the maximum number of passengers.
An integer representing the minumum number of seats in the vehicle.
An integer representing the maximum number of seats in the vehicle
An integer representing the allowed minumum number of standing passengers in the vehicle.
An integer representing the allowed maximum number of standing passengers in the vehicle.
A string with a detailed description of rims, tires and axles.
A string representing the color of the vehicle.
QUERY STRING
1?expand[]=body
Response
{
  "body": {
    "doors": 4,
    "vin_placement": "Forrest i motorrum",
    "track_width_front": 1430,
    "track_width_rear": 1415,
    "passengers": 4,
    "seats_minimum": 5,
    "seats_maximum": null,
    "standing_passengers_minimum": null,
    "standing_passengers_maximum": null,
    "rims_and_tires": "1. aksel:175/55R15 77S,15x5J/ET46. 2. aksel: 175/55R15 77S,15x5J/ET46",
    "color": "Rød"
  }
}

Vehicles
Permits
The permits array is an expandable attribute on vehicles, which you can include by adding the query string ?expand[]=permits to the url of the vehicles endpoint. Some vehicles has special permits associated with them. A permit can be granted to vehicles in relation to the use of the specific vehicle. Each permit object consists of a name and a unique id provided by DMR.

Requires: Expand

Response parameters
An integer representing the unique id associated with the permit provided by DMR.
A string representing the name of the permit provided by DMR.
A string representing the comment associated with the permit. Usually contains information about who issued the permit.
A string representing when the permit was issued in the format yyyy-mm-dd.
QUERY STRING
1?expand[]=permits
Response
{
  "permits": [
    {
      "id": 1,
      "name": "Synsfri Sammenkobling",
      "comment": "DMR Konvertering",
      "valid_from": "2020-05-04"
    },
    {
      "id": 8,
      "name": "Firmakørsel",
      "comment": "CVR: 43140485",
      "valid_from": "2020-05-04"
    },
    {
      ...
    }
  ]
}

Vehicles
Age
The age object is an expandable attribute on vehicles, which you can include by adding the query string ?expand[]=age to the url of the vehicles endpoint. The age of a vehicle is calculated on based on the first_registration_date, registration_status and registration_status_updated_at of the vehicle. The age of inactive vehicles is calculated between first_registration_date and registration_status_updated_at whereas active vehicles use the current date. We clasify the vehicle as inactive if the registration_status = 'Afmeldt'. Included in the response is the years and months components of the age object.

Requires: Expand

Response parameters
An integer representing the total number of years of a given age eg. the age 7 years and 6 months would return years: 7.
An integer representing the remaining months of a given age as a number between 0 to 11 eg. the age 7 years and 6 months would return months: 6.
QUERY STRING
1?expand[]=age
Response
{
  "age": {
    "years": 8,
    "months": 6
  }
}

Vehicles
Equipment
The equipment array is an expandable attribute on vehicles, which you can include by adding the query string ?expand[]=equipment to the url of the vehicles endpoint. Most vehicles have different equipment depending on the brand, model, variant and version. Each equipment object consists of a name, quantity and a unique id provided by DMR,

Requires: Expand

Response parameters
An integer representing the unique id associated with the equipment provided by DMR.
A string representing the name of the equipment provided by DMR. The name can be either one of these options: - '1- eller 2-zone klima' - '3 el. flere sæderækker' - '3- eller 4-zone klima' - '6-gear manuel' - 'ABS bremser' - 'affjedret stel (mc)' - 'afstandsradar' - 'Airbags' - 'Bakkamera' - 'brændstoffyr' - 'Dobbeltkabine' - 'elektrisk bagklap' - 'elektrisk lukning af døre' - 'elektron. dæmpere' - 'El-gardiner i bagdøre' - 'El-gardiner i bagrude' - 'el-indstilleligt rat' - 'el-indst. sæder bag' - 'el-opvarmet forrude' - 'el-soltag' - 'ESP (Elektronisk Stabiliserings Program)' - 'fartpilot' - 'faste sidetasker (mc)' - 'firehjulstraek' - 'Glastag' - 'head-up display' - 'HiFi musikanlæg' - 'højrestyring' - 'integreret barnesæde' - 'keramiske skiver' - 'key-less go (nøglefri)' - 'klimaanlæg (Manuel)' - 'kompressor' - 'kurvelys' - 'lædersæder' - 'lang forgaffel (mc)' - 'Linievogter' - 'luftaffjedring' - 'Memory-sæder for' - 'Metalfoldetag' - 'Metallak' - 'Motornummer (mc)' - 'multifunktionsrat' - 'natsyns-udstyr' - 'navigationssystem' - 'niveauregulering' - 'ombygget karrosseri' - 'ombygget stel (mc)' - 'opvarmet rat/styr' - 'original tyverialarm' - 'Parkeringsassistent' - 'Parkeringskontrol bag' - 'Parkeringskontrol for' - 'radio' - 'Ratbetjent gear' - 'ruskind/alcantara' - 'sædemassage' - 'selealarm' - 'skivebremse bag (mc)' - 'skivebremse for (mc)' - 'solcellekøling' - 'sportssæder' - 'stemmestyring' - 'stift stel (mc)' - 'større hjul end 20"' - 'targa' - 'trinløst gear' - 'tunet motor' - 'turbo' - 'u. siderude i v. side af varerum' - 'ventilation i sæder' - 'vognbaneskift-alarm' - 'xenon lys'
An integer representing the quantity of the equipment provided by DMR.
QUERY STRING
1?expand[]=equipment
Response
{
  "equipment": [
    {
      "id": 401,
      "name": "Ratbetjent gear",
      "quantity": 1
    },
    {
      ...
    }
  ]
}

Vehicles
Manufacturer
The manufacturer object is an expandable attribute on vehicles, which you can include by adding the query string ?expand[]=manufacturer to the url of the vehicles endpoint. The Society of Automotive Engineers (SAE) in the US assigns WMIs to manufacturers. We support the most commonly used WMIs, however we can't guarantee this information will be available and accurate for all vehicles. Included in the response is information about the manufacturers name, country and region.

Requires: Expand

Response parameters
A string representing the name of the manufacturer.
A string representing the region of the manufacturer.
A string representing the country of the manufacturer.
QUERY STRING
1?expand[]=manufacturer
Response
{
  "manufacturer": {
    "name": "Mitsubishi Thailand",
    "region": "Asia",
    "country": "Thailand"
  }
}

Vehicles
Driving License
The driving license object is an expandable attribute on vehicles, which you can include by adding the query string ?expand[]=driving_license to the url of the vehicles endpoint. You must have a valid driving licence to legally drive a vehicle in Denmark, which corresponds to the category of your motor vehicle. We support the most common driving license categories, however we can't guarantee this information will be available and accurate for all vehicles. Vehicles are divided into different categories based on their weight and power. See our weight and engine endpoints for more information.

Requires: Expand

Response parameters
A string representing the category of the required driving license to operate the vehicle. The category can be either one of these options: - 'LK' - 'AM' - 'T' - 'M' - 'A1' - 'A1' - 'A' - 'C1' - 'C' - 'B' - 'B+' - 'B/E' Read more about driving license categories here.
QUERY STRING
1?expand[]=driving_license
Response
{
  "driving_license": {
    "category": "B"
  }
}

Vehicles
Periodic Taxes
All registered vehicles pays either vehicle weight tax, green vehicle tax or CO2 vehicle tax. The periodic taxes depends on the vehicle kind, usage and first registration date. Certain vehicles are subject to additional taxes: compensation tax, particle emissions tax, road- and private use tax. The periodic taxes object is an expandable attribute on vehicles, which you can include by adding the query string ?expand[]=periodic_taxes to the url of the vehicles endpoint. Included in the response is an array of periodic taxes which each has a name, amount, payment_frequency and the calculated total_amount. The taxes calculated here is an estimate and we can't guarantee this information will be available and accurate for all vehicles. Currently we only support passenger cars. If you want to calculate the periodic taxes of other vehicles, please use the official periodic tax calculator from the danish motor vehicle agency here.

Requires: Expand

Response parameters
An array of all periodic taxes associated with the vehicle. Vægtafgift → Vehicle weight tax Vehicle weight tax must be paid for private cars first registered in Denmark before 1 July 1997 and for vans first registered in Denmark before 18 March 2009. Vehicle weight tax is calculated on the basis of the vehicle's weight. The heavier the vehicle, the higher the vehicle weight tax. Grøn ejerafgift → Green vehicle tax Green vehicle tax must be paid for private cars (excluding buses) first registered in Denmark between 1 July 1997 and 30 June 2021, and for vans first registered in Denmark during the period between 18 March 2009 and 30 June 2021. Green vehicle tax is calculated on the basis of how far the vehicle's fuel efficiency. The further it can run, the lower the green vehicle tax. CO2-ejerafgift → CO2 vehicle tax CO2 vehicle tax must be paid for private cars and vans (excluding buses) first registered on or after 1 July 2021, irrespective of whether the first registration took place in Denmark or abroad. The CO2 tax is calculated on the basis of the number of grammes of CO2 emitted by the vehicle per kilometre. The less CO2 emitted per kilometre, the lower the tax. Partikeludledningstillæg → Particle emission surcharge A diesel-powered private car or a diesel-powered van with a maximum permitted weight of up to 3,500 kg, and the car is not fitted with an approved particle filter, you must pay an annual particle emissions surcharge. Udligningsafgift → Compensation tax The compensation tax corrects the difference in the tax between petrol and diesel vehicles. When the tax on petrol is increased, the compensation tax is also raised. When the tax on diesel is increased, the compensation tax is lowered.
A float representing the total amount in DKK of all periodic taxes for the vehicle.
A string representing the frequency of the periodic tax. The payment frequency can be either one of these options: - 'quarterly' - 'semesterly' - 'yearly'
QUERY STRING
1?expand[]=periodic_taxes
Response
{
  "periodic_taxes": {
    "taxes": [
      {
        "name": "Grøn ejerafgift",
        "amount": 340.0,
        "payment_frequency": "semesterly"
      },
      {
        "name": "Udligningsafgift",
        "amount": 1420.0,
        "payment_frequency": "semesterly"
      }
    ],
    "total_amount": 1760.0,
    "payment_frequency": "semesterly"
  }
}

Vehicles
DMR Data
Some information isn't available through the weekly XML export eg. next inspection date and insurance information. To get this information you have to manually lookup the vehicle at the official DMR website. The DMR data object is an expandable attribute on vehicles, which you can include by adding the query string ?expand[]=dmr_data to the url of the vehicles endpoint. Included in the response is an object with insurance info and the date of the next inspection. Our server will contact the remote server live. This takes a few seconds to execute and costs 1 token. We suggest that you avoid using this in combination with search and only expand this information for individual vehicles. To improve response times, we cache the response from the remote server for a short time, so subsequent requests are served faster without repeated live queries.

Requires: ExpandRequires: Tokens

Response parameters
A boolean indicating if the DMR service is generally available.
A string representing the name of the insurance company.
A string representing the insurance status.
A string representing the insurance policy number.
A string in the format yyyy-mm-dd representing the day the insurance was created.
A string in the format yyyy-mm-dd representing the date of the next periodic inspection of the vehicle.
A string representing the frequency of inspections for the vehicle.
An array containing any active inspection invocations. Each invocation contains the following attributes: - invocation_type - invocation_created_at - invocation_deadline
A string representing the euronorm of the vehicle. The euronorm can be either one of these options: - 'Euro I' - 'Euro II' - 'Euro III' - 'Euro IV' - 'Euro V' - 'Euro VI' - 'Euro VII' - 'Ikke Euro' - 'Ingen Norm' - 'EEV' - 'År 2000 miljønorm' - 'År 2005 miljønorm' - 'Miljønorm 2006 maks 150ccm' - 'Miljønorm 2006 over 150ccm'
A float representing the electricity efficiency measured in wh/km (watt-hours per km)
A float representing the battery capacity in kWh (kilowatt hour).
A float representing the electric range in km (kilometer).
A boolean indicating if the vehicle is a plugin hybrid.
A boolean indicating if the vehicle has an automatic transmission.
A string representing the date of the last inspection in the format yyyy-mm-dd.
A string representing the result of the last inspection. The inspection result can be either one of these options: - 'Godkendt' - 'IkkeFuldstaendigtSyn' - 'IkkeGodkendt' - 'IkkeGodkendtKanGenfremstilles' - 'KanGodkendesVedOmsynAfOmsynsvirksomhed' - 'KanGodkendesVedOmsynAfSynsvirksomhed'
A string representing the kind of the last inspection. The inspection kind can be either one of these options: - 'KontrolSyn' - 'MOT' - 'PeriodiskSyn' - 'RegistreringsSyn' - 'RegistreringssynToldsyn'
A string in the format yyyy-mm-dd representing the start date of the current leasing period. Returns null if the vehicle is not currently leased. See leasing periods to get a list of all previous leasing periods.
A string in the format yyyy-mm-dd representing the end date of the current leasing period. Returns null if the vehicle is not currently leased. See leasing periods to get a list of all previous leasing periods.
A string representing the certificate id of the current leasing period. Returns null if the vehicle is not currently leased. See leasing periods to get a list of all previous leasing periods.
ENDPOINTS / QUERY STRINGs
1GET/v1/vehicles/dmr_data?id=:id
2GET/v1/vehicles/dmr_data?vin=:vin
3GET/v1/vehicles/dmr_data?registration=:registration
4
5?expand[]=dmr_data
Response
{
  "dmr_data": {
    "service_available": true,
    "insurance_company": "Alm. Brand",
    "insurance_status": "Aktiv",
    "insurance_policy_number": "N/A",
    "insurance_created_at": "2021-01-25",
    "next_inspection_date": "2025-01-25",
    "inspection_frequency": "Første gang efter 4 år, herefter hvert 2. år",
    "inspection_invocations": [
      {
        "invocation_type": "PeriodiskSyn",
        "invocation_created_at": "2022-04-26",
        "invocation_deadline": "2022-07-27"
      }
    ],
    "euronorm": "Euro V",
    "electricity_efficiency_measured": 213.0,
    "battery_capacity": 87.0,
    "electric_range": 409.0,
    "plugin_hybrid": false,
    "automatic_transmission": false,
    "last_inspection_kind": "PeriodiskSyn",
    "last_inspection_result": "Godkendt",
    "last_inspection_date": "2020-06-26",
    "leasing_period_start": "2022-05-16",
    "leasing_period_end": "2023-05-16",
    "leasing_period_certificate_id": "491423425567660834"
  }
}

Vehicles
Tinglysning Data
The Tinglysning service is the official Danish registry for rights and obligations on vehicles. The service provides information about the vehicle's liabilities and ownership. The Tinglysning data object is an expandable attribute on vehicles, which you can include by adding the query string ?expand[]=tinglysning_data to the url of the vehicles endpoint. Included in the response is an object with information about the vehicle's liabilities and ownership. Our server will contact the remote server live. This takes a few seconds to execute and costs 1 token. We suggest that you avoid using this in combination with search and only expand this information for individual vehicles. To improve response times, we cache the response from the remote server for a short time, so subsequent requests are served faster without repeated live queries.

Requires: ExpandRequires: Tokens

Response parameters
A boolean indicating if the Tinglysning service is generally available
An array containing all liabilities associated with the vehicle. Each liability contains the following attributes: - date - creditors - debtors - floating_charges - amount - currency
ENDPOINTS / QUERY STRINGs
1GET/v1/vehicles/tinglysning_data?vin=:vin
2
3?expand[]=tinglysning_data
Response
{
  "tinglysning_data": {
    "service_available": true,
    "liabilities": [
      {
        "date": "2023-04-21T08:40:08.137+02:00",
        "creditors": [
          {
            "type": "Person",
            "name": "John Doe",
            "birth_date": "1996-01-01"
          },
          {
            "type": "Person",
            "name": "Jane Doe",
            "birth_date": "1996-12-31"
          }
        ],
        "debtors": [
          {
            "type": "Person",
            "name": "John Doe",
            "birth_date": "1996-01-01"
          },
          {
            "type": "Person",
            "name": "Jane Doe",
            "birth_date": "1996-12-31"
          }
        ],
        "floating_charges": [
          {
            "amount": 100000,
            "currency": "DKK",
            "priority": 1,
            "owners": [
              {
                "type": "Company",
                "name": "Nordea Danmark",
                "cvr": "25992180"
              }
            ]
          }
        ],
        "amount": 100000,
        "currency": "DKK"
      }
    ]
  }
}

Vehicles
Leasing Periods
A vehicle lease is a popular type of auto financing that allows you to “rent” a car from a dealership for a certain length of time and amount of miles. The leasing periods array is an expandable attribute on vehicles, which you can include by adding the query string ?expand[]=leasing_periods to the url of the vehicles endpoint. Included in the response is an array with all known leasing periods ordered by the newest first. Each leasing period object consists of a leasing_period_start and leasing_period_end.

Requires: ExpandRequires: Search

Response parameters
An integer representing the unique identifier of the vehicle.
A string representing the start date of the leasing period in the format yyyy-mm-dd
A string representing the end date of the leasing period in the format yyyy-mm-dd
QUERY STRINGs
1POST/v1/leasing_periods/search
2
3?expand[]=leasing_periods
Response
{
  "leasing_periods": [
    {
      "vehicle_id": 1004501200018020,
      "leasing_period_start": "2022-05-16",
      "leasing_period_end": "2023-05-15"
    },
    {
      "vehicle_id": 1004501200018020,
      "leasing_period_start": "2021-05-16",
      "leasing_period_end": "2022-05-15"
    },
    {
      ...
    }
  ]
}

Vehicles
Supplementary Body Types
The supplementary body types object is an expandable attribute on vehicles, which you can include by adding the query string ?expand[]=supplementary_body_types to the url of the vehicles endpoint. Included in the response is an array of supplementary body types. Each supplementary body type has a name and a unique id provided by DMR.

Requires: Expand

Response parameters
An integer representing the unique id associated with the supplementary body type provided by DMR.
A string representing the name of the supplementary body type provided by DMR. The name can be either one of these options: - 'Åbent lad med sidefjæle' - 'Åbent lad uden sidefjæle' - 'Betonkanon' - 'Bjærgningsanordning' - 'Køleanlæg' - 'Ladlængde 3.00- 3.99 M' - 'Ladlængde 4.00- 4.99 M' - 'Ladlængde 5.00- 5.99 M' - 'Ladlængde over 4.99 M' - 'Ladlængde over 5.99 M' - 'Ladlængde under 3.00 M' - 'Længde max 8 M' - 'Længde over 8 M' - 'Læssebagsmæk' - 'Læssekran' - 'Lukket kasse' - 'Presenningsopbygning' - 'Renovationsaggregat' - 'Sikkerhedsseler eftermonteret' - 'Tank' - 'Tippelad' - 'TMA (energiabsorberende enhed)' - 'Veksellad / container'
QUERY STRING
1?expand[]=supplementary_body_types
Response
{
  "supplementary_body_types": [
    {
      "id": 66,
      "name": "Presenningsopbygning"
    },
    {
      ...
    }
  ]
}

Vehicles
ALPR
Our ALPR (Automatic License Plate Recognition) service is a real-time vehicle recognition system that uses AI to automatically read vehicle license plates. When you request the endpoint the ALPR service will analyze the image and return the vehicle. This takes a few seconds to execute and costs 1 token.

Request parameters
The URL of the image to analyze.
Response parameters
The unique vehicle id proided by the Danish Road Traffic Authority (Færdselsstyrelsen).
The license plate (registration) of the vehicle. Danish license plates have the following format 'AB12345'.
The vehicle identification number (VIN) of the vehicle.
A string representing the date of the first registration date in the format yyyy-mm-dd
A string representing the current status of the vehicle. The status can be either one of these options: - 'Oprettet' - 'Registreret' - 'Skrottet' - 'Afmeldt' - 'Eksporteret' - 'Slettet' - 'UnderOprettelse' - 'DelvistOprettet' - 'AdministrativOprettelse' - 'HarGennemførtRegistreringssyn'
A string representing the date of the most recent change to the status in the format yyyy-mm-dd
A string representing the current registation status of the vehicle. The registration status can be either one of these options: - 'UnderUdarbejdelse' - 'Registreret' - 'Afmeldt'
A string representing the date of the most recent change to the registration status in the format yyyy-mm-dd
A string representing the kind of vehicle. The kind can be either one of these options: - 'Blokvogn' - 'Påhængsvogn' - 'Lastbil' - 'Motordrevet blokvogn' - 'Stor personbil' - 'Motorcykel' - 'Sættevogn' - 'Motorredskab' - 'Traktor' - 'Traktorpåhængsvogn' - 'Personbil' - 'Stor knallert' - 'Campingvogn' - 'Lille knallert' - 'Varebil' - 'Påhængsredskab'
A string representing the usage of the vehicle. The usage can be either one of these options: - 'Særlig anvendelse' - 'Sygetransport' - 'Godstransport (½ OMS.)' - 'Brandsluknings-/redningskørsel ' - 'Ambulancekørsel' - 'Godstransport privat' - 'Kun godkendt til skov-, landbrug og gartneri' - 'Rutekørsel' - 'Godstransport erhverv' - 'Trækkraft for sættevogn' - 'Beboelse' - 'Privat personkørsel' - 'Skov-, landbrug- og gartnerikørsel' - 'Godstransport' - 'Arbejdskørsel' - 'Særtransport' - 'Buskørsel' - 'Mandskabs-/Materielkørsel' - 'Taxikørsel' - 'Godstransport privat/erhverv' - 'Kørsel for offentlig myndighed' - 'Rustvognskørsel' - 'Kun godkendt til rutekørsel' - 'Limousinekørsel' - 'Privat buskørsel'
A string representing the category of the vehicle. Cagegory M → M1, M2 and M3 Motor vehicles designed and constructed primarily for the carriage of persons and their luggage. - M1: Total weight below 3.500 kg and has a maximum of 9 passengers including the driver. - M2: Total weight below 5.000 kg and can carry more then 9 passengers. - M3: Total weight above 5.000 kg and can carry more than 9 passengers. Cagegory N → N1, N2 and N3 Motor vehicles designed and constructed primarily for the carriage of goods. - N1: Total weight below 3.500 kg. - N2: Total weight below 12.000 kg. - N3: Total weight above 12.000 kg. Cagegory O → O1, O2, O3 and O4 Trailers designed and constructed for the carriage of goods or of persons as well as for the accommodation of persons. - O1: Total weight below 750 kg. - O2: Total weight below 3.500 kg. - O3: Total weight below 10.000 kg. - O4: Total weight above 10.000 kg.
An integer representing the model year of the vehicle.
A string representing the fuel type of the vehicle. The fuel type can be either one of these options: - 'Benzin' - 'Diesel' - 'El' - 'Petroleum' - 'Brint' - 'F-Gas' - 'N-Gas'
An integer representing the mileage of the vehicle.
An integer representing the average mileage per year of the vehicle. The number of years is calculated based on the difference between first_registration_date and last_inspection_date. If either of these are null, the average mileage will also return null. Otherwise the mileage is divided by the number of years.
A string representing the combination of the brand and model of the vehicle. See the brand endpoint for more information and the model endpoint for more information.
A string representing the brand of the vehicle. See the brand endpoint for more information.
A string representing the brand id of the vehicle. See the brand endpoint for more information.
A string representing the model of the vehicle. See the model endpoint for more information.
A string representing the model id of the vehicle. See the model endpoint for more information.
A string representing the variant of the vehicle. See the variant endpoint for more information.
A string representing the variant id of the vehicle. See the variant endpoint for more information.
A string representing the version of the vehicle. See the version endpoint for more information.
A string representing the version id of the vehicle. See the version endpoint for more information.
A string representing the body type of the vehicle. See the body_type endpoint for more information.
A string representing the EU version of the vehicle.
A string representing the EU variant of the vehicle.
A string representing the European Community Type Approval of the vehicle.
A string representing the date of the last inspection in the format yyyy-mm-dd.
A string representing the result of the last inspection. The inspection result can be either one of these options: - 'Godkendt' - 'IkkeFuldstaendigtSyn' - 'IkkeGodkendt' - 'IkkeGodkendtKanGenfremstilles' - 'KanGodkendesVedOmsynAfOmsynsvirksomhed' - 'KanGodkendesVedOmsynAfSynsvirksomhed'
A string representing the kind of the last inspection. The inspection kind can be either one of these options: - 'KontrolSyn' - 'MOT' - 'PeriodiskSyn' - 'RegistreringsSyn' - 'RegistreringssynToldsyn'
A string representing the estimated date of the next periodic inspection in the format yyyy-mm-dd. The date is estimated based on available data and is not guaranteed to be correct. You can use the DMR data endpoint to get the official date of the next periodic inspection. Read more about the frequency of periodic inspections here.
A boolean representing if the vehicles has completed the Euro NCAP test with 5 stars. Read more about NCAP test and stars here.
A string in the format yyyy-mm-dd representing the start date of the current leasing period. Returns null if the vehicle is not currently leased. See leasing periods to get a list of all previous leasing periods.
A string in the format yyyy-mm-dd representing the end date of the current leasing period. Returns null if the vehicle is not currently leased. See leasing periods to get a list of all previous leasing periods.
A comma separated string representing the extra equipment of the vehicle. The extra equipment is more detailed than the equipment resource, but isn't available for all vehicles.
An array of objects representing the inspections of the vehicle. By default the vehicles object will include a shallow version of all inspections with limited information. To include the full inspection object use the expand parameter. See the inspections endpoint for more information. NB: Inspections are only included/available with a paid subscription.
ENDPOINTS
1POST/v1/vehicles/by_image
Response
{
  "data": {
    "id": 1004501200018020,
    "registration": "AS87640",
    "vin": "VF7X1REVF72378327",
    "first_registration_date": "2000-08-14",
    "status": "Skrottet",
    "status_updated_at": "2016-04-18",
    "registration_status": "Afmeldt",
    "registration_status_updated_at": "2016-04-18",
    "kind": "Personbil",
    "usage": "Privat personkørsel",
    "category": "M1",
    "model_year": null,
    "fuel_type": "Benzin",
    "mileage": 407000,
    "mileage_annual_average": 25432,
    "brand_and_model": "CITROËN XANTIA",
    "brand": "CITROËN",
    "brand_id": "10045",
    "model": "XANTIA",
    "model_id": "10045053",
    "variant": "2,0 I 16 V",
    "variant_id": "1004505304",
    "version": "UOPLYST",
    "version_id": "10045053040000000",
    "body_type": null,
    "eu_version": null,
    "eu_variant": null,
    "ec_type_approval": null,
    "last_inspection_date": "2020-04-20",
    "last_inspection_result": "Godkendt",
    "last_inspection_kind": "PeriodiskSyn",
    "next_inspection_date_estimate": "2022-04-20",
    "ncap_five": true,
    "leasing_period_start": null,
    "leasing_period_end": null,
    "extra_equipment": null,
    "inspections": [
      {
        ...
      }
    ]
  }
}

Vehicles
Appraisals
A vehicle appraisal provides a detailed valuation of a vehicle’s import/export value and registration tax. Appraisals play a key role in calculating registration taxes for both purchased and leased vehicles. For leased vehicles, appraisals are essential for determining tax obligations at the start and end of each leasing period, as well as when a vehicle is imported or exported. The appraisals array is an expandable attribute on vehicles, accessible by adding the query string ?expand[]=appraisals to the URL of the vehicles endpoint. Our server will contact the remote server live. This takes a few seconds to execute and costs 1 token. We suggest that you avoid using this in combination with search and only expand this information for individual vehicles.

Requires: ExpandRequires: Tokens

Response parameters
A string representing the date of the appraisal in the format yyyy-mm-dd
An integer representing the original price of the vehicle in DKK.
An integer representing the market price of the vehicle in DKK.
An integer representing the value of the vehicle in DKK.
An integer representing the registration tax of the vehicle in DKK.
QUERY STRING
1?expand[]=appraisals
Response
{
  "appraisals": {
    "service_available": true,
    "data": [
      {
        "date": "2024-04-22",
        "original_price": 986638,
        "market_price": 112000,
        "value": 43288,
        "registration_tax": 68712
      },
      {
        "date": "2023-04-05",
        "original_price": 752145,
        "market_price": 141705,
        "value": 54495,
        "registration_tax": 87210
      },
      {
        ...
      }
    ]
  }
}

Inspections

According to danish law, all registrered vehicles must undergo an inspection every few years. The overall purposes of the inspection is to ensure the vehicle is safe to drive on the road - this includes steering, tires, lights, turn signals, reflectors and load-bearing parts such as wheel suspension and shock absorbers as well as the environmental conditions, such as control of smoke, carbon monoxide and noise. Included in the inspection object is information about mileage, result of the inspection as well as which authorized test center performed the inspection. You can see a list of included attributes below. You can get a specific inspection by providing an id in the request. Additionally you can search for multiple inspections using the search endpoint. See search for more information. The inspection object is available as an expandable resource on vehicles, which you can include by adding the query string ?expand[]=inspections to the url of the vehicles endpoint. Expanding inspections on a vehicle will include an array of every inspection associated with the vehicle. Note: Each inspection in the response costs 1 token. This also applies to any inspections included by expand and/or search. You can specify a limit with per_page when using search.

Requires: Tokens

Request parameters
The unique id associated with the inspection.
This parameter is only supported and required when using the search endpoint. See the search endpoint for more information regarding supported predicates.
Response parameters
The unique id associated with the inspection provided by Færdelsstyrelsen.
The unique id associated with the vehicle provided by DMR.
The registration / license plate associated with the vehicle.
The vehicle identification number (VIN) of the vehicle.
A string representing the date of the inspection in the format yyyy-mm-dd.
A string representing the time of the inspection in the format HH:MM:SS.
A string representing the weekday of the inspection in Danish.
An integer representing the week number of the inspection. We calculate the week number based on Sunday being the first day of the week.
A string representing the month of the inspection in Danish.
A string representing the kind of the inspection. The inspection kind can be either one of these options: - 'Periodisk syn' - 'Toldsyn import' - 'Toldsyn export' - 'Registreringssyn' - 'Registreringssyn uden ændring' - 'Kontrolsyn' - 'Særligt registreringssyn' - '§2, stk. 2-syn'
A string representing the variant of the inspection. The inspection variant can be either one of these options: - 'Første syn' - 'Omsyn' - 'Genfremstilling'
A string representing the result of the inspection. The inspection result can be either one of these options: - 'Godkendt' - 'Betinget godkendt' - 'Over middel' - 'Middel' - 'under middel' - 'Ikke godkendt' - 'Ufuldstændigt syn' - 'Kan godkendes efter omsyn hos synsvirksomhed' - 'Kan godkendes efter omsyn hos (om)synsvirksomhed' - 'Ikke godkendt og omsyn er ikke muligt' - 'Ikke godkendt og genfremstilling er muligt' - 'Periodisk syn fra andet EU/EØS-land godkendt'
A string representing the type of vehicle in the inspection. The vehicle type can be either one of these options: - 'Påhængsredskab til MC' - 'Campingvogn til MC' - 'Blokvogn' - 'M1-Personbil > 3500 kg' - 'Traktor <= 3500 kg' - 'O3-Påhængsvogn 3501-10000 kg' - 'Campingvogn > 3500 kg' - 'Traktor > 3500 kg' - 'M2-Stor personbil' - 'Knallert' - 'Motorcykel' - 'N1-Varebil <= 3500 kg' - 'Motorredskab <= 3500 kg' - 'Traktor' - 'N3-Lastbil > 12000 kg' - 'Traktorpåhængsvogn' - 'M2-Stor personbil <= 3500 kg' - 'M3-Stor personbil > 5000 kg' - 'M1-Personbil <= 3500 kg' - 'Mobilkran' - 'Traktorpåhængsvogn > 3500 kg' - 'O1-Påhængsvogn <= 750 kg' - 'Blokpåhængsvogn' - 'Påhængsredskab > 3500 kg' - 'O2-Sættevogn 751-3500 kg' - 'Stor Knallert' - 'Bloksættevogn' - 'O4-Sættevogn > 10000 kg' - 'Blokvognsdolly' - 'O3-Sættevogn 3501-10000 kg' - 'Motordrevet blokvogn' - 'Påhængsredskab <= 3500 kg' - 'Lille Knallert' - 'O4-Påhængsvogn > 10000 kg' - 'Motorredskab > 3500 kg' - 'Motorredskab' - 'M1-Personbil' - 'O2-Påhængsvogn 751-3500 kg' - 'Traktorpåhængsvogn <= 3500 kg' - 'Blokvognsmodul' - 'Campingvogn <= 3500 kg' - 'M2-Stor personbil 3501-5000 kg' - 'N2-Lastbil 3501-12000 kg' - 'O1-Påhængsvogn til MC' - 'O1-Sættevogn <= 750 kg'
A string representing the division of the vehicle in the inspection. The vehicle division can be either heavy or light. The division is determined based on the vehicle_type. The following vehicle types are considered light: - 'Campingvogn <= 3500 kg' - 'Campingvogn til MC' - 'Lille Knallert' - 'M1-Personbil <= 3500 kg' - 'M2-Stor personbil <= 3500 kg' - 'Motorcykel' - 'Motorredskab <= 3500 kg' - 'N1-Varebil <= 3500 kg' - 'O1-Påhængsvogn <= 750 kg' - 'O1-Påhængsvogn til MC' - 'O1-Sættevogn <= 750 kg' - 'O2-Påhængsvogn 751-3500 kg' - 'O2-Sættevogn 751-3500 kg' - 'Påhængsredskab <= 3500 kg' - 'Påhængsredskab til MC' - 'Stor Knallert' - 'Traktor <= 3500 kg' - 'Traktorpåhængsvogn <= 3500 kg' The following vehicle types are considered heavy: - 'Blokvogn' - 'Blokpåhængsvogn' - 'Bloksættevogn' - 'Blokvognsdolly' - 'Blokvognsmodul' - 'Campingvogn > 3500 kg' - 'M1-Personbil > 3500 kg' - 'M2-Stor personbil 3501-5000 kg' - 'M3-Stor personbil > 5000 kg' - 'Mobilkran' - 'Motordrevet blokvogn' - 'Motorredskab > 3500 kg' - 'N2-Lastbil 3501-12000 kg' - 'N3-Lastbil > 12000 kg' - 'O3-Påhængsvogn 3501-10000 kg' - 'O3-Sættevogn 3501-10000 kg' - 'O4-Påhængsvogn > 10000 kg' - 'O4-Sættevogn > 10000 kg' - 'Påhængsredskab > 3500 kg' - 'Traktor > 3500 kg' - 'Traktorpåhængsvogn > 3500 kg'
An integer representing the mileage of the vehicle at the time of the inspection.
A string representing the deadline date of the reinspection in the format yyyy-mm-dd. Only vehicles which didn't pass the first inspection will have this date.
An integer representing the id of the inspection test center.
An integer representing the company number of the test center.
A string representing the name of the test center.
A string representing the address of the test center.
A string representing the combination of the name and the address of the test center.
An integer representing the zip code of the test center.
A string representing the city of the test center.
A string representing the url to the official PDF of the inspection from The Danish Road Traffic Authority (Færdelsstyrelsen).
An array of error code objects assoiated with the vehicle at the time of the inspection. See error codes for more information.
Endpoints
1GET /v1/inspections/:id
2POST/v1/inspections/search
Response
{
  "data": {
    "id": 26939482,
    "vehicle_id": 9000000000970539,
    "registration": "AS67902",
    "vin": "MMCXNA03AFH012439",
    "date": "2021-01-07",
    "time": "07:47:00",
    "weekday": "Torsdag",
    "week_number": 1,
    "month": "Januar",
    "kind": "Periodisk syn",
    "variant": "Første syn",
    "result": "Godkendt",
    "vehicle_type": "M1-Personbil <= 3500 kg",
    "vehicle_division": "light",
    "mileage": 129000,
    "reinspection_deadline": null,
    "inspection_test_center_id": 1337,
    "test_center_company_no": 28519516,
    "test_center_name": "Dekra Bilsyn",
    "test_center_address": "Frederikstadvej 12A",
    "test_center_name_and_address": "Dekra Bilsyn - Frederikstadvej 12A",
    "test_center_zip": 9200,
    "test_center_city": "Aalborg SV",
    "pdf": "https://findsynsrapport.esyn.dk/webapi/v1/Document/26939482",
    "error_codes": [
      {
        "code": "6",
        "category": "El-anlæg, lygter, reflekser mv.",
        "description": "nummerpladelygte, virker ikke, højre"
      },
      {
        ...
      }
    ]
  }
}

Inspections
Error Codes
The error code object is an expandable attribute on inspections which is included by default. Included in the response is information about the error code, category and description. To find additional information regarding the inspection see the inspections endpoint.

Response parameters
An integer representing the unique id of the error code.
A string representing the category of the error code. The category can be either one of these options: - `Aksler, hjul` - `Aksler, hjul, dæk` - `Aksler, og affjedring` - `Bremser` - `Bremseudstyr, Mekanisk tilstand og virkemåde` - `Bremseudstyr, blokeringsfri bremser (ABS)` - `Bremseudstyr, bremsevæske ` - `Bremseudstyr, driftsbremse` - `Bremseudstyr, elektronisk bremsesystem (EBS)` - `Bremseudstyr, nødbremse` - `Bremseudstyr, parkeringsbremse` - `Bremseudstyr, retarders ydeevne` - `Bremseudstyr, tilstand og virkemåde` - `Bærende elementer` - `Chassis og dele fastgjort til chassis, kabine og karrosseri` - `Chassis, eller ramme og dertil fastgjorte dele` - `Chassis, karosseri og opbygning mv.` - `Dimensioner` - `Dokumentation` - `Dokumentation, Generel` - `El-anlæg, lygter, reflekser mv.` - `Elektrisk udstyr og andet` - `For køretøjer til personbefordring M2 og M3 , Trapper og trin` - `For køretøjer til personbefordring M2 og M3, Afdugnings- og afrimningsanlæg` - `For køretøjer til personbefordring M2 og M3, Døre` - `For køretøjer til personbefordring M2 og M3, Gangareal, ståpladser` - `For køretøjer til personbefordring M2 og M3, Indvendig belysning og GPS-udstyr` - `For køretøjer til personbefordring M2 og M3, Krav til befordring af børn` - `For køretøjer til personbefordring M2 og M3, Krav til befordring af personer med` - `For køretøjer til personbefordring M2 og M3, Krav til befordring af personer med nedsat mobilitet` - `For køretøjer til personbefordring M2 og M3, Meddelelser` - `For køretøjer til personbefordring M2 og M3, Sæder` - `For køretøjer til personbefordring M2 og M3, Ventilations- og opvarmningsanlæg` - `For køretøjer til personbefordring, Afdugnings- og afrimningsanlæg` - `For køretøjer til personbefordring, Indvendig belysning og GPS-udstyr` - `For køretøjer til personbefordring, M2 og M3 Andet specialudstyr` - `For køretøjer til personbefordring, Trapper og trin` - `For køretøjer til personbefordring, Ventilations- og opvarmningsanlæg` - `Forskelligt udstyr, ESC` - `Forskelligt udstyr, Indre indretning, udsyn, særligt udstyr mv.` - `Forskelligt udstyr, advarselstrekant` - `Forskelligt udstyr, hastighedsbegrænsende anordning` - `Forskelligt udstyr, hastighedsmåler` - `Forskelligt udstyr, ildslukker` - `Forskelligt udstyr, kilometertæller hvis forefindes` - `Forskelligt udstyr, lydsignalapparat` - `Forskelligt udstyr, låse og tyverisikringsanordning` - `Forskelligt udstyr, sikkerhedsseler/lukke- og fastholdelsesanordninger` - `Forskelligt udstyr, stopklodser` - `Forskelligt udstyr, takograf` - `Gener, Andre miljørelaterede punkter` - `Gener, Støj` - `Gener, Udstødning` - `Gener, andre miljørelaterede punkter` - `Gener, dæmpning af elektromagnetisk støj` - `Gener, støj` - `Gener, udstødning` - `Identifikation af køretøj` - `Identifikation af køretøj, Tempo 100` - `Identifikation af køretøj, nummerplade(r) ` - `Identifikation af køretøj, stel-/serienummer` - `Identifikation og påskrifter` - `Indre indretning, udsyn, særligt udstyr mv.` - `Karrosseri, opbygning mv.` - `Lygter, bagnummerpladelygte` - `Lygter, baklygter` - `Lygter, elektrisk udstyr, batteri(er)` - `Lygter, elektrisk udstyr, ledningsnet` - `Lygter, elektriske forbindelser mellem det trækkende køretøj og påhængskøretøj` - `Lygter, forlygter` - `Lygter, ikke obligatoriske lygter og refleksanordninger` - `Lygter, positionslygter, baglygter, (side)markeringslygter og kørelyslygter` - `Lygter, påkrævede signallamper for belysningsudstyr` - `Lygter, refleksanordninger, konturafmærkning og markeringsplader bag` - `Lygter, retningsviserblinklygter og havariblink` - `Lygter, stoplygter` - `Lygter, tågelygter for og bag` - `Montering af aerodynamisk udstyr er udført jf FS meddelelse.` - `Motor, støj, luftforurening mv.` - `Opbygning` - `Styreapparat` - `Styreapparat, Sporing af hjul` - `Styreapparat, drejeled på påhængskøretøjs styrende aksel` - `Styreapparat, elektronisk servostyring (EPS)` - `Udsyn, afdugningsanlæg` - `Udsyn, forrudeviskere` - `Udsyn, førerspejle eller spejlanordninger` - `Udsyn, rudernes tilstand` - `Udsyn, synsfelt` - `Vægt og dimensioner`
A string representing the description of the error code.
Response
{
  "error_codes": [
    {
      "code": "6",
      "category": "El-anlæg, lygter, reflekser mv.",
      "description": "nummerpladelygte, virker ikke, højre"
    },
    {
      ...
    }
  ]
}

Brands

The brands endpoint returns an array of all known brands (also known as make or marque) in the Danish Motor Register (DMR). Each brand has a name and a unique id provided by DMR. You can get a specific brand by providing id in the request. The brand object is included in the vehicle response by default. Additionally you can get a list of all models associated with a specific brand by adding /models to the request url. That will return a paginated result. This endpoint also allows you to use the search module. See search for more information.

Requires: ExpandRequires: Search

Request parameters
The unique id associated with the brand.
The following attributes are expandable. - models
Response parameters
A string representing the unique id associated with the brand provided by DMR.
A string representing the name of the brand provided by DMR.
Endpoints
1GET /v1/brands
2GET /v1/brands/:id
3GET /v1/brands/:id/models
4POST/v1/brands/search
Response
{
  "data": [
    {
      "id": "1",
      "name": "AUDI"
    },
    {
      ...
    }
  ]
}

Models

Most brands have a set of different models they produce. To get a list of all models of a given brand go to the brands endpoint. Each model has a name and a unique id provided by DMR. You can get a specific model by providing an id in the request. The model object is included in the vehicle response by default. Additionally you can get a list of all variants associated with a specific model by adding /variants to the request url. That will return a paginated result. This endpoint also allows you to use the search module. See search for more information.

Requires: ExpandRequires: Search

Request parameters
The unique ID associated with the specific model.
The following attributes are expandable. - brands - variants
Response parameters
A string representing the unique id associated with the model provided by DMR.
A string representing the name of the model provided by DMR.
Endpoints
1GET /v1/models/:id
2GET /v1/models/:id/variants
3POST/v1/models/search
Response
{
  "data": {
    "id": "1",
    "name": "A1"
  }
}

Variants

Most models have different variants. To get a list of all variants of a given model go to the models endpoint. Each variant has a name and a unique id provided by DMR. You can get a specific variant by providing an id in the request. The variant object is included in the vehicle response by default. Additionally you can get a list of all versions associated with a specific variant by adding /versions to the request url. That will return a paginated result. This endpoint also allows you to use the search module. See search for more information.

Requires: ExpandRequires: Search

Request parameters
The unique ID associated with the specific variant.
The following attributes are expandable. - models - versions
Response parameters
A string representing the unique id associated with the variant provided by DMR.
A string representing the name of the variant provided by DMR.
Endpoints
1GET /v1/variants/:id
2GET /v1/variants/:id/versions
3POST/v1/variants/search
Response
{
  "data": {
    "id": "1",
    "name": "2,0 I 16 V"
  }
}

Versions

Each version has a name and a unique id provided by DMR. You can get a specific version by providing the id in the request. The version object is included in the vehicle response by default. This endpoint also allows you to use the search module. See search for more information.

Requires: ExpandRequires: Search

Request parameters
The unique ID associated with the specific version.
The following attributes are expandable. - variants
Response parameters
A string representing the unique id associated with the version provided by DMR.
A string representing the name of the version provided by DMR.
Endpoints
1GET /v1/versions/:id
2POST/v1/versions/search
Response
{
  "data": {
    "id": "104",
    "name": "Hatchback"
  }
}

Body Types

The body type of a vehicle refers to the shape of a particular automobile. Body types are usually established by a car's ‘body style’, which can vary from a tall and boxy (SUV), low and sleek (coupe) or somewhere in-between (hatchback). This endpoint provides a list of all body types. Each body type has a name and a unique id provided by DMR. You can get a specific body type by providing the id in the request. The body type object is included in the vehicle response by default.

Request parameters
The unique ID associated with the specific body type.
Response parameters
A string representing the unique id associated with the body type provided by DMR.
A string representing the name of the body type provided by DMR.
Endpoints
1GET/v1/body_types
2GET/v1/body_types/:id
Response
{
  "data": {
    "id": "1",
    "name": "Sedan"
  }
}

Test Centers

A test center is a private company that can perform vehicle inspections. The Danish Road Traffic Authority (Færdelsstyrelsen) is responsible for authorizing new test centers and performing periodic check-ups of their performance. Each test center has a smiley indicating how well they comply with the regulatory requirements. Test centers are separated into two categories (heavy and light) based on the vehicle types they are authorized to inspect - referred to as division. A smiley is associated with the test center in context of their division. Most test centers only inspect either light- or heavy vehicles, however some test centers are authorized to inspect both vehicle types. These test centers will have two smileys associated - one for each division, which is why some test centers appears twice in the response. Read more about the different smileys in the response parameters below.

Response parameters
A string representing the name of the test center.
A string representing the address of the test center.
A string representing the zip of the test center.
A string representing the city of the test center.
A float representing the latitude of the test center.
A float representing the longitude of the test center.
A string representing the division of the test center. The division can be either one of these options: - 'Light' - 'Heavy'
A string representing the phone number of the test center without the danish +45 country code.
A string representing the url of the test center's website.
A string representing the current smiley of the test center. The vehicle type can be either one of these options: - 'Elite' - 'Godkendt' - 'Plads til forbedring' - 'Under opsyn' - 'Under skærpet opsyn' Elite → Elite Indicates a very well-functioning test center that rarely makes mistakes and has a very high inspection quality. Godkendt → Approved Indicates a test center which generally does a great job but occasionally makes minor mistakes. Plads til forbedring → Room for improvement Indicates a test center which performs below average and has room for improvement. Under opsyn → Under supervision Indicates a test center which regulary makes mistakes and performs low quality inspections. Under skærpet opsyn → Under stricter supervision Indicates a test center which has great difficulty in complying with the requirements. Test centers with this smiley risk being closed, unless immediate efforts are made to improve the quality of their inspections.
Endpoint
1GET/v1/test_centers
Response
{
  "data": [
    {
      "name": "ABC Bilsyn ApS - København",
      "address": "Lergravsvej 60",
      "zip": 2300,
      "city": "København",
      "lat": 55.66401,
      "lng": 12.62686,
      "division": "light",
      "phone": 32958082,
      "website": "https://www.abcbilsyn.dk",
      "smiley": "Elite"
    },
    {
      ...
    }
  ]
}

Inspection Test Centers

An inspection test center is similar to a test center. The fundamental distinction is that the test centers endpoint solely provide information on currently authorized test centers and includes information like website and smiley. We've only been tracking this information since january 2016, and we unfortunately can't obtain historical information prior to this date. To overcome this limitation, inspection test centers strive to offer a solution by extracting aggregate information across all our inspections, thus enabling us to provide data dating back to 2005. Included in the response is name, address, city, zip, lat, lng, company_no as well as the first_inspection_date and last_inspection_date. NB: The inspection_test_center_id on inspections can be used in combination with the search endpoint to extract inspections for a specific test center in a given period.

Requires: Search

Request parameters
This parameter is only supported and required when using the search endpoint. See the search endpoint for more information regarding supported predicates.
This parameter is only supported and required when using the search endpoint. A string representing the name of the attribute you want to group your search results by. This is only available with aggregate functions using our search module. The attributes can be any of the following: - id - name - address - city - zip - company_no - first_inspection_date - last_inspection_date - deleted_at - latitude - longitude - test_center_id - confirmed_at See the search endpoint for more information regarding group_by.
Response parameters
An arbritrary integer provided by Synsbasen API representing the unique identifier of the test center.
A string representing the name of the test center.
A string representing the address of the test center.
A string representing the zip of the test center.
A string representing the city of the test center.
A float representing the latitude of the inspection test center.
A float representing the longitude of the inspection test center.
An integer representing the company number of the test center.
A string in the format yyyy-mm-dd representing the date of the first known inspection performed by the test center.
A string in the format yyyy-mm-dd representing the date of the last known inspection performed by the test center.
Endpoints
1GET /v1/inspection_test_centers
2GET /v1/inspection_test_centers/:id
3POST/v1/inspection_test_centers/search
Response
{
  "data": [
    {
      "id": 1337,
      "name": "ABC Bilsyn ApS - København",
      "address": "Lergravsvej 60",
      "zip": 2300,
      "city": "København",
      "lat": 55.66401,
      "lng": 12.62686,
      "company_no": 28519516,
      "first_inspection_date": "2017-03-14",
      "last_inspection_date": "2022-04-20"
    },
    {
      ...
    }
  ]
}

Watched Vehicles

The Watched Vehicles feature allows you to associate vehicles with your account and receive webhook notifications when vehicle data changes or a new inspection is created. Events & webhook setup To use this feature, you must define an active webhook endpoint where you listen for the following events: - vehicle.updated: Triggered when a vehicle's data (such as registration or emissions) is updated. - inspection.created: Triggered when a new inspection record is created for the vehicle. Webhook events will be sent as HTTP POST requests to the endpoint you define. Subscription Limits The number of vehicles you can subscribe to matches the number of tokens available in your subscription plan. Each token grants you one vehicle subscription.

Requires: Tokens
Endpoints
1GET /v1/watched_vehicles
2POST/v1/watched_vehicles
3DELETE/v1/watched_vehicles/:vehicle_id

Watched Vehicles
List watched vehicles
This endpoint returns a list of your watched vehicles.

Requires: Tokens

Query parameters
An integer representing the desired page index of the results in the response. The default value is 1.
An integer representing the maximum results in the response. You can set the per page to any integer between 1 and 100. The default value is 10.
Response parameters
An array representing the watched vehicles.
A boolean indicating if there are more pages of results.
An integer representing the current page
An integer representing the total number of pages.
An integer representing the total number of results.
An integer representing the maximum number of results per page.
Endpoint
1GET /v1/watched_vehicles
Response
{
  "data": [
    {
      "vehicle_id": 9000000000970539
    }
  ],
  "has_more": false,
  "page": 1,
  "total_pages": 1,
  "total_count": 1,
  "per_page": 10
}

Watched Vehicles
Create watched vehicle
This endpoint allows you to create a watched vehicle. Beware, you can't subscribe to the same vehicle multiple times.

Requires: Tokens

Request parameters
An integer representing the unique id of the vehicle that is being watched.
Response parameters
An integer representing the unique id of the vehicle that is being watched.
Endpoint
1POST/v1/watched_vehicles
Request Body
{
  "vehicle_id": 9000000000970539
}
Response
{
  "vehicle_id": 9000000000970539
}

Watched Vehicles
Delete watched vehicle
This endpoint allows you to delete a watched vehicle.

Requires: Tokens

Query parameters
An integer representing the unique id of the vehicle that is being watched.
Endpoint
1DELETE/v1/watched_vehicles/:vehicle_id

Webhook Endpoints

You can configure webhook endpoints via your dashboard to be notified about events that happen. Our dashboard provides a user interface for registering and testing your webhook endpoints. Delivery All webhooks are sent as POST requests with a JSON payload to the configured URL. The JSON payload will contain an event parameter, which indicates the type of event that triggered the webhook. The payload will also contain a data attribute, which contains the data associated with the event (if any). Security All webhooks will include a signature in the X-Synsbasen-Signature header. You can use this signature to verify that the webhook was sent by Synsbasen. To verify the webhook signature, use the HMAC-SHA256 algorithm with your webhook endpoint's signing secret as the key and the raw JSON payload as the message. Compare the result with the signature provided in the X-Synsbasen-Signature header. If they match, the webhook is authentic; otherwise, reject the request. Here's a simple example in Ruby/Sinatra. Retry behavior All endpoints must respond with a 2xx HTTP response to indicate that the webhook has been successfully received. If a webhook delivery fails (non-2xx HTTP response), the event will be automatically retried up to 10 times using an exponential backoff strategy. Starting with an initial delay of 5 minutes, each subsequent retry interval doubles, giving progressively more time between attempts to allow for temporary issues to resolve. The retry intervals are: - 5 minutes - 10 minutes - 20 minutes - 40 minutes - 80 minutes - 160 minutes - 320 minutes - 640 minutes - 1280 minutes - 2560 minutes If the endpoint is disabled when a retry is scheduled, no further retries will be attempted. However, re-enabling the endpoint before the retry occurs will resume the scheduled attempts. Disable behavior If five separate events (outside of retries) fail to deliver successfully to the same endpoint, the endpoint will be automatically disabled to prevent further failed attempts. You can re-enable the endpoint manually from the dashboard after addressing the issue, at which point retries for any pending events will resume. Limits You can have up to 2 webhook endpoints. If you need more, please contact us at info@synsbasen.dk.
Events
1POSTinspection.created
2POSTinspections.updated
3POSTtest_centers.created
4POSTvehicle.updated
5POSTvehicles.updated

Webhook Endpoints
inspection.created
The inspection.created webhook is triggered when we detect a new inspection for one of your watched vehicles. You can manage your webhooks on your dashboard and watched vehicles through the watched vehicles endpoints.

Response parameters
A string representing the event that triggered the webhook. In this case, inspection.created
The inspection payload from the inspections endpoint.
Event
1POSTinspection.created
Response
{
  "event": "inspection.created",
  "data": {
    "id": 26939482,
    "vehicle_id": 9000000000970539,
    "registration": "AS67902",
    "vin": "MMCXNA03AFH012439",
    "date": "2021-01-07",
    "time": "07:47:00",
    "weekday": "Torsdag",
    "week_number": 1,
    "month": "Januar",
    "kind": "Periodisk syn",
    "variant": "Første syn",
    "result": "Godkendt",
    "vehicle_type": "M1-Personbil <= 3500 kg",
    "vehicle_division": "light",
    "mileage": 129000,
    "reinspection_deadline": null,
    "inspection_test_center_id": 1337,
    "test_center_company_no": 28519516,
    "test_center_name": "Dekra Bilsyn",
    "test_center_address": "Frederikstadvej 12A",
    "test_center_name_and_address": "Dekra Bilsyn - Frederikstadvej 12A",
    "test_center_zip": 9200,
    "test_center_city": "Aalborg SV",
    "pdf": "https://findsynsrapport.esyn.dk/webapi/v1/Document/26939482",
    "error_codes": [
      {
        "code": "6",
        "category": "El-anlæg, lygter, reflekser mv.",
        "description": "nummerpladelygte, virker ikke, højre"
      },
      {
        ...
      }
    ]
  }
}

Webhook Endpoints
inspections.updated
The inspections.updated webhook is triggered when we've successfully uploaded all new inspections from the previous day. You can manage your webhooks on your dashboard.

Response parameters
A string representing the event that triggered the webhook. In this case, inspections.updated
This parameter is always null for this event.
Event
1POSTinspections.updated
Response
{
  "event": "inspections.updated",
  "data": null
}

Webhook Endpoints
test_centers.created
The test_centers.created webhook is triggered when we detect new test centers. Included in the response is an array of the newly created test centers. You can manage your webhooks on your dashboard.

Response parameters
A string representing the event that triggered the webhook. In this case, test_centers.created
An array containing the test centers that were created. See test centers for more information.
Event
1POSTtest_centers.created
Response
{
  "event": "test_centers.created",
  "data": [
    {
      "name": "FDM Test og Bilsyn - Aalborg",
      "address": "Håndværkervej 20",
      "zip": 9000,
      "city": "Aalborg",
      "lat": 57.03157,
      "lng": 9.924997,
      "division": "light",
      "phone": 70133040,
      "website": "https://www.fdmbilsyn.dk",
      "smiley": "Elite"
    },
    {
      ...
    }
  ]
}

Webhook Endpoints
vehicle.updated
The vehicle.updated webhook is triggered when we detect an update to one of your watched vehicles. You can manage your webhooks on your dashboard and watched vehicles through the watched vehicles endpoints.

Response parameters
A string representing the event that triggered the webhook. In this case, vehicle.updated
The vehicle payload from the vehicles endpoint.
Event
1POSTvehicle.updated
Response
{
  "event": "vehicle.updated",
  "data": {
    "id": 1004501200018020,
    "registration": "AS87640",
    "vin": "VF7X1REVF72378327",
    "first_registration_date": "2000-08-14",
    "status": "Skrottet",
    "status_updated_at": "2016-04-18",
    "registration_status": "Afmeldt",
    "registration_status_updated_at": "2016-04-18",
    "kind": "Personbil",
    "usage": "Privat personkørsel",
    "category": "M1",
    "model_year": null,
    "fuel_type": "Benzin",
    "mileage": 407000,
    "mileage_annual_average": 25432,
    "brand_and_model": "CITROËN XANTIA",
    "brand": "CITROËN",
    "brand_id": "10045",
    "model": "XANTIA",
    "model_id": "10045053",
    "variant": "2,0 I 16 V",
    "variant_id": "1004505304",
    "version": "UOPLYST",
    "version_id": "10045053040000000",
    "body_type": null,
    "eu_version": null,
    "eu_variant": null,
    "ec_type_approval": null,
    "last_inspection_date": "2020-04-20",
    "last_inspection_result": "Godkendt",
    "last_inspection_kind": "PeriodiskSyn",
    "next_inspection_date_estimate": "2022-04-20",
    "ncap_five": true,
    "leasing_period_start": null,
    "leasing_period_end": null,
    "extra_equipment": null,
    "inspections": [
      {
        ...
      }
    ]
  }
}

Webhook Endpoints
vehicles.updated
The vehicles.updated webhook is triggered once we've successfully uploaded the latest XML export by DMR, meaning all vehicles have been updated to the most recent information. Usually this occours weekly every Monday. You can manage your webhooks on your dashboard.

Response parameters
A string representing the event that triggered the webhook. In this case, vehicles.updated
This parameter is always null for this event.
Event
1POSTvehicles.updated
Response
{
  "event": "vehicles.updated",
  "data": null
}

Changelog

This section provides a concise summary of the updates, improvements, and fixes we've made to our service. Stay informed about the latest changes as we continuously strive to enhance your experience. If you have any questions and/or suggestions please don't hesitate to contact us at info@synsbasen.dk.

We now support automatic retry for webhooks. If the webhook request fails, we will retry the request up to 10 times with an exponential backoff strategy. Read more about webhooks here.
We now include allowed_in_environmental_zones for vehicles in the emission payload.
We now include the per_page parameter in the response when using the search endpoint. Only apply to methods that return a collection of resources eg. SELECT.
It is now possible to get appraisals from DMR. Read more about appraisals here.
We now include supplementary_body_types for vehicles. Read more about supplementary body types here.
We now include the emission_class of the vehicle in the emission payload. Read more about emission class here.
We have changed the attribute pulling_axles from an integer to a string, since it can contain multiple free text values.
We have removed the following deprecated attributes, since they are no longer available in the XML export from DMR: - body_type_id from vehicles - default_quantity from equipment - valid_to from permits
We now include the number of gears. You can get this info by expanding engine on the vehicles endpoint.
We now support webhook signing secrets to verify the authenticity of the webhook requests. Read more about webhook signing secrets here.
It is now possible to watch vehicles and receive notifications using webhooks when the vehicle is updated or new inspections are created. Read more about watched vehicles here.
We now include the current_page in the response when using the search endpoint. Only apply to methods that return a collection of resources eg. SELECT.
We now allow requests from any origin in the CORS policy.
We now support Automatic License Plate Recognition (ALPR) for vehicles. Read more in the vehicles endpoint.
It is now possible to extract the quarter from a date using the QUARTER method in the search endpoint.
It is now possible to concatenate strings using the CONCAT method in the search endpoint.
It is now possible to calculate the percentage in combination with the group_by method using the PERCENTAGE method in the search endpoint.
We now include extended fuel type information regarding hybrid and plug-in hybrid vehicles. The attribute is called fuel_type_extended and can be used to search and group by the extended fuel type of the vehicle.
It is now possible to search for brands, models, variants and versions using the search endpoint.
It is now possible to search directly in leasing periods using the search endpoint. Read more about leasing periods here.
It is now possible to remove duplicates from the search results using the DISTINCT method in the search endpoint.
It is now possible to round to nearest arbitrary integer using the NEAREST method in the search endpoint.
We now include a combined attribute of the brand and model of the vehicle in the vehicle payload. The attribute is called brand_and_model and can be used to search and group by the brand and model of the vehicle.
We now support debt from Tinglysning. Information about debt can be expanded on vehicles using the tinglysning_data endpoint.
We now include the total number of results in the response when using the search endpoint. Only apply to methods that return a collection of resources eg. SELECT.
We now include the total number of pages in the response when using the search endpoint. This can be used to paginate through the results. Only apply to methods that return a collection of resources eg. SELECT.
It is now possible to search and group by registraion, month, mileage and time on inspections using the search endpoint.
It is now possible to search for multiple terms using the _cont_any and i_cont_any predicates. Read more about the predicates here.
It is now possible to extract a substring from a string and use in group_by using the search endpoint. Read more about the functions here.
It is now possible to search and group by color on vehicles using the search endpoint.
It is now possible to get an estimate of the next inspection date using the vehicles endpoint. The estimate is based on the last inspection date and the inspection frequency.
It is now possible to extract YEAR, MONTH, WEEK and DAY from dates and use in group_by using the search endpoint. We've also added a new function called ROUND which can be used to round to nearest integer. Read more about the functions here.
It is now possible to get the certificate id of the current leasing period using the dmr_data endpoint.
It is now possible to get the extra equipment of the vehicle using the vehicles endpoint.
It is now possible to get the vehicle division of the vehicle using the inspections endpoint. The vehicle division indicates if the vehicle is considered light or heavy.
We've included more attributes for vehicles when using the dmr_data endpoint. Here is a list of the newly added attributes: - electricity_efficiency_measured - battery_capacity - electric_range - plugin_hybrid - automatic_transmission Read more about the attributes and their units in the dmr_data endpoint.
It is now possible to fetch DMR data for new vehicles using the dmr_data endpoint. Previously it was only possible to expand DMR data for vehicles which already existed in our database. This meant vehicles registered in DMR during the week couldn't be found, since we only update our database once a week.
The same vehicle can previously have been registered with multiple registrations. Previously it was only possible to find vehicles by the most recent registration. Now it is possible to find vehicles by previously associated registrations, assuming the registration haven't been associated to a different vehicle.
We've added more attributes to the inspections endpoint eg. weekday, week number and combined test center name and address.
The euronorm of the vehicle is now included in the DMR data endpoint.
We now send low balance warnings to users with low balance. Read more about tokens here.
It is now possible to get the latitude and longitude of inspection test centers using the inspection test centers endpoint.
Webhooks are now available for all plans. Read more about webhooks here.
It is now possible to group inspections by more attributes using the search endpoint.
It is now possible to get a list of all inspection test centers in Denmark using the inspection test center endpoint.
It is now possible to search for multiple values using the in and not_in predicates using the search endpoint.
The period tax calculator has been updated to reflect the new period tax rules for 2023.
It is now possible to group search results by multiple nested attributes using the search endpoint.
We've created a forkable Postman collection with examples of all endpoints.
It is now possible to get the status and status_updated_at for vehicles using the vehicles endpoint.
It is now possible to get a list of all leasing periods for a vehicle using the vehicles endpoint.