Søg virksomhed Priser Dokumentation Kontakt

Typiske brugsscenarier

Sådan integrerer danske og norske teknologi-virksomheder DataCVR API i deres produkter

Fintech onboarding

Validér 1.000+ CVR-numre dagligt ved KYC-onboarding. Hent firmanavn, adresse, status og ejere automatisk via /api/v2/dk/company/{cvr}.

B2B e-handel autoudfyldning

Brugere indtaster CVR-nummer ved tilmelding, formularen udfyldes automatisk med korrekte firma-oplysninger fra virk.dk.

CRM lead-berigelse

Beriger leads med branchekode (DB07), antal ansatte, omsætning og ejer-struktur. Bedre segmentering og kvalifikation af salgspipeline.

Kreditstyring

Hent regnskabsdata via /api/v2/dk/company/{cvr}/accounts til automatisk beregning af soliditet, likviditet og overskudsgrad. Se guide til kreditvurdering.

P-nummer lokalisering

Slå produktionsenheder op via /api/v2/dk/subsidiary/{pnr} til lokationsbaseret marketing eller leverings-zone-beregning.

Lønsystem & HR

Synkroniser arbejdsgiver-data ved ansættelse: korrekt firmanavn, adresse, branchekode og status. Reducer manuel datavalidering med 90%.

DataCVR API giver nem adgang til danske virksomhedsdata via en moderne REST API. Uanset om du skal integrere CVR-opslag i dit regnskabssystem, bygge en leadgenereringsplatform, eller automatisere compliance-processer, så giver API'et dig de data, du har brug for - hurtigt og i struktureret JSON-format.

Kom i gang

Det tager under 2 minutter at komme i gang med DataCVR API. Følg disse tre trin:

  1. Opret en gratis kontodatacvrapi.dk/opret-konto
  2. Find din API-nøgle i dit dashboard under "API-nøgle"
  3. Lav dit første kald med din API-nøgle som autentificering

Den gratis plan giver dig 25 opslag per dag - nok til at teste og komme i gang.

Autentificering

Alle API-kald kræver en gyldig API-nøgle. Du kan autentificere på tre måder:

1. Bearer Token (anbefalet)

Authorization: Bearer DIN_API_NØGLE

2. X-API-Key Header

X-API-Key: DIN_API_NØGLE

3. Basic Auth

Authorization: Basic base64(DIN_API_NØGLE:)

API-nøglen som brugernavn, tomt password. Eksempel med curl: curl -u "DIN_API_NØGLE:"

Vigtigt: Query parameter-autentificering er ikke understøttet. Brug altid headers.

Base URL

API'et er tilgængeligt via to identiske base-URLs. Begge peger på samme backend, og du kan frit bruge den du foretrækker:

https://datacvrapi.dk/api/v2     (kanonisk, anbefalet)
https://api.datacvrapi.dk/api/v2 (subdomain-alias)

Eksempel: GET /dk/company/10150817 kan kaldes via https://datacvrapi.dk/api/v2/dk/company/10150817 eller https://api.datacvrapi.dk/api/v2/dk/company/10150817. Samme svar.

Vi anbefaler datacvrapi.dk/api/v2 i ny kode. api.datacvrapi.dk eksisterer som alias for bagudkompatibilitet. Bemærk at stien altid starter med /api/v2/, også på api.-subdomainet.

Alle endpoints bruger HTTPS (TLS 1.2+) for sikker kommunikation.

Endpoints oversigt

API'et er opdelt i tre tydelige områder:

  • Danske virksomheder: CVR-data fra Erhvervsstyrelsen. Sti-prefix: /dk/
  • Norske virksomheder: Organisationsdata fra Brønnøysundregistrene. Sti-prefix: /no/
  • Scrape tokens (tilkøb): Kontakt-scraping fra virksomhedens hjemmeside. Betales med separate scrape-tokens. Sti: /account/scrape-tokens + scrape-endpoints på virksomheder

Derudover findes et public uptime-endpoint GET /api/v2/health (ingen API-nøgle, ingen rate-limit), som returnerer {"status":"ok","version":"v2","timestamp":"..."}. Beregnet til monitorer og deploy smoke-tests.

Til SLA-monitoring findes også et deep health-endpoint GET /api/v2/health/deep, som verificerer database, Erhvervsstyrelsens ES API, og delta-sync freshness. Returnerer HTTP 503 hvis database eller ES API er utilgængelig.

