Skift fra cvrapi.dk til apicvr.dk

apicvr.dk bruger næsten de samme feltnavne som cvrapi.dk, så de fleste integrationer kan skiftes ved at ændre URL'en og omdøbe tre felter. Til gengæld slipper du for kvoten på 50 opslag om dagen og kravet om et særligt User-Agent.

Hvorfor skifte?

URL'erne

text
# 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/44448888

Bemæ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.dkapicvr.dkBemærk
productionunitsp_unitsP-nummeret ligger i p_number.
ownersejereHver ejer har også type, cvr, ejerandel og stemmeret.
creditbankruptbankruptSamme betydning.
creditstatus, creditstartdatestatusFx NORMAL, UNDERKONKURS eller OPHØRT.
zipcode (tekst)zipcode (tal)Konverter til tekst, hvis din kode forventer det.
–direktion, fuldt_ansvarligeNye 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
<?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

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

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.