Manual approval
Manual approval is an optional layer you add after the base policy is working. Use it when some requests should pause for human sign-off even though smaller routine requests go through automatically. All signing and broadcasting remains local - WLFI is not involved in any transfer of funds.
When to add manual approval
Add manual approval only after the base policy is defined.
Typical use cases:
routine transfers should go through automatically, but larger transfers should pause
a specific token should require approval above a threshold
a request to a sensitive recipient should require an explicit human decision
Where you define it
The clearest place to define manual approval is the Tokens view in agentpay admin tui. Manual approval is attached to the selected token and network context, which is why it belongs after the base token policy is already in place.
Minimal TUI path
Use this when you want to add a simple approval range:
Open
agentpay admin tui.Go to
Tokens.Select the token whose requests should be approval-gated.
Confirm the correct network mapping in
Editing Network.Add a manual approval draft with
Ctrl+Mor theAdd Manual Approvalfield.Fill in the approval rule:
Approval Recipientif the rule should apply to one recipient onlyApproval Min AmountApproval Max AmountApproval Priority
Save the token.
Go to
Bootstrapand apply the saved inventory.
If you leave Approval Recipient blank, the rule can apply across recipients for that token and network scope.
If Approval Min Amount is omitted, the rule defaults to 0 wei, effectively triggering approval for any transfer amount within the max range. Amounts that exceed Approval Max Amount are hard-denied by the policy engine - they do not enter the approval flow.
Direct CLI path
If you prefer the command line over the TUI, use admin add-manual-approval-policy directly:
Supported flags:
--min-amount-wei <wei>
Yes
-
Minimum transfer amount (in wei) that triggers approval
--max-amount-wei <wei>
Yes
-
Maximum transfer amount (in wei) covered by this rule
--priority <n>
No
100
Evaluation priority (lower = evaluated first)
--token <address>
No
all assets
ERC-20 token scope (repeatable)
--allow-native-eth
No
false
Include the native asset in scope
--network <chain-id>
No
all networks
Restrict the rule to a single chain ID
--recipient <address>
No
all recipients
Restrict the rule to a single recipient
After creating the rule, apply the updated policy set with agentpay admin tui (Bootstrap view) or rerun setup with --attach-bootstrap-policies.
Manual approval is an overlay, not an override. Matching transfers must still satisfy every stricter hard limit (per-tx, daily, weekly, gas, fee, calldata caps) before they reach the approval flow. A manual approval rule does not relax hard spending limits.
To inspect current policies:
Where manual approval happens
Manual approval happens at request time, not when policy is saved.
The runtime flow looks like this:
A transfer or approval request is submitted
Policy checks the request
If the request matches a manual approval rule, it pauses instead of proceeding automatically
The CLI or host returns an approval request id
The operator approves or rejects the request

Approve from the CLI
Approve or reject pending requests from the terminal:
Use resume-manual-approval-request when the original broadcast command has already exited after approval was granted.
resume-manual-approval-request also supports --rpc-url (override the RPC endpoint for the resumed broadcast), --no-wait (skip waiting for an on-chain receipt), --vault-password-stdin, --non-interactive, --daemon-socket, and --json.
The CLI is the approval path for all manual approval requests.
Broadcast auto-wait
When a request hits manual approval during transfer --broadcast, transfer-native --broadcast, or approve --broadcast, the CLI keeps the original process alive and polls the daemon every 2 seconds for up to 5 minutes. If the request is approved within that window, the CLI continues automatically - do not rerun the original command.
If the original broadcast command has already exited after approval:
Commands outside the --broadcast flow still print the approval details and exit immediately, so you approve or reject separately.
Approval output shape
When a request triggers manual approval, the CLI returns a JSON object with:
The CLI exits with a non-zero exit code to signal that the request is pending, not failed.
Continue to Transfers for the full transfer command reference.
Last updated