Danske virksomheder (/dk/)

Endpoint Metode Beskrivelse Plan
/dk/company/{cvr} GET Stamdata fra CVR (navn, adresse, status, branche, ejere) Gratis
/dk/search/company GET Søg virksomheder (navn, branche, status, by, postnummer) Alle
/dk/suggestions/company/{query} GET Autocomplete på virksomhedsnavn Alle
/dk/industry/counts GET Antal virksomheder per branchekode Alle
/dk/subsidiary/{pnr} GET P-nummer opslag (produktionsenhed) Alle
/dk/search/subsidiary GET Søg produktionsenheder Alle
/dk/suggestions/subsidiary/{query} GET Autocomplete på P-nummer Alle
/dk/participant/{id} GET Deltager opslag (ejer eller ledelse) Alle
/dk/search/participant GET Søg ejere og ledelse Alle
/dk/suggestions/participant/{query} GET Autocomplete på ejere og ledelse Alle
/dk/changed/list/company GET Ændrede DK virksomheder (changed feed) Alle
/dk/changed/company/{change_id} GET Enkelt virksomhed fra changed feed Alle
/dk/company/{cvr}/accounts GET Alle årsregnskaber for virksomhed (inkl. pdf_url) Business+
/dk/company/{cvr}/accounts/latest GET Seneste årsregnskab for virksomhed Business+
/dk/search/accounts GET Søg i regnskabsdata Business+
/dk/company/{cvr}/capital-changes GET Detaljerede kapitalændringer (kurs, indbetalingsmåde, beslutningsdato) Hobby+
/dk/company/{cvr}/capital-changes/contribute POST Bidrag rå HTML fra virk.dk registreringsmeddelelser så data kan parses og caches (max 50/dag/bruger) Business+
/dk/company/{cvr}/capital-changes-live GET Live kapitalændringer fra Erhvervsstyrelsens registreringstekster API Hobby+
/dk/company/{cvr}/address-changes GET Adresse- og hjemstedsændringer historik Hobby+
/dk/company/{cvr}/personnel-changes GET Direktion, bestyrelse, tilsynsråd, tegningsberettigede (med enhedsNummer-link til personer) Hobby+
/dk/company/{cvr}/auditor-changes GET Revisor-skift (fratrådte/tiltrådte med CVR + adresse) Hobby+
/dk/company/{cvr}/status-changes GET Konkurs, opløsning, tvangsopløsning, likvidation, rekonstruktion Hobby+
/dk/company/{cvr}/founding-text GET Fuld stiftelsestekst med stiftere, direktion, bestyrelse, kapital, formål Hobby+
/dk/company/{cvr}/mergers-demergers GET Fusioner og spaltninger (offentliggjort + gennemført, parties med rolle) Hobby+
/dk/company/{cvr}/conversions GET Selskabsomdannelser (ApS→A/S, IVS→ApS, ...) Hobby+
/dk/company/{cvr}/owner-discrepancies GET Uoverensstemmelser i reelle ejere Hobby+
/dk/company/{cvr}/corrections GET Erhvervsstyrelsens rettelser til tidligere registreringer Hobby+
/dk/company/{cvr}/other-registrations GET Vedtægtsændringer, formålsændringer, øvrige Hobby+
/dk/company/{cvr}/registreringstekster GET Raw registreringstekster (alle 12 status-typer, med filter ?status=) Hobby+

Registreringstekster (officiel Erhvervsstyrelsen-data)

De 12 endpoints under /dk/company/{cvr}/ der ender på -changes, -text, conversions, corrections, mergers-demergers, owner-discrepancies, other-registrations og registreringstekster leverer struktureret data fra Erhvervsstyrelsens officielle CVR-historik (distribution.virk.dk/registreringstekster). Adgang verificeret via system-til-system aftale med Erhvervsstyrelsen (sagsnr. 146615). Samlet quota for alle registreringstekst-endpoints: 100/30d (Hobby), 1.000/30d (Business+). Personer leveres med enhedsNummer så du kan slå dem op i /dk/participant/{enhedsNummer}. Virksomheder leveres med 8-cifret CVR + adresse når nævnt i original-teksten.

Norske virksomheder (/no/)

Data hentes fra Brønnøysundregistrene (brreg.no) og har tilsvarende struktur som danske endpoints. Organisationsnummer er 9 cifre.

