State sentences as a policy
POST/api/public/v1/policies/stated
Grounds each stated sentence in a read_ground job, then ratifies every sentence that is grounded or deferred into zone_ids — one Autonomy Zone (409 ONE_ZONE_PER_AIP for more) — in the mode; the caller is recorded as its ratifier, and a refused sentence creates nothing. Answers 202 with the job to poll; its result names the AIP (policy_public_id, null when every sentence was refused). A sentence is a string (dimension security) or {sentence, dimension}. An agent (OAuth) caller is refused with 403 AGENT_AUTHORING_VIA_DRAFTS: agents author intent policies through drafts.
curl --fail-with-body -X POST 'https://app.openlatch.ai/api/public/v1/policies/stated' \ -H "Authorization: Bearer $OPENLATCH_API_KEY" \ -H 'Content-Type: application/json' \ -d '{"sentences":["Block a direct push to main."],"zone_ids":["<zone_id>"],"mode":"monitor"}'import jsonimport osimport urllib.request
body = '{"sentences":["Block a direct push to main."],"zone_ids":["<zone_id>"],"mode":"monitor"}'request = urllib.request.Request( 'https://app.openlatch.ai/api/public/v1/policies/stated', method='POST', data=body.encode(), headers={ 'Authorization': 'Bearer ' + os.environ['OPENLATCH_API_KEY'], 'Content-Type': 'application/json', },)with urllib.request.urlopen(request) as response: text = response.read().decode() print(json.dumps(json.loads(text), indent=2) if text else response.status)#!/usr/bin/env bashset -euo pipefail
curl -sS --fail-with-body -X POST 'https://app.openlatch.ai/api/public/v1/policies/stated' \ -H "Authorization: Bearer $OPENLATCH_API_KEY" \ -H 'Content-Type: application/json' \ -d '{"sentences":["Block a direct push to main."],"zone_ids":["<zone_id>"],"mode":"monitor"}' | jq .$headers = @{ Authorization = "Bearer $env:OPENLATCH_API_KEY"}$body = '{"sentences":["Block a direct push to main."],"zone_ids":["<zone_id>"],"mode":"monitor"}'Invoke-RestMethod -Method POST -Uri 'https://app.openlatch.ai/api/public/v1/policies/stated' -Headers $headers -ContentType 'application/json; charset=utf-8' -Body $body | ConvertTo-Json -Depth 20Autorización
Sección titulada «Autorización»| Rol en la organización | Este punto de conexión |
|---|---|
owner | Permitido |
admin | Permitido |
editor | Permitido |
viewer | No permitido |
Una clave tiene el rol que su propietario ocupa en la organización. Consulte Autenticación.
Ámbito de la clave de API: policies:write
Parámetros de encabezado
Sección titulada «Parámetros de encabezado»| Parámetro | Tipo | Descripción |
|---|---|---|
Idempotency-Key | string or null | Optional. Makes the request safe to retry: the same key and the same request, within 24 hours, returns the stored response with Idempotent-Replayed: true and runs once. |
Cuerpo de la solicitud
Sección titulada «Cuerpo de la solicitud»| Campo | Tipo | Descripción |
|---|---|---|
language | string or null | |
mode | string — one of disabled, monitor, enforce | Obligatorio. |
sentences | array of one of: string, object | Obligatorio. |
sentences[] (StatedSentenceIn).dimension | string — one of quality, economics, security, safety, compliance | |
sentences[] (StatedSentenceIn).sentence | string | Obligatorio. |
zone_ids | array of string (uuid) | Obligatorio. |
Respuesta
Sección titulada «Respuesta»- 202 Accepted — la llamada se completó correctamente.
- 400 Bad Request —
BAD_REQUEST - 401 Unauthorized —
UNAUTHORIZED - 402 Payment Required —
license_expired - 403 Forbidden —
AGENT_AUTHORING_VIA_DRAFTS,FEATURE_DISABLED,FORBIDDEN,INSUFFICIENT_SCOPE - 409 Conflict —
AI_NOT_ENABLED,IDEMPOTENCY_IN_PROGRESS,ONE_ZONE_PER_AIP - 422 Unprocessable Content —
IDEMPOTENCY_KEY_REUSED,INVALID_ID,NO_ZONE,VALIDATION_ERROR,ZONE_UNAVAILABLE - 429 Too Many Requests —
TOO_MANY_REQUESTS - 500 Internal Server Error —
INTERNAL_SERVER_ERROR,tenant_isolation_violation - 503 Service Unavailable —
FEATURE_STATE_UNAVAILABLE,SERVICE_UNAVAILABLE
Campos de la respuesta
Sección titulada «Campos de la respuesta»| Campo | Tipo | Descripción |
|---|---|---|
data | object | Obligatorio. `202 for a job-starting operation: poll GET /aip/jobs/{job_id}`. |
data.job_id | string | Obligatorio. |
Ejemplo de respuesta
Sección titulada «Ejemplo de respuesta»{ "data": { "job_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10" }}