Chat
Chat-API'et giver jeres egne systemer adgang til de modeller, jeres organisation bruger i Chat. POST /v1/chat/completions tager imod en OpenAI-kompatibel chatforespørgsel med tekstbeskeder og returnerer hele svaret samlet som én chat.completion. Du vælger, hvor modellen kører: på komplais lokale infrastruktur, i komplais EU-cloud eller via en af organisationens egne AI-forbindelser.
Før du starter
- Jeres organisation har Chat, og du har fået adgang til Chat.
- Du har en personlig API-nøgle (
kp_live_...) med scopetchat:complete. Opret den på hubbens side API-nøgler på hub.komplai.dk/api-access; API-nøgler og autentificering viser hvordan. Organisationens integrationsnøgle (kp_org_...) får 403 integration_not_permitted.
Dit første kald
Uden processing og model kører kaldet dér, hvor organisationens Chat kører, med din standardmodel dér.
curl https://api.komplai.dk/v1/chat/completions \
-H "Authorization: Bearer $KOMPLAI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "system", "content": "Svar kort og på dansk."},
{"role": "user", "content": "Hvor lang tid har jeg til at klage over en afgørelse om boligstøtte?"}
],
"max_tokens": 256
}'{
"id": "chatcmpl-8c1d5e3a-2f7b-4a9c-b6e0-3d4f5a6b7c8d",
"object": "chat.completion",
"created": 1792483200,
"model": "qwen3.8-27b",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Du har normalt 4 uger til at klage, regnet fra den dag du fik afgørelsen. Fristen står i afgørelsens klagevejledning."
},
"finish_reason": "stop"
}
],
"usage": { "prompt_tokens": 41, "completion_tokens": 33 }
}Svaret står i choices[0].message.content. finish_reason: "length" betyder, at svaret nåede max_tokens og er ufuldstændigt.
Vælg, hvor modellen kører
processing bestemmer, hvor kaldet kører. De samme værdier virker i GET /v1/models.
processing | Hvor modellen kører | AI-forbrug |
|---|---|---|
komplai-local | komplais lokale infrastruktur i Danmark, drevet af komplai. Data forlader ikke EU. Køen deles med andre organisationer, uden prioritet. local accepteres også. | Uden betaling for AI |
eu-cloud | komplais EU-cloud i Frankrig. Data forlader ikke EU. Kræver, at EU-behandling er godkendt for Chat i jeres organisation. | Måles til udbyderens pris og tæller med i organisationens månedlige loft for AI-forbrug |
connection:<id> | En af organisationens egne AI-forbindelser, som administratoren har gjort tilgængelig via API'et. | Organisationens egen aftale med udbyderen. Tæller ikke med i loftet. |
| udeladt | Dér, hvor organisationens Chat kører: lokal infrastruktur eller EU-cloud, hvis det er dét, organisationens Chat bruger. | Som for den behandling |
API'et flytter aldrig et kald til en anden behandling eller en anden model, heller ikke når den valgte fejler. Et valg, jeres organisation ikke tillader via API'et, giver processing_choice_not_allowed.
Administratorer bestemmer det i hubben under AI og behandling: fanen Behandling (/settings/processing) bestemmer, hvor hvert værktøj må behandle tekst via API'et, og fanen Forbindelser (/settings/ai, siden AI-forbindelser) tilføjer forbindelser og slår Kan bruges via API til for hver enkelt.
Modeller
GET /v1/models viser de modeller, din nøgle må bruge til en behandling, med kontekst, outputgrænse og de niveauer for ræsonnement, modellen tager imod. I EU-cloud har hver model også udbyderens tokenpriser i rates.
curl "https://api.komplai.dk/v1/models?processing=komplai-local" \
-H "Authorization: Bearer $KOMPLAI_TOKEN"{
"object": "list",
"data": [
{
"id": "qwen3.8-27b",
"object": "model",
"owned_by": "komplai",
"name": "Qwen3.8 27B",
"context_tokens": 32768,
"max_output_tokens": 4000,
"reasoning_efforts": ["none", "low", "medium", "high"]
}
]
}- På lokal infrastruktur indeholder listen de modeller, jeres organisation har slået til, eller alle valgbare modeller, så længe den ikke har slået nogen til. I EU-cloud indeholder den modellerne på organisationens EU-rute. For en forbindelse indeholder den den ene model eller router, forbindelsen angiver.
- Send
modelmed et id fra listen til samme behandling. Udelad feltet for at bruge din standardmodel dér: den model, du har valgt i hubben, ellers organisationens standard. - En model, du ikke må bruge, giver model_not_enabled. API'et vælger aldrig en anden.
reasoning_efforttager en af modellensreasoning_efforts; en anden værdi giver reasoning_not_enabled. Mere ræsonnement bruger mere af outputgrænsen.
curl https://api.komplai.dk/v1/chat/completions \
-H "Authorization: Bearer $KOMPLAI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"processing": "komplai-local",
"model": "qwen3.8-27b",
"reasoning_effort": "none",
"max_tokens": 256,
"messages": [
{"role": "user", "content": "Hvor lang tid har jeg til at klage over en afgørelse om boligstøtte?"}
]
}'Brug en af organisationens forbindelser
En forbindelse er organisationens egen infrastruktur, fx Azure OpenAI, eller dens egen konto hos en udbyder som Anthropic, OpenAI, Mistral eller OpenRouter. Den angiver én model eller en router. Værdien til processing står på siden AI-forbindelser under Værdi til processing i API'et; spørg din administrator om den.
curl https://api.komplai.dk/v1/chat/completions \
-H "Authorization: Bearer $KOMPLAI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"processing": "connection:6d3f9a2e-1b4c-4e7d-8a5f-0c2b9e4d7a31",
"max_tokens": 256,
"messages": [
{"role": "user", "content": "Hvor lang tid har jeg til at klage over en afgørelse om boligstøtte?"}
]
}'Svaret har også processing og requested_model. Med en router som openrouter/free er model den model, der faktisk svarede, og requested_model den router, forbindelsen angiver. komplai registrerer også den model, der svarede, i organisationens forbrugslog.
- Udelad
model, eller send den model, forbindelsen angiver. reasoning_efforttager kunnone. En forbindelse til Anthropic tagertemperatureop til 1 og intet andetresponse_formatendtext.- Hvor en forbindelse behandler data, hvem der driver den, og om data forbliver i EU/EØS, er det, din administrator har angivet for den på siden AI-forbindelser. Udbyderen er ikke komplais underdatabehandler.
- Med en gratis model kan udbyderen gemme og bruge det, der sendes. Brug den til afprøvning, syntetiske data og idéer.
- Et forbindelses-id, jeres organisation ikke har, giver connection_not_found. En forbindelse, administratoren ikke har gjort tilgængelig via API'et, giver processing_choice_not_allowed i POST /v1/chat/completions, og GET /v1/models viser den ikke (connection_not_found). Afviser udbyderen kaldet, nævner koden årsagen, fx connection_unauthorized eller connection_payment_required.
Egne AI-forbindelser viser, hvordan en administrator tilføjer en.
Det månedlige loft for AI-forbrug
Kun kald til EU-cloud tæller med i organisationens månedlige loft for AI-forbrug. Lokal infrastruktur og organisationens egne forbindelser gør ikke.
- Før et kald til EU-cloud reserverer komplai et forsigtigt skøn over input og hele
max_tokens. Når svaret er kommet, registreres det kendte forbrug, og resten frigives. Etmax_tokens, der passer til opgaven, giver plads til andre kald. - Loftet gælder samlet for organisationens apps, personer og nøgler. En administrator kan sætte organisationens egen grænse og personlige grænser på siden Grænser for AI-forbrug (
/settings/ai-budget). - Når loftet eller organisationens egen grænse er nået, stopper kaldene med ai_credit_exhausted; en nået personlig grænse giver person_ai_credit_exhausted. Det hjælper ikke at prøve igen, før loftet starter forfra næste måned. Lokal behandling virker stadig.
- Er der ikke sat et loft for måneden, kan EU-cloud ikke køre: ai_credit_not_granted.
Svaret kommer samlet
Chat-API'et streamer ikke. stream er altid false, og stream: true giver 400 invalid_input ligesom værktøjer, billeder og filer. Streamede svar med funktionskald findes til kodeassistenter i Coding.
- En forespørgsel har højst 32 beskeder og 80.000 UTF-16-tegn tekst.
max_tokenser 2.000 som standard og må ikke overstige modellens egenmax_output_tokens(GET /v1/models); sammen med input skal den også kunne være i modellens kontekst, ellers context_limit. - Modellen har 120 sekunder til at svare. Giv din HTTP-klient en lidt længere tidsgrænse, fx 150 sekunder.
- Efter timeout eller 502 service_unavailable kan kaldet have nået modellen og brugt kapacitet. Send det ikke igen automatisk, og slå automatiske gentagelser af POST fra i din HTTP-klient eller dit SDK.
- eu_cloud_refused betyder, at komplais EU-cloud afviste kaldet. Vælg lokal behandling eller en forbindelse, og send komplai
request_id.
Struktureret JSON
response_format beder om et JSON-objekt (json_object) eller JSON, der følger dit schema (json_schema). Svaret er stadig tekst i choices[0].message.content: kontrollér finish_reason, parse det, og validér det, før du bruger det.
{
"processing": "komplai-local",
"model": "qwen3.8-27b",
"max_tokens": 256,
"messages": [
{"role": "user", "content": "Svar med JSON. Hvor lang tid har jeg til at klage over en afgørelse om boligstøtte?"}
],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "klagefrist",
"strict": true,
"schema": {
"type": "object",
"additionalProperties": false,
"required": ["uger", "kilde"],
"properties": {
"uger": {"type": "integer"},
"kilde": {"type": "string"}
}
}
}
}
}Hele response_format må højst fylde 32.768 bytes, 24 niveauer og 2.048 værdier, og en $ref skal pege ind i schemaet.
Hvad der gemmes
Chat via API'et gemmer hverken beskeder eller svar. komplai registrerer kaldets metadata: hvem der kaldte, hvornår, hvilken model og hvor mange tokens. Hvert svar har headeren Request-Id; oplys den, når du spørger komplai om et kald.
Reference og fejl
- Chat-referencen: alle felter i GET /v1/models og POST /v1/chat/completions med kodeeksempler og en konsol, hvor du kan prøve hvert kald.
- Fejl: alle koder, og hvad du kan gøre. Grænserne for kald står under Grænser.
- Hvor data behandles sammenligner lokal infrastruktur, EU-cloud og jeres egne forbindelser.