-
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.
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.
https://virkdata.dk/api/
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.
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
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.
https://virkdata.dk/api/?test_api
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 }
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" }
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.
-
PropertyDatatypeValuesDefault valueRequiredDescription
-
searchstring--YesSearch string
-
formatstringjson xml plain html rawjsonNoThe format of response data
-
countrystringdk no fi chdkNoThe countrycode for database of companies you would like to search through
-
financial_summarybooltrue / falsefalseNoFinancial Summary, only available for dk
-
customstring--NoCustom 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" ] }
-
ValueDatatypeAvailable forDescription
-
vatstringdk no fi chVirksomhedens CVR-nummer
-
namestringdk no fi chVirksomhedens navn
-
addressstringdk no fi chVirksomhedens adresse
-
zipcodeintegerdk no fi chPostnummer hvor virksomheden beliggende
-
citystringdk no fi chBy hvor virksomheden beliggende
-
protected *booleandktrue = reklamebeskyttet. false = ikke reklamebeskyttet
-
phonestringdkVirksomhedens telefonnumer
-
websitestringdkVirksomhedens hjemmeside
-
emailstringdkVirksomhedens email
-
faxstringdkVirksomhedens faxnummer
-
startdatestringdk no fi chDato virksomheden blev etableret (format: YYYY-MM-DD)
-
enddatestringdk fi chDato virksomheden blev lukket (format: YYYY-MM-DD). Er virksomheden fortsat aktivt returneres null
-
employeesintegerdk noAntal medarbejdere ansat i virksomheden
-
industrycodeintegerdk no fiBranchekode nummer
-
industrydescstringdk no fiBranchekode beskrivelse
-
companytypestringdk no fi chVirksomhedstype (kort beskrivelse)
-
companydescstringdk no fi chVirksomhedstype (fuldt beskrivelse)
-
ownersarraydkEjere af virksomheden returneres som et array
-
financial_summaryarraydkNø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.
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 CodeResponseDescription
-
1001invalid_api_keyThe API key is invalid. See Authenticating
-
1002invalid_api_formatThe API format is invalid. Make sure to add your API as header Authorization: api (your key). See Authenticating
-
1003missing_auth_headerMissing Authorization header in your request. See Authenticating
-
2001invalid_property(key) is an invalid property. See Parameters list for valid properties.
-
2002property_not_allowedYour subscription does not cover this property. Make sure that only use properties that are valid for your subscription
-
3001missing_request_valueThere is no value to search for. Each request must have a 'search' value.
-
3002no_resultsNo results available for your search. This shows when no company found on the provided search term
-
4001invalid_formatThe response format is invalid. See Parameters list to get an overview of valid formats
-
5001invalid_countryThe country is invalid. See Parameters list to get an overview of valid countries
-
5002country_not_allowedYour subscription does not cover this countrycode. Make sure that only use country codes that are valid for your subscription
-
6001test_connection_failedTesting API connection failed. See Test API Key
-
7001quota_exceededYour monthly limit has been exceeded. Upgrade your subscription, wait til your next reset cycle or contact us for custom solutions
-
7002daily_quota_exceededYour 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" }
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; }
"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