stacken.docs

Styrning för en växande portfölj av AI-tjänster

stacken.ai ↗

API · 17 operationer

policy-engine

Genererad ur services/policy-engine/openapi.json, kontraktsversion 0.1.0. Auth-modell och anropare står i atlasen.

GET /healthz

Healthz

Lever processen?

SvarBeskrivningKropp
200Successful Response{ [nyckel]: string } application/json

GET /readyz

Readyz

Kan podden ta trafik? Nej om OPA inte svarar.

SvarBeskrivningKropp
200Successful Response{ [nyckel]: string } application/json

GET /v1/admin/decisions

List Decisions

ParameterITypKrävs
qquerystring | nullnej
actionquerystring | nullnej
sincequerystring (date-time) | nullnej
untilquerystring (date-time) | nullnej
user_id_hash
Exakt matchning. Personens identitet. Trots namnet är värdet inte alltid en hash. Det bär en av två identitetsrymder beroende på anroparen: `auth.users.id`-UUID:t orört (D-31) från bff, llm-gateway och agent-runtime, eller aktörsvärdet `sha256(canonical_json("platform:" + sub))` (D-113) från mcp-gateway. `policy_decisions.user_id_hash` innehåller alltså båda, och den som filtrerar på en person måste fråga på båda värdena (P43).
querystring | nullnej
limitqueryintegernej
authorizationheaderstring | nullnej
X-Tenant-Idheaderstring | nullnej
SvarBeskrivningKropp
200Successful ResponseDecisionAuditPage application/json
422Validation ErrorHTTPValidationError application/json

GET /v1/admin/decisions/traces

Decision Traces

ParameterITypKrävs
user_id_hash
Exakt matchning. Personens identitet. Trots namnet är värdet inte alltid en hash. Det bär en av två identitetsrymder beroende på anroparen: `auth.users.id`-UUID:t orört (D-31) från bff, llm-gateway och agent-runtime, eller aktörsvärdet `sha256(canonical_json("platform:" + sub))` (D-113) från mcp-gateway. `policy_decisions.user_id_hash` innehåller alltså båda, och den som filtrerar på en person måste fråga på båda värdena (P43).
querystringja
authorizationheaderstring | nullnej
X-Tenant-Idheaderstring | nullnej
SvarBeskrivningKropp
200Successful ResponseDecisionTracesResponse application/json
422Validation ErrorHTTPValidationError application/json

GET /v1/admin/decisions/verify

Verify Decisions

ParameterITypKrävs
authorizationheaderstring | nullnej
X-Tenant-Idheaderstring | nullnej
SvarBeskrivningKropp
200Successful ResponseChainVerification application/json
422Validation ErrorHTTPValidationError application/json

GET /v1/admin/protection-defaults

Get Protection Defaults

ParameterITypKrävs
authorizationheaderstring | nullnej
SvarBeskrivningKropp
200Successful Response{ [nyckel]: { [nyckel]: string } } application/json
422Validation ErrorHTTPValidationError application/json

PUT /v1/admin/protection-defaults

Put Protection Defaults

ParameterITypKrävs
authorizationheaderstring | nullnej
X-Tenant-Idheaderstring | nullnej

Kropp: ProtectionDefaultsPayload application/json

SvarBeskrivningKropp
200Successful Response{ [nyckel]: { [nyckel]: string } } application/json
422Validation ErrorHTTPValidationError application/json

GET /v1/admin/retention

Get Retention

ParameterITypKrävs
authorizationheaderstring | nullnej
X-Tenant-Idheaderstring | nullnej
SvarBeskrivningKropp
200Successful Response{ [nyckel]: object[] } application/json
422Validation ErrorHTTPValidationError application/json

PUT /v1/admin/retention/{data_category}

Put Retention

ParameterITypKrävs
data_categorypath"chat_conversation" | "chat_upload" | "public_session" | "public_forensics" | "rag_document" | "knowledge_superseded"ja
authorizationheaderstring | nullnej
X-Tenant-Idheaderstring | nullnej

Kropp: RetentionPolicyPayload application/json

