Basics
- Base URL:
https://apicvr.dk - Authentication: none – no account, no API key
- Format: JSON (UTF-8). CORS is enabled, so you can call the API straight from the browser
- Data: live lookups against the Danish Business Authority's CVR distribution (distribution.virk.dk)
- Rate limits: fair use. If you need sustained heavy traffic, email [email protected]
curl https://apicvr.dk/api/v1/41013583Get a company by CVR number
The full company profile: name, address, contact details, industry code, company type, status, headcount, marketing protection, every production unit, plus current management, fully liable participants and legal owners.
| Parameter | In | Type | Description |
|---|---|---|---|
cvrNumber |
path | integer |
8-digit CVR number. |
curl "https://apicvr.dk/api/v1/41013583"Management, fully liable participants and owners
A slim response with only the people and companies currently running or owning the company. Owners include ownership share and voting rights both as numbers and as CVR's display ranges (e.g. 25-33,32%).
| Parameter | In | Type | Description |
|---|---|---|---|
cvrNumber |
path | integer |
8-digit CVR number. |
curl "https://apicvr.dk/api/v1/41013583/direktion-og-ansvarlig"Combined search by name and/or CVR
Search by name (prefix), CVR number, or both. At least one parameter is required.
| Parameter | In | Type | Description |
|---|---|---|---|
name |
query | string |
Company name (prefix). |
cvr |
query | integer |
8-digit CVR number. |
limit |
query | integer |
Max number of results (default 100). |
curl "https://apicvr.dk/api/v1/search?name=novo&limit=5"Typo-tolerant name search (autocomplete)
Finds the company even when the name is misspelled, and returns a slim response with name, CVR number and industry. Built for autocomplete fields.
| Parameter | In | Type | Description |
|---|---|---|---|
companyName |
path | string |
Company name or part of it. |
limit |
query | integer |
Max number of results (default 100). |
curl "https://apicvr.dk/api/v1/search/fuzzy/novo%20nordsk?limit=5"Search by address
Find every company registered at an address. The search tries an exact match first, then street name and number, then a typo-tolerant match. Pass postal_code to narrow it to one postal district.
| Parameter | In | Type | Description |
|---|---|---|---|
address |
query | string |
Street and number, e.g. Novo Allé 1. |
postal_code |
query | string |
4-digit postal code. |
limit |
query | integer |
Max number of results (default 100). |
curl "https://apicvr.dk/api/v1/search/address?address=Novo%20All%C3%A9%201&postal_code=2880"Search by email
Find companies with the given email on their public CVR record.
| Parameter | In | Type | Description |
|---|---|---|---|
email |
path | string |
Full email address. |
limit |
query | integer |
Max number of results (default 100). |
curl "https://apicvr.dk/api/v1/search/email/[email protected]"Search by email domain
Find companies whose registered email is on the domain. Handy for matching a B2B lead or a new user to the right company.
| Parameter | In | Type | Description |
|---|---|---|---|
domain |
path | string |
Domain without @, e.g. firma.dk. |
limit |
query | integer |
Max number of results (default 100). |
curl "https://apicvr.dk/api/v1/search/email-domain/novonordisk.com"Search by phone number
Find companies with the phone number on their public CVR record.
| Parameter | In | Type | Description |
|---|---|---|---|
phone |
path | string |
Phone number, 8 digits without country code. |
limit |
query | integer |
Max number of results (default 100). |
curl "https://apicvr.dk/api/v1/search/phone/44448888"Response fields
Applies to /api/v1/{cvrNumber} and the search endpoints (searches omit production units and relations). Fields without a value are null.
| Field | Type | Description |
|---|---|---|
vat | integer | The CVR number (8 digits). |
name | string | Current name. |
address | string | Street, number, floor and door. |
zipcode | integer | Postal code. |
city | string | City (postal district). |
cityname | string | Town name, when it differs from the postal district. |
addressco | string | c/o address. |
protected | boolean | true if the company has opted out of marketing. |
phone | string | Publicly registered phone number. |
email | string | Publicly registered email. |
website | string | Website, if registered. |
startdate | string | Founding date (YYYY-MM-DD). |
enddate | string | Closing date, otherwise null. |
employees | integer | Headcount (latest filing). |
industrycode | integer | Industry code (DB07, 6 digits). |
industrydesc | string | Industry description. |
companycode | integer | Company type code. |
companydesc | string | Company type, e.g. Aktieselskab. |
companytypeshort | string | Short company type, e.g. A/S or ApS. |
status | string | E.g. NORMAL, OPHØRT or UNDERKONKURS. |
bankrupt | boolean | true if the company is bankrupt. |
p_units | PUnit[] | List of production units (P-units) with address, industry and headcount. |
direktion | Direktor[] | Current directors. |
fuldt_ansvarlige | FuldtAnsvarlig[] | Participants with unlimited personal liability. |
ejere | Ejer[] | Legal owners with ownership share and voting rights. |
Error codes
Errors come back as {"detail": {"error": "CODE", "message": "…"}}.
| HTTP | Code | Description |
|---|---|---|
400 | MISSING_QUERY | /api/v1/search was called without name or cvr. |
404 | NOT_FOUND | No company with that CVR number. |
422 | – | A parameter has the wrong type, e.g. a CVR number containing letters. |
502 | HTTP_ERROR | The Danish Business Authority's CVR distribution returned an error. Retry. |
502 | TRANSPORT_ERROR | The CVR distribution could not be reached. Retry shortly. |
To try calls with your own parameters, use the Interactive Swagger docs · OpenAPI specification