CVR API Reference
Komplet reference for SelskabsInfo CVR API. Opslag, søgning og berigelse af danske virksomhedsdata.
Kom i gang
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"Authentication
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.
Nøgleformat
API-nøgler har formatet sk_live_ efterfulgt af 32 hexadecimale tegn:
sk_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
prefix 32 hex charactersBase URL & Versioning
https://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.
Response Format
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.
Endpoints
GET/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.).
Parametre
cvrstringrequired10150817includestringmanagement,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å Starter og højere: tomme og udløbne felter i 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. kontakt.reklamebeskyttet viser altid, om selskabet har frabedt sig markedsføringshenvendelser, så du kan se det, før du bruger kontaktoplysningerne - berigede såvel som registrerede.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 |
ophoert | boolean | Om virksomheden er ophørt. Læs dette felt frem for status alene: en lukket enkeltmandsvirksomhed beholder ofte status NORMAL, og ophøret står kun i CVR's livsforløb |
ophoersDato | string | null | Datoen virksomheden ophørte, eller null for en aktiv virksomhed |
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, reklamebeskyttet) |
kontakt.reklamebeskyttet | boolean | null | Reklamebeskyttelse i CVR-registret. true: selskabet har frabedt sig henvendelser i markedsføringsøjemed, og kontaktoplysningerne - registrerede såvel som berigede - må efter CVR-loven ikke bruges til det. null: registret oplyser det ikke. Returneres på alle opslag, uden ekstra credits |
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 | Gældende sekundære brancher (op til 3, med kode og beskrivelse). Afmeldte bibrancher medtages ikke |
antalAnsatte | number | null | Seneste præcise antal ansatte. null, når registret ikke oplyser et præcist antal - se antalAnsatteInterval og antalAarsvaerk |
antalAnsatteInterval | string | null | Registrets interval for antal ansatte, f.eks. "20-49" eller "1000+". CVR oplyser et præcist tal for under halvdelen af de aktive selskaber og et interval for resten |
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 }
],
"ophoert": false,
"ophoersDato": 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",
"reklamebeskyttet": false
},
"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": { ... }
}GET/v1/company/{cvr}/momsStarter+
Slå op, om DK{cvr} er et gyldigt, aktivt momsnummer i momsregisteret. Kræver Starter-plan eller højere. Koster 1 kald.
Læs dette før du bruger svaret
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.
Parametre
cvrstringrequiredcurl "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, mens upstream_unavailable betyder, at det blev forsøgt uden brugbart svar. I begge tilfælde koster det dig ingenting: kvoten trækkes, når forespørgslen sendes videre, men bliver ført tilbage, når der ikke kom data ud af den. 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.
GET/v1/search
Søg efter virksomheder efter navn eller CVR-nummer. Returnerer paginerede resultater med basisinfo. Understøtter fuzzy-matching og prefix-søgning. Hvert resultat indeholder reklamebeskyttet, så reklamebeskyttede selskaber kan frasorteres, før der bruges credits på opslag.
Parametre
qstringrequiredpageintegerpage × perPage må højst være 10.000 - dybere sider afvises med 400 invalid_page uden at koste et kald.perPageintegercurl "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",
"reklamebeskyttet": false
},
...
],
"total": 15,
"page": 1,
"perPage": 10
}GET/v1/person/{id}Starter+
Hent personprofil med aktive og historiske virksomhedsrelationer, roller og adressehistorik. Kræver Starter-plan eller højere.
Parametre
idintegerrequired/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 en aktiv rolle eller ejer en andel i dag |
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). En ejerandel fra ejerregistret er en rolle med titlen LEGAL EJER og felterne ejerandel og stemmeret som intervaller, fx "50-66%" |
historiskeRelationer | array | Virksomheder hvor alle personens roller og ejerandele er afsluttede - 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
}
]
},
{
"virksomhedNavn": "AMJ HOLDING ApS",
"cvr": "12345678",
"status": "NORMAL",
"roller": [
{
"type": "REGISTER",
"titel": "LEGAL EJER",
"fraDato": "2016-02-01",
"tilDato": null,
"ejerandel": "100%",
"stemmeret": "100%"
}
]
}
],
"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": 3
}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.
GET/v1/search/personStarter+
Sø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.
Parametre
qstringrequiredlimitintegercurl "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 en aktiv rolle eller en ejerandel i dag (virksomhedNavn, cvr, roller[]). En ejerandel er en rolle med titlen LEGAL EJER og intervallerne ejerandel og stemmeret |
historiskeRelationer | array | Virksomheder hvor alle roller og ejerandele er afsluttede |
antalAktiveRelationer | number | Antal virksomheder med en aktiv rolle eller ejerandel |
antalHistoriskeRelationer | number | Antal virksomheder hvor alt er afsluttet |
{
"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.
GET/v1/konkurser
Konkursdekreter offentliggjort i Statstidende af de danske skifteretter, beriget med branche og selskabsform fra CVR. Sorteret med nyeste dekret først. Koster 1 kald fra din kvote. Datasættet dækker perioden fra januar 2026 og frem.
Parametre
fromstringtostringcourtstringSø- og Handelsretten).industrystringcitystringby eller registreret_by.qstringpageintegerresults med det reelle total, ikke en fejl. page × perPage må højst være 100.000 - dybere sider afvises med 400 invalid_page uden at koste et kald.perPageintegercurl "https://api.selskabsinfo.dk/v1/konkurser?from=2026-06-01&perPage=2" \
-H "Authorization: Bearer sk_live_..."{
"results": [
{
"cvr": "12345678",
"navn": "EKSEMPEL RESTAURANT ApS",
"dekretdato": "2026-09-07",
"skifteret": "Sø- og Handelsretten",
"sagsnummer": "K 1234/26-A",
"kurator": "Jens Jensen",
"kuratoradresse": "Rådhuspladsen 1, 1550 København V",
"by": "København V",
"postnummer": "1550",
"registreret_by": "København V",
"branche": "Restauranter",
"virksomhedsform": "APS"
}
],
"total": 811,
"page": 1,
"perPage": 2
}cvr kan være null
Et lille antal bekendtgørelser i Statstidende angiver ikke CVR-nummer. De indgår stadig i resultatet, men kan ikke slås op med /v1/company/{cvr}.
Én række pr. konkurs, kun virksomheder
Statstidende trykker af og til samme dekret igen, enten ordret eller med en rettelse (fx en ny kurator). Så vises kun den nyeste bekendtgørelse, og konkursen tæller én gang i total. Listen dækker virksomheder, hvis navn bærer en selskabsbetegnelse (A/S, ApS, I/S, K/S, P/S, IVS, A.M.B.A. m.fl.), eller hvis navn indeholder under konkurs, under tvangsopløsning eller under rekonstruktion. Personlige konkurser og enkeltmandsvirksomheder, der står i ejerens navn, er ikke med.
virksomhedsform er en kode her, men et navn på /v1/nyevirksomheder
De to endpoints henter selskabsform fra hver sin kilde, som gemmer den i hver sin form. Her får du CVR's korte kode — APS, A/S, IVS — mens /v1/nyevirksomheder giver det fulde navn, fx Anpartsselskab. Filtrér derfor med den form det pågældende endpoint selv returnerer.
by og registreret_by
by og postnummer er adressen som den står på bekendtgørelsen, og hører altid sammen.registreret_by er virksomhedens aktuelt registrerede by i CVR og kan afvige, hvis virksomheden er flyttet siden bekendtgørelsen — den har intet postnummer i vores data og er derfor et selvstændigt felt frem for at overskrive by. De to felter bruger også forskellige stavemåder: Statstidende skriver Århus C, hvor CVR skriver Aarhus C. Derfor matchercity-filteret begge felter.
GET/v1/nyevirksomheder
Nyregistrerede danske virksomheder: aktive virksomheder stiftet inden for de seneste 24 måneder, sorteret med nyeste stiftelsesdato først. Synkroniseres fra CVR hver nat. Koster 1 kald fra din kvote.
Parametre
fromstringtostringindustrystringindustry_codestring702000) - alle branchekoder i datasættet er 6-cifrede. En værdi med andet end præcis 6 cifre giver 400 invalid_industry_code.citystringlegal_formstringAnpartsselskab).qstringpageintegerresults med det reelle total, ikke en fejl. page × perPage må højst være 100.000 - dybere sider afvises med 400 invalid_page uden at koste et kald.perPageintegercurl "https://api.selskabsinfo.dk/v1/nyevirksomheder?from=2026-09-01&legal_form=Anpartsselskab&perPage=2" \
-H "Authorization: Bearer sk_live_..."{
"results": [
{
"cvr": "46768442",
"navn": "EKSEMPEL HOLDING ApS",
"stiftelsesdato": "2026-09-14",
"by": "Aarhus C",
"postnummer": "8000",
"kommunekode": "0751",
"branche": "Virksomhedsrådgivning og anden ledelsesrådgivning",
"branchekode": "702000",
"virksomhedsform": "Anpartsselskab",
"virksomhedstype": "APS"
}
],
"total": 4879,
"page": 1,
"perPage": 2
}Kun aktive virksomheder, kun 24 måneder
Bemærk formaterne: kommunekode er, når den er udfyldt, nulpolstret til fire tegn ("0751", ikke "751"), og virksomhedstype er CVR's korte selskabskode med versaler ("APS", "ENK") — den lange tekst står i virksomhedsform.
Endpointet dækker aktive virksomheder stiftet inden for de seneste 24 måneder. Skal du bruge kontaktoplysninger, regnskabstal eller medarbejderantal, ligger de i /v1/company/{cvr} med de relevante include-sektioner.
kommunekode er string | null
For en del virksomheder, især de ældre registreringer i perioden, har vi endnu ikke kommunekoden fra CVR. For mange af dem er koden udledt af postnummeret, hvor det ligger inden for én kommune, indtil CVR's egen værdi når frem; for resten er feltet null. De senest registrerede virksomheder får den normalt med ved den natlige synkronisering. Skal du placere virksomhederne geografisk, er postnummer det sikre felt.
Include-system
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, likvidatorer, repraesentanter | 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-score fra SI-vurderingen (model med 15 faktorer) | 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.
include: management
Tilføjer ledelsesdata: direktion, bestyrelse, revision, stiftere, likvidatorer og foreningsrepræsentanter. Tilgængelig på alle planer inkl. Free.
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 |
likvidatorer | array | Likvidator for et selskab under likvidation eller tvangsopløsning, som tegner selskabet i stedet for ledelsen - samme feltstruktur som direktion (titel er "LIKVIDATOR") |
repraesentanter | array | Foreningsrepræsentanter. Foreninger har ingen direktion eller bestyrelse i CVR, kun repræsentanter - samme feltstruktur som direktion (titel er "Foreningsrepræsentant") |
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
}
],
"likvidatorer": [],
"repraesentanter": [],
"stiftere": [
{
"navn": "FDB A.M.B.A.",
"enhedsNummer": 4000099887
}
]
}include: financials
Tilføjer detaljeret regnskabsdata fra virksomhedens op til fire senest offentliggjorte årsrapporter, inkl. EBIT og EBITDA for hvert år. Tilgængelig på alle planer inkl. Free.
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 - op til fire regnskabsår, i den rækkefølge årsrapporterne er offentliggjort (normalt nyeste først). En årsrapport, der er indsendt for sent eller rettet, kan ligge foran et nyere år - find et bestemt år via regnskabsaar |
financialData[].periode | string | Regnskabsperiode (f.eks. "2023-01-01 - 2023-12-31") |
financialData[].regnskabsaar | number | null | Regnskabsåret - året perioden slutter i (2023/24 er 2024). Null hvis perioden ikke kan aflæses |
financialData[].nettoomsaetning | number | null | Nettoomsætning i DKK |
financialData[].bruttofortjeneste | number | null | Bruttofortjeneste i DKK |
financialData[].ebit | number | null | EBIT (resultat af primær drift) i DKK. Årsrapportens eget driftsresultat, eller beregnet som bruttofortjeneste minus personaleomkostninger og af- og nedskrivninger, når årsrapporten ikke angiver det. Beregnet efter samme regel som EBIT i Lead Finder |
financialData[].ebitda | number | null | EBITDA i DKK: EBIT plus af- og nedskrivninger. Null når årsrapporten ikke angiver af- og nedskrivninger |
financialData[].ebitAfledt | boolean | true når ebit er beregnet ud fra resultatopgørelsens linjer, fordi årsrapporten ikke angiver et driftsresultat |
financialData[].driftsresultat | number | null | Driftsresultat i DKK, som angivet i årsrapporten. Mange små selskaber angiver det ikke - brug ebit |
financialData[].afskrivninger | number | null | Af- og nedskrivninger 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",
"regnskabsaar": 2023,
"nettoomsaetning": 8456000000,
"bruttofortjeneste": 523000000,
"ebit": 98000000,
"ebitda": 140000000,
"ebitAfledt": false,
"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"
},
...
]
}
}Vækst (CAGR): Med fire regnskabsår kan du beregne den årlige vækst over tre år, f.eks. for EBIT: (ebit[år] / ebit[år - 3]) ^ (1/3) - 1. Find årene via regnskabsaar frem for rækkefølgen - et regnskab, der er indsendt for sent eller rettet, kan ligge foran et nyere, og et år kan mangle. Vækst giver kun mening, når begge år er positive og dækker 12 måneder (se periode).
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.
include: courtData
Tilføjer retssager og myndighedssager. Data indsamles fra domstolenes retslister (civile sager), Arbejdsretten, otte myndigheder og nævn samt Statstidende. Kræver Starter eller højere.
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 otte myndigheder og nævn samt Statstidende (12 nøgler), grupperet per kilde. Kun kilder 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.
include: ownership
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 Pro eller højere.
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
}
}include: subsidiaries
Tilføjer datterselskaber - virksomheder der ejes af den pågældende virksomhed. Kræver Pro eller højere.
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
}include: creditRisk
Tilføjer SI-scoren fra SI-vurderingen, baseret på en model med 15 faktorer. Inkluderer risikoscore (0–10), risikoniveau, kreditanbefaling, detaljerede faktorer, advarsler og kritiske flags. Kræver Starter eller højere.
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"
}
}
}include: capital
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 Starter eller højere.
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
- Data stammer fra Erhvervsstyrelsens CVR-register (
kapitalforhold). - Ejerskabs-snapshots viser registrerede ejere på tidspunktet - minoritetsejere under 5% registreres ikke i CVR.
- Tranche-events oprettes når flere kapitalændringer sker på samme dato (f.eks. forskellige indbetalingstyper).
postMoneyValuationer et estimat baseret på kurs × kapital - den faktiske valuation kan afvige.
include: realOwners
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
- Oplysninger om reelle ejere stammer fra Erhvervsstyrelsens lukkede cvr-re-distribution og er ikke offentligt tilgængelige.
- Adgang kræver en godkendt, underskrevet aftale. Betalende API-kunder ansøger direkte under API-nøgler; andre kan kontakte os.
- Data må kun anvendes i overensstemmelse med kontraktens vilkår og må ikke videredistribueres.
- Alle opslag logges af hensyn til vores forpligtelser over for Erhvervsstyrelsen.
- Uden aktiv aftale returneres
403 contract_requiredmed beskeden "Fortroligt - kontakt os" (eller den samme besked som en warning vedon_restricted=skip).
Håndtering af tier-restriktioner
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.
Fejlkoder
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) |
| 400 | invalid_from, invalid_to | from eller to er ikke en gyldig dato i formatet YYYY-MM-DD - /v1/konkurser og /v1/nyevirksomheder |
| 400 | invalid_range | from ligger efter to |
| 400 | invalid_filter | Et tekstfilter (q, court, industry, city, legal_form) er længere end 200 tegn |
| 400 | invalid_industry_code | industry_code skal være præcis 6 cifre - /v1/nyevirksomheder |
| 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_page | page × perPage overstiger 10.000 på /v1/search eller 100.000 på /v1/konkurser og /v1/nyevirksomheder. Indsnævr søgningen eller filtrene i stedet. Ingen kvote forbruges |
| 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 på din månedlige betalingsdato (Free-planen: den 1. i måneden); svarteksten angiver den præcise dato |
| 429 | upstream_rate_limited | Kun /v1/company/{cvr}/moms: for mange samtidige momsopslag på tværs af alle kunder — ikke fra dig alene. Kvoten tjekkes før loftet, så nøgler med opbrugt kvote ikke kan blokere det, men kaldet føres tilbage, når loftet afviser det. 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 | quota_service_unavailable | Kvotevinduet kunne ikke fornys på grund af en midlertidig databasefejl. Ingen kvote forbruges - 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 | Opslaget blev forsøgt, men datakilden gav intet brugbart svar. På /v1/company/{cvr}, /v1/search, /v1/person og /v1/search/person svarede CVR-registret ikke - prøv igen om lidt. På /v1/company/{cvr}/moms er det momsregisteret, og du får denne fejl i stedet for et gættet negativt svar. Ingen kvote forbruges — kaldet trækkes, når forespørgslen sendes videre, og føres tilbage, når der ikke kom data ud af den |
Rate Limiting
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). På betalte planer nulstilles kvoten automatisk på din månedlige betalingsdato — samme dag som abonnementet fornys. På Free-planen er det den 1. i hver måned (UTC). 429-svaret angiver den præcise nulstillingsdato. Overskridelse returnerer 429 monthly_limit_exceeded. Kvoten deles af alle dine nøgler, og kald foretaget med en nøgle, du senere har tilbagekaldt, tæller med resten af perioden - en ny nøgle giver ikke en ny kvote. 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. Overskridelse returnerer 429 rate_limit_exceeded med headeren Retry-After: 1.
Response Headers
Alle API-responses inkluderer følgende HTTP-headers:
| Header | Værdi | Beskrivelse |
|---|---|---|
| Content-Type | application/json | Alle responses er JSON |
| Cache-Control | private, max-age=300|600|900|3600 | Virksomheds- og persondata 1 time; nyregistrerede virksomheder 1 time; konkurser 10 min; søgning 5 min; momsopslag 15 min; virksomhedsopslag med courtData kun 5 min. Altid private: svaret må genbruges af din egen klient, men ikke af delte caches, fordi det hører til din nøgle. 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 |
| Access-Control-Expose-Headers | X-Credits-Used, X-Credits-Remaining, Retry-After | Gør headerne læsbare for JavaScript i browseren |
| Retry-After | 1 | Kun på 429 rate_limit_exceeded: antal sekunder før næste forsøg |
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.
Paginering
Søgeendpointet (/v1/search) og listerne /v1/konkurser og /v1/nyevirksomheder returnerer paginerede resultater. Brug page og perPage til at navigere.
pageintegerresults med det reelle total, ikke en fejl. Dybden er begrænset: page × perPage må højst være 10.000 på /v1/search og 100.000 på /v1/konkurser og /v1/nyevirksomheder. Dybere sider afvises med 400 invalid_page uden at koste et kald. Begge lister er i dag under 100.000 rækker, så du kan hente en hel liste ved at paginere, til results er tom.perPageinteger/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_..."Planer & Adgang
| 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 | ||||
| /v1/konkurser | ||||
| /v1/nyevirksomheder | ||||
| include: management | ||||
| include: financials | ||||
| include: courtData | ||||
| include: ownership | ||||
| include: subsidiaries | ||||
| include: creditRisk | ||||
| include: capital | ||||
Spar 20% med årlig betaling. Se alle prisdetaljer.
Booster-pakker
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.
Prøv API'et
Test API'et direkte her - vælg endpoint, indtast et CVR-nummer, et søgeord eller en dato, og se det rigtige svar.
Kodeeksempler
curl
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"JavaScript / TypeScript
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');Python
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']})")SDKs & Integrationer
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.
No-Code opskrifter
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.
Zapier
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.
Make (tidligere Integromat)
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.
n8n
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}.
Changelog
Seneste ændringer til API'et. Nye felter tilføjes løbende uden version-bump (additive ændringer). Breaking changes annonceres på forhånd.
Overskudsgrad og afkastningsgrad efter den danske definition
overskudsgrad og afkastningsgrad i regnskabsdata.financialData beregnes nu på driftsresultatet (EBIT), som Finansforeningens Anbefalinger & Nøgletal og regnskabernes egne hoved- og nøgletal gør: overskudsgrad er driftsresultatet i procent af nettoomsætningen, afkastningsgrad driftsresultatet i procent af aktiverne. Før var begge beregnet på årets resultat, og overskudsgrad for holdingselskaber på indtægter af kapitalandele. Et driftsresultat, som årsrapporten ikke angiver, beregnes ud fra resultatopgørelsens linjer som før (ebitAfledt er så true), og nøgletallene beregnes på det. Begge felter er null kun, hvor et driftsresultat hverken kan læses eller beregnes, og hvor nævneren mangler: overskudsgrad kræver en nettoomsætning, som et holdingselskab eller en klasse B-virksomhed med bruttofortjeneste alene ikke oplyser. Årets resultat, omsætningen og aktiverne står uændret i aaretsResultat, nettoomsaetning og statusBalance.
Ophørte virksomheder: ophoert og ophoersDato
GET /v1/company/{cvr} har to nye felter, ophoert og ophoersDato, som siger, om og hvornår virksomheden er ophørt. En lukket enkeltmandsvirksomhed beholder ofte status: NORMAL, fordi CVR registrerer ophøret i virksomhedens livsforløb, så status alene kunne ikke skelne den fra en aktiv. Reglen er den samme, som creditRisk allerede bruger, og en afsluttende status som OPLØST tæller også, når livsforløbet mangler. På /v1/person slutter en ejerandel i en ophørt virksomhed med virksomheden. status er uændret og viser stadig registrets egen værdi. Felterne kommer med i basisopslaget og koster ingen ekstra kald.
Person-endpoints: ejerandele og virksomhedsnavne
/v1/person og /v1/search/person viser nu personens ejerandele fra ejerregistret som en rolle med titlen LEGAL EJER og felterne ejerandel og stemmeret som intervaller, de samme som i ejerskab på /v1/company. Før blev ejerandele slet ikke læst: en virksomhed, personen ejer uden at sidde i ledelsen, stod under historiskeRelationer med tomme roller. Den står nu under aktiveRelationer og tæller med i antalAktiveRelationer; en solgt andel står som historisk med tilDato. På /v1/search/person er virksomhedNavn nu virksomhedens navn. Før var det som regel navnet på det organ, rollen hører til, fx "Direktion", "Bestyrelse" eller "EJERREGISTER".
EBIT og EBITDA i financials - nu fire regnskabsår
Hvert år i regnskabsdata.financialData har nu ebit, ebitda, ebitAfledt og regnskabsaar. ebit er udfyldt, også når årsrapporten ikke angiver et driftsresultat (så er den beregnet, og ebitAfledt er true) - efter samme regel som EBIT i Lead Finder. financials returnerer nu op til fire regnskabsår (før tre) i den rækkefølge, årsrapporterne er offentliggjort, så en treårig vækstrate (CAGR) kan beregnes ud fra ét kald. Alle eksisterende felter er uændrede, og prisen er den samme. creditRisk vurderer fortsat de seneste tre år.
Konkurser og nye virksomheder: sidegrænse og datarettelser
På /v1/konkurser og /v1/nyevirksomheder må page × perPage højst være 100.000; dybere sider giver 400 invalid_page uden at koste et kald. Før gav de en tom side eller, ved ekstreme sidetal, 502 upstream_error. Begge lister er under grænsen, så en fuld gennemgang påvirkes ikke. /v1/konkurser har nu én række pr. konkurs: genoptrykte og rettede bekendtgørelser er samlet til den nyeste, personlige konkurser er fjernet, og dekreter, der viste kuratorens advokatfirma som skyldner, viser nu den rigtige virksomhed og dens CVR. På /v1/nyevirksomheder er virksomhedsform nu altid det fulde navn (godt 200 rækker havde CVR's korte kode, fx APS), og kommunekode er udfyldt for flere virksomheder (for en del udledt af postnummeret), men er dokumenteret som string | null, fordi den stadig kan mangle. Dokumentationen er rettet: en industry_code med andet end præcis 6 cifre giver 400 invalid_industry_code, ikke en tom liste. Begge endpoints kan nu prøves i playgrounden.
Rettelser i data, caching og kvote
creditRisk vurderer nu også selskabets livsforløb og alder, så et ophørt selskab, der stadig står som NORMAL, ikke længere scores som aktivt. antalAnsatte er null (ikke 0 eller antal årsværk), når registret ikke oplyser et præcist antal ansatte; intervallet returneres nu i det nye felt antalAnsatteInterval. bibrancher indeholder kun gældende bibrancher, og to forskellige ejere med samme navn slås ikke længere sammen i ejerskab. include må gentages (?include=a&include=b). På /v1/search pagineres et CVR-opslag som alle andre (side 2 er tom), og page × perPage over 10.000 giver 400 invalid_page. Cache-Control er nu private, 429 rate_limit_exceeded sender Retry-After, og X-Credits-* kan læses fra browseren. Kald foretaget med en tilbagekaldt nøgle tæller nu med i månedens kvote.
Konkurser og nyregistrerede virksomheder lanceret
To nye endpoints: GET /v1/konkurser (konkursdekreter fra Statstidende, beriget med branche og selskabsform fra CVR) og GET /v1/nyevirksomheder (aktive virksomheder stiftet inden for de seneste 24 måneder). Begge koster 1 kald og svarer med {results, total, page, perPage}. Bemærk at virksomhedsform er CVR's korte kode på /v1/konkurser (APS) men det fulde navn på /v1/nyevirksomheder (Anpartsselskab), og at industry_code altid er 6 cifre. Tekstfiltre er højst 200 tegn (ellers 400 invalid_filter), og en side efter den sidste giver en tom results med det reelle total.
reklamebeskyttet på alle svar
Nyt felt kontakt.reklamebeskyttet (boolean | null) på GET /v1/company/{cvr}, og reklamebeskyttet på hvert resultat fra GET /v1/search. Det er CVR-registrets egen markering af, at selskabet har frabedt sig henvendelser i markedsføringsøjemed, og det gælder også de berigede kontaktoplysninger. Feltet hentes i det kald, der allerede laves - ingen ekstra credits, ingen ændring for eksisterende kald.
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. Free (500 kald/md). Tidligere krævede regnskabsdata Starter-planen eller højere.
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.
Klar til at komme i gang?
Opret en gratis konto og få 500 API-kald per måned med det samme. Opgradér når du har brug for mere.