Virkdata
Opret gratis konto Log ind
  • Introduktion
    • Forbind til REST API
    • Autentificering
    • Test API nøgle
  • Forespørgsler
    • Parametre
    • Eksempel
    • Respons
    • Fejlhåndtering
  • Kode Eksempler
    • C#
    • PHP
    • Node.js
    • JavaScript
    • Java
    • Swift
    • Python
    • R
    • Ruby

Dokumentation 1.4.2

Introduktion

Velkommen til dokumentationen for CVR API. Denne guide er designet til at give udviklere de nødvendige oplysninger for at integrere og hente data effektivt. Vores API giver adgang til en omfattende database med opdaterede oplysninger om alle virksomheder registreret i Danmark, Norge, Finland og Schweiz, hvilket gør det til et uvurderligt værktøj for enhver, der søger detaljeret og pålidelig erhvervsinformation.

Uanset om du er i gang med at udvikle en applikation, der kræver specifik virksomhedsdata, eller du ønsker at berige din eksisterende dataplatform med autoritative erhvervsoplysninger, er denne dokumentation dit udgangspunkt for at forstå, hvordan du mest effektivt kan udnytte CVR API fra Virkdata.

Dokumentation

Forbind til REST API

Begynd med at forbinde til vores REST API for at tilgå og anvende det. Første skridt er at sende en forespørgsel til vores API. Uanset hvad du har brug for, skal alle forespørgsler rettes til det samme endpoint, hvorfra du vil modtage de data, du beder om. For at sikre, at du kun modtager de specifikke data, du er interesseret i, kan du præcisere din anmodning. Dette gøres ved nøje at angive søgekriterierne, for eksempel hvilket land du er interesseret i, hvilket format du ønsker, at svaret skal være i, samt muligheden for at følge dine forespørgsler ved hjælp af en brugerdefineret variabel. Dette tillader dig at tilpasse og optimere din interaktion med vores API for at opfylde dine specifikke behov.

GET
https://virkdata.dk/api/
                            
For at hente data fra vores API, skal du udføre en GET-forespørgsel til den URL, vi har angivet ovenfor.

Autentificering

For at sikre, at dine dataforespørgsler behandles korrekt, kræves det, at alle forespørgsler bliver autoriseret. Dette opnår du ved at inkludere din unikke API-nøgle i forespørgslens header. Når du anvender din API-nøgle, vil alle dine forespørgsler blive logget og være synlige i dit dashboard. Her kan du nemt overvåge, hvilke af dine forespørgsler der er blevet behandlet succesfuldt, samt identificere og analysere eventuelle forespørgsler, der er mislykkedes, inklusive detaljer om eventuelle fejl.

Headers

For at autentificere dine forespørgsler skal du bruge en API-nøgle. Du kan finde denne nøgle på din brugerkonto, specifikt under sektionen "API Nøgler". Når du sender en forespørgsel, skal autentificeringen inkluderes ved at tilføje ordet "api" efterfulgt direkte af din API-nøgle.

Authorization: YOUR_API_KEY
                            
I vores dokumentation vil vi bruge udtrykket YOUR_API_KEY som en pladsholder for din API-nøgle. Hver gang du støder på YOUR_API_KEY i vores eksempler eller forklaringer, skal du erstatte det med din faktiske API-nøgle.

Test API nøgle

For at sikre, at din API-nøgle fungerer korrekt og giver adgang til API'en, kan du udføre en test af din nøgle. For at gennemføre denne test skal du sende en forespørgsel, hvor din API-nøgle inkluderes i headeren, som forklaret tidligere. Derudover skal du tilføje parameteren 'test_api' til din forespørgsel. Dette vil aktivere en testproces, der bekræfter, om din nøgle giver den adgang, som er nødvendig for at bruge API'en effektivt.

Test Request
https://virkdata.dk/api/?test_api
                            
Succesfuld test

Hvis din test af API-nøglen er succesfuld og forbindelsen til API'en er etableret korrekt, vil du modtage en bekræftende besked. Dette indikerer, at alt er sat op korrekt, og at du har den nødvendige adgang til at fortsætte med at bruge API'en.

{
    "api": "Virkdata",
    "version": "1.4.2",
    "access": true
}
                            
Fejlet test

