Skip to content

Change the mode of a policy in one Autonomy Zone

PATCH/api/public/v1/policies/{public_id}

disabled | monitor | enforce, on the attachment at zone_id — every other zone keeps its own mode. Without zone_id, the AIP's only attachment: 409 ZONE_REQUIRED when it is in several, 409 NOT_ATTACHED in none; a zone_id that holds no attachment answers 409 INHERITED_HERE. Writes a policy_history row, bumps that zone's revision, and the next composition reflects it. Switching to Enforce on a policy with no enforceable atom answers 409 NOT_ACTIVATABLE. Switching a Disabled attachment on is refused the same way when an intent failed verification or can never fire, and is proved against the layers above that zone: 409 LOOSENS_LAYER with the counterexample, 503 PROOF_UNAVAILABLE when the proof cannot finish. Only a ratified policy can have its mode changed. An agent (OAuth) caller must send the version of the policy it read: missing answers 428 POLICY_VERSION_REQUIRED, one that is no longer current 409 POLICY_VERSION_STALE; the check runs on every call, a change that changes nothing included.

Terminal window
curl --fail-with-body -X PATCH 'https://app.openlatch.ai/api/public/v1/policies/<policy_public_id>' \
-H "Authorization: Bearer $OPENLATCH_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"mode":"monitor","zone_id":"<zone_id>"}'
Role in the organizationThis endpoint
ownerAllowed
adminAllowed
editorAllowed
viewerNot allowed

A key carries the role its owner holds in the organization. See Authentication.

API key scope: policies:write

ParameterTypeDescription
public_idstringRequired.
ParameterTypeDescription
Idempotency-Keystring or nullOptional. 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.
FieldTypeDescription
modestring — one of disabled, monitor, enforceRequired.
versioninteger or nullThe version of the policy the caller read. Required of an agent (OAuth) caller: missing answers 428 POLICY_VERSION_REQUIRED, a version that is no longer current 409 POLICY_VERSION_STALE. An API-key caller may send it and is checked when it does.
zone_idstring (uuid) or null
FieldTypeDescription
anomalies_7dinteger
attached_herebooleanWhether the viewed zone holds its own attachment.
attachment_modestring — one of disabled, monitor, enforce or nullThe viewed zone's own attachment mode; null when it only inherits the AIP.
coverageobjectRequired. D-66 — installs counted from stamped negotiation, never from mode + recent poll.
coverage.compatibility_unavailable_installsintegerRequired.
coverage.enforced_installsintegerRequired.
dimensionsarray of stringRequired.
display_titlestringThe AIP's name: its title, else its generated_title, else its statement.
effective_layerobject or nullThe zone whose attachment sets effective_mode when it is not layer; null otherwise.
effective_layer.inheritedbooleanRequired.
effective_layer.labelstringRequired.
effective_layer.unit_idstringRequired.
effective_layer.zone_idstringRequired.
effective_modestring — one of disabled, monitor, enforce or nullThe mode the AIP runs in at the viewed zone: the strictest attachment on its path.
idstringRequired.
intentsobjectRequired. How many of the policy's atoms are actually enforceable.
intents.enforceableintegerRequired.
intents.monitor_onlyintegerRequired.
intents.totalintegerRequired.
layerobjectRequired. The layer a policy row is labelled with: the zone being viewed when it holds the AIP, else the zone whose attachment sets its mode there. `inherited` is true when the viewed zone holds no attachment of it.
layer.inheritedbooleanRequired.
layer.labelstringRequired.
layer.unit_idstringRequired.
layer.zone_idstringRequired.
modestringRequired. Deprecated: attachment_mode when the viewed zone holds it, else effective_mode.
presetobject or null
preset.application_idstringRequired.
preset.preset_idstringRequired.
preset.preset_namestringRequired.
preset.preset_policy_keystringRequired.
preset.preset_versionintegerRequired.
public_idstringRequired.
statementstringRequired.
statusstringRequired.
versionintegerRequired.
{
"anomalies_7d": 0,
"attached_here": false,
"attachment_mode": "disabled",
"coverage": {
"compatibility_unavailable_installs": 3,
"enforced_installs": 3
},
"dimensions": [
"string"
],
"display_title": "",
"effective_layer": {
"inherited": false,
"label": "string",
"unit_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"zone_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10"
},
"effective_mode": "disabled",
"id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"intents": {
"enforceable": 3,
"monitor_only": 3,
"total": 3
},
"layer": {
"inherited": false,
"label": "string",
"unit_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"zone_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10"
},
"mode": "string",
"preset": {
"application_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"preset_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"preset_name": "release-bot",
"preset_policy_key": "string",
"preset_version": 3
},
"public_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"statement": "string",
"status": "string",
"version": 3
}