SvarBeskrivningKropp
200Successful Responseobject application/json
422Validation ErrorHTTPValidationError application/json

GET /v1/admin/tenants/{tenant_id}/export

Export Tenant

ParameterITypKrävs
tenant_idpathstring (uuid)ja
authorizationheaderstring | nullnej
SvarBeskrivningKropp
200Successful ResponseTenantExport application/json
422Validation ErrorHTTPValidationError application/json

GET /v1/assistants

List Assistants

ParameterITypKrävs
limitqueryintegernej
offsetqueryintegernej
knowledge_scope_containsquerystring (uuid) | nullnej
authorizationheaderstring | nullnej
X-Tenant-Idheaderstring | nullnej
SvarBeskrivningKropp
200Successful ResponseAssistantListResponse application/json
422Validation ErrorHTTPValidationError application/json

POST /v1/assistants

Create Assistant

ParameterITypKrävs
authorizationheaderstring | nullnej
X-Tenant-Idheaderstring | nullnej

Kropp: CreateAssistantRequest application/json

SvarBeskrivningKropp
201Successful ResponseAssistantResponse application/json
422Validation ErrorHTTPValidationError application/json

GET /v1/assistants/{assistant_id}

Get Assistant

ParameterITypKrävs
assistant_idpathstring (uuid)ja
authorizationheaderstring | nullnej
X-Tenant-Idheaderstring | nullnej
SvarBeskrivningKropp
200Successful ResponseAssistantResponse application/json
422Validation ErrorHTTPValidationError application/json

PATCH /v1/assistants/{assistant_id}

Patch Assistant

ParameterITypKrävs
assistant_idpathstring (uuid)ja
If-Matchheaderstring | nullnej
authorizationheaderstring | nullnej
X-Tenant-Idheaderstring | nullnej

Kropp: PatchAssistantRequest application/json

SvarBeskrivningKropp
200Successful ResponseAssistantResponse application/json
422Validation ErrorHTTPValidationError application/json

POST /v1/assistants/{assistant_id}/retire

Retire Assistant

ParameterITypKrävs
assistant_idpathstring (uuid)ja
authorizationheaderstring | nullnej
X-Tenant-Idheaderstring | nullnej
SvarBeskrivningKropp
200Successful ResponseAssistantResponse application/json
422Validation ErrorHTTPValidationError application/json

POST /v1/decide

Decide

ParameterITypKrävs
authorizationheaderstring | nullnej

Kropp: DecideRequest application/json

SvarBeskrivningKropp
200Successful ResponseDecideResponse application/json
422Validation ErrorHTTPValidationError application/json

GET /v1/decisions

List Decisions

ParameterITypKrävs
trace_idquerystringja
authorizationheaderstring | nullnej
X-Tenant-Idheaderstring | nullnej
SvarBeskrivningKropp
200Successful ResponseDecisionsResponse application/json
422Validation ErrorHTTPValidationError application/json

Scheman

AssistantListResponse

FältTypKrävs
itemsAssistantResponse[]ja
limitintegerja
offsetintegerja
totalintegerja

AssistantResponse

FältTypKrävs
action_levelstringja
ai_act_classificationstringja
allowed_groupsstring[]ja
allowed_modelsstring[]ja
allowed_rolesstring[]ja
allowed_tool_scopesstring[]ja
archetypestring | nullja
content_trail_enabledbooleanja
created_atstring (date-time)ja
default_modelstringja
delegated_editorsstring[]ja
descriptionstring | nullja
exposurestringja
fallback_chainstring[]ja
geo_constraintstring | nullja
iconstring | nullja
idstring (uuid)ja
information_classstringja
intended_usestringja
knowledge_scopestring[]ja
namestringja
ownerstring | nullja
retention_policystringja
runtimeRuntimeModelja
shared_with_orgbooleanja
statusstringja
superseded_bystring (uuid) | nullja
system_promptstring | nullja
tenant_idstring (uuid)ja
updated_atstring (date-time)ja
versionintegerja

ChainVerification