Hvis din forsøg på at forbinde til API'en ikke lykkes, og du dermed ikke har etableret en forbindelse, vil du modtage en specifik fejlbesked. Denne besked tjener som en indikation af, at noget gik galt i processen, hvilket kan skyldes forskellige faktorer såsom en ugyldig API-nøgle eller andre forbindelsesproblemer.

{
    "api": "Virkdata",
    "version": "1.4.2",
    "access": false,
    "error_code": 601,
    "error": "test_connection_failed",
    "message": "There was an error connecting to Virkdata API with the provided API Key"
}
                    
Brugen af testkald til at verificere din API-nøgle og forbindelse påvirker ikke din allokerede månedlige kvote af forespørgsler. Disse test er designet til at sikre, at dit system er korrekt konfigureret, uden at det går ud over din tilgængelige ressourcegrænse.

Forespørgsler

Parametre

Alle dine forespørgsler til API'en skal indeholde din API-nøgle samt en værdi, der angiver, hvad det er, du søger efter. Denne værdi fungerer som grundlaget for din forespørgsel. For at skræddersy de data, du modtager tilbage, har du mulighed for at inkludere yderligere parametre, som kan hjælpe med at finjustere responsen efter dine specifikke behov. Hvis du ikke angiver disse ekstra parametre, vil systemet automatisk anvende standardindstillingen, eller 'default value', som er foruddefineret for den specifikke forespørgsel. Dette sikrer, at du altid vil modtage en respons, selv uden yderligere tilpasninger.

Parameter liste
  • Property
    Datatype
    Values
    Default value
    Required
    Description
  • search
    string
    -
    -
    Yes
    Search string
  • format
    string
    json xml plain html raw
    json
    No
    The format of response data
  • country
    string
    dk no fi ch
    dk
    No
    The countrycode for database of companies you would like to search through
  • financial_summary
    bool
    true / false
    false
    No
    Financial Summary, only available for dk
  • custom
    string
    -
    -
    No
    Custom variable to add to the request. You can filter all your requests in your dashboard

Eksempel

For at søge efter oplysninger om virksomheden Telia i Danmark gennem vores API, skal du benytte et komplet kald, som inkluderer din API-nøgle og de specifikke parametre, der angiver din søgning. Dette indebærer at angive "Telia" som søgeværdi og landet som "Danmark" blandt dine parametre for at filtrere resultaterne nøjagtigt til det, du ønsker at finde. Husk at inkludere din API-nøgle i headeren for at autentificere din forespørgsel.

https://virkdata.dk/api/?search=telia&format=json&country=dk
                            

Eller, for en mere direkte tilgang, kan du anvende en kortere version af kaldet, som udnytter standardværdierne defineret i API'en. Dette betyder, at hvis din søgning ofte er rettet mod virksomheder i Danmark, og sådanne præferencer allerede er indstillet som standard i API'en, behøver du kun at angive "Telia" som din søgeværdi sammen med din API-nøgle. Dette forenkler processen ved automatisk at anvende de forudbestemte indstillinger for din forespørgsel.

https://virkdata.dk/api/?search=telia
                            

Uanset om du vælger det fulde kald med specifikke parametre eller den kortere version, der udnytter standardværdier, vil resultatet af din forespørgsel være det samme. Du vil modtage data relateret til virksomheden Telia i Danmark, som kan omfatte informationer såsom virksomhedsprofil, kontaktoplysninger, tjenester og eventuelle andre relevante detaljer, der er tilgængelige via API'en. Dette sikrer, at du effektivt kan hente de oplysninger, du har brug for, uafhængigt af forespørgselens kompleksitet.

Respons

Respons modtaget med ovenstående forespørgsel.

