Komplet reference for SelskabsInfo CVR API. Opslag, søgning og berigelse af danske virksomhedsdata.
Tre trin for at lave dit første API-kald:
Opret en konto
Log ind eller opret en konto på SelskabsInfo.
Generer en API-nøgle
Gå til API-nøgler og opret en nøgle. Nøglen vises kun én gang — gem den sikkert.
Foretag dit første kald
Send en GET-request med din API-nøgle i Authorization-headeren:
curl -X GET "https://api.selskabsinfo.dk/v1/company/10150817" \
-H "Authorization: Bearer sk_live_your_api_key_here"Alle API-kald kræver en gyldig API-nøgle sendt via Authorization-headeren.
Authorization: Bearer sk_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6Opbevar din nøgle sikkert
API-nøglen vises kun ved oprettelse. Den gemmes som SHA-256 hash i vores database og kan ikke genskabes. Hold din nøgle hemmelig — del den ikke i klient-side kode eller offentlige repositories.
API-nøgler har formatet sk_live_ efterfulgt af 32 hexadecimale tegn:
sk_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
prefix 32 hex charactershttps://api.selskabsinfo.dk/v1Alle endpoints er relative til denne base URL. Kun GET-requests understøttes. Alle responses er JSON.
Hent komplet virksomhedsprofil for et givet CVR-nummer. Brug include-parameteren til at tilføje yderligere datasektioner.
cvrstring10150817includestringmanagement,financialscurl "https://api.selskabsinfo.dk/v1/company/10150817" \
-H "Authorization: Bearer sk_live_..."curl "https://api.selskabsinfo.dk/v1/company/10150817?include=management,financials,ownership" \
-H "Authorization: Bearer sk_live_..."Basis-response felter:
| Felt | Type | Beskrivelse |
|---|---|---|
cvr | string | CVR-nummer |
navn | string | Aktivt virksomhedsnavn |
navneHistorik | array | Historik over navneændringer (navn, fraDato, tilDato) |
status | string | Nuværende status (AKTIV, OPLØST, etc.) |
statusHistorik | array | Historik over statusændringer |
virksomhedsform | object | Selskabsform (kode, beskrivelse) |
stiftelsesDato | string | Dato for stiftelse |
beliggenhedsadresse | object | Nuværende adresse (vejnavn, postnummer, postdistrikt, kommune, latitude, longitude) |
kontakt | object | Kontaktoplysninger (telefon, email, hjemmeside) |
hovedbranche | object | Hovedbranche (kode, beskrivelse) |
bibranche | object | Primær bibranche |
antalAnsatte | number | Seneste antal ansatte |
antalAarsvaerk | number | Seneste antal årsværk |
medarbejderPeriode | string | Periode for medarbejdertal (f.eks. "2024-Q3") |
kapital | object | Registreret kapital (registreretKapital, valuta) |
tegningsregel | string | Tegningsregel |
formaal | string | Selskabets formål |
regnskabsperiode | object | Seneste regnskabsperiode |
{
"cvr": "10150817",
"navn": "COOP TRADING A/S",
"navneHistorik": [
{ "navn": "COOP TRADING A/S", "fraDato": "2015-01-01", "tilDato": null }
],
"status": "AKTIV",
"statusHistorik": [
{ "status": "AKTIV", "fraDato": "2001-01-01", "tilDato": null }
],
"virksomhedsform": {
"kode": 80,
"beskrivelse": "Aktieselskab"
},
"stiftelsesDato": "2001-01-01",
"beliggenhedsadresse": {
"vejnavn": "Roskildevej",
"husnummerFra": 65,
"postnummer": 2620,
"postdistrikt": "Albertslund",
"kommune": "Albertslund",
"landekode": "DK",
"latitude": 55.6567,
"longitude": 12.3456
},
"kontakt": {
"telefon": "43868686",
"email": "info@coop.dk",
"hjemmeside": "https://coop.dk"
},
"hovedbranche": {
"kode": "461700",
"beskrivelse": "Agenturhandel med foedevarer, drikkevarer og tobak"
},
"bibranche": null,
"antalAnsatte": 156,
"antalAarsvaerk": 148.5,
"medarbejderPeriode": "2024-Q3",
"kapital": {
"registreretKapital": 100000000,
"valuta": "DKK"
},
"tegningsregel": "Selskabet tegnes af bestyrelsens formand ...",
"formaal": "Selskabets formaal er ...",
"regnskabsperiode": { ... }
}Søg efter virksomheder efter navn eller CVR-nummer. Returnerer paginerede resultater.
qstringpageintegerperPageintegercurl "https://api.selskabsinfo.dk/v1/search?q=novo+nordisk&page=1&perPage=10" \
-H "Authorization: Bearer sk_live_..."{
"results": [
{
"cvr": "24256790",
"navn": "NOVO NORDISK A/S",
"status": "AKTIV",
"by": "Bagsværd",
"postnummer": 2880,
"branche": "Fremstilling af farmaceutiske præparater",
"branchekode": "212000",
"virksomhedsform": "A/S"
},
...
],
"total": 15,
"page": 1,
"perPage": 10
}Hent personprofil med roller, ejerskab og relationer. Kræver Starter-plan eller højere.
idinteger/v1/search/person eller i virksomhedens ledelsesdata.curl "https://api.selskabsinfo.dk/v1/person/4000068941" \
-H "Authorization: Bearer sk_live_..."Response inkluderer: persondata, aktive roller, historiske roller, ejerskab, relaterede personer, finansiel oversigt og tidslinje.
Søg efter personer i CVR-registret efter navn. Kræver Starter-plan eller højere.
qstringlimitintegercurl "https://api.selskabsinfo.dk/v1/search/person?q=Anders+Jensen&limit=5" \
-H "Authorization: Bearer sk_live_..."{
"results": [
{
"navn": "Anders Mikkelsen Jensen",
"enhedsNummer": 4000068941,
"by": "Hellerup"
},
...
],
"total": 3
}Brug include-parameteren på /v1/company/{cvr} for at tilføje valgfrie datasektioner. Flere sektioner adskilles med komma.
| Include | Response-felter | Min. plan |
|---|---|---|
management | direktion, bestyrelse, stiftere | Free |
financials | regnskabsdata — detaljeret regnskabsdata | Starter |
courtData | retssager, myndighedssager | Starter |
ownership | ejere — legale og ultimative ejere | Pro |
subsidiaries | datterselskaber | Pro |
registrationTexts | registreringstekster — offentliggjorte registreringstekster | Pro |
curl "https://api.selskabsinfo.dk/v1/company/10150817?include=management,financials,ownership,courtData" \
-H "Authorization: Bearer sk_live_..."Hvis du anmoder om en include, som din plan ikke dækker, returneres en 403 tier_restricted-fejl med besked om hvilken plan der kræves.
Alle fejl returneres som JSON med en error-object:
{
"error": {
"code": "invalid_api_key",
"message": "Missing or malformed API key. Use: Authorization: Bearer sk_live_..."
}
}| HTTP Status | Kode | Beskrivelse |
|---|---|---|
| 400 | invalid_cvr | CVR-nummeret er ikke gyldigt (skal være præcis 8 cifre) |
| 400 | invalid_query | Søgeord for kort (min. 2 tegn) |
| 401 | invalid_api_key | Ugyldig eller manglende API-nøgle |
| 401 | key_revoked | API-nøglen er tilbagekaldt |
| 403 | tier_restricted | Din plan giver ikke adgang til den ønskede funktion |
| 404 | not_found | Ingen virksomhed eller person fundet |
| 405 | method_not_allowed | Kun GET-metode er tilladt |
| 429 | monthly_limit_exceeded | Månedlig kvote opbrugt — nulstilles den 1. i næste måned |
| 500 | internal_error | Intern fejl — prøv igen eller kontakt support |
| 502 | upstream_error | Datakilde svarer ikke — prøv igen om lidt |
| 503 | service_unavailable | Datakilde midlertidigt utilgængelig (circuit breaker aktiv) |
API'et håndhæver to typer begrænsninger:
Månedlig kvote
Hvert API-kald tæller mod din månedlige kvote. Kvoten nulstilles automatisk den 1. i hver måned (UTC). Overskridelse returnerer 429 monthly_limit_exceeded.
Per-sekund rate limit
Maks antal samtidige requests per sekund afhænger af din plan. Overskridelse medfører midlertidig throttling.
| Funktion | Free | Starter | Pro | Business |
|---|---|---|---|---|
| Pris (md.) | 0 kr | 149 kr | 449 kr | 999 kr |
| Kald / måned | 500 | 10.000 | 75.000 | 300.000 |
| Rate limit | 2 req/s | 5 req/s | 15 req/s | 30 req/s |
| /v1/company | ||||
| /v1/search | ||||
| /v1/person | ||||
| /v1/search/person | ||||
| include: management | ||||
| include: financials | ||||
| include: courtData | ||||
| include: ownership | ||||
| include: subsidiaries | ||||
| include: registrationTexts |
Spar 20% med årlig betaling. Se alle prisdetaljer.
curl -X GET \
"https://api.selskabsinfo.dk/v1/company/10150817?include=management,financials" \
-H "Authorization: Bearer sk_live_your_api_key_here"curl -X GET \
"https://api.selskabsinfo.dk/v1/search?q=novo+nordisk&perPage=5" \
-H "Authorization: Bearer sk_live_your_api_key_here"const API_KEY = 'sk_live_your_api_key_here';
const BASE_URL = 'https://api.selskabsinfo.dk/v1';
// Hent virksomhed
async function getCompany(cvr, includes = []) {
const params = includes.length ? '?include=' + includes.join(',') : '';
const res = await fetch(BASE_URL + '/company/' + cvr + params, {
headers: { 'Authorization': 'Bearer ' + API_KEY },
});
if (!res.ok) {
const err = await res.json();
throw new Error(err.error?.message || 'API request failed');
}
return res.json();
}
// Søg virksomheder
async function searchCompanies(query, page = 1, perPage = 25) {
const params = new URLSearchParams({ q: query, page, perPage });
const res = await fetch(BASE_URL + '/search?' + params, {
headers: { 'Authorization': 'Bearer ' + API_KEY },
});
if (!res.ok) {
const err = await res.json();
throw new Error(err.error?.message || 'API request failed');
}
return res.json();
}
// Brug
const company = await getCompany('10150817', ['management', 'financials']);
console.log(company.navn, '—', company.antalAnsatte, 'ansatte');
const results = await searchCompanies('novo nordisk');
console.log('Fandt', results.total, 'virksomheder');import requests
API_KEY = "sk_live_your_api_key_here"
BASE_URL = "https://api.selskabsinfo.dk/v1"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
def get_company(cvr: str, includes: list[str] | None = None) -> dict:
"""Hent virksomhed med valgfrie datasektioner."""
params = {}
if includes:
params["include"] = ",".join(includes)
resp = requests.get(f"{BASE_URL}/company/{cvr}", headers=HEADERS, params=params)
resp.raise_for_status()
return resp.json()
def search_companies(query: str, page: int = 1, per_page: int = 25) -> dict:
"""Søg virksomheder efter navn eller CVR."""
resp = requests.get(
f"{BASE_URL}/search",
headers=HEADERS,
params={"q": query, "page": page, "perPage": per_page},
)
resp.raise_for_status()
return resp.json()
# Eksempel
company = get_company("10150817", includes=["management", "financials"])
print(f"{company['navn']} — {company.get('antalAnsatte', 'N/A')} ansatte")
results = search_companies("novo nordisk")
for r in results["results"]:
print(f" {r['cvr']} {r['navn']} ({r['status']})")Opret en gratis konto og få 500 API-kald per måned.