FältTypKrävs
chainstringja
eventsintegerja
status"valid" | "invalid" | "incomplete"ja
verified_atstringja

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ältTypKrävs
reasonstringja
storestringja

CreateAssistantRequest

FältTypKrävs
action_level"informs" | "supports" | "acts_with_approval"nej
ai_act_classificationstringja
allowed_groupsstring[]nej
allowed_modelsstring[]ja
allowed_rolesstring[]nej
allowed_tool_scopes"read_only" | "read_write" | "destructive"[]nej
archetypestring | nullnej
content_trail_enabledbooleannej
default_modelstringja
delegated_editorsstring[]nej
descriptionstring | nullnej
exposure"public_chat" | "internal_chat" | "api" | "pipeline"ja
fallback_chainstring[]nej
geo_constraintstring | nullnej
iconstring | nullnej
information_classstringja
intended_usestringja
knowledge_scopestring[]nej
namestringja
ownerstring | nullnej
retention_policystringnej
runtimeRuntimeModelnej
shared_with_orgbooleannej
system_promptstring | nullnej

DecideRequest

FältTypKrävs
actionstring | nullnej
assistant_ctxobject | nullnej
assistant_idstring (uuid) | nullnej
fileFileCtx | nullnej
grantGrantCtx | nullnej
knowledge_ctxKnowledgeCtx | nullnej
model_residencystring | nullnej
output_checkOutputCheckSignals | nullnej
piiPiiSignals | nullnej
purpose"eval" | nullnej
requested_modelstringja
tenant_idstring (uuid)ja
tool_namestring | nullnej
tool_scopestring | nullnej
trace_idstringja
user_groupsstring[]nej
user_id_hash
Personens identitet. Trots namnet är värdet inte alltid en hash. Det bär en av två identitetsrymder beroende på anroparen: `auth.users.id`-UUID:t orört (D-31) från bff, llm-gateway och agent-runtime, eller aktörsvärdet `sha256(canonical_json("platform:" + sub))` (D-113) från mcp-gateway. `policy_decisions.user_id_hash` innehåller alltså båda, och den som filtrerar på en person måste fråga på båda värdena (P43).
string | nullnej
user_rolestring | nullnej

DecideResponse

FältTypKrävs
content_trail_enabledbooleannej
decisionstringja
decision_idstring (uuid)ja
evaluation_msintegerja
human_oversight_requiredbooleannej
information_classstring | nullnej
jit_approval_requiredbooleannej
output_check_failuresOutputCheckFailure[] | nullnej
output_check_requiredboolean | nullnej
pii_verdictstring | nullnej
policies_versionstringja
protection{ [nyckel]: string } | nullnej
retention_policystring | nullnej
substitute_modelstring | nullnej
substitute_reasonstring | nullnej

DecisionAuditItem

FältTypKrävs
actionstringja
actorstringja
chainstringja
created_atstringja
hashstringja
information_classstring | nullja
prev_hashstringja
seqintegerja
targetstringja
trace_idstringja

DecisionAuditPage

FältTypKrävs
itemsDecisionAuditItem[]ja
next_cursorstring | nullnej
totalintegerja

DecisionItem

FältTypKrävs
assistant_idstring (uuid) | nullja
created_atstring (date-time)ja
decisionstringja
evaluation_msinteger | nullja
human_oversight_requiredbooleanja
idstring (uuid)ja
jit_approval_requiredbooleanja
policies_versionstringja
substitute_modelstring | nullja
substitute_reasonstring | nullja
tenant_idstring (uuid)ja
trace_idstringja

DecisionsResponse

FältTypKrävs
itemsDecisionItem[]ja
trace_idstringja

DecisionTracesResponse

FältTypKrävs
totalintegerja
trace_idsstring[]ja
user_id_hashstringja

FileCtx

Filens metadata före extraktionen (spec B4): format och storlek, aldrig byte, filnamn eller hash. `format` är strängen BFF läst ur innehållet. Vilka format som är öppna avgör rego, så ett okänt format blir en deny-rad i policy_decisions i stället för en 422 som ingen beslutsrad ser.

FältTypKrävs
formatstringja
size_bytesintegerja