{
    "vat": 18391805,
    "name": "TELIA TELECOM A/S",
    "address": "Ejby Industrivej 135",
    "zipcode": 2600,
    "city": "Glostrup",
    "protected": false,
    "phone": "88313131",
    "email": "telia@telia.dk",
    "email": null,
    "fax": "88313030",
    "startdate": "1997-11-20",
    "enddate": "2001-12-14",
    "employees": 0,
    "industrycode": 642000,
    "industrydesc": "Telekommunikation",
    "companytype": "A/S",
    "companydesc": "Aktieselskab",
    "owners": [
        "Jens Ernest Ottosen-Støtt",
        "Carsten Bille Rasmussen",
        "Niels Rabøl"
    ]
}
                            
  • Value
    Datatype
    Available for
    Description
  • vat
    string
    dk no fi ch
    Virksomhedens CVR-nummer
  • name
    string
    dk no fi ch
    Virksomhedens navn
  • address
    string
    dk no fi ch
    Virksomhedens adresse
  • zipcode
    integer
    dk no fi ch
    Postnummer hvor virksomheden beliggende
  • city
    string
    dk no fi ch
    By hvor virksomheden beliggende
  • protected *
    boolean
    dk
    true = reklamebeskyttet. false = ikke reklamebeskyttet
  • phone
    string
    dk
    Virksomhedens telefonnumer
  • website
    string
    dk
    Virksomhedens hjemmeside
  • email
    string
    dk
    Virksomhedens email
  • fax
    string
    dk
    Virksomhedens faxnummer
  • startdate
    string
    dk no fi ch
    Dato virksomheden blev etableret (format: YYYY-MM-DD)
  • enddate
    string
    dk fi ch
    Dato virksomheden blev lukket (format: YYYY-MM-DD). Er virksomheden fortsat aktivt returneres null
  • employees
    integer
    dk no
    Antal medarbejdere ansat i virksomheden
  • industrycode
    integer
    dk no fi
    Branchekode nummer
  • industrydesc
    string
    dk no fi
    Branchekode beskrivelse
  • companytype
    string
    dk no fi ch
    Virksomhedstype (kort beskrivelse)
  • companydesc
    string
    dk no fi ch
    Virksomhedstype (fuldt beskrivelse)
  • owners
    array
    dk
    Ejere af virksomheden returneres som et array
  • financial_summary
    array
    dk
    Nøgletal for regnskab. Data er ikke tilgængelig for alle virksomheder

Det er vigtigt at bemærke, at visse data eller værdier, som vores API tilbyder, kun er tilgængelige for bestemte lande. Hvis du anmoder om en værdi, der ikke er tilgængelig i det land, du har specificeret, vil responsen stadig følge den samme strukturelle opbygning, som du er blevet vist. Dog vil det specifikke felt, hvor værdien skulle have været, blive returneret som null, uafhængigt af hvilken datatype feltet normalt ville indeholde. Dette sikrer en konsistent behandling af data på tværs af forskellige forespørgsler og lande.

*Reklamebeskyttede virksomheder (value: protected)
Ifølge Virks betingelser for brug af data fra Det Centrale Virksomhedsregister (CVR) skal alle brugere respektere følgende regler i forhold til virksomheder, der har valgt reklamebeskyttelse. Læs mere om Politik for Reklamebeskyttelse i vores Betingelser

Fejlhåndtering

Fejlhåndtering er en vigtig del af at arbejde med vores API. For at sikre, at du kan identificere og forstå eventuelle fejl, der opstår under dine forespørgsler, vil alle kald til API'en generere en respons, uanset om forespørgslen er vellykket eller ej. Nedenfor finder du en tabel, der giver dig et overblik over de forskellige fejlkoder og deres betydning. Dette værktøj hjælper dig med at diagnosticere og løse eventuelle problemer, der måtte opstå, så du effektivt kan fortsætte med at bruge API'en.

  • Error Code
    Response
    Description
  • 1001
    invalid_api_key
    The API key is invalid. See Authenticating
  • 1002
    invalid_api_format
    The API format is invalid. Make sure to add your API as header Authorization: api (your key). See Authenticating
  • 1003
    missing_auth_header
    Missing Authorization header in your request. See Authenticating
  • 2001
    invalid_property
    (key) is an invalid property. See Parameters list for valid properties.
  • 2002
    property_not_allowed
    Your subscription does not cover this property. Make sure that only use properties that are valid for your subscription
  • 3001
    missing_request_value
    There is no value to search for. Each request must have a 'search' value.
  • 3002
    no_results
    No results available for your search. This shows when no company found on the provided search term
  • 4001
    invalid_format
    The response format is invalid. See Parameters list to get an overview of valid formats
  • 5001
    invalid_country
    The country is invalid. See Parameters list to get an overview of valid countries
  • 5002
    country_not_allowed
    Your subscription does not cover this countrycode. Make sure that only use country codes that are valid for your subscription
  • 6001
    test_connection_failed
    Testing API connection failed. See Test API Key
  • 7001
    quota_exceeded
    Your monthly limit has been exceeded. Upgrade your subscription, wait til your next reset cycle or contact us for custom solutions
  • 7002
    daily_quota_exceeded
    Your daily limit has been exceeded. Upgrade your subscription or wait til 00:00 (CET) to reset cycle

