Skip to content

Read one ratified policy

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

Returns the same layer-aware row used by the zone list, plus live atoms and their generated cases, provenance, append-only history, named seven-day activity counters and versions — every ratified version of this AIP, newest first, and attachments[] — every Autonomy Zone it is attached to — plus home_zone, retired_at and retired_by. A draft answers 404. A deleted policy answers 200 read-only (read_only: true, attachments: []) and ignores zone_id; its home_zone is the zone it was last in while that zone is live, else null. For a live one, zone_id must name a zone whose path holds an attachment of it; without it the policy is read from its strictest attachment. version=n reads that ratified version read-only (read_only: true unless it is the one in force): its atoms and their cases. A version that was never ratified — the open draft included — answers 404. agent_id adds activity_agent_14d: the events this policy evaluated and the anomalies it raised on that agent over 14 days (404 AGENT_NOT_FOUND for an agent outside the organization).

Terminal window
curl --fail-with-body -X GET 'https://app.openlatch.ai/api/public/v1/policies/<policy_public_id>' \
-H "Authorization: Bearer $OPENLATCH_API_KEY"
Role in the organizationThis endpoint
ownerAllowed
adminAllowed
editorAllowed
viewerAllowed

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

API key scope: policies:read

ParameterTypeDescription
public_idstringRequired.
ParameterTypeDescription
zone_idstring (uuid) or null
versioninteger or null
agent_idstring or null
FieldTypeDescription
dataobjectRequired. A ratified policy with its intents, provenance, history and activity.
data.activity_7dobjectRequired. Named counts of the policy's durable decision evidence from the last seven days.
data.activity_7d.anomalies_raisedinteger
data.activity_7d.events_evaluatedinteger
data.activity_agent_14dobject or nullEvents evaluated and anomalies raised by this policy on the agent named by agent_id, over 14 days. Null when the read was not scoped to an agent.
data.activity_agent_14d.anomalies_raisedinteger
data.activity_agent_14d.events_evaluatedinteger
data.anomalies_7dinteger
data.ask_behaviour_overridestring or nullThis AIP's own Ask behaviour, or null to follow the zone.
data.ask_mode_overridestring or nullThis AIP's own ASK delivery mode, or null to follow the zone.
data.attached_hereboolean
data.attachment_modestring — one of disabled, monitor, enforce or null
data.attachmentsarray of objectEvery Autonomy Zone the AIP is attached to, the viewed one first.
data.attachments[].attached_atstring (date-time)Required.
data.attachments[].modestring — one of disabled, monitor, enforceRequired.
data.attachments[].unit_idstringRequired.
data.attachments[].zone_idstringRequired.
data.attachments[].zone_labelstringRequired.
data.coverageobjectRequired. D-66 — installs counted from stamped negotiation, never from mode + recent poll.
data.coverage.compatibility_unavailable_installsintegerRequired.
data.coverage.enforced_installsintegerRequired.
data.dimensionsarray of stringRequired.
data.display_titlestringThe AIP's name: its title, else its generated_title, else its statement.
data.dropped_deferred_rulesarray of objectThe deferred rules of the version in force that no bundle serves, because their trigger is too broad: each with its intent policy and that intent policy's ratified sentence. Describes the version in force whatever version is viewed; empty when none.
data.dropped_deferred_rules[].intent_policy_idstringRequired.
data.dropped_deferred_rules[].rule_keystringRequired.
data.dropped_deferred_rules[].sentencestringRequired.
data.effective_ask_behaviourstringThe Ask behaviour its Asks follow at the layer being viewed.
data.effective_ask_modestringThe mode its ASKs follow at the layer being viewed: platform, agent or both.
data.effective_layerobject or null
data.effective_layer.inheritedbooleanRequired.
data.effective_layer.labelstringRequired.
data.effective_layer.unit_idstringRequired.
data.effective_layer.zone_idstringRequired.
data.effective_modestring — one of disabled, monitor, enforce or null
data.generated_titlestring or nullThe title generated when the AIP was first drafted; null when none.
data.historyarray of objectRequired.
data.history[].actor_kindstringRequired.
data.history[].actor_user_idobject or nullRequired.
data.history[].atstring (date-time)Required.
data.history[].changestringRequired.
data.history[].evidence_refobject or nullRequired.
data.history[].from_valueobject or nullRequired.
data.history[].to_valueobject or nullRequired.
data.home_zoneobject or nullRequired. The Autonomy Zone the AIP is in (ratified), or was last in while that zone is still live (deleted); null otherwise.
data.home_zone.org_unit_idstringRequired.
data.home_zone.zone_idstringRequired.
data.idstringRequired.
data.intent_policiesarray of objectThe ratified intent policies of the version viewed.
data.intent_policies[].aip_idstringRequired.
data.intent_policies[].aip_public_idstringRequired.
data.intent_policies[].aip_versionintegerRequired.
data.intent_policies[].ask_behaviourstringRequired.
data.intent_policies[].ask_modestringRequired.
data.intent_policies[].capabilityobject or null
data.intent_policies[].citationobject or nullRequired. The framework preset rule this intent policy came from, edited when its sentence differs; null for anything not drawn from a framework preset.
data.intent_policies[].decisiveobject or nullSet when the owner let this intent policy's declarations decide (Spec AZ2-6).
data.intent_policies[].dimensionstring — one of quality, economics, security, safety, complianceRequired.
data.intent_policies[].exceptionsarray of object
data.intent_policies[].fallbackobject or nullAn Optimize intent policy's fallback: how an action already steered twice is settled.
data.intent_policies[].idstringRequired.
data.intent_policies[].languagestringRequired.
data.intent_policies[].learned_casesarray of objectRegression cases accepted from learning proposals (Spec AZ2-6).
data.intent_policies[].measurementobject or nullA measure intent policy's seven-day measurement counts; null otherwise.
data.intent_policies[].messagesobjectRequired.
data.intent_policies[].modestringRequired.
data.intent_policies[].request_ruleobject or nullA measure intent policy's request rule; null otherwise.
data.intent_policies[].rulesarray of objectRequired.
data.intent_policies[].sentencestringRequired.
data.intent_policies[].statusstring — one of draft, ratified, droppedRequired.
data.intent_policies[].steerobject or nullThe better path an Optimize intent policy steers the agent to; null otherwise.
data.intentsobjectRequired. How many of the policy's atoms are actually enforceable.
data.intents.enforceableintegerRequired.
data.intents.monitor_onlyintegerRequired.
data.intents.totalintegerRequired.
data.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.
data.layer.inheritedbooleanRequired.
data.layer.labelstringRequired.
data.layer.unit_idstringRequired.
data.layer.zone_idstringRequired.
data.limitsobject or null
data.limits.cannot_promptintegerRequired. Agents whose binding cannot prompt: their ASKs take the fallback verdict.
data.limits.in_scopeintegerRequired. Agents whose effective zone is in the subtree.
data.limits.shell_onlyintegerRequired. Agents whose refusals reach shell tools only (Cline today).
data.modestringRequired. Deprecated: attachment_mode at zone_id, else effective_mode.
data.open_edit_draftobject or nullThe AIP's open draft version and who holds it; null when none is open.
data.open_edit_draft.held_byobjectRequired.
data.open_edit_draft.public_idstringRequired.
data.open_edit_draft.versionintegerRequired.
data.presetobject or null
data.preset.application_idstringRequired.
data.preset.preset_idstringRequired.
data.preset.preset_namestringRequired.
data.preset.preset_policy_keystringRequired.
data.preset.preset_versionintegerRequired.
data.provenanceobjectRequired. Where a ratified policy came from and who ratified it, when known.
data.provenance.copied_fromobject or nullThe AIP this one was copied from and its version then; null when not a copy.
data.provenance.presetobject or null
data.provenance.ratified_atstring (date-time) or nullRequired.
data.provenance.ratified_bystring or nullRequired.
data.provenance.ratified_by_kindstring or nullRequired.
data.provenance.rationalestring or nullRequired.
data.provenance.source_idstring or nullRequired.
data.provenance.source_kindstringRequired.
data.provenance.source_namestring or nullRequired.
data.public_idstringRequired.
data.read_onlyboolean
data.retired_atstring (date-time) or nullRequired. When the AIP was deleted; null while it is in force.
data.retired_byobject or nullRequired. Who deleted it; null while it is in force.
data.retired_by.kindstring — one of user, api_key, system, migrationRequired.
data.retired_by.nameobject or null
data.statementstringRequired.
data.statusstringRequired.
data.titlestring or nullThe owner's name for the AIP; null falls back.
data.versionintegerRequired.
data.versionsarray of object
data.versions[].changestringRequired.
data.versions[].ratified_atstring (date-time)Required.
data.versions[].ratified_by_kindstringRequired.
data.versions[].versionintegerRequired.
data.viewing_versionintegerRequired.
{
"data": {
"activity_7d": {
"anomalies_raised": 0,
"events_evaluated": 0
},
"activity_agent_14d": {
"anomalies_raised": 0,
"events_evaluated": 0
},
"anomalies_7d": 0,
"ask_behaviour_override": "string",
"ask_mode_override": "string",
"attached_here": false,
"attachment_mode": "disabled",
"attachments": [
{
"attached_at": "2026-01-15T14:32:05Z",
"mode": "disabled",
"unit_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"zone_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"zone_label": "string"
}
],
"coverage": {
"compatibility_unavailable_installs": 3,
"enforced_installs": 3
},
"dimensions": [
"string"
],
"display_title": "",
"dropped_deferred_rules": [
{
"intent_policy_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"rule_key": "string",
"sentence": "string"
}
],
"effective_ask_behaviour": "pass_and_review",
"effective_ask_mode": "both",
"effective_layer": {
"inherited": false,
"label": "string",
"unit_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"zone_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10"
},
"effective_mode": "disabled",
"generated_title": "string",
"history": [
{
"actor_kind": "string",
"actor_user_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"at": "2026-01-15T14:32:05Z",
"change": "string",
"evidence_ref": "string",
"from_value": "string",
"to_value": "string"
}
],
"home_zone": {
"org_unit_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"zone_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10"
},
"id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"intent_policies": [
{
"aip_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"aip_public_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"aip_version": 3,
"ask_behaviour": "string",
"ask_mode": "string",
"capability": "string",
"citation": {
"edited": false,
"entries": [
{}
],
"items": [
{}
],
"license_url": "https://app.openlatch.ai/",
"preset_key": "string",
"preset_title": "string",
"rule_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"source_commit": "string",
"source_date": "string",
"source_sentence": "string",
"version": 1
},
"decisive": {
"by": {},
"proposal_public_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"since": "2026-01-15T14:32:05Z",
"unit_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10"
},
"dimension": "quality",
"exceptions": [
{}
],
"fallback": "Ask",
"id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"language": "string",
"learned_cases": [
{
"action": "string",
"action_line": "string",
"id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"kind": "string",
"outcome": "string",
"reviewed_at": "2026-01-15T14:32:05Z"
}
],
"measurement": {
"guarded": 3,
"incapable": 3,
"shadowed": 3,
"unchanged": 3,
"window_days": 3,
"would_change": 3
},
"messages": {
"declare": "",
"held": "",
"notice": ""
},
"mode": "string",
"request_rule": {
"lever": "effort_clamp",
"params": {}
},
"rules": [
"string"
],
"sentence": "string",
"status": "draft",
"steer": "string"
}
],
"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"
},
"limits": {
"cannot_prompt": 3,
"in_scope": 3,
"shell_only": 3
},
"mode": "string",
"open_edit_draft": {
"held_by": {
"name": "release-bot"
},
"public_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"version": 3
},
"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
},
"provenance": {
"copied_from": {
"public_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"version": 3
},
"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
},
"ratified_at": "2026-01-15T14:32:05Z",
"ratified_by": "string",
"ratified_by_kind": "string",
"rationale": "string",
"source_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"source_kind": "string",
"source_name": "release-bot"
},
"public_id": "3f6c1a2e-8b4d-4c1f-9a7e-0d5b2c8e4f10",
"read_only": false,
"retired_at": "2026-01-15T14:32:05Z",
"retired_by": {
"kind": "user",
"name": "release-bot"
},
"statement": "string",
"status": "string",
"title": "string",
"version": 3,
"versions": [
{
"change": "string",
"ratified_at": "2026-01-15T14:32:05Z",
"ratified_by_kind": "string",
"version": 3
}
],
"viewing_version": 3
}
}