Hvorfor skifte?
- Ingen dagskvote: cvrapi.dk giver 50 gratis opslag pr. IP om dagen og svarer derefter med
QUOTA_EXCEEDED. apicvr.dk har ingen fast kvote, kun fair use. - Intet User-Agent-krav: du får ikke
INVALID_UA, fordi du glemte at sætte et. - Mere data: ejere med ejerandel og stemmeret, direktion og fuldt ansvarlige.
- Flere søgninger: email, emaildomæne, adresse og fejltolerant navnesøgning.
URL'erne
# cvrapi.dk
https://cvrapi.dk/api?search=24256790&country=dk
https://cvrapi.dk/api?name=novo%20nordisk&country=dk
https://cvrapi.dk/api?phone=44448888&country=dk
# apicvr.dk
https://apicvr.dk/api/v1/24256790
https://apicvr.dk/api/v1/search/company/novo%20nordisk?limit=1
https://apicvr.dk/api/v1/search/phone/44448888Bemærk, at søgning på navn og telefon hos apicvr.dk returnerer en liste. Tag det første element, hvis du kun vil have ét hit som hos cvrapi.dk.
Felter, der hedder det samme
vat, name, address, zipcode, city, cityname, addressco, protected, phone, email, fax, startdate, enddate, employees, industrycode, industrydesc, companycode, companydesc og version.
Felter, der er anderledes
| cvrapi.dk | apicvr.dk | Bemærk |
|---|---|---|
productionunits | p_units | P-nummeret ligger i p_number. |
owners | ejere | Hver ejer har også type, cvr, ejerandel og stemmeret. |
creditbankrupt | bankrupt | Samme betydning. |
creditstatus, creditstartdate | status | Fx NORMAL, UNDERKONKURS eller OPHØRT. |
zipcode (tekst) | zipcode (tal) | Konverter til tekst, hvis din kode forventer det. |
| – | direktion, fuldt_ansvarlige | Nye felter. |
Fejl
cvrapi.dk lægger fejlen i et error-felt. apicvr.dk bruger HTTP-statuskoder: 404 når virksomheden ikke findes, og 502 når CVR-registret ikke svarer. Koden står i detail.error.
Drop-in-funktion i PHP
Funktionen henter fra apicvr.dk og returnerer det format, din eksisterende kode forventer. Så kan du skifte uden at røre resten af koden.
<?php
// Drop-in: returnerer det samme format, som din cvrapi.dk-kode forventer.
function cvr_lookup(string $cvr): ?array
{
$ch = curl_init("https://apicvr.dk/api/v1/" . urlencode($cvr));
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 15]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status === 404) {
return ['error' => 'NOT_FOUND'];
}
if ($status !== 200) {
return ['error' => 'INTERNAL_ERROR'];
}
$c = json_decode($body, true);
// Omdøb de felter, der hedder noget andet hos apicvr.dk
$c['productionunits'] = $c['p_units'];
$c['owners'] = array_map(fn ($o) => ['name' => $o['name']], $c['ejere']);
$c['creditbankrupt'] = $c['bankrupt'];
$c['zipcode'] = (string) $c['zipcode'];
return $c;
}
$company = cvr_lookup('24256790');
echo $company['name'] . ', ' . $company['zipcode'] . ' ' . $company['city'];Drop-in-funktion i JavaScript
async function cvrLookup(cvr) {
const res = await fetch(`https://apicvr.dk/api/v1/${cvr}`);
if (res.status === 404) return { error: "NOT_FOUND" };
if (!res.ok) return { error: "INTERNAL_ERROR" };
const c = await res.json();
return {
...c,
productionunits: c.p_units,
owners: c.ejere.map((o) => ({ name: o.name })),
creditbankrupt: c.bankrupt,
zipcode: String(c.zipcode),
};
}Det kan apicvr.dk ikke
- Norske virksomheder (
country=no). - XML-format. Svaret er altid JSON.
- Opslag direkte på P-nummer (
produ). Søg på virksomheden, og find P-enheden ip_units.
Ofte stillede spørgsmål
Skal jeg sætte et User-Agent?
Nej, det er ikke påkrævet. Du må gerne sende et, der beskriver dit projekt.
Kan jeg beholde min cvrapi.dk-kode?
Ja, hvis du bruger drop-in-funktionen ovenfor. Den omdøber felterne, så resten af koden virker uændret.
Hvor mange opslag må jeg lave?
Der er ingen fast dagskvote. Hold et rimeligt tempo, og skriv til [email protected], hvis du skal bruge vedvarende høj trafik.