# SDK

> En lille typet klient til TypeScript og JavaScript, og et eksempel i Python.

## TypeScript

Klienten er én fil uden afhængigheder, med typer for alle svar. Den virker i Node 18 og nyere, Deno, Bun og Cloudflare Workers.

> **Bemærk:**
>
> Klienten følger med npm-pakken `@mahope/cvrradar` (samme pakke som CLI'en), som udgives, når API'et åbner.

```ts TypeScript
import { CvrKlient, CvrFejl } from '@mahope/cvrradar';

const cvr = new CvrKlient({ url: 'https://cvrradar.dk', noegle: process.env.CVRRADAR_NOEGLE! });

const v = await cvr.virksomhed('10203040'); // null, hvis nummeret ikke findes
const { resultater } = await cvr.soeg('havnens smedje', { limit: 5, aktiv: true });
const bag = await cvr.domaene('info@havnens-smedje.example');
const mange = await cvr.virksomheder(['10203040', '20304050']); // deles selv i kald á 500

try {
  await cvr.virksomhed('10203040');
} catch (e) {
  if (e instanceof CvrFejl && e.status === 429) {
    // kvoten er brugt; se Retry-After
  }
}
```

| Metode                                                               | Endpoint                                                |
| -------------------------------------------------------------------- | ------------------------------------------------------- |
| `virksomhed(cvr)`                                                    | `GET /v1/virksomhed/{cvr}` (null, hvis den ikke findes) |
| `virksomheder(liste)`                                                | `POST /v1/virksomheder`                                 |
| `soeg(q, { limit, postnr, aktiv })`                                  | `GET /v1/soeg`                                          |
| `domaene(input)`                                                     | `GET /v1/domaene/{domaene}`                             |
| `personer(cvr)`                                                      | `GET /v1/virksomhed/{cvr}/personer`                     |
| `regnskab(cvr)`                                                      | `GET /v1/virksomhed/{cvr}/regnskab`                     |
| `kredit(cvr)`                                                        | `GET /v1/virksomhed/{cvr}/kredit`                       |
| `ejergraf(cvr)`                                                      | `GET /v1/virksomhed/{cvr}/ejergraf`                     |
| `digital(cvr)`                                                       | `GET /v1/virksomhed/{cvr}/digital`                      |
| `seo(cvr)`                                                           | `GET /v1/virksomhed/{cvr}/seo`                          |
| `historik(cvr, graense)`                                             | `GET /v1/virksomhed/{cvr}/historik`                     |
| `benchmark(cvr)`                                                     | `GET /v1/benchmark/{cvr}`                               |
| `sammenlign(liste)`                                                  | `GET /v1/sammenlign`                                    |
| `nye({ branchekode, kommune, form, fra, til, graense, efter })`      | `GET /v1/nye`                                           |
| `overvaagede()`, `overvaag(cvr, valg)`, `stopOvervaagning(cvr)`      | `/v1/overvaag`                                          |
| `virksomhedMarkdown(cvr)`                                            | `GET /v1/virksomhed/{cvr}?format=llm`                   |
| `vaerktoejer('anthropic' \| 'openai')`, `koerVaerktoej(navn, input)` | `GET /v1/tools`, `POST /v1/tools/{navn}`                |

Fejl kastes som `CvrFejl` med `status` (402 betyder, at endpointet kræver en betalt pakke) og resten af fejlsvaret i `detaljer`.

## Python

Der er ingen pakke til Python, men API'et er nemt at kalde med `requests` eller `httpx`:

```python Python
import os
import requests

class Cvrradar:
    def __init__(self, noegle: str, basis: str = "https://cvrradar.dk"):
        self.basis = basis
        self.s = requests.Session()
        self.s.headers["Authorization"] = f"Bearer {noegle}"

    def hent(self, sti: str, **params):
        svar = self.s.get(f"{self.basis}{sti}", params=params, timeout=10)
        if svar.status_code == 404:
            return None
        svar.raise_for_status()
        return svar.json()

cvr = Cvrradar(os.environ["CVRRADAR_NOEGLE"])
v = cvr.hent("/v1/virksomhed/10203040")
kredit = cvr.hent("/v1/virksomhed/10203040/kredit")
print(v["navn"], kredit["alene"])
```

## Andre sprog

OpenAPI 3.1-filen på `https://cvrradar.dk/v1/openapi.json` kan bruges med openapi-generator, Kiota eller Postman til at lave en klient i C#, Go, Java, PHP og andre sprog.
