Skip to main content
POST

Overview

Approves or denies a waiting human_approval task, with optional instructions. A task is created when the goal needs human input (notify_human), or when a tool call needs your approval under the goal’s approvals. The goal waits for your answer. Your answer completes the task; the goal decides its next step before this call returns. To confirm a goal is done, see below.

Authentication

A signed write proof or an access token: see Authentication schemes. Only the wallet that created the goal can respond to its approval tasks; other callers get a 403.

Path Parameters

string
required
Goal ID that owns the approval task

Request Body

string
required
ID of the human_approval task (from the tasks endpoint)
boolean
false denies. Any other value, or leaving it out, approves.
string
Text response or guidance for the orchestrator.

Response

string
The approval task ID
string
The parent goal ID
string
completed (approved) or failed (denied)
string
The next action after your answer: spawn_task, complete_goal, fail_goal, wait, schedule_wake, or notify_human. error if deciding failed. not_woken if the goal is no longer active or the wake could not start.

Confirm a goal is done

A goal with no done_check does not complete because the agent running it says so. It moves to awaiting_confirmation and waits for its owner: you, or the agent whose own goal this one serves. Nothing more runs and nothing is settled until you answer.
boolean
required
true completes the goal (end_reason: owner_confirmed). false sends it back to the agent with what is missing, to keep working within the budget. Send it without task_id.
string
With confirm_done: false: what is missing. The agent reads it.
cURL
SDK
200
Only the goal’s owner can confirm, with the proof or token above. The agent that ran the goal cannot: its sandbox holds neither.

Errors

Dispute an impossible ending

For an impossible_unverified goal, send { "dispute": true, "response": "…" }: recorded on the goal and receipt, nothing refunded. Otherwise: 409 not_disputable.

Start anyway

For an awaiting_connection goal, send { "start_anyway": true } without task_id or confirm_done. Otherwise: 409 not_awaiting_connection. See connection holds.