API reference · schema
Decision
12 fields · used by 1 operations
Last reviewed 2026-10-14
Fields
| Field | Type | Meaning |
|---|---|---|
decision_id required | string | |
verdict required | string | Run the tool only when this starts with ALLOWED. REQUIRE_APPROVAL means held for a human; BLOCKED means refused. |
blocked required | boolean | true only for a refusal. A held action is blocked=false and still must not run: check verdict, not this field alone. |
enforcing required | boolean | |
mode | string | enforce or shadow |
approval_id | ['string', 'null'] | set when the action is held: POST /fabric/approvals/{approval_id}/approve with a key other than the agent's own, then send the same call again |
path | ['string', 'null'] | |
service | ['string', 'null'] | |
chain_id | ['string', 'null'] | |
schema_version | integer | |
principal | object | |
stages required | array of object |
Smallest valid example
{
"decision_id": "fd_dd061dadd0a2473d9b4c0827",
"verdict": "REQUIRE_APPROVAL",
"blocked": false,
"enforcing": false,
"stages": [
{}
]
}Used by 1 operation
| POST | /fabric/decisions | Ask the control plane to decide on a proposed action |
JSON Schema
Show the raw definition
{
"type": "object",
"required": [
"decision_id",
"verdict",
"blocked",
"enforcing",
"stages"
],
"properties": {
"decision_id": {
"type": "string",
"example": "fd_dd061dadd0a2473d9b4c0827"
},
"verdict": {
"type": "string",
"description": "Run the tool only when this starts with ALLOWED. REQUIRE_APPROVAL means held for a human; BLOCKED means refused.",
"example": "REQUIRE_APPROVAL"
},
"blocked": {
"type": "boolean",
"description": "true only for a refusal. A held action is blocked=false and still must not run: check verdict, not this field alone."
},
"enforcing": {
"type": "boolean"
},
"mode": {
"type": "string",
"description": "enforce or shadow"
},
"approval_id": {
"type": [
"string",
"null"
],
"description": "set when the action is held: POST /fabric/approvals/{approval_id}/approve with a key other than the agent's own, then send the same call again"
},
"path": {
"type": [
"string",
"null"
]
},
"service": {
"type": [
"string",
"null"
]
},
"chain_id": {
"type": [
"string",
"null"
]
},
"schema_version": {
"type": "integer"
},
"principal": {
"type": "object",
"additionalProperties": true
},
"stages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"stage": {
"type": "string",
"description": "identity, intent, policy, authorization, risk, trust, ..."
},
"verdict": {
"type": "string",
"description": "allow, deny, require_approval, skipped, not_configured, deferred"
},
"enforcing": {
"type": "boolean",
"description": "false means the stage only recorded what it saw"
},
"ran": {
"type": "boolean"
},
"detail": {
"type": "string",
"description": "the reason, in plain words"
},
"data": {
"type": "object",
"additionalProperties": true
}
},
"additionalProperties": true
}
}
},
"additionalProperties": true
}Try CAIN-42 on your own agents
Create a free account and every new account starts with a 7-day trial of the full platform. Or try the sandbox first, with no account at all.
Create a free account → · Try the sandbox · See the whole ecosystem