GrantCtx

Grant-scopad decide-kontext (fas MCP-chokepunkt, D-70): flyttar verktygsbehörigheten från mcp-gatewayens lokala deny (PR #51, utanför WORM) till OPA. None på fältet = REST-vägen, som inte har något grant-begrepp — skiljs medvetet från `granted=False` (grant fanns men saknades).

FältTypKrävs
grantedbooleanja
scope_capstring | nullnej

HTTPValidationError

FältTypKrävs
detailValidationError[]nej

KnowledgeCtx

Kunskaps-scopad decide-kontext (fas R1, D-39): collections har ingen assistant — informationsklassen kommer från kunskapskortet. None = oklassat (fail-closed: rego behandlar det som rod).

FältTypKrävs
collection_idstring (uuid)ja
information_classstring | nullnej

OutputCheckFailure

FältTypKrävs
messagestringja
rulestringja

OutputCheckSignals

Utflödessignaler (fas P2, D-35): metadata om ett genererat svar, aldrig innehållet. pii_entities = entitetstyp -> antal ur utflödesscannen.

FältTypKrävs
answer_kind"tool_calls" | nullnej
decision_pattern_hitboolean | nullnej
has_citationsboolean | nullnej
knowledge_boundboolean | nullnej
pii_entities{ [nyckel]: integer }nej
retrieval_scorenumber | nullnej
sourcestring | nullnej

PatchAssistantRequest

FältTypKrävs
action_level"informs" | "supports" | "acts_with_approval" | nullnej
ai_act_classificationstring | nullnej
allowed_groupsstring[] | nullnej
allowed_modelsstring[] | nullnej
allowed_rolesstring[] | nullnej
allowed_tool_scopes"read_only" | "read_write" | "destructive"[] | nullnej
archetypestring | nullnej
content_trail_enabledboolean | nullnej
default_modelstring | nullnej
delegated_editorsstring[] | nullnej
descriptionstring | nullnej
exposure"public_chat" | "internal_chat" | "api" | "pipeline" | nullnej
fallback_chainstring[] | nullnej
geo_constraintstring | nullnej
iconstring | nullnej
information_classstring | nullnej
intended_usestring | nullnej
knowledge_scopestring[] | nullnej
namestring | nullnej
ownerstring | nullnej
retention_policystring | nullnej
runtimeRuntimeModel | nullnej
shared_with_orgboolean | nullnej
system_promptstring | nullnej

PiiSignals

Entitetstyp -> antal. Aldrig innehall/fynd - GDPR first (D-35).

FältTypKrävs
entities{ [nyckel]: integer }nej

ProtectionDefaultsPayload

ProtectionProfileModel

runtime.protection — per-tjänst-övrid (D-36). Nivåerna valideras mot app.services.protection.LEVELS (importerad, K3: dubblera inte). extra=forbid ⇒ exakt familjerna inflow/outflow/resistance.

FältTypKrävs
inflowstringja
outflowstringja
resistancestringja

ProtectionProfilePayload

FältTypKrävs
inflow"off" | "low" | "medium" | "high"ja
outflow"off" | "low" | "medium" | "high"ja
resistance"off" | "low" | "medium" | "high"ja

RetentionPolicyPayload

FältTypKrävs
archive_holdbooleanja
retention_daysinteger | nullja

RuntimeModel

API-projektionen av default_parameters (temperature/max_tokens) + protection-kolumnen (K1/K3). Lagras aldrig som eget fält — packas upp i repo-lagret.

FältTypKrävs
max_tokensintegerja
min_retrieval_scorenumber | nullnej
protectionProtectionProfileModel | nullnej
temperaturenumberja

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ältTypKrävs
coverageTenantExportCoverageja
dataobjectja
generated_atstring (date-time)ja
servicestringja
tenant_idstring (uuid)ja

TenantExportCoverage

FältTypKrävs
coveredstring[]ja
not_coveredCoverageGap[]ja

ValidationError

FältTypKrävs
ctxobjectnej
inputanynej
locstring | integer[]ja
msgstringja
typestringja