DK/NO paritet: Stort set alle DK-endpoints findes også på /no/ via samme path-struktur. Ikke alle datatyper er dog tilgængelige i Norge: registreringstekster (stiftelsestekst, kapitalændringer-live, person- og adresseændringer, fusioner/spaltninger og resten af /registreringstekster-familien) findes kun på /dk/, da Brønnøysundregistrene ikke offentliggør tilsvarende historiske registreringsdokumenter. Norske felter kan også afvige (fx ingen companystatus_code-mapping; NO bruger egen AKTIV/OPPLOEST-klassifikation).
Endpoint Metode Beskrivelse Plan
/no/company/{orgnr} GET Stamdata for norsk virksomhed Gratis
/no/search/company GET Søg norske virksomheder Alle
/no/changed/list/company GET Ændrede NO virksomheder (changed feed) Alle
/no/company/{orgnr}/accounts GET Norske regnskaber Business+

Scrape tokens (tilkøb)

Kontakt-scraping henter telefon, email og direktør-kontaktinfo fra virksomhedens hjemmeside. Det er en separat tilkøbsydelse der betales med scrape-tokens (1 token per scrape-job, uanset udfald). Tokens købes som engangskøb i dashboardet og er uafhængige af månedsabonnementet.

Flow: (1) POST /dk/company/{cvr}/contacts/scrape starter et job → (2) poll GET /dk/company/{cvr}/scrape-jobs/{id} for status → (3) hent resultat via GET /dk/company/{cvr}/contacts når færdig. Resultat caches 30 dage.

Endpoint Metode Beskrivelse Omkostning
/account/scrape-tokens/balance GET Tjek token-saldo Gratis
/dk/company/{cvr}/contacts/scrape POST Start scrape-job for virksomhed 1 token
/dk/company/{cvr}/scrape-jobs/{id} GET Tjek scrape-job status (pending/running/done/failed) Gratis
/dk/company/{cvr}/contacts GET Hent cached kontakter fra tidligere scrape Gratis (cached 30 dage)

Response format

Alle endpoints returnerer JSON. Her er eksempler på de mest brugte endpoints:

Virksomhedsdata (stamdata)

GET /api/v2/dk/company/45786943

{
  "vat": 45786943,
  "name": "Branthiq ApS",
  "address": "Ryesgade 3A",
  "zipcode": "2200",
  "city": "København N",
  "cityname": "København N",
  "protected": true,
  "phone": null,
  "email": null,
  "fax": null,
  "startdate": "2023-01-15",
  "enddate": null,
  "employees": "1-4",
  "industrycode": 620100,
  "industrydesc": "Computerprogrammering",
  "companycode": 60,
  "companydesc": "Anpartsselskab",
  "website": null,
  "companystatus": "Aktiv",
  "creditbankrupt": false,
  "address_details": {
    "street": "Ryesgade",
    "house_number": "3A",
    "floor": null,
    "door": null,
    "co_name": null,
    "zipcode": "2200",
    "city": "København N",
    "municipality": "København",
    "municipality_code": 101,
    "country": "DK",
    "latitude": 55.6921,
    "longitude": 12.5598
  },
  "owners": [
    {
      "name": "Benjamin Falkentoft",
      "role": "DIREKTION",
      "title": "Direktør",
      "share": null,
      "participantnumber": 4003812345,
      "startdate": "2023-01-15",
      "enddate": null,
      "active": true
    }
  ],
  "signing_rule": "Selskabet tegnes af en direktør.",
  "productionunits": [],
  "lifecycle": [
    {"startdate": "2023-01-15", "enddate": null}
  ],
  "companyform_history": [
    {"code": 60, "short": "APS", "long": "Anpartsselskab", "startdate": "2023-01-15", "enddate": null}
  ],
  "employees_yearly": [
    {"year": 2025, "employees": "1-4", "fte": 2.0}
  ],
  "accounts": [],
  "t": 1704628800,
  "version": 8
}
owners[] - Ejere og ledelse hentes automatisk ved single company lookup (ikke ved search). Felter:
  • name - Personens navn
  • role - Rolle (DIREKTION, BESTYRELSE, REEL EJER, STIFTER, LEGAL EJER, REVISION)
  • title - Organisatorisk enhed (DIREKTION, BESTYRELSE, osv.)
  • share - Ejerandel i procent (null hvis ikke relevant)
  • participantnumber - Deltager-nummer til person-opslag via /participant/{id}
  • startdate / enddate - Rolleperiode (enddate=null = aktiv)
  • active - Boolean. true = aktiv rolle, false = ophørt
