action.approve
Coming July 20, 2026Approve a pending decision and let the action engine execute it.
Description
Resolves a single `pending_approval` decision by id. The action engine commits the underlying side effect and appends a ledger entry with the approval provenance.
Input schema
| Field | Type | Required | Description |
|---|---|---|---|
decision_id | string | yes | The id returned by the original action call. |
reason | string | no | Optional approval rationale (recorded in ledger). |
Output shape
typescript
{
ok: boolean;
ledger_entry_id?: string;
error?: string;
}Example call
JSON-RPC tools/call request body (omit the JSON-RPC envelope when using an SDK; the SDK adds it for you):
jsontools/call params
{
"name": "action.approve",
"arguments": {
"decision_id": "dec_01HXP9COMM",
"reason": "Confirmed via 1:1"
}
}Example response
Tool results are always wrapped as content[0].text with a stringified JSON body. The shape below is what you get back from JSON.parse(result.content[0].text):
jsonparsed result body
{
"ok": true,
"ledger_entry_id": "led_01HXP9APPR"
}Errors this tool can return
| Code | Meaning |
|---|---|
invalid_arguments | Tool input failed Zod validation. |
unauthorized | Missing or invalid bearer token. |
invalid_decision_id | No pending decision matches the supplied id. |
decision_expired | The approval window for a pending decision has elapsed. |
already_decided | The decision was already approved or rejected. |
action_engine_error | The action engine refused to enqueue the decision (downstream failure, transient). |
See the full error catalog for resolution steps on each code, plus the standard transport-layer responses (401, 429).