Governed plans

Read a governed plan's state and each step's status

GET
/v1/authority/plans/{planId}

The plan as registered, its state and each step's status, derived now from the claim records of every grant issued for one of its steps: COMMITTED only with a confirmed effect. PARTIAL (a step failed after others committed) stays so once reached and maps to the SCITT execution profile's partially_completed; SUSPENDED (a step's outcome is unknown) lasts until reconciliation settles it.

Authorization

ApiKeyAuth
AuthorizationBearer <token>

An organization API key. Its scopes decide what it may call; decision:shadow is the narrowest: SHADOW evaluations through POST /v1/authority/grants or its alias POST /v1/authority/enforce-and-bind only (DECISION_SHADOW_MODE_DENIED in any other mode; DECISION_SHADOW_FIELD_DENIED for a body carrying context.decionis_policy, evidence or escalation), with no integration dispatch. A key whose only scope is decision:shadow (an AgentSafe hosted gateway's) reaches exactly those two, POST /v1/auth/credential-context, POST /v1/hosted-gateway/keys/confirm and POST /v1/hosted-gateway/keys/revoke-self; every other route answers 403 HOSTED_GATEWAY_KEY_PATH_DENIED. decision:enforce is an enforced hosted gateway's key: evaluations in SHADOW or ENFORCEMENT through POST /v1/authority/grants or its alias (400 DECISION_ENFORCE_FIELD_DENIED for a body carrying context.decionis_policy; it never holds policy:write), and the grants and managed escalations they bind. A key whose scopes are decision:enforce (with or without decision:shadow) reaches exactly POST /v1/authority/enforce-and-bind, POST /v1/authority/grants, GET /v1/authority/grants/{grant_id}, POST /v1/authority/grants/{grant_id}/claims, POST /v1/authority/grants/{grant_id}/receipts, POST /v1/authority/grants/{grant_id}/reconciliations, POST /v1/execution/verify-token, POST /v1/execution/claim-token, POST /v1/execution/consume-token, POST /v1/execution/finalize-token, GET /v1/authority/escalations/{escalation_id}, DELETE /v1/authority/escalations/{escalation_id}, POST /v1/auth/credential-context, POST /v1/hosted-gateway/keys/confirm and POST /v1/hosted-gateway/keys/revoke-self, each id a UUID; every other route answers 403 HOSTED_GATEWAY_KEY_PATH_DENIED.

In: header

Path Parameters

planId*string
Match^[A-Za-z0-9][A-Za-z0-9_.-]*$
Length1 <= length <= 128

Query Parameters

org_id?string

Optional when the authenticated API key is already bound to an organization.

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/authority/plans/string"
{  "plan_id": "string",  "plan_digest": "string",  "registered_at": "2019-08-24T14:15:22Z",  "state": "ACTIVE",  "scitt_outcome_state": "partially_completed",  "steps": [    {      "step_id": "string",      "status": "PENDING"    }  ],  "plan": {    "version": "agent-safe.plan/1",    "plan_id": "string",    "tenant_id": "34f5c98e-f430-457b-a812-92637d0c6fd0",    "steps": [      {        "step_id": "string",        "action": "string",        "target": "string",        "parameters": {},        "compensates": [          "string"        ]      }    ],    "edges": [      {        "from": "string",        "to": "string",        "coupling": "independent"      }    ],    "partial_commit": {      "admissible": [        "string"      ],      "otherwise": "ESCALATE"    }  }}

Register a governed plan; it authorizes no step POST

Registers one change carried out as several governed operations (`agent-safe.plan/1`): its steps, a coupling per dependency edge, a partial-commit rule and the compensation steps a failure opens. The plan is a governance object, not an orchestrator: registering it authorizes nothing, and every step is still decided by enforce-and-bind and claimed before it commits, with a grant of its own. A step's intent names the plan it belongs to in its hashed context (`agent_safe.plan`: `plan_id`, `plan_digest`, `step_id`); Decionis derives the step's facts from the plan and its own claim records and writes them under `agent_safe.plan` for policy to read, and binds the step's view of the plan as a material signal the claim rechecks. Plans are immutable: the same `plan_id` with another digest is refused. One organisation in v1: `tenant_id` must be the caller's. Requires decision:write, decision:* or org:*.

Issue the organization's active policy bundle, signed for the edge evaluator GET

Signs the bundle hosted evaluation would run on right now and returns it as a compact JWS for the Decionis edge evaluator (the WebAssembly policy core a deployment runs inside its own network). The edge evaluator evaluates only bundles Decionis signed: it verifies the signature against the keys its release pins (published at `/.well-known/decionis-policy-bundle-jwks.json`), the audience against its organization, the validity window against the time its host supplies, and the bundle against `bundle_digest`. Selection is hosted evaluation's own: the newest active bundle whose effective window contains now and that passes the maker-checker gate, or, when `policy_version` is given, exactly that version among them. An unapproved, historical, not-yet-effective or expired bundle is never signed; like hosted evaluation, it is treated as not active and the answer is `404 POLICY_BUNDLE_NOT_FOUND` with the policy guard's reason. The signed bundle lives `ttl_seconds` (default 7 days, at most 30 days and at most the organization's plan maximum), never past the bundle's own `effective_to`. Every issuance is recorded before it is returned (see `GET /v1/edge/policy-bundles/issuances`); one that cannot be recorded is not issued. Requires an organization API key with `policy:read` (or `policy:*` / `org:*`); keys without explicit scopes are refused. Only organizations licensed for the edge evaluator receive bundles: Enterprise and self-managed plans include it, Premium with the edge add-on, and an operator may list an organization for a pilot. Any other organization is answered `403 EDGE_EVALUATOR_NOT_ENTITLED` (its signed entitlement, `GET /v1/edge/entitlement`, says why). The bundle is `core_abi: 3`: it also carries what hosted would decide differently for this organization, resolved with hosted's own code — `vertical_pack` (its configured pack, or the operator's pack override, else null) and `max_mode` / `max_mode_reason` (SHADOW with hosted's 403 code for an unclaimed provisional or AWS service workspace, else ENFORCEMENT). An edge module older than ABI 3 refuses such a bundle rather than decide without them. A bundle whose rules compare two facts (`EQ_FACT`, `NEQ_FACT`) is `core_abi: 7`, which an edge module older than ABI 7 refuses the same way, and one that declares `allowed_transitions` is `core_abi: 8`, which an edge module older than ABI 8 refuses. A bundle with a rule that draws on a held allowance (`then.allowance`) is never signed for an edge: only hosted Decionis holds an allowance, and an edge module would approve such a rule with nothing reserved.