API · 48 operationer
bff
Genererad ur services/bff/openapi.json, kontraktsversion 0.1.0. Auth-modell och anropare står i atlasen.
GET /.well-known/security.txt
Security Txt
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
GET /api/chat/v1/conversations
List Conversations
| Parameter | I | Typ | Krävs |
|---|---|---|---|
q | query | string | null | nej |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
POST /api/chat/v1/conversations
Create Conversation
Kropp: ConversationCreate application/json
| Svar | Beskrivning | Kropp |
|---|---|---|
201 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
DELETE /api/chat/v1/conversations/{conversation_id}
Delete Conversation
| Parameter | I | Typ | Krävs |
|---|---|---|---|
conversation_id | path | string (uuid) | ja |
| Svar | Beskrivning | Kropp |
|---|---|---|
204 | Successful Response | — |
422 | Validation Error | HTTPValidationError application/json |
GET /api/chat/v1/conversations/{conversation_id}
Get Conversation
| Parameter | I | Typ | Krävs |
|---|---|---|---|
conversation_id | path | string (uuid) | ja |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
GET /api/chat/v1/conversations/{conversation_id}/export
Export Conversation
| Parameter | I | Typ | Krävs |
|---|---|---|---|
conversation_id | path | string (uuid) | ja |
format | query | string | nej |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
POST /api/chat/v1/conversations/{conversation_id}/messages
Post Message
| Parameter | I | Typ | Krävs |
|---|---|---|---|
conversation_id | path | string (uuid) | ja |
Kropp: SendMessageRequest application/json
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
GET /api/chat/v1/models
List Chat Models
Modellkatalogen som chatten får se: avstängda modeller och modeller utan intent utelämnas. Till skillnad från ops-ytan (§6b) är filtreringen rätt här — chatten adresserar ALDRIG en modell vid namn, bara via svarsläge, så en post utan intent är oadresserbar och en avstängd post väljs ändå aldrig av resolve_intent (chat_store/intent.py, R6).
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | ChatModelView[] application/json |
GET /api/chat/v1/records
List Records
| Parameter | I | Typ | Krävs |
|---|---|---|---|
status | query | string | null | nej |
q | query | string | null | nej |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
POST /api/chat/v1/records
Register Record
Kropp: RecordCreate application/json
| Svar | Beskrivning | Kropp |
|---|---|---|
201 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
PATCH /api/chat/v1/records/{record_id}
Patch Record
| Parameter | I | Typ | Krävs |
|---|---|---|---|
record_id | path | string (uuid) | ja |
Kropp: RecordPatch application/json
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
GET /api/chat/v1/records/{record_id}/disclose
Disclose Record
| Parameter | I | Typ | Krävs |
|---|---|---|---|
record_id | path | string (uuid) | ja |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
POST /api/chat/v1/uploads/file
File Upload
| Parameter | I | Typ | Krävs |
|---|---|---|---|
assistant_id | query | string (uuid) | ja |
file_name | query | string | ja |
Kropp: string application/octet-stream
| Svar | Beskrivning | Kropp |
|---|---|---|
201 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
POST /api/chat/v1/uploads/scan
Scan Upload
Kropp: UploadScanRequest application/json
| Svar | Beskrivning | Kropp |
|---|---|---|
201 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
GET /api/models
List Models
| Parameter | I | Typ | Krävs |
|---|---|---|---|
authorization | header | string | null | nej |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | ModelView[] application/json |
422 | Validation Error | HTTPValidationError application/json |
POST /api/policy/v1/assistants
Create Assistant
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
PATCH /api/policy/v1/assistants/{assistant_id}
Patch Assistant
| Parameter | I | Typ | Krävs |
|---|---|---|---|
assistant_id | path | string | ja |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
POST /api/policy/v1/decide
Decide Probe
Kropp: DecideProbeRequest application/json
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
GET /api/public-sites
List Sites
| Parameter | I | Typ | Krävs |
|---|---|---|---|
authorization | header | string | null | nej |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | SiteResponse[] application/json |
422 | Validation Error | HTTPValidationError application/json |
POST /api/public-sites
Create Site
| Parameter | I | Typ | Krävs |
|---|---|---|---|
authorization | header | string | null | nej |
Kropp: SiteCreate application/json
| Svar | Beskrivning | Kropp |
|---|---|---|
201 | Successful Response | SiteResponse application/json |
422 | Validation Error | HTTPValidationError application/json |
POST /api/public-sites/maintenance/sweep
Sweep
Explicit retention-svep av ENDAST det publika planet (spec §7.2) — anropar `sweep_expired`, ALDRIG `sweep_expired_chat`. Operatörens "kör nu" för `bff_public`-schemat, utöver dygnsronden (D-94, `app/retention_sweep.py`, CronJobbet `<release>-bff-retention-sweep`), som sedan D-94 är den enda automatiska gallringsvägen för BÅDA planen. Gated på write eftersom operationen muterar (hård DELETE). Det finns INGEN manuell väg att tvinga fram en chattgallring — den vägen går bara via dygnsronden. Kalla inte denna yta "kör nu" för gallringen i stort; den rör bara publika sessioner. Tenant-scope: till skillnad från övriga ops i denna fil filtrerar INTE `sweep_expired` på tenant_id — se invarianten dokumenterad i app/public/retention.py (BFF är single-tenant-per-instans, så hela bff_public-schemat tillhör den enda tenant denna instans betjänar).
| Parameter | I | Typ | Krävs |
|---|---|---|---|
authorization | header | string | null | nej |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | { [nyckel]: integer } application/json |
422 | Validation Error | HTTPValidationError application/json |
POST /api/public-sites/{site_id}/forensics/{session_id}/unlock
Unlock Forensics
Dekrypterar en publik sessions forensik-transkript åt en tenant_admin. Auditraden skrivs i SAMMA transaktion som läsningen (fail-closed: misslyckas audit-skrivningen rullas hela unlocken tillbaka — ingen tyst läsning utan spår). Svaret innehåller det dekrypterade innehållet (poängen med unlock) men det loggas ALDRIG — audit-metadata bär endast id:n + antal rader.
| Parameter | I | Typ | Krävs |
|---|---|---|---|
site_id | path | string | ja |
session_id | path | string | ja |
authorization | header | string | null | nej |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | object application/json |
422 | Validation Error | HTTPValidationError application/json |
POST /api/public-sites/{site_id}/revoke
Revoke Site
| Parameter | I | Typ | Krävs |
|---|---|---|---|
site_id | path | string | ja |
authorization | header | string | null | nej |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | { [nyckel]: string } application/json |
422 | Validation Error | HTTPValidationError application/json |
POST /api/rag/v1/documents/file
Knowledge File
Filvägen steg 5: en fil blir ett kunskapsdokument (utkast) i samlingen. Ordningen är densamma som i uploads/file: format, skrivrätt, storlek, signatur, `decide(file_extract)` och extraktion. Därefter skapar rag-api dokumentet, och dess ingest kör pii och `knowledge_ingest` som för text.
| Parameter | I | Typ | Krävs |
|---|---|---|---|
collection_id | query | string (uuid) | ja |
file_name | query | string | ja |
title | query | string | ja |
information_class | query | "gron" | "gul" | "rod" | null | nej |
Kropp: string application/octet-stream
| Svar | Beskrivning | Kropp |
|---|---|---|
201 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
DELETE /api/{service}/{path}
Passthrough Delete
| Parameter | I | Typ | Krävs |
|---|---|---|---|
service | path | string | ja |
path | path | string | ja |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
GET /api/{service}/{path}
Passthrough Get
| Parameter | I | Typ | Krävs |
|---|---|---|---|
service | path | string | ja |
path | path | string | ja |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
PATCH /api/{service}/{path}
Passthrough Patch
| Parameter | I | Typ | Krävs |
|---|---|---|---|
service | path | string | ja |
path | path | string | ja |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
POST /api/{service}/{path}
Passthrough Post
| Parameter | I | Typ | Krävs |
|---|---|---|---|
service | path | string | ja |
path | path | string | ja |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
PUT /api/{service}/{path}
Passthrough Put
| Parameter | I | Typ | Krävs |
|---|---|---|---|
service | path | string | ja |
path | path | string | ja |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
GET /auth/callback
Callback
| Parameter | I | Typ | Krävs |
|---|---|---|---|
code | query | string | null | nej |
state | query | string | null | nej |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
GET /auth/logged-out
Logged Out
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
GET /auth/login
Login
| Parameter | I | Typ | Krävs |
|---|---|---|---|
redirect_to | query | string | nej |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
POST /auth/logout
Logout
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
POST /chat
Chat
Kropp: ChatRequest application/json
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
GET /gdpr/tenants/{tenant_id}/export
Export Tenant
| Parameter | I | Typ | Krävs |
|---|---|---|---|
tenant_id | path | string (uuid) | ja |
authorization | header | string | nej |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | TenantExport application/json |
422 | Validation Error | HTTPValidationError application/json |
POST /gdpr/users/{user_id_hash}/conversations/erase
Erase Subject Conversations
| Parameter | I | Typ | Krävs |
|---|---|---|---|
user_id_hash | path | string (uuid) | ja |
authorization | header | string | nej |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
GET /gdpr/users/{user_id_hash}/conversations/export
Export Subject Conversations
| Parameter | I | Typ | Krävs |
|---|---|---|---|
user_id_hash | path | string (uuid) | ja |
authorization | header | string | nej |
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
GET /healthz
Healthz
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | { [nyckel]: string } application/json |
GET /internal/k21/avslag
Geo Denied
| Svar | Beskrivning | Kropp |
|---|---|---|
403 | Förfrågan är nekad | any application/json |
404 | Rutten är avstängd (K21_AVSLAG_AKTIV av) | — |
503 | Audit-raden gick inte att skriva, förfrågan är nekad | — |
POST /internal/k21/avslag
Geo Denied
| Svar | Beskrivning | Kropp |
|---|---|---|
403 | Förfrågan är nekad | any application/json |
404 | Rutten är avstängd (K21_AVSLAG_AKTIV av) | — |
503 | Audit-raden gick inte att skriva, förfrågan är nekad | — |
GET /internal/k21/regel
Rule State
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
404 | Rutten är avstängd (K21_AVSLAG_AKTIV av) | — |
503 | Audit-raden gick inte att skriva | — |
POST /internal/k21/regel
Rule Notice
Kropp: RuleNotice application/json
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
404 | Rutten är avstängd (K21_AVSLAG_AKTIV av) | — |
422 | Validation Error | HTTPValidationError application/json |
503 | Audit-raden gick inte att skriva | — |
GET /me
Me
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
POST /public/chat
Public Chat
SSE-ström (spec §3.4): alltid 200 när sessionen är giltig — tak och uppströmsfel uttrycks in-stream via `degraded`, aldrig som HTTP-status efter strömöppning. Tak-hierarkin (session -> källa -> tjänst, spec §5) verkställs atomiskt i EN transaktion FÖRE uppströmsanropet: ett degraderat meddelande får aldrig räknas. Om något steg misslyckas rullas HELA transaktionen tillbaka — vid session-cap är inget inkrementerat än (ofarlig rollback), vid käll-/tjänste-cap återställer rollbacken det redan gjorda session-(och ev. käll-)inkrementet. Endast om alla tre passerar skrivs inbound-forensiken i samma transaktion och committas tillsammans med inkrementen (task 9 är därmed den enda som ökar dygnsräknarna — task 7:s mint är read-only).
Kropp: PublicChatRequest application/json
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | any application/json |
422 | Validation Error | HTTPValidationError application/json |
POST /public/feedback
Feedback
Kropp: PublicFeedbackCreate application/json
| Svar | Beskrivning | Kropp |
|---|---|---|
201 | Successful Response | { [nyckel]: string } application/json |
422 | Validation Error | HTTPValidationError application/json |
GET /public/service-info
Service Info
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | PublicServiceInfo application/json |
POST /public/session
Create Session
Kropp: PublicSessionRequest application/json
| Svar | Beskrivning | Kropp |
|---|---|---|
201 | Successful Response | PublicSessionResponse application/json |
422 | Validation Error | HTTPValidationError application/json |
GET /readyz
Readyz
| Svar | Beskrivning | Kropp |
|---|---|---|
200 | Successful Response | { [nyckel]: string } application/json |
Scheman
_Exception
| Fält | Typ | Krävs |
|---|---|---|
id | string | ja |
till | string (date-time) | ja |
ChatMessage
| Fält | Typ | Krävs |
|---|---|---|
content | string | ja |
role | "system" | "user" | "assistant" | ja |
ChatModelView
Chattens delmängd (D-82). SKU:n (`id`) följer med men visas aldrig — chat-ui matchar den mot assistentens `allowed_models` och renderar bara intent-etiketten (produkt-ui-spec §10.1).
| Fält | Typ | Krävs |
|---|---|---|
id | string | ja |
intent | "fast" | "balanced" | "deep" | ja |
label | string | ja |
residency | "eu" | "us" | "on_prem" | ja |
ChatRequest
| Fält | Typ | Krävs |
|---|---|---|
assistant_id | string (uuid) | ja |
messages | ChatMessage[] | ja |
model | string | null | nej |
ConversationCreate
| Fält | Typ | Krävs |
|---|---|---|
assistant_id | string (uuid) | ja |
temporary | boolean | ja |
CoverageGap
En store exporten INTE täcker, med ett ärligt skäl. `store` måste vara IDENTISK med namnet i `covered` när en store demoteras (t.ex. `page_truncated_over_500`), så en konsument kan korrelera flytten. Se regel (c) i docs/tenant-export-coverage.md.
| Fält | Typ | Krävs |
|---|---|---|
reason | string | ja |
store | string | ja |
DecideProbeRequest
| Fält | Typ | Krävs |
|---|---|---|
assistant_id | string | ja |
requested_model | string | ja |
EscalationContact
| Fält | Typ | Krävs |
|---|---|---|
hours | string | null | nej |
label | string | ja |
phone | string | null | nej |
url | string | null | nej |
HTTPValidationError
| Fält | Typ | Krävs |
|---|---|---|
detail | ValidationError[] | nej |
ModelView
| Fält | Typ | Krävs |
|---|---|---|
cost_tier | "low" | "mid" | "high" | ja |
enabled | boolean | ja |
eu_native | boolean | ja |
hosting_region | string | ja |
id | string | ja |
intent | "fast" | "balanced" | "deep" | null | ja |
label | string | ja |
max_information_class | "gron" | "gul" | "rod" | ja |
provider | string | ja |
residency | "eu" | "us" | "on_prem" | ja |
PublicChatRequest
| Fält | Typ | Krävs |
|---|---|---|
message | string | ja |
PublicFeedbackCreate
| Fält | Typ | Krävs |
|---|---|---|
message_id | string | ja |
verdict | string | ja |
PublicServiceInfo
| Fält | Typ | Krävs |
|---|---|---|
ai_disclosure | string | ja |
escalation | EscalationContact | ja |
name | string | ja |
not_covered | string[] | ja |
purpose | string | ja |
retention_notice | string | ja |
tenant_name | string | ja |
PublicSessionRequest
| Fält | Typ | Krävs |
|---|---|---|
draft_assistant_id | string | null | nej |
site_key | string | ja |
PublicSessionResponse
| Fält | Typ | Krävs |
|---|---|---|
expires_at | string | ja |
message_cap | integer | ja |
session_id | string | ja |
RecordCreate
| Fält | Typ | Krävs |
|---|---|---|
conversation_id | string (uuid) | ja |
diarienr | string | null | nej |
note | string | null | nej |
RecordPatch
| Fält | Typ | Krävs |
|---|---|---|
diarienr | string | null | nej |
note | string | null | nej |
preservation_hold | boolean | null | nej |
sekretess_status | "unassessed" | "public" | "secret" | "partial" | null | nej |
RuleNotice
Regeln för en instans som den gäller efter sync (plattformen#331 §7 G1). Undantagens land och CIDR följer inte med: raden pekar på commit, och en CIDR kan vara en enskild persons adress.
| Fält | Typ | Krävs |
|---|---|---|
commit | string | ja |
foregaende_regel_sha256 | string | null | ja |
godkand_av | string | ja |
instans | string | ja |
lage | "av" | "på" | ja |
profil | string | ja |
profilversion | string | ja |
regel_sha256 | string | ja |
schema | "k21-regel/v1" | ja |
tillatna | string[] | ja |
undantag | _Exception[] | ja |
SendMessageRequest
| Fält | Typ | Krävs |
|---|---|---|
attachment_ids | string[] | nej |
content | string | ja |
requested_intent | string | ja |
SiteCreate
| Fält | Typ | Krävs |
|---|---|---|
ai_disclosure | string | ja |
allowed_origins | string[] | ja |
assistant_id | string | ja |
degraded_body_markdown | string | ja |
degraded_contacts | EscalationContact[] | ja |
degraded_title | string | ja |
escalation | EscalationContact | ja |
name | string | ja |
not_covered | string[] | ja |
purpose | string | ja |
retention_notice | string | ja |
service_daily_cap | integer | nej |
session_message_cap | integer | nej |
source_daily_cap | integer | nej |
tenant_name | string | ja |
SiteResponse
| Fält | Typ | Krävs |
|---|---|---|
allowed_origins | string[] | ja |
assistant_id | string | ja |
id | string | ja |
information_class_snapshot | string | ja |
site_key | string | ja |
status | string | ja |
TenantExport
En producents svar. `extra="forbid"` medvetet: bevarar de tre befintliga typade deklarationernas beteende, OCH gör att en producent som lägger ett fält utan att koordinatorn lär sig om det failar högt i stället för tyst.
| Fält | Typ | Krävs |
|---|---|---|
coverage | TenantExportCoverage | ja |
data | object | ja |
generated_at | string (date-time) | ja |
service | string | ja |
tenant_id | string (uuid) | ja |
TenantExportCoverage
| Fält | Typ | Krävs |
|---|---|---|
covered | string[] | ja |
not_covered | CoverageGap[] | ja |
UploadScanRequest
| Fält | Typ | Krävs |
|---|---|---|
assistant_id | string (uuid) | ja |
file_name | string | ja |
text | string | ja |
ValidationError
| Fält | Typ | Krävs |
|---|---|---|
ctx | object | nej |
input | any | nej |
loc | string | integer[] | ja |
msg | string | ja |
type | string | ja |