Eksempel på response ved fejl.

{
    "error_code": 1001,
    "response": "invalid_api_key",
    "message": "Invalid API key"
}
                            
Oplever du en fejl som ikke er beskrevet ovenfor bedes du kontakte os,så vil vi afhjælpe fejlen med højeste prioritet.

Eksempler

Nedenfor præsenteres eksempler på kode i forskellige programmeringssprog og teknikker, herunder C#, JavaScript, jQuery, Node.js med flere. Disse eksempler er designet til at være nemme at integrere direkte i dit eget system.

C#

Nedenfor kan du finde C# eksempler: HttpClient RestSharp

HttpClient

using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
    Method = HttpMethod.Get,
    RequestUri = new Uri("https://virkdata.dk/api/?search=firmanavn"),
    Headers =
    {
        { "Authorization", "YOUR_API_KEY" },
    },
};
using (var response = await client.SendAsync(request))
{
    response.EnsureSuccessStatusCode();
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
}
                            

RestSharp

var client = new RestClient("https://virkdata.dk/api/?search=firmanavn");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "YOUR_API_KEY");
IRestResponse response = client.Execute(request);
                            

PHP

Nedenfor kan du finde PHP eksempler: cURL Guzzle

cURL

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://virkdata.dk/api/?search=firmanavn",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => [
        "Authorization: YOUR_API_KEY"
    ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}
                    
Hvis du foretager forespørgslen fra en forbindelse uden SSL (f.eks. test på localhost) vil du modtage denne fejl:
"cURL Error #:SSL certificate problem: unable to get local issuer certificate"

For at undgå dette kan du tilføje:
CURLOPT_SSL_VERIFYPEER => false

Bemærk, når CURLOPT_SSL_VERIFYPEER sættes til false i PHP cURL, deaktiveres verifikationen af SSL-certifikater. Dette kan åbne for sikkerhedsrisici såsom Man-in-the-Middle-angreb, hvor en angriber kan aflytte eller manipulere data. Det svækker også datasikkerheden ved at fjerne beskyttelsen af dataoverførsler med kryptering og kompromitterer autentificeringen af serveren. Brug af denne indstilling bør undgås for at opretholde en høj sikkerhedsstandard.

Guzzle

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://virkdata.dk/api/?search=firmanavn', [
    'headers' => [
        'Authorization' => 'YOUR_API_KEY'
    ],
]);

echo $response->getBody();
                            

Node.js

Nedenfor kan du finde Node.js eksempler: HTTP Request Unirest Axios Fetch

HTTP

const http = require('https');

const options = {
    method: 'GET',
    hostname: 'https://virkdata.dk/api/',
    port: null,
    path: '?search=firmanavn',
    headers: {
        Authorization: 'YOUR_API_KEY'
    }
};

const req = http.request(options, function (res) {
    const chunks = [];

    res.on('data', function (chunk) {
        chunks.push(chunk);
    });

    res.on('end', function () {
        const body = Buffer.concat(chunks);
        console.log(body.toString());
    });
});

req.end();
                            

Request

const request = require('request');

const options = {
  method: 'GET',
  url: 'https://virkdata.dk/api/',
  qs: {
    search: 'firmanavn'
  },
  headers: {
    Authorization: 'YOUR_API_KEY'
  }
};

request(options, function (error, response, body) {
    if (error) throw new Error(error);

    console.log(body);
});
                            

Unirest

const unirest = require('unirest');

const req = unirest('GET', 'https://virkdata.dk/api/');

req.query({
    search: 'firmanavn'
});

req.headers({
    Authorization: 'YOUR_API_KEY'
});

req.end(function (res) {
    if (res.error) throw new Error(res.error);

    console.log(res.body);
});
                            

Axios

const axios = require('axios');

const options = {
  method: 'GET',
  url: 'https://virkdata.dk/api/',
  params: {
    search: 'firmanavn'
  },
  headers: {
    Authorization: 'YOUR_API_KEY'
  }
};

try {
    const response = await axios.request(options);
    console.log(response.data);
} catch (error) {
    console.error(error);
}
                            

Fetch

const fetch = require('node-fetch');

const url = 'https://virkdata.dk/api/?search=firmanavn';
const options = {
  method: 'GET',
  headers: {
    Authorization: 'YOUR_API_KEY'
  }
};

try {
    const response = await fetch(url, options);
    const result = await response.text();
    console.log(result);
} catch (error) {
    console.error(error);
}
                            

JavaScript

Nedenfor kan du finde JavaScript eksempler: XMLHttpRequest Axios fetch jQuery

XMLHttpRequest

const data = null;

const xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener('readystatechange', function () {
    if (this.readyState === this.DONE) {
        console.log(this.responseText);
    }
});

xhr.open('GET', 'https://virkdata.dk/api/?search=firmanavn');
xhr.setRequestHeader('Authorization', 'YOUR_API_KEY');

xhr.send(data);
                            

Axios

import axios from 'axios';

const options = {
  method: 'GET',
  url: 'https://virkdata.dk/api/',
  params: {
    search: 'firmanavn'
  },
  headers: {
    Authorization: 'YOUR_API_KEY',
  }
};

try {
    const response = await axios.request(options);
    console.log(response.data);
} catch (error) {
    console.error(error);
}
                            

fetch

const url = 'https://virkdata.dk/api/?search=firmanavn';
const options = {
    method: 'GET',
    headers: {
        Authorization: 'YOUR_API_KEY'
    }
};

try {
    const response = await fetch(url, options);
    const result = await response.text();
    console.log(result);
} catch (error) {
    console.error(error);
}
                            

jQuery

const settings = {
    async: true,
    crossDomain: true,
    url: 'https://virkdata.dk/api/?search=firmanavn',
    method: 'GET',
    headers: {
        Authorization: 'YOUR_API_KEY'
    }
};

$.ajax(settings).done(function (response) {
    console.log(response);
});
                            

Java

Nedenfor kan du finde Java eksempler: AsyncHttp java.net.http OkHttp Unirest

AsyncHttp

AsyncHttpClient client = new DefaultAsyncHttpClient();
client.prepare("GET", "https://virkdata.dk/api/?search=firmanavn")
    .setHeader("Authorization", "YOUR_API_KEY")
    .execute()
    .toCompletableFuture()
    .thenAccept(System.out::println)
    .join();

client.close();
                            

java.net.http

HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://virkdata.dk/api/?search=firmanavn"))
        .header("Authorization", "YOUR_API_KEY")
        .method("GET", HttpRequest.BodyPublishers.noBody())
        .build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
                            

OkHttp

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
    .url("https://virkdata.dk/api/?search=firmanavn")
    .get()
    .addHeader("Authorization", "YOUR_API_KEY")
    .build();

Response response = client.newCall(request).execute();
                            

Unirest

HttpResponse<String> response = Unirest.get("https://virkdata.dk/api/?search=firmanavn")
    .header("Authorization", "YOUR_API_KEY")
    .asString();
                            

Swift

Nedenfor kan du finde Swift eksempler: NSURLSession

NSURLSession

HttpResponse<String> response = Unirest.get("https://virkdata.dk/api/?search=firmanavn")
    .header("Authorization", "YOUR_API_KEY")
    .asString();
                            

Python

Nedenfor kan du finde Python eksempler: http.client Requests

http.client

import http.client

conn = http.client.HTTPSConnection("https://virkdata.dk/api/")

headers = {
    'Authorization': "YOUR_API_KEY"
}

conn.request("GET", "?search=firmanavn", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
                            

Requests

import requests

url = "https://virkdata.dk/api/"

querystring = {"search":"firmanavn"}

headers = {
    "Authorization": "YOUR_API_KEY"
}

response = requests.get(url, headers=headers, params=querystring)

print(response.json())
                            

R

Nedenfor kan du finde R eksempler: httr

httr

library(httr)

url <- "https://virkdata.dk/api/"

queryString <- list(search = "firmanavn")

response <- VERB("GET", url, query = queryString, add_headers('Authorization' = 'YOUR_API_KEY'), content_type("application/octet-stream"))

content(response, "text")
                            

Ruby

Nedenfor kan du finde Ruby eksempler: net::http

net::http

require 'uri'
require 'net/http'

url = URI("https://virkdata.dk/api/?search=firmanavn")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body