Vigtig: Ejere hentes live fra CVR-registret ved hvert opslag. Ved midlertidigt nedetid på datakilde kan owners være tomt. protected - Boolean. true = virksomheden er reklamebeskyttet (markedsføringsforbudslisten). Brug dette felt til at afgøre marketing eligibility.
Fuld registreringshistorik (v7) - Alle company-opslag returnerer komplet historik fra CVR-registret:
  • status_history[] - Alle statusændringer (status, startdate, enddate)
  • name_history[] - Navneændringer (name, startdate, enddate)
  • address_history[] - Adresseændringer (address, zipcode, city, municipality, startdate, enddate)
  • industry_history[] - Brancheændringer (code, text, startdate, enddate)
  • purpose_history[] - Formålsændringer (purpose, startdate, enddate)
  • capital_history[] - Kapitalændringer (capital, currency, startdate, enddate)
  • companyform_history[] - Virksomhedsform over tid. Fx IVS → ApS → A/S
  • employees_monthly[] - Ansatte pr. måned (year, month, employees, fte)
  • employees_quarterly[] - Ansatte pr. kvartal
  • employees_yearly[] - Ansatte pr. år
Alle historik-felter inkluderer startdate/enddate perioder. employees er et interval (fx "10-19") eller eksakt tal. fte er fuldtidsækvivalenter. Data stammer direkte fra CVR-registret og opdateres dagligt.
Udvidede felter (v8) - Company-opslag returnerer også:
  • address_details - Struktureret adresse med street, house_number, floor, door, co_name, municipality, municipality_code
  • signing_rule - Tegningsregel (fx "Selskabet tegnes af en direktør")
  • signing_rule_history[] - Historik for tegningsregel
  • auditors[] - Revisorer med name, startdate, enddate
  • founders[] - Stiftere
  • productionunits[] - Produktionsenheder (P-numre) med adresse, branchekode og ansatte
  • mergers_demergers[] - Fusions- og spaltningsdata
  • fiscal_year - Regnskabsårets start/slut
  • articles_date - Seneste vedtægtsdato
  • owners[].participantnumber - Deltager-nummer til person-opslag via /participant/{id}
Nøgletal (equity_ratio, return_on_equity, liquidity_ratio, solvency_ratio, debt_ratio) beregnes per regnskabsår og returneres i /company/{cvr}/accounts endpointet.

Regnskabsdata

GET /api/v2/dk/company/35954716/accounts/latest

{
  "cvr": "35954716",
  "report_id": "urn:ofk:oid:...",
  "document_type": "aarsrapport",
  "period_start": "2024-01-01",
  "period_end": "2024-12-31",
  "fiscal_year": 2024,
  "publication_date": "2025-04-10T...",
  "company_name": "EKSEMPEL A/S",
  "currency": "DKK",
  "auditor_name": "PricewaterhouseCoopers Statsautoriseret Revisionspartnerselskab",
  "figures": {
    "revenue": 58700000000,
    "gross_profit": 16200000000,
    "operating_profit": 3500000000,
    "profit_before_tax": 2100000000,
    "net_profit": 1709000000,
    "total_assets": 40426000000,
    "fixed_assets": 31200000000,
    "current_assets": 9226000000,
    "cash": 2100000000,
    "equity": 13836000000,
    "total_liabilities": 40426000000,
    "provisions": 1500000000,
    "long_term_debt": 16800000000,
    "short_term_debt": 8090000000,
    "employees": 18132,
    "equity_ratio": 34.22,
    "return_on_equity": 12.35,
    "liquidity_ratio": 1.14,
    "solvency_ratio": 34.22,
    "debt_ratio": 1.92
  },
  "pdf_url": "http://regnskaber.virk.dk/...",
  "xbrl_url": "http://regnskaber.virk.dk/...",
  "ixbrl_url": null
}

Alle beløb er i DKK. Liste-endpointet (/accounts) returnerer { cvr, count, accounts: [...] }; /accounts/latest returnerer det nøgne account-objekt direkte. Parseren er namespace-agnostisk: håndterer både Danish GAAP (fsa:) og IFRS (ifrs-full:) taxonomier samt alle namespace-aliaser (xbrli:xbrl, xi:xbrl, ix:xbrl, m.fl.). 15 rapporterede tal + 5 beregnede nøgletal (equity_ratio, return_on_equity, liquidity_ratio, solvency_ratio, debt_ratio).

Officiel årsrapport-PDF: Hvert regnskab inkluderer pdf_url der peger direkte på den officielle PDF hos Erhvervsstyrelsen (gratis, ingen auth). For 2024+ regnskaber er pdf_url ofte null da nye indleveringer kun er ESEF-format (ixbrl_url).

Tomme figures? Hvis et regnskab returneres med figures: {}, kontakt support med CVR + fiscal_year. Parseren dækker alle kendte XBRL-namespace-varianter, men nye taxonomi-aliaser kan opstå over tid og kræver opdatering af parserens whitelist.

Norske regnskaber returneres med afvigende figures. NO inkluderer long_term_debt, men mangler gross_profit, profit_before_tax, cash, employees, provisions, equity_ratio og return_on_equity. Valuta er NOK. PDF/XBRL/iXBRL-felter findes ikke for norske regnskaber.

Error codes: 400 INVALID_CVR, 400 INVALID_PARAMETER (limit ikke positivt heltal), 401 TOKEN_REQUIRED, 403 TIER_REQUIRED (Business+ påkrævet), 404 NOT_FOUND (ingen regnskaber for CVR), 502 UPSTREAM_ERROR.

Detaljerede kapitalændringer

Komplet kapitalhistorik per dansk virksomhed med kurs, beslutningsdato, vedtægtsdato og indbetalingsmetode. Tier: Hobby (100/md inkl.) eller Business (1.000/md inkl.). Kun for danske virksomheder.

GET /api/v2/dk/company/36424303/capital-changes

{
  "cvr": "36424303",
  "count": 9,
  "capital_changes": [
    {
      "registered_date": "2026-02-20",
      "change_type": "Ændring af kapital",
      "direction": "increase",
      "company_name": "Dripdrop ApS",
      "address": "Søren Frichs Vej 25, 1., 8000 Aarhus C",
      "statutes_changed_date": "2026-02-06",
      "decision_date": "2026-02-06",
      "execution_date": null,
      "amount": 1400.00,
      "currency": "DKK",
      "payment_method": "kontant",
      "exchange_rate": 7437.14,
      "capital_after": 97414.12,
      "is_correction": false
    }
  ],
  "source": "datacvr.virk.dk",
  "cached_at": "2026-04-10T14:00:00Z",
  "expires_at": "2026-05-10T14:00:00Z",
  "status": "ok",
  "_meta": {
    "feature_status": "best_effort_temporary",
    "disclaimer": "Detaljerede kapitalændringer er en midlertidig best-effort feature...",
    "quota": {
      "limit_per_30_days": 1000,
      "used_this_period": 87,
      "remaining": 913,
      "tier": "business"
    }
  }
}

Status-koder: ok (cached data leveret), queued (CVR sat i kø, kald igen efter estimated_ready_in_seconds), pending (cache udløbet, ny henter), error (seneste scrape fejlede).

⚠️ Best-effort feature: Cached data leveres altid hurtigt. Nye CVR'er kan tage flere timer at hente og er ikke garanteret leveret pga. Cloudflare-beskyttelse på datacvr.virk.dk. Quota: Hvis du når månedlig grænse, returneres HTTP 429 CAPITAL_QUOTA_EXCEEDED.

Søg virksomheder

GET /api/v2/dk/search/company?name=branthiq&limit=10

{
  "total": 1,
  "limit": 10,
  "offset": 0,
  "results": [
    {
      "vat": 45786943,
      "name": "Branthiq ApS",
      "address": "Ryesgade 3A",
      "zipcode": "2200",
      "city": "København N",
      ...
    }
  ]
}

// Søgeparametre (alle valgfri, kombiner frit):
//   name            : virksomhedsnavn (partiel match, case-insensitive)
//   address         : adresse (partiel match)
//   zipcode         : postnummer (eksakt match)
//   city            : by (partiel match)
//   phone           : telefonnummer (partiel match)
//   email           : email (partiel match)
//   industrycode    : branchekode (DB07), fx "620100" (eksakt) eller "62" (præfiks)
//   companyform     : virksomhedsform: integer-kode (80) eller forkortelse ("ApS", "A/S", "I/S")
//   companystatus   : string-label (anbefalet) eller integer-kode:
//                     "NORMAL" / 20                  : aktiv virksomhed
//                     "AKTIV" / 20                   : alias for NORMAL
//                     "OPLØST" / 3                   : opløst (generisk)
//                     "UNDER KONKURS" / 5            : under konkursbehandling
//                     "UNDER FRIVILLIG LIKVIDATION" / 6
//                     "UNDER TVANGSOPLØSNING" / 7
//                     "OPHØRT" / 8                   : ophørt
//                     "SLETTET" / 3                  : slettet
//                     "UDENRETSVIRKNING"             : uden retsvirkning
//                     (string-labels er case-insensitive, mellemrum ignoreres)
//   employees_min, employees_max  : antal ansatte
//   capital_min, capital_max      : selskabskapital i DKK
//   founded_after, founded_before : stiftelsesdato (YYYY-MM-DD)
//   municipality    : kommunekode (fx 101) eller kommunenavn (partiel)
// Pagination: limit (default 50 med nøgle, 20 anonymt; max 1000 med nøgle),
//             offset (max 10000 med nøgle), cursor (alternativ til offset)

// Bemærk: disse parameter-navne findes IKKE og ignoreres silent:
//   branche         → brug industrycode
//   status          → brug companystatus
//   region          → brug municipality
//   website, hasWebsite, ingenHjemmeside → findes ikke som filter
//   creditstatus    → ikke implementeret som filter

Autosuggest

GET /api/v2/dk/suggestions/company/brant

[
  { "vat": 45786943, "name": "Branthiq ApS", "address": "Ryesgade 3A, 2200 København N" },
  { "vat": 44318217, "name": "Brant Media ApS", "address": "..." }
]

Norsk virksomhed (med owners)

GET /api/v2/no/company/923609016

{
  "vat": 923609016,
  "name": "EQUINOR ASA",
  "address": "Forusbeen 50",
  "zipcode": "4035",
  "city": "STAVANGER",
  "companydesc": "Allment aksjeselskap",
  "industrydesc": "Utvinning av råolje",
  "owners": [
    {
      "name": "Anders Opedal",
      "role": "Daglig leder",
      "title": "Daglig leder/ adm.direktør",
      "share": null,
      "startdate": "2020-11-02",
      "enddate": null
    },
    {
      "name": "Jon Erik Reinhardsen",
      "role": "Styrets leder",
      "title": "Styre",
      "share": null,
      "startdate": "2018-05-15",
      "enddate": null
    }
  ]
}

Changed feed - nye/ændrede virksomheder

// Danmark
GET /api/v2/dk/changed/list/company?since=2026-04-02&limit=100

{
  "total": 754,
  "limit": 100,
  "results": [
    {
      "vat": 34421463,
      "name": "Kapitalakademiet",
      "companydesc": "PMV",
      ...
    }
  ],
  "next_cursor": "1775092552000,43132296"
}

// Pagination: brug next_cursor som cursor parameter
GET /api/v2/dk/changed/list/company?since=2026-04-02&cursor=1775092552000,43132296

// Norge
GET /api/v2/no/changed/list/company?since=2026-04-02&limit=100

{
  "since": "2026-04-02",
  "total": 451,
  "limit": 100,
  "items": [
    {
      "orgnr": "922827044",
      "updateId": 24075678,
      "date": "2026-04-02",
      "changeType": "Ny enhet"
    }
  ],
  "next_cursor": "24075687"
}

// Parametere: since (YYYY-MM-DD, påkrævet), limit (max 100), cursor

Kontakt-scraping (asynkron)

POST /api/v2/dk/company/45786943/contacts/scrape
Content-Type: application/json
Authorization: Bearer DIN_API_NØGLE

// Svar (202 Accepted):
{
  "job_id": "abc123-def456",
  "status": "pending",
  "message": "Scrape job oprettet. Poll GET /dk/company/{cvr}/scrape-jobs/{id} for status."
}

Statuskoder

API'et bruger standard HTTP-statuskoder:

Kode Betydning Beskrivelse
200 OK Anmodningen lykkedes
202 Accepted Asynkront job oprettet (kontakt-scraping)
400 Bad Request Ugyldigt CVR-nummer eller manglende parametre
401 Unauthorized Manglende eller ugyldig API-nøgle
403 Forbidden Din plan har ikke adgang til dette endpoint
404 Not Found Virksomheden findes ikke i CVR-registret
429 Too Many Requests Rate limit overskredet
500 Server Error Intern serverfejl - prøv igen senere

Rate limiting

API'et har rate limits afhængigt af din plan:

Plan Opslag Pris
Gratis 25 / dag 0 kr.
Hobby 10.000 / md 299 kr./md. ekskl. moms
Business 50.000 / md 499 kr./md. ekskl. moms
Custom Ubegrænset Kontakt os

Hvis du overskrider dit rate limit, returnerer API'et statuskode 429. Vi anbefaler at implementere retry-logik med exponential backoff.

Kodeeksempler

cURL

curl -X GET "https://datacvrapi.dk/api/v2/dk/company/45786943" \
  -H "Authorization: Bearer DIN_API_NØGLE"

JavaScript (fetch)

const response = await fetch(
  'https://datacvrapi.dk/api/v2/dk/company/45786943',
  {
    headers: {
      'Authorization': 'Bearer DIN_API_NØGLE'
    }
  }
);

if (!response.ok) {
  throw new Error(`API fejl: ${response.status}`);
}

const virksomhed = await response.json();
console.log(virksomhed.name);    // "Branthiq ApS"
console.log(virksomhed.companystatus);  // "Aktiv"

Python (requests)

import requests

url = "https://datacvrapi.dk/api/v2/dk/company/45786943"
headers = {
    "Authorization": "Bearer DIN_API_NØGLE"
}

response = requests.get(url, headers=headers)
response.raise_for_status()

virksomhed = response.json()
print(virksomhed["name"])    # "Branthiq ApS"
print(virksomhed["companystatus"])  # "Aktiv"

Hent regnskabsdata (JavaScript)

// Hent regnskabsdata for en virksomhed
async function hentRegnskab(cvr, apiKey) {
  const response = await fetch(
    `https://datacvrapi.dk/api/v2/dk/company/${cvr}/accounts`,
    {
      headers: { 'Authorization': `Bearer ${apiKey}` }
    }
  );

  if (response.status === 403) {
    console.error('Business-abonnement påkrævet for regnskabsdata');
    return null;
  }

  return response.json();
}

const data = await hentRegnskab('45786943', 'DIN_API_NØGLE');
// Response format: { cvr, count, accounts: [...] }
if (data && data.accounts && data.accounts.length > 0) {
  const seneste = data.accounts[0];
  console.log('Omsætning:', seneste.figures.revenue);
  console.log('Egenkapital:', seneste.figures.equity);
}

SDKs og integrationer

DataCVR API er en standard REST API og kan bruges med enhver HTTP-klient. Vi tilbyder desuden:

  • Postman Collection: Importér vores endpoints direkte i Postman for hurtig test
  • cURL-eksempler: Kopiér og tilpas til dit system
  • Integration guides: Se vores trin-for-trin integration guide med eksempler i JavaScript, Python, PHP og C#

Vi arbejder på officielle SDKs til JavaScript/TypeScript og Python. Følg med på vores dashboard for opdateringer.

Næste skridt

Nu har du overblikket over DataCVR API. Her er, hvad du kan gøre nu:

Ofte stillede spørgsmål om CVR API

Hvad er DataCVR API?

DataCVR API er en REST API-tjeneste, der giver adgang til danske virksomhedsdata fra CVR-registret. Data returneres som struktureret JSON med hurtige responstider.

Er API'et gratis at bruge?

Ja, den gratis plan giver 25 opslag per dag. For regnskabsdata og kontakt-scraping kræves et betalt abonnement fra 299 kr./md. ekskl. moms.

Hvilke programmeringssprog kan jeg bruge?

API'et er en standard REST API og virker med alle programmeringssprog. Vi har kodeeksempler i JavaScript, Python, PHP og C#.

Hvor hurtige er responstiderne?

Stamdata-opslag besvares typisk på under 200ms. Regnskabsdata tager 300-500ms. Kontakt-scraping er asynkront og tager 15-60 sekunder.

Understøtter I norske virksomheder?

Ja, norske virksomheder kan slås op via endpointet /api/v2/no/company/{orgnr} med organisationsnummeret.

Klar til at integrere CVR-data?

Opret en gratis konto og lav dit første API-kald på under 2 minutter.