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.
Opret din API-nøgle
Gå til Mine API-nøgler i din profil. Klik "Opret nøgle" - nøglen vises kun én gang, så 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 med UTF-8 encoding.
API Versioning
API'et versioneres via URL-path (/v1/). Nye felter kan tilføjes til eksisterende endpoints uden version-bump (additiv ændring). Breaking changes medfører en ny version (f.eks. /v2/). Ældre versioner understøttes i minimum 12 måneder efter introduktion af en ny version.
Alle succesfulde responses returnerer JSON med HTTP status 200. Fejl returneres ligeledes som JSON med et error-objekt (se Fejlkoder).
Content-Type
application/json
CORS
Fuld CORS-understøttelse - kan bruges direkte fra browsere (men skjul din API-nøgle!)
Encoding
UTF-8. Danske tegn (æ, ø, å) returneres direkte i JSON.
/v1/company/{cvr}Hent komplet virksomhedsprofil for et givet CVR-nummer. Returnerer basisdata som standard - brug include-parameteren til at tilføje yderligere datasektioner (ledelse, regnskab, retssager m.m.).
cvrstring10150817includestringmanagement,financialson_restrictedstringerror (default - returnerer 403) eller skip (returnerer det din plan tillader plus et warnings-array). Se Håndtering af tier-restriktioner.enriched_contactstringtrue på kontakt udfyldes med kontaktoplysninger vi selv har fundet, uden ekstra credits. CVR-registret indeholder kun det selskabet selv har indberettet - fx har Salling Group A/S ingen hjemmeside registreret. kontaktMeta.kilder angiver pr. felt om værdien er cvr (gældende registrering), cvr_udloebet (registrering selskabet siden har afmeldt), beriget (fundet af os) eller mangler, så du altid kan se hvad der kommer hvorfra. Sæt false for kun at få registrets egne værdier. På Free-planen returneres registrets egne værdier, og kontaktMeta.berigelse angiver at berigelse kræver Starter; et eksplicit enriched_contact=true følger on_restricted som enhver anden tier-begrænsning. Felter, registret har markeret hemmelige, returneres aldrig - hverken som CVR-værdi eller beriget.curl "https://api.selskabsinfo.dk/v1/company/10150817" \
-H "Authorization: Bearer sk_live_..."curl "https://api.selskabsinfo.dk/v1/company/35954716?enriched_contact=false" \
-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 fra CVR (NORMAL, UNDERKONKURS, OPLØST m.fl.). Bemærk: aktive selskaber har NORMAL, ikke AKTIV |
statusHistorik | array | Historik over statusændringer |
virksomhedsform | object | Selskabsform (kode, beskrivelse) |
stiftelsesDato | string | Dato for stiftelse |
beliggenhedsadresse | object | Nuværende adresse (vejnavn, husnummerFra, etage, sidedoer, postnummer, postdistrikt, kommune, landekode, latitude, longitude) |
kontakt | object | Kontaktoplysninger (telefon, email, hjemmeside) |
kontaktMeta | object | Kildeangivelse for kontakt: kilde, telefonRegistreret, emailRegistreret, hjemmesideRegistreret, hentet. Returneres på alle opslag |
kontaktMeta.kilder | object | undefined | Kilde pr. felt: cvr, cvr_udloebet, beriget eller mangler. Til stede når berigelse kørte — altså ikke på Free og ikke ved enriched_contact=false |
kontaktMeta.berigelse | string | undefined | Kun på Free: forklaring på, at berigede kontaktoplysninger kræver Starter |
hovedbranche | object | Hovedbranche (kode, beskrivelse) |
bibrancher | array | Sekundære brancher (op til 3, med kode og beskrivelse) |
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": "NORMAL",
"statusHistorik": [
{ "status": "NORMAL", "fraDato": "2001-01-01", "tilDato": null }
],
"virksomhedsform": {
"kode": 60,
"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"
},
"kontaktMeta": {
"kilde": "CVR-registret (Erhvervsstyrelsen)",
"telefonRegistreret": "2015-01-01",
"emailRegistreret": "2015-01-01",
"hjemmesideRegistreret": "2015-01-01",
"hentet": "2026-08-17T09:31:02.418Z",
"kilder": { "telefon": "cvr", "email": "cvr", "hjemmeside": "cvr" }
},
"hovedbranche": {
"kode": "461700",
"beskrivelse": "Agenturhandel med foedevarer, drikkevarer og tobak"
},
"bibrancher": [],
"antalAnsatte": 156,
"antalAarsvaerk": 148.5,
"medarbejderPeriode": "2024-Q3",
"kapital": {
"registreretKapital": 100000000,
"valuta": "DKK"
},
"tegningsregel": "Selskabet tegnes af bestyrelsens formand ...",
"formaal": "Selskabets formaal er ...",
"regnskabsperiode": { ... }
}/v1/company/{cvr}/momsSlå op, om DK{cvr} er et gyldigt, aktivt momsnummer i momsregisteret. Kræver Starter-plan eller højere. Koster 1 kald.
Momsregistrering findes ikke i CVR-registret. Erhvervsstyrelsen registrerer selskabet; Skattestyrelsen registrerer momsen — og den hænger på SE-nummeret, ikke på CVR-nummeret. Dette endpoint spørger derfor et andet register end resten af API'et.
Momsregisteret besvarer præcis ét spørgsmål: er DK{cvr} et gyldigt momsnummer? Det er ikke det samme som er selskabet momsregistreret. Et koncernselskab i en fællesregistrering afregner moms under et andet SE-nummer, og dets eget CVR-nummer er derfor ikke et gyldigt momsnummer — selvom selskabet utvivlsomt betaler moms. Novo Nordisk A/S og Coloplast A/S opfører sig sådan i dag.
Derfor returnerer vi to felter i stedet for ét. momsnummerGyldigt er momsregisterets bogstavelige svar og er det, du skal bruge, når du afgør, om der skal faktureres med eller uden moms — den beslutning handler om nummeret. momsregistreret er slutningen om selskabet, og den er aldrig false: vi kan ikke skelne "ikke registreret" fra "registreret under et andet SE-nummer".
Der findes bevidst intet momspligtig-felt. Momspligt er en juridisk egenskab ved aktiviteten efter momsloven, ikke en oplysning noget register fører.
cvrstringcurl "https://api.selskabsinfo.dk/v1/company/61056416/moms" \
-H "Authorization: Bearer sk_live_..."Response-felter:
| Felt | Type | Beskrivelse |
|---|---|---|
cvr | string | CVR-nummeret der blev slået op |
momsnummer | string | Det momsnummer der blev valideret (DK + CVR) |
momsnummerGyldigt | boolean | Momsregisterets bogstavelige svar. Brug dette til faktureringsbeslutninger. |
momsregistreret | true | null | Slutningen om selskabet. true når nummeret er gyldigt, ellers null (kan ikke afgøres). Aldrig false |
navnIMomsregister | string | null | Navn som registreret hos Skattestyrelsen. Kan afvige fra CVR-navnet — den forskel er i sig selv nyttig ved kontrol af en handelspartner |
adresseIMomsregister | string | null | Adresse som registreret hos Skattestyrelsen |
forbehold | string | null | Udfyldt når nummeret ikke er gyldigt: forklarer hvorfor det ikke er det samme som "ikke momspligtig" |
kilde | object | Opslagsdetaljer (svarkode, forespurgt, bemaerkning). forespurgt er det faktiske opslagstidspunkt — også når svaret serveres fra cache, hvor cachetSvar: true tilføjes |
{
"cvr": "61056416",
"momsnummer": "DK61056416",
"momsnummerGyldigt": true,
"momsregistreret": true,
"navnIMomsregister": "Carlsberg A/S",
"adresseIMomsregister": "J.C. Jacobsens Gade 1\n1799 København V\n",
"forbehold": null,
"kilde": {
"svarkode": "VALID",
"forespurgt": "2026-08-17T13:18:26.418Z",
"bemaerkning": "Momsregistrering findes ikke i CVR-registret. Den hører til SE-nummeret hos Skattestyrelsen."
}
}{
"cvr": "24256790",
"momsnummer": "DK24256790",
"momsnummerGyldigt": false,
"momsregistreret": null,
"navnIMomsregister": null,
"adresseIMomsregister": null,
"forbehold": "Momsregisteret svarer, at DK24256790 ikke er et gyldigt momsnummer. Det er ikke det samme som, at selskabet ikke er momspligtigt: ved fællesregistrering ...",
"kilde": {
"svarkode": "INVALID",
"forespurgt": "2026-08-17T13:18:09.632Z",
"bemaerkning": "Momsregistrering findes ikke i CVR-registret. Den hører til SE-nummeret hos Skattestyrelsen."
}
}Momsregisterets svartid svinger mellem ~1 og ~10 sekunder hen over døgnet. Derfor cacher vi hvert svar i op til 15 minutter (samme friskhed som Cache-Control-headeren), så gentagne opslag på samme CVR-nummer svarer øjeblikkeligt. Kan registeret ikke svare, serveres det seneste kendte svar i op til 24 timer — markeret med kilde.cachetSvar: true og det faktiske opslagstidspunkt i kilde.forespurgt. Først når der hverken er et live-svar eller et cachet et, får du 503 — aldrig et gættet negativt svar. Koden skelner: circuit_open betyder, at opslaget slet ikke blev forsøgt (ingen kvote trukket), mens upstream_unavailable betyder, at det blev forsøgt uden brugbart svar (kaldet er forbrugt). I pressede perioder melder registeret nemlig fejl frem for et egentligt svar, så vi genforsøger og skelner mellem ægte og midlertidige afvisninger, før vi svarer.
/v1/searchSøg efter virksomheder efter navn eller CVR-nummer. Returnerer paginerede resultater med basisinfo. Understøtter fuzzy-matching og prefix-søgning.
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": "NORMAL",
"by": "Bagsværd",
"postnummer": 2880,
"branche": "Fremstilling af farmaceutiske præparater",
"branchekode": "212000",
"virksomhedsform": "A/S"
},
...
],
"total": 15,
"page": 1,
"perPage": 10
}/v1/person/{id}Hent personprofil med aktive og historiske virksomhedsrelationer, roller og adressehistorik. Kræver Starter-plan eller højere.
idinteger/v1/search/person eller i virksomhedens ledelsesdata (f.eks. direktion[].enhedsNummer).curl "https://api.selskabsinfo.dk/v1/person/4000068941" \
-H "Authorization: Bearer sk_live_..."Response-felter:
| Felt | Type | Beskrivelse |
|---|---|---|
enhedsNummer | number | Personens unikke enhedsNummer i CVR-registret |
navn | string | null | Personens aktuelle fulde navn |
navneHistorik | array | Historik over navneændringer (navn, fraDato, tilDato) |
adresse | object | null | Nuværende adresse (vejnavn, husnummerFra, etage, sidedoer, postnummer, postdistrikt, kommune, landekode) |
adresseHistorik | array | Historik over adresseændringer med perioder |
aktiveRelationer | array | Virksomheder hvor personen har aktive roller |
aktiveRelationer[].virksomhedNavn | string | Virksomhedens navn |
aktiveRelationer[].cvr | string | CVR-nummer |
aktiveRelationer[].status | string | Virksomhedens status fra CVR (NORMAL, OPLØST m.fl.) |
aktiveRelationer[].roller | array | Roller i virksomheden (type, titel, fraDato, tilDato) |
historiskeRelationer | array | Virksomheder med afsluttede roller - samme struktur som aktiveRelationer |
antalVirksomheder | number | Samlet antal virksomheder (aktive + historiske) |
{
"enhedsNummer": 4000068941,
"navn": "Anders Mikkelsen Jensen",
"navneHistorik": [
{ "navn": "Anders Mikkelsen Jensen", "fraDato": "2010-01-01", "tilDato": null }
],
"adresse": {
"vejnavn": "Strandvejen",
"husnummerFra": 42,
"etage": null,
"sidedoer": null,
"postnummer": 2900,
"postdistrikt": "Hellerup",
"kommune": "Gentofte",
"landekode": "DK"
},
"adresseHistorik": [
{
"vejnavn": "Strandvejen",
"husnummerFra": 42,
"postnummer": 2900,
"postdistrikt": "Hellerup",
"landekode": "DK",
"fraDato": "2018-03-15",
"tilDato": null
}
],
"aktiveRelationer": [
{
"virksomhedNavn": "COOP TRADING A/S",
"cvr": "10150817",
"status": "NORMAL",
"roller": [
{
"type": "DIREKTION",
"titel": "ADMINISTRERENDE DIREKTØR",
"fraDato": "2020-06-01",
"tilDato": null
}
]
}
],
"historiskeRelationer": [
{
"virksomhedNavn": "OLD COMPANY ApS",
"cvr": "87654321",
"status": "OPLØST",
"roller": [
{
"type": "DIREKTION",
"titel": "DIREKTØR",
"fraDato": "2015-01-01",
"tilDato": "2019-12-31"
}
]
}
],
"antalVirksomheder": 2
}Persondata hentes direkte fra CVR-registrets deltager-index. Response caches i 1 time. Resultater inkluderer alle virksomhedsrelationer - både aktive og historiske - med detaljerede rollebeskrivelser.
/v1/search/personSøg efter personer i CVR-registret efter navn. Returnerer detaljerede resultater inkl. adresse, navnehistorik og virksomhedsrelationer. Kræver Starter-plan eller højere. Understøtter fuzzy-matching og prefix-søgning.
qstringlimitintegercurl "https://api.selskabsinfo.dk/v1/search/person?q=Anders+Jensen&limit=5" \
-H "Authorization: Bearer sk_live_..."Response-felter per resultat:
| Felt | Type | Beskrivelse |
|---|---|---|
enhedsNummer | number | Personens unikke enhedsNummer (brug til /v1/person-opslag) |
navn | string | Personens aktuelle fulde navn |
adresse | object | null | Nuværende adresse (vejnavn, husnummerFra, etage, sidedoer, postnummer, postdistrikt, landekode) |
navneHistorik | array | Historik over navneændringer (navn, fraDato, tilDato) |
aktiveRelationer | array | Virksomheder med aktive roller (virksomhedNavn, cvr, roller[]) |
historiskeRelationer | array | Virksomheder med afsluttede roller |
antalAktiveRelationer | number | Antal virksomheder med aktive roller |
antalHistoriskeRelationer | number | Antal virksomheder med afsluttede roller |
{
"results": [
{
"enhedsNummer": 4000068941,
"navn": "Anders Mikkelsen Jensen",
"adresse": {
"vejnavn": "Strandvejen",
"husnummerFra": 42,
"etage": null,
"sidedoer": null,
"postnummer": 2900,
"postdistrikt": "Hellerup",
"landekode": "DK"
},
"navneHistorik": [
{ "navn": "Anders Mikkelsen Jensen", "fraDato": "2010-01-01", "tilDato": null }
],
"aktiveRelationer": [
{
"virksomhedNavn": "COOP TRADING A/S",
"cvr": "10150817",
"roller": [
{
"type": "DIREKTION",
"titel": "ADMINISTRERENDE DIREKTØR",
"fraDato": "2020-06-01",
"tilDato": null,
"aktiv": true
}
]
}
],
"historiskeRelationer": [],
"antalAktiveRelationer": 1,
"antalHistoriskeRelationer": 0
}
],
"total": 1,
"returned": 1
}total og returned er ikke det samme
returned er antallet af elementer i results. total er derimod antallet af træf hos CVR før vi frasorterer dubletter og ikke-personer, så total overstiger rutinemæssigt både returned og limit. Brug returned, ikke total, når du paginerer.
Person-søgeresultater inkluderer virksomhedsrelationer med roller - dette giver dig mulighed for at identificere personen korrekt og se deres aktuelle engagement, uden behov for et ekstra /v1/person-kald. Hvert roller-objekt inkluderer et aktiv-felt for nem filtrering.
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, revision, stiftere | Free |
financials | regnskabsdata - detaljeret regnskabsdata | Free |
courtData | retssager, antalRetssager, myndighedssager, antalMyndighedssager | Starter |
ownership | ejerskab - legale ejere med ejerandel og stemmeret | Pro |
subsidiaries | datterselskaber, antalDatterselskaber | Pro |
creditRisk | kreditrisiko - SI-Vurdering kreditrisiko-score (14-faktor model) | Starter |
capital | kapitalhaendelser - kapitalforhøjelser, stiftelse, nedsættelser med ejerskab | Starter |
realOwners | reelleEjere - reelle ejere fra Erhvervsstyrelsens lukkede register | Kontrakt |
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.
Tilføjer ledelsesdata: direktion, bestyrelse, revision og stiftere. Tilgængelig på alle planer inkl.
Response-felter:
| Felt | Type | Beskrivelse |
|---|---|---|
direktion | array | Medlemmer af direktionen |
direktion[].navn | string | Fulde navn på direktøren |
direktion[].titel | string | null | Funktionstitel (f.eks. "ADMINISTRERENDE DIREKTØR") |
direktion[].fraDato | string | null | Tiltrædelsesdato (ISO 8601) |
direktion[].tilDato | string | null | Fratrædelsesdato (null = nuværende) |
direktion[].enhedsNummer | number | null | Personens enhedsNummer (brug til /v1/person-opslag) |
bestyrelse | array | Bestyrelsesmedlemmer - samme feltstruktur som direktion |
revision | array | Tilknyttede revisorer - samme feltstruktur som direktion |
stiftere | array | Stiftere af selskabet |
stiftere[].navn | string | Stifterens navn |
stiftere[].enhedsNummer | number | null | EnhedsNummer for stifteren. Stiftere har kun disse to felter — der er intet cvr på en stifter |
{
"cvr": "10150817",
"navn": "COOP TRADING A/S",
...
"direktion": [
{
"navn": "Michael Kristian Friis",
"titel": "ADMINISTRERENDE DIREKTØR",
"fraDato": "2020-06-01",
"tilDato": null,
"enhedsNummer": 4000012345
}
],
"bestyrelse": [
{
"navn": "Jette Sørensen",
"titel": "FORMAND",
"fraDato": "2019-04-15",
"tilDato": null,
"enhedsNummer": 4000067890
},
{
"navn": "Anders Nielsen",
"titel": "NÆSTFORMAND",
"fraDato": "2021-03-01",
"tilDato": null,
"enhedsNummer": 4000011223
}
],
"revision": [
{
"navn": "Deloitte Statsautoriseret Revisionspartnerselskab",
"titel": "REVISION",
"fraDato": "2018-04-25",
"tilDato": null,
"enhedsNummer": 4000044556
}
],
"stiftere": [
{
"navn": "FDB A.M.B.A.",
"enhedsNummer": 4000099887
}
]
}Tilføjer detaljeret regnskabsdata hentet fra virksomhedens seneste årsrapporter. Tilgængelig på alle planer inkl.
Response-felter:
| Felt | Type | Beskrivelse |
|---|---|---|
regnskabsdata | object | null | Regnskabsdata fra seneste årsrapporter. Null hvis ingen data tilgængelig. |
regnskabsdata.hasRealData | boolean | Om der blev fundet faktiske regnskabsdata |
regnskabsdata.financialReports | array | Metadata om tilgængelige årsrapporter |
regnskabsdata.financialData | array | Parsede regnskabstal per regnskabsperiode |
financialData[].periode | string | Regnskabsperiode (f.eks. "2023-01-01 - 2023-12-31") |
financialData[].nettoomsaetning | number | null | Nettoomsætning i DKK |
financialData[].bruttofortjeneste | number | null | Bruttofortjeneste i DKK |
financialData[].driftsresultat | number | null | Driftsresultat (EBIT) i DKK |
financialData[].resultatFoerSkat | number | null | Resultat før skat i DKK |
financialData[].aaretsResultat | number | null | Årets resultat i DKK |
financialData[].egenkapital | number | null | Egenkapital i DKK |
financialData[].statusBalance | number | null | Balance (aktiver i alt) i DKK |
financialData[].personaleomkostninger | number | null | Personaleomkostninger i DKK |
financialData[].likvideBehoelninger | number | null | Likvide beholdninger i DKK |
financialData[].gaeldsforpligtelser | number | null | Gældsforpligtelser i DKK |
financialData[].valuta | string | Valuta (altid "DKK" - konverteret automatisk) |
Regnskabsdata indeholder mange flere detaljerede felter end vist ovenfor, bl.a. anlægsaktiver, omsætningsaktiver, gæld, hensættelser, egenkapitaldetaljer m.m. Se det fulde eksempel nedenfor.
{
"cvr": "10150817",
"navn": "COOP TRADING A/S",
...
"regnskabsdata": {
"hasRealData": true,
"financialReports": [ ... ],
"financialData": [
{
"periode": "2023-01-01 - 2023-12-31",
"nettoomsaetning": 8456000000,
"bruttofortjeneste": 523000000,
"driftsresultat": 98000000,
"resultatAfPrimaerDrift": 98000000,
"resultatFoerSkat": 112000000,
"aaretsResultat": 87000000,
"personaleomkostninger": 245000000,
"afskrivninger": 42000000,
"finansielleIndtaegter": 18000000,
"finansielleOmkostninger": 4000000,
"skatAfAaretsResultat": 25000000,
"statusBalance": 3400000000,
"anlaegsaktiverValue": 1800000000,
"omsaetningsaktiver": 1600000000,
"varebeholdninger": 320000000,
"tilgodehavender": 890000000,
"likvideBehoelninger": 390000000,
"egenkapital": 1250000000,
"gaeldsforpligtelser": 2150000000,
"langfristetGaeld": 800000000,
"kortfristetGaeld": 1350000000,
"virksomhedskapital": 100000000,
"overfoertResultat": 1150000000,
"valuta": "DKK",
"originalValuta": "DKK"
}
]
}
}Ikke alle virksomheder offentliggør detaljeret regnskabsdata. Felter kan være null hvis data ikke er tilgængelig i årsrapporten. Enkeltmandsvirksomheder og små selskaber offentliggør typisk færre nøgletal. Udenlandsk valuta konverteres automatisk til DKK.
Tilføjer retssager og myndighedssager. Data indsamles fra danske domstole, Arbejdsretten og 12 danske myndigheder. Kræver
Response-felter:
| Felt | Type | Beskrivelse |
|---|---|---|
retssager | array | Retssager fra danske domstole hvor virksomheden nævnes |
retssager[].sagsnummer | string | null | Sagsnummer |
retssager[].ret | string | null | Domstolens navn (f.eks. "Retten i København") |
retssager[].sagstype | string | null | Sagstype (f.eks. "Civil sag") |
retssager[].dato | string | null | Retsdato (ISO 8601) |
retssager[].tidspunktStart | string | null | Starttidspunkt for retsmøde (f.eks. "09:30") |
retssager[].tidspunktSlut | string | null | Sluttidspunkt for retsmøde |
retssager[].retssal | string | null | Retssal |
retssager[].erOffentlig | boolean | null | Om retsmødet er offentligt |
retssager[].beskrivelse | string | null | Beskrivelse af sagen |
retssager[].dommere | array | null | Dommernavne. Kan være null — typisk på insolvenssager uden dommerliste |
retssager[].sagsøgere | array | null | Sagsøgere som { name, lawyer } |
retssager[].sagsøgte | array | null | Sagsøgte som { name, lawyer } |
retssager[].kildeUrl | string | null | Kilde-URL fra domstolens hjemmeside |
retssager[].kilde | string | undefined | Kun "arbejdsretten". Arbejdsretten-afgørelser har en anden form — se boksen nedenfor. Forgren på dette felt |
antalRetssager | number | Antal retssager i retssager |
myndighedssager | object | Sager fra 12 myndigheder, grupperet per myndighed. Kun myndigheder med fund er til stede |
antalMyndighedssager | number | Samlet antal myndighedssager på tværs af alle myndigheder |
Mulige nøgler i myndighedssager: arbejdstilsynet, datatilsynet, datatilsynet_boeder, finanstilsynet, foedevarestyrelsen, forbrugerombudsmanden, sikkerhedsstyrelsen, statstidende_konkurser, statstidende_staevninger, statstidende_andet, kfst, klagenaevnet_udbud. Elementformen er forskellig per myndighed. | ||
{
"cvr": "10150817",
"navn": "COOP TRADING A/S",
...
"retssager": [
{
"sagsnummer": "BS-12345/2026-KBH",
"ret": "Retten i København",
"sagstype": "Civil sag",
"dato": "2026-11-15",
"tidspunktStart": "09:30",
"tidspunktSlut": "11:00",
"retssal": "Retssal 4",
"erOffentlig": true,
"beskrivelse": "Hovedforhandling",
"dommere": ["Silja Lundberg Peris"],
"sagsøgere": [{ "name": "COOP TRADING A/S", "lawyer": "Adv. Jens Hansen" }],
"sagsøgte": [{ "name": "Leverandør ApS", "lawyer": null }],
"kildeUrl": "https://www.domstol.dk/retten-i-koebenhavn/retslister/"
}
],
"antalRetssager": 1,
"myndighedssager": {
"arbejdstilsynet": [
{
"titel": "Strakspåbud om sikkerhedsforanstaltninger",
"beskrivelse": "Virksomheden har fået påbud vedrørende maskinsikkerhed.",
"dato": "2026-06-10",
"cvrNummer": "10150817",
"link": "https://at.dk/afgoerelser/..."
}
],
"foedevarestyrelsen": [
{
"titel": "Indskærpelse",
"beskrivelse": "...",
"dato": "2026-08-20",
"virksomhed": "COOP TRADING A/S",
"solgtI": "Detail",
"link": "https://www.findsmiley.dk/...",
"billedeUrl": null
}
]
},
"antalMyndighedssager": 2
}Arbejdsretten-afg\u00f8relser har en anden form
Samme retssager-array indeholder ogs\u00e5 afg\u00f8relser fra Arbejdsretten. De b\u00e6rer kilde: "arbejdsretten" og felterne titel, parter, resum\u00e9, n\u00f8gleord og pdfUrl i stedet for retsm\u00f8defelterne. Forgren p\u00e5 kilde, f\u00f8r du l\u00e6ser et element.
Myndighedssager returneres kun for de myndigheder, hvor der faktisk er fundet sager. Tomme myndigheder udelades fra response.
Tilføjer legale ejere fra ejerregisteret med ejerandel og stemmeret. Reelle ejere kræver include=realOwners, og stiftere følger med include=management. Kræver
Response-felter:
| Felt | Type | Beskrivelse |
|---|---|---|
ejerskab | object | Container for ejerskabsdata |
ejerskab.ejere | array | Legale ejere fra ejerregisteret. Ikke reelle ejere — dem henter du med include=realOwners |
ejerskab.antalEjere | number | Antal ejere |
ejerskab.ejere[].navn | string | Ejerens navn |
ejerskab.ejere[].type | string | "virksomhed" eller "person" |
ejerskab.ejere[].cvr | string | undefined | CVR-nummer, hvis ejeren er en virksomhed |
ejerskab.ejere[].enhedsNummer | string | undefined | EnhedsNummer for ejeren |
ejerskab.ejere[].ejerandel | string | Interval som tekst, ikke et tal — CVR udstiller kun spænd. Et af 0%, under 5%, 5-10%, 10-15%, 15-20%, 20-25%, 25-33%, 33-50%, 50-66%, 66-90%, 90-100%, 100% eller Ukendt |
ejerskab.ejere[].stemmeret | string | undefined | Stemmeandel, samme intervalformat som ejerandel. Udeladt når den ikke er registreret |
{
"cvr": "10150817",
"navn": "COOP TRADING A/S",
...
"ejerskab": {
"ejere": [
{
"navn": "COOP AMBA",
"type": "virksomhed",
"cvr": "30899849",
"enhedsNummer": "4000034567",
"ejerandel": "100%",
"stemmeret": "100%"
},
{
"navn": "Peter Guldager",
"type": "person",
"enhedsNummer": "4000078901",
"ejerandel": "20-25%"
}
],
"antalEjere": 2
}
}Tilføjer datterselskaber - virksomheder der ejes af den pågældende virksomhed. Kræver
Response-felter:
| Felt | Type | Beskrivelse |
|---|---|---|
datterselskaber | array | Liste af datterselskaber (kun aktive virksomheder) |
datterselskaber[].cvr | string | CVR-nummer på datterselskabet |
datterselskaber[].enhedsNummer | number | Datterselskabets enhedsNummer |
datterselskaber[].name | string | Navn på datterselskabet |
datterselskaber[].address | string | Adresse på datterselskabet |
datterselskaber[].status | string | Datterselskabets status |
datterselskaber[].ownershipPercentage | string | null | Ejerandel (f.eks. "75%", "50-66%") |
datterselskaber[].votingRights | string | null | Stemmerettigheder (f.eks. "75%") |
antalDatterselskaber | number | Antal elementer i datterselskaber. Returneres altid sammen med arrayet |
{
"cvr": "10150817",
"navn": "COOP TRADING A/S",
...
"datterselskaber": [
{
"cvr": "34567890",
"enhedsNummer": 12345678,
"name": "COOP LOGISTICS ApS",
"address": "Roskildevej 65, 2620 Albertslund",
"status": "NORMAL",
"ownershipPercentage": "100%",
"votingRights": "100%"
},
{
"cvr": "45678901",
"enhedsNummer": 23456789,
"name": "COOP IMPORT A/S",
"address": "Industrivej 10, 2630 Taastrup",
"status": "NORMAL",
"ownershipPercentage": "50-66%",
"votingRights": "50-66%"
}
],
"antalDatterselskaber": 2
}Tilføjer SI-Vurdering kreditrisiko-score baseret på en 14-faktor model. Inkluderer risikoscore (0–10), risikoniveau, kreditanbefaling, detaljerede faktorer, advarsler og kritiske flags. Kræver
Response-felter:
| Felt | Type | Beskrivelse |
|---|---|---|
kreditrisiko.score | number | null | Samlet risikoscore (0–10, højere = bedre). null for virksomhedsformer uden score (se scoreAnvendelig) |
kreditrisiko.scoreAnvendelig | boolean | Om en samlet score beregnes. Kapitalselskaber og fonde får altid en score; andre former (fx enkeltmandsvirksomheder, foreninger, andelsselskaber) får kun en score, hvis de offentliggør regnskab — ellers null. Opløste/inaktive virksomheder får altid en score |
kreditrisiko.bemærkning | string | Kun når scoreAnvendelig er false: forklaring på, hvorfor scoren ikke beregnes |
kreditrisiko.scoreOutOf | number | Altid 10 (maks. score) |
kreditrisiko.risikoniveau | string | "Lav risiko" | "Medium risiko" | "Høj risiko" | "Ekstrem risiko" |
kreditrisiko.kreditanbefaling | string | Anbefaling: "Normal kredit" | "Begrænset kredit" | "Minimalt kredit" | "Ingen kredit anbefalet" |
kreditrisiko.faktorer | object | 14 individuelle risikofaktorer med score, vægt og detaljer |
kreditrisiko.advarsler | array | Liste af advarsler (tekststrenge) |
kreditrisiko.kritiskeFlags | array | Kritiske risikoindikatorer |
kreditrisiko.burnRate | object | Burn rate analyse: måneder til nul egenkapital, severity mv. |
kreditrisiko.isCapped | boolean | Om scoren er begrænset af en cap-regel |
kreditrisiko.scoreBegrænsning | object | null | Eventuel cap med value og reason |
kreditrisiko.groupCompanyStatus | object | Koncernselskabsanalyse (type, confidence, indikatorer) |
{
"cvr": "10150817",
"navn": "COOP TRADING A/S",
...
"kreditrisiko": {
"score": 7.2,
"scoreOutOf": 10,
"risikoniveau": "Lav risiko",
"kreditanbefaling": "Normal kredit",
"faktorer": {
"status": { "score": 10, "weight": 0, "details": "Aktiv virksomhed" },
"virksomhedsform": { "score": 8, "weight": 3.1, "details": "A/S med begrænset hæftelse" },
"oekonomi": { "score": 6.8, "weight": 39.2, "details": "..." },
"revisor": { "score": 9, "weight": 12.4, "details": "Stabil revisor" },
"retssager": { "score": 10, "weight": 0, "details": "Ingen retssager fundet" }
},
"advarsler": [],
"kritiskeFlags": [],
"burnRate": {
"monthsToZero": null,
"equity": 150000000,
"annualProfit": 25000000,
"severity": "growing"
},
"isCapped": false,
"groupCompanyStatus": {
"isGroupCompany": true,
"type": "subsidiary",
"confidence": "high"
}
}
}Tilføjer komplet kapitalhistorik: stiftelse, kapitalforhøjelser, kapitalnedsættelser og tranche-events. Inkluderer kurs, tegningsbeløb, indbetalingstype, post-money valuation og ejerskabs-snapshot for hver hændelse. Kræver
Response-felter:
| Felt | Type | Beskrivelse |
|---|---|---|
kapitalhaendelser | object | Container for kapitalhistorik |
kapitalhaendelser.haendelser | array | Kronologisk liste af kapitalhændelser |
kapitalhaendelser.antalHaendelser | number | Antal hændelser |
kapitalhaendelser.nuværendeKapital | number | null | Nuværende registreret kapital |
kapitalhaendelser.valuta | string | Valuta (typisk "DKK") |
Felter per hændelse:
| Felt | Type | Beskrivelse |
|---|---|---|
dato | string | Dato for hændelsen (ISO 8601, f.eks. "2024-01-22") |
type | string | stiftelse | kapitalforhøjelse | kapitalnedsættelse |
kapitalFoer | number | null | Selskabskapital før hændelsen (DKK) |
kapitalEfter | number | Selskabskapital efter hændelsen (DKK) |
aendring | number | Nominel ændring i DKK (positiv = forhøjelse, negativ = nedsættelse) |
valuta | string | Valuta (typisk "DKK") |
kurs | number | undefined | Tegningskurs (100 = pari, >100 = overkurs). F.eks. kurs 2180 = pris 21,80 kr. per nom. 1 kr. |
tegningsbeloeb | number | null | Samlet tegningsbeløb i DKK (nominalÆndring × kurs/100) |
postMoneyValuation | number | null | Estimeret post-money valuation (kapitalEfter × kurs/100). Kun ved overkurs. |
indbetalingstype | string | null | "Kontant indbetaling" | "Apportindskud" | "Gældskonvertering" |
ejerskab | array | undefined | Ejerskabs-snapshot på tidspunktet (navn, ejerandel, type, cvr, enhedsNummer) |
erTranche | boolean | undefined | True hvis dette er en del af en multi-tranche hændelse |
trancheNummer | number | undefined | Tranche-nummer (1-baseret) inden for gruppen |
antalTrancher | number | undefined | Antal trancher på samme dato |
{
"cvr": "41791013",
"navn": "EKSEMPEL STARTUP ApS",
...
"kapitalhaendelser": {
"haendelser": [
{
"dato": "2018-11-20",
"type": "stiftelse",
"kapitalFoer": null,
"kapitalEfter": 40000,
"aendring": 40000,
"valuta": "DKK"
},
{
"dato": "2020-06-15",
"type": "kapitalforhøjelse",
"kapitalFoer": 40000,
"kapitalEfter": 52000,
"aendring": 12000,
"valuta": "DKK",
"kurs": 833.33,
"tegningsbeloeb": 99999.6,
"postMoneyValuation": 433331.6,
"indbetalingstype": "Kontant indbetaling",
"ejerskab": [
{
"navn": "Stifter Holding ApS",
"ejerandel": "66-90%",
"type": "virksomhed",
"cvr": "41234567"
},
{
"navn": "Investor Ventures ApS",
"ejerandel": "10-15%",
"type": "virksomhed",
"cvr": "42345678"
}
]
},
{
"dato": "2023-03-01",
"type": "kapitalforhøjelse",
"kapitalFoer": 52000,
"kapitalEfter": 62000,
"aendring": 10000,
"valuta": "DKK",
"kurs": 2180.5,
"tegningsbeloeb": 218050,
"postMoneyValuation": 1351910,
"indbetalingstype": "Kontant indbetaling",
"erTranche": true,
"trancheNummer": 1,
"antalTrancher": 2,
"ejerskab": [
{
"navn": "Akasha Ventures ApS",
"ejerandel": "33-50%",
"type": "virksomhed",
"cvr": "43456789"
},
{
"navn": "ALL GAS NO BRAKES ApS",
"ejerandel": "33-50%",
"type": "virksomhed",
"cvr": "44567890"
},
{
"navn": "L.M.F HOLDING ApS",
"ejerandel": "5-10%",
"type": "virksomhed",
"cvr": "45678901"
}
]
},
{
"dato": "2023-03-01",
"type": "kapitalforhøjelse",
"kapitalFoer": 62000,
"kapitalEfter": 86251,
"aendring": 24251,
"valuta": "DKK",
"kurs": 2180.5,
"tegningsbeloeb": 528916,
"erTranche": true,
"trancheNummer": 2,
"antalTrancher": 2
}
],
"antalHaendelser": 4,
"nuværendeKapital": 86251,
"valuta": "DKK"
}
}Vigtige bemærkninger om kapitaldata
kapitalforhold).postMoneyValuation er et estimat baseret på kurs × kapital - den faktiske valuation kan afvige.Tilføjer reelle ejere fra Erhvervsstyrelsens lukkede register. Oplysningerne er fortrolige og kræver en underskrevet kontrakt med os - de er derfor ikke bundet til en bestemt plan, men til en særskilt adgangsaftale på din konto. Uden aftalen returneres 403 contract_required.
På vores side om reelle ejere kan du læse, hvad en reel ejer er, hvem der efter reglerne kan få adgang, og hvordan adgangsaftalen indgås.
Response-felter:
| Felt | Type | Beskrivelse |
|---|---|---|
reelleEjere | object | null | Container for reelle ejere (null hvis datakilden fejlede) |
reelleEjere.antalReelleEjere | number | Antal aktive reelle ejere |
reelleEjere.ejere | array | Alle registrerede reelle ejere (aktive først) |
ejere[].navn | string | Den reelle ejers navn |
ejere[].type | string | PERSON | VIRKSOMHED | UKENDT |
ejere[].cvrNummer | string | undefined | CVR-nummer hvis ejeren er en virksomhed |
ejere[].enhedsNummer | string | undefined | EnhedsNummer i CVR |
ejere[].ejerandelProcent | number | null | Ejerandel i procent (0-100) |
ejere[].stemmerettighederProcent | number | null | Stemmerettigheder i procent (0-100) |
ejere[].saerligeEjerforhold | array | Særlige ejerforhold, f.eks. ret til at udpege bestyrelsesmedlemmer |
ejere[].aktiv | boolean | Om registreringen fortsat er aktiv |
ejere[].gyldigFra | string | null | Registreret reel ejer siden (ISO 8601) |
ejere[].gyldigTil | string | null | Ophørsdato (null = aktiv) |
ejere[].land | string | null | Bopæls-/hjemland |
{
"cvr": "10150817",
"navn": "EKSEMPEL A/S",
...
"reelleEjere": {
"antalReelleEjere": 2,
"ejere": [
{
"navn": "Mette Eksempel Jensen",
"type": "PERSON",
"enhedsNummer": "4000123456",
"ejerandelProcent": 60,
"stemmerettighederProcent": 60,
"saerligeEjerforhold": [],
"aktiv": true,
"gyldigFra": "2017-06-12",
"gyldigTil": null,
"land": "DK"
},
{
"navn": "Peter Eksempel Jensen",
"type": "PERSON",
"enhedsNummer": "4000654321",
"ejerandelProcent": 40,
"stemmerettighederProcent": 40,
"saerligeEjerforhold": ["Har ret til at udpege bestyrelsesmedlemmer"],
"aktiv": true,
"gyldigFra": "2017-06-12",
"gyldigTil": null,
"land": "DK"
}
]
}
}Fortrolige oplysninger - kontrakt påkrævet
403 contract_required med beskeden "Fortroligt - kontakt os" (eller den samme besked som en warning ved on_restricted=skip).Når du anmoder om en include din plan ikke har adgang til, kan du vælge mellem to opførsler via query-parameteren on_restricted:
Returnerer 403 Forbidden hvis nogen include kræver højere plan end din. Ingen data returneres. Anvendelig til strikt produktionskode hvor du vil vide hvis tier-konfiguration er forkert.
Returnerer 200 OK med de includes din plan tillader. Restricterede includes droppes og listes i et warnings-array. Anvendelig til eksplorativ kode hvor du gerne vil have det data du kan få.
Eksempel: Free-plan kalder med courtData (kræver Starter)
curl "https://api.selskabsinfo.dk/v1/company/10150817?include=management,courtData" \
-H "Authorization: Bearer sk_live_..."
# HTTP/1.1 403 Forbidden
# {
# "error": {
# "code": "tier_restricted",
# "message": "'courtData' kræver Starter-planen eller højere..."
# }
# }curl "https://api.selskabsinfo.dk/v1/company/10150817?include=management,courtData&on_restricted=skip" \
-H "Authorization: Bearer sk_live_..."
# HTTP/1.1 200 OK
# {
# "cvr": "10150817",
# "navn": "Novo Nordisk A/S",
# "direktion": [ ... ],
# "bestyrelse": [ ... ],
# "warnings": [
# {
# "code": "tier_restricted",
# "include": "courtData",
# "required_tier": "Starter",
# "message": "'courtData' kræver Starter-planen eller højere."
# }
# ]
# }Bemærk: Du faktureres kun for de includes der faktisk returneres. Restricterede includes (i warnings) koster ikke kald. Soft-mode-responses cachelagres ikke (Cache-Control: private, no-store) når warnings er til stede, fordi responset afhænger af din plan.
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 |
| 403 | contract_required | Kræver underskrevet kontrakt om adgang til reelle ejere - se include: realOwners |
| 404 | not_found | Ingen virksomhed eller person fundet |
| 405 | method_not_allowed | Kun GET-metode er tilladt |
| 400 | invalid_include | Ukendt include-navn - tjek stavning mod listen i Include-system |
| 400 | invalid_id | Person-id (enhedsNummer) skal være et positivt heltal - /v1/person |
| 400 | invalid_on_restricted | on_restricted skal være error eller skip |
| 400 | invalid_enriched_contact | enriched_contact skal være true eller false |
| 429 | rate_limit_exceeded | For mange kald pr. sekund. Deler status 429 med monthly_limit_exceeded — forgren på error.code, ikke på statuskoden, ellers rapporterer din klient et hastighedsloft som opbrugt kvote |
| 429 | monthly_limit_exceeded | Månedlig kvote opbrugt - nulstilles den 1. i næste måned |
| 429 | upstream_rate_limited | Kun /v1/company/{cvr}/moms: for mange samtidige momsopslag på tværs af alle kunder — ikke fra dig alene. Kaldet er forbrugt: kvoten trækkes før loftet netop for, at nøgler med opbrugt kvote ikke kan blokere loftet gratis. Vent et øjeblik i stedet for at genforsøge i løkke |
| 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) |
| 503 | circuit_open | Kun /v1/company/{cvr}/moms: momsregisteret har fejlet gentagne gange, så opslaget blev ikke forsøgt. Ingen kvote forbruges |
| 503 | upstream_unavailable | Kun /v1/company/{cvr}/moms: opslaget blev forsøgt, men momsregisteret gav intet brugbart svar. Du får denne fejl i stedet for et gættet negativt svar. Kaldet er forbrugt — kvoten trækkes, når forespørgslen sendes videre, ikke når den lykkes |
API'et håndhæver to typer begrænsninger:
Månedlig kvote
Hvert API-kald tæller mod din månedlige kvote. Hver include tæller som et ekstra kald. F.eks. tæller ?include=management,financials som 3 kald (1 + 2 includes). Kvoten nulstilles automatisk den 1. i hver måned (UTC). Overskridelse returnerer 429 monthly_limit_exceeded. Har du brug for ekstra kald uden at opgradere? Se Booster-pakker.
Op til 30 req/s
Alle planer har op til 30 requests per sekund.
Alle API-responses inkluderer følgende HTTP-headers:
| Header | Værdi | Beskrivelse |
|---|---|---|
| Content-Type | application/json | Alle responses er JSON |
| Cache-Control | public, max-age=300|900|3600 | Virksomheds- og persondata 1 time; søgning 5 min; momsopslag 15 min; virksomhedsopslag med courtData kun 5 min. Bliver private, no-store, når svaret indeholder warnings eller reelleEjere, fordi indholdet så afhænger af din plan og din kontrakt |
| X-Credits-Used | 1 | Antal kald denne forespørgsel kostede (1 basis + 1 pr. include). Kun på /v1/company/{cvr} |
| X-Credits-Remaining | 9482 | Resterende kald i indeværende måned. Kun på /v1/company/{cvr} — søge-, person- og momsendpoints sender den ikke, så byg ikke en måler alene på den |
| Access-Control-Allow-Origin | * | CORS er aktiveret for alle origins - API'et kan bruges fra browsere |
| Access-Control-Allow-Methods | GET, OPTIONS | Kun GET og preflight (OPTIONS) er tilladt |
Selvom CORS er aktiveret, bør du aldrig eksponere din API-nøgle i klient-side JavaScript. Brug en server-side proxy til at beskytte din nøgle. Resultaterne kan dog caches i browseren vha. Cache-Control-headeren.
Søgeendpoints (/v1/search) returnerer paginerede resultater. Brug page og perPage til at navigere.
pageintegerperPageinteger/v1/search/person bruges limit i stedet (standard: 10, max: 50).Response-felter for paginerede endpoints:
| Felt | Type | Beskrivelse |
|---|---|---|
results | array | Array af matchende resultater for den aktuelle side |
total | number | Totalt antal matchende resultater på tværs af alle sider |
page | number | Nuværende sidenummer |
perPage | number | Antal resultater per side |
curl "https://api.selskabsinfo.dk/v1/search?q=consulting&page=2&perPage=10" \
-H "Authorization: Bearer sk_live_..."| 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 | 30 req/s | |||
| /v1/company | ||||
| /v1/search | ||||
| /v1/person | ||||
| /v1/search/person | ||||
| /v1/company/{cvr}/moms | ||||
| include: management | ||||
| include: financials | ||||
| include: courtData | ||||
| include: ownership | ||||
| include: subsidiaries | ||||
| include: creditRisk | ||||
| include: capital | ||||
Spar 20% med årlig betaling. Se alle prisdetaljer.
Brug for ekstra API-kald uden at opgradere din plan? Køb en engangspakke med ekstra kald, der lægges oven på din månedlige kvote. Booster-kald bruges først efter din månedlige kvote er opbrugt.
| Pakke | Ekstra kald | Pris | Pr. 1.000 kald |
|---|---|---|---|
| Booster S | 5.000 | 99 kr | 19,80 kr |
| Booster M | 25.000 | 229 kr | 9,16 kr |
| Booster L | 75.000 | 549 kr | 7,32 kr |
Booster-kald er tilgængelige for alle betalte planer (Starter, Pro, Business).
Kaldene udløber ved udgangen af din nuværende faktureringsperiode og kan ikke overføres til næste periode.
Engangskøb - ingen abonnement. Køb flere pakker efter behov.
Alle priser er ekskl. moms.
Køb booster-pakker fra din API-nøgle side. Har du regelmæssigt brug for ekstra kald? Overvej at opgradere din plan i stedet.
Test API'et direkte her - vælg endpoint, indtast et CVR-nummer eller søgeord, og se det rigtige svar.
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']})")SelskabsInfo CVR API er et standard REST-API med JSON-responses, som nemt kan integreres i ethvert sprog og framework. Her er nogle tips til populære platforme:
JavaScript / TypeScript
Brug native fetch eller axios. Ideelt til Next.js, Node.js og Deno. Se kodeeksempel.
Python
Brug requests eller httpx. Perfekt til dataanalyse, scraping og automatisering. Se kodeeksempel.
.NET / C#
Brug HttpClient med System.Text.Json. Tilføj Authorization header via DefaultRequestHeaders.
No-Code (Zapier / Make / n8n)
Brug en generisk HTTP-action og kopiér opskrifterne herunder - ingen kode nødvendig. Se opskrifterne.
Du behøver ikke at skrive kode for at bruge API'et. Her er færdige opskrifter til de mest populære automation-platforme. Alle bruger samme princip: en HTTP GET-request med din API-nøgle i Authorization-headeren.
Brug Zapier's Webhooks by Zapier integration (Premium-step). Konfigurér en GET request:
URL
https://api.selskabsinfo.dk/v1/company/{{cvr}}Query string params
include = management,financialsHeaders
Authorization: Bearer sk_live_din_nøgle_herTip: Hvis du henter CVR-numre fra en trigger (fx Google Sheets), kan du erstatte {{cvr}} med variablen fra det forrige step. Outputtet er JSON som du kan mappe direkte til næste action.
Tilføj et HTTP > Make a request-modul med disse indstillinger:
URL
https://api.selskabsinfo.dk/v1/company/{{cvr}}?include=management,financialsMethod
GETHeaders
Name: Authorization
Value: Bearer sk_live_din_nøgle_herParse response
Yes (JSON)Tip: Slå "Parse response" til så Make automatisk gør felter som navn, cvr og regnskabsdata tilgængelige som variabler i næste modul.
Tilføj en HTTP Request-node. Sæt Authentication til Generic Credential Type > Header Auth og opret credentials én gang - så kan du genbruge dem i alle workflows:
Header Auth credentials
Name: Authorization
Value: Bearer sk_live_din_nøgle_herURL
https://api.selskabsinfo.dk/v1/company/{{ $json.cvr }}Method
GETQuery parameters
include = management,financials,ownershipTip: Brug en SplitInBatches-node før HTTP Request hvis du processerer mange CVR-numre - det hjælper dig med at holde dig under rate limit (30 req/s) automatisk.
Fælles for alle platforme: CVR API'et er bare HTTP+JSON. Hvis din no-code platform har en HTTP-action (de fleste gør), kan du bruge API'et. Sæt headeren Authorization: Bearer DIN_NØGLE og kald GET https://api.selskabsinfo.dk/v1/company/{cvr}.
Seneste ændringer til API'et. Nye felter tilføjes løbende uden version-bump (additive ændringer). Breaking changes annonceres på forhånd.
Momsopslag lanceret
Nyt endpoint GET /v1/company/{cvr}/moms, som validerer DK{cvr} mod momsregisteret. Tilgængelig fra Starter-planen, 1 kald. Svaret er tre-tilstands: momsnummerGyldigt er registerets bogstavelige svar, mens momsregistreret aldrig er false — se endpointets afsnit.
Dokumentationsrettelser
Feltnavnene under courtData var dokumenteret med interne databasenavne (case_number, hearing_date …); de rigtige er danske (sagsnummer, dato …). ejerandel er et interval som tekst, ikke et tal, og ejertype har aldrig eksisteret. revision, kontaktMeta, antalRetssager, antalMyndighedssager, antalDatterselskaber, returned og fejlkoden rate_limit_exceeded er nu dokumenteret. Ingen af rettelserne ændrer API'ets adfærd.
financials nu på Free-planen
financials-include er nu tilgængelig på alle planer - inkl.
capital include lanceret
Ny capital include med komplet kapitalhistorik: forhøjelser, nedsættelser, tranche-events, kurs, tegningsbeløb, post-money valuation og ejerskabs-snapshots. Tilgængelig fra Starter-planen.
creditRisk include tilføjet
Ny creditRisk include med SI-Vurdering 14-faktor kreditrisiko-model. Tilgængelig fra Starter-planen.
Person-endpoints lanceret
Nye endpoints: /v1/person/{id} og /v1/search/person med detaljerede relationer og rollehistorik.
CVR API v1 lanceret
Initial release med virksomhedsopslag, søgning, management, financials, courtData, ownership og subsidiaries includes.
Opret en gratis konto og få 500 API-kald per måned med det samme. Opgradér når du har brug for mere.