# API-nøgler og autentificering

> De to slags API-nøgler i komplai, hvordan du får, fornyer og tilbagekalder dem, de scopes, der begrænser dem, og hvad GET /v1/access fortæller.

Hvert kald til en operation sender en nøgle som bearer-token i headeren `Authorization`. Det eneste kald uden nøgle er GET /v1/openapi.json, som er offentligt.

```bash
curl https://api.komplai.dk/v1/access \
  -H "Authorization: Bearer $KOMPLAI_TOKEN"
```

Send hele nøglen. API'et læser den kun fra denne header, så den hører aldrig hjemme i en URL. Svar på kald med en nøgle har `Cache-Control: private, no-store`.

## To slags nøgler

| | Personlig API-nøgle | Organisationens integrationsnøgle |
| --- | --- | --- |
| Begynder med | `kp_live_` | `kp_org_` |
| Tilhører | Dig, i én organisation | Et af organisationens egne systemer, ikke en person |
| Oprettes af | Dig, i hubben | komplai, når jeres organisation beder om det |
| Giver adgang til | De værktøjer, du har fået tildelt: Redact, Chat, Decide, Coding og Registeropslag, inden for nøglens scopes | Kun Redact og GET /v1/access |
| Gyldig i | 7, 30, 90 eller 365 dage, som du vælger | Op til 365 dage, som komplai fastsætter |
| Grænse for kald | Din egen, delt med dine andre nøgler og din brug af hubben | Integrationens egen, som fortsætter, når komplai udsteder en ny nøgle |
| Administreres under | **API og integrationer › API-nøgler** | **Organisation › Login og sikkerhed › Integrationsnøgler** |

komplai gemmer kun en hash af hver nøgle og dens første tegn, så en nøgle kan ikke vises igen, efter den er udstedt. Gem den i jeres hemmelighedshåndtering, aldrig i kode, en URL eller en mail.

## Scopes

