Approval is a deliberate boundary, not an automatic retry. It covers estimates above the account's confirmation threshold and actions that require the human's provider consent.

## A confirmation-required run

1. The agent calls `run` with the inspected `tool_id` and input.
2. scrollport validates the input and returns `confirmation_required` with `run_id`, `approval_url`, `estimate` and an expiry.
3. The agent shows the estimate and URL to the human.
4. The human approves or denies in the browser.
5. After approval, the agent resumes the existing run or retries the same call with `confirm: true`, exactly as the error teaches.

The initial quote holds no money. Approval places the hold only after the balance is checked again, so a stale quote cannot reserve funds the account no longer has.

## A provider connection

`connection_required` is a different gate. It means a human must connect an account before the provider action can be attempted. Give the human `connect_url`; do not treat it as permission to guess or collect credentials.

## What the agent must not do

- Do not set `confirm: true` before a human approves the quote.
- Do not poll an expired approval URL.
- Do not create a second run while the first decision is pending.
- Do not say a provider action succeeded until the run status says `succeeded`.

See [errors](https://scrollport.com/docs/reference/errors) for the teaching payloads that point to the next safe action.