Skip to main content
POST
Replaces the wallet’s spend policy. policy.perTxMax is required.
Operator only. Setting the policy requires an operator credential: a signed-in dashboard session, or an API key minted with the wallet:admin scope. An agent key is refused with 403 (reason: wallet_admin_requires_operator) — an agent cannot raise its own cap.

Why there is no approval queue

Unlike cards and trading, no wallet or payments endpoint is approval-gated. That is deliberate. The spend control is structural:
  1. Balance is the budget — an agent can never spend what isn’t in the wallet.
  2. perTxMax is enforced twice — once at runtime, and again as a static account policy inside the custody plane at signing time. The second check holds even if the agent runtime is fully compromised, which an approval prompt would not.
  3. dailyBudget (optional) is a rolling per-UTC-day runtime counter.
Fund the wallet with what you can afford to lose, and set perTxMax.
When perTxMax changes, this endpoint re-issues the static custody-plane policy as well as updating the stored one, so point 2 holds at the value you set here rather than the wallet’s create-time cap.The re-issue runs before the new policy is persisted, and fails closed: if the custody plane rejects it you get a 500 internal_error (WalletPolicyAttachFailed) and nothing is stored. A stored cap the custody plane isn’t holding would make perTxMax “enforced twice” at two different numbers, so the endpoint refuses rather than half-apply. Retry once custody is reachable.

Request Body

Errors

CLI

With a rolling daily cap:

MCP

No MCP tool — deliberately. The spend cap is the control that replaces an approval queue, so it is operator-only: an agent that could re-policy its own wallet would be holding its own leash.