Et scope giver adgang til en gruppe af operationer. Hver operations side i [API-referencen](https://developers.komplai.dk/da/api) viser de scopes og de slags nøgler, den accepterer.

| Scope | Operationer | Nøgler |
| --- | --- | --- |
| `access:read` | GET /v1/access | Begge |
| `redact:detect` | POST /v1/redact/detect | Begge |
| `redact:process` | POST /v1/redact, POST /v1/redact/restore, operationerne for tekstjob under /v1/redact/jobs samt POST /v1/redact/file og /v1/redact/file/jobs (Beta) | Begge |
| `chat:complete` | GET /v1/models, POST /v1/chat/completions | Personlig |
| `decide:process` | POST /v1/decide, POST /v1/decide/batch (Beta) | Personlig |
| `coding:read` | GET /v1/coding/account, GET /v1/coding/models (Beta) | Personlig |
| `coding:complete` | POST /v1/coding/chat/completions (Beta) | Personlig |
| `mcp:read` | Registeropslag fra en MCP-klient (Beta) | Personlig |

En personlig API-nøgle kan kun få scopes til værktøjer, du har fået tildelt. Giv den kun de scopes, systemet har brug for. API'et kontrollerer nøglens scopes mod din aktuelle adgang ved hvert kald: Når din tildeling eller organisationens godkendelse af behandlingen ikke længere dækker et værktøj, svarer kaldet 403 [`insufficient_scope`](https://developers.komplai.dk/da/errors/insufficient_scope) eller 401 [`invalid_api_key`](https://developers.komplai.dk/da/errors/invalid_api_key).

Organisationens integrationsnøgle får 403 [`integration_not_permitted`](https://developers.komplai.dk/da/errors/integration_not_permitted) på en operation, den ikke giver adgang til, før dens scopes bliver kontrolleret.

## Personlige API-nøgler

### Opret en nøgle

[Kom i gang](https://developers.komplai.dk/da/get-started) viser trinene: **API og integrationer › API-nøgler › Opret API-nøgle**, derefter formålet, et navn, gyldigheden og rettighederne.

- Nøglen tilhører dig og den organisation, du har valgt i hubben. Er du med i flere organisationer, så skift til den rigtige, før du opretter nøglen.
- Du kan have op til 20 aktive nøgler i hver organisation.
- Når hubben har vist nøglen én gang, viser listen dens navn, nøglens første tegn, dens scopes, status, udløbsdato, og hvornår den sidst blev brugt.

### Forny en nøgle

Når du fornyer en nøgle, opretter hubben en ny og tilbagekalder den gamle i samme trin.

1. Under **API og integrationer › API-nøgler** vælger du **Forny** ud for nøglen.
2. Vælg **Gyldighed**, og gennemgå rettighederne.
3. Vælg **Forny nøgle**, og kopiér den nye nøgle.

Den gamle nøgle holder op med at virke med det samme, så sæt straks den nye nøgle ind i dit system. Et tekstjob kan kun ses med den nøgle, der oprettede det: Hent eller slet dets resultat, før du fornyer. Kun du kan forny dine egne nøgler.

### Tilbagekald en nøgle

Vælg **Tilbagekald** ud for nøglen og derefter **Tilbagekald nøgle**. Adgang med nøglen stopper straks. Jeres administrator kan se medlemmernes nøgler på samme side og kan også tilbagekalde dem.

### Når en nøgle holder op med at virke

- Den når sin udløbsdato, som står under **Udløber**.
- Du eller jeres administrator tilbagekalder den, eller du fornyer den.
- Du forlader organisationen, eller ingen af de værktøjer, nøglen dækker, er længere tildelt dig.
- Organisationens API-adgang til værktøjet ophører.

Et kald med sådan en nøgle svarer 401 [`invalid_api_key`](https://developers.komplai.dk/da/errors/invalid_api_key). Holder nøglen op med at virke, mens et kald kører, svarer kaldet 401 [`invalid_token`](https://developers.komplai.dk/da/errors/invalid_token).

## Organisationens integrationsnøgler

Med organisationens integrationsnøgle kan et af jeres egne systemer, fx en robot eller en integrationsplatform, kalde Redact uden en person. Kald med nøglen registreres under integrationens navn, aldrig under en person.

- **Sådan får I en nøgle.** [Kontakt os](https://komplai.dk/#kontakt) med systemets navn, hvad det skal gøre, og en kontaktperson i jeres organisation. komplai udsteder nøglen og leverer den én gang til kontaktpersonen via Secret. Kontaktpersonen får ingen adgang med nøglen og behøver ingen konto.
- **Det giver den adgang til.** GET /v1/access og Redacts operationer til at finde personoplysninger, pseudonymisere, sætte originalerne tilbage, sende tekstjob og læse PDF- og Word-filer. Chat, Decide, Coding, Registeropslag og `engine` `agentic` svarer 403 [`integration_not_permitted`](https://developers.komplai.dk/da/errors/integration_not_permitted). Redact i Word og Coding-klienten tager kun imod personlige API-nøgler.
- **Krav.** Nøglen virker, så længe den er aktiv, jeres aftale omfatter Redact via API'et, og behandlingen er godkendt. API'et kontrollerer det ved hvert kald og undervejs i hvert tekstjob. Ophører et af kravene, stopper alle organisationens integrationsnøgler straks.
- **Forbrug.** Kald tæller med i organisationens grænser for kald og dens månedlige loft for AI-forbrug. En integration har ingen personlig grænse. Grænsen for kald hører til integrationen, så en ny nøgle nulstiller den ikke.
- **En ny nøgle.** komplai udsteder den næste nøgle til samme integration. Den gamle nøgle stopper i det øjeblik, den nye udstedes, uden overlap, og dens tekstjob, der venter, kører eller er færdige, bliver ugyldige. Skift nøgle mellem jeres systems kørsler.
- **Tilbagekaldelse.** Jeres administrator åbner **Organisation › Login og sikkerhed › Integrationsnøgler**, vælger **Tilbagekald** og derefter **Tilbagekald nøgle**. Systemet mister straks adgang, job, der venter eller er i gang, stopper, og resultater kan ikke længere hentes. Integrationen findes stadig, så komplai kan udstede en ny nøgle til den.

Siden **Integrationsnøgler** viser hver integrations navn, kontaktperson, nøgle, status, udløb og seneste brug. Dens statusser:

| Status | Betydning |
| --- | --- |
| Aktiv | Nøglen virker. |
| Uden adgang til Redact | Nøglen er gyldig, men organisationen kan ikke bruge Redact via API i øjeblikket. |
| Udløbet | Nøglen har passeret sin udløbsdato. komplai kan udstede en ny nøgle. |
| Stoppet | Organisationen kan ikke længere bruge Redact via API, så nøglen er stoppet. komplai kan udstede en ny nøgle. |
| Tilbagekaldt af jeres administrator, Tilbagekaldt af komplai | Nøglen er tilbagekaldt. Integrationen findes stadig, så komplai kan udstede en ny nøgle. |
| Lukket | komplai har lukket integrationen. Den kan ikke få en ny nøgle. |

## Det returnerer GET /v1/access

GET /v1/access tæller som ét kald, sender ingen tekst og kører ingen model. Kald det, når dit system starter, og før en kørsel, hvor behandlingen har betydning. Det fulde eksempel står i [referencen](https://developers.komplai.dk/da/reference/account#readAccess).

| Felt | Indhold |
| --- | --- |
| `organisation_id` | Organisationens id. |
| `principal` | Kun for organisationens integrationsnøgle: `type` `integration`, `integration_id` og `name`. Svaret til en personlig API-nøgle har ingen `principal`. |
| `scopes` | Alle de scopes, nøglen har. |
| `services[]` | Én post pr. værktøj, nøglen giver adgang til, med `service`, nøglens `scopes` til værktøjet, `hosting`, `processing` og `limits`. |
| `services[].hosting.processing.layers` | For Redact: én post pr. lag (`regex`, `ner`, `llm`) og valg af behandling, med hvor laget behandler tekst, om det er sat op, NER-stederne og de modeller, et kald kan vælge. |
| `services[].processing` | Hvad organisationens aftale tillader: `data_mode` (`synthetic` for kun testdata, `personal` for personoplysninger efter `agreement_reference`), `storage` med, hvad der gemmes, og hvor længe, og for Redact `text_contract` med valgmuligheder og grænser. |
| `services[].limits.requests_per_minute` | Kald pr. minut til værktøjet: pr. person for en personlig API-nøgle, pr. integration for organisationens integrationsnøgle. |
| `limits` | `organisation_requests_per_minute` og `shared_requests_per_minute` samt `requests_per_minute`, når nøglen giver adgang til ét værktøj. |
| `hosting`, `processing` | Et resumé, når nøglen giver adgang til ét værktøj. |

`services[].edition` udgår og er altid `custom`. Læs `scopes` og `processing` i stedet.

---

https://developers.komplai.dk/da/authentication
