Skip to content

CLI Reference

The Agent CLI (botwallet) is the reference client for the Botwallet API. Source: botwallet-co/agent-cli. Run botwallet docs for the same reference offline, or botwallet docs --json for a machine-readable command schema.

Terminal window
npm install -g @botwallet/agent-cli # npm, all platforms
brew install botwallet-co/tap/botwallet # Homebrew, macOS/Linux
curl -fsSL https://botwallet.co/install.sh | sh # shell installer, Linux/macOS
iwr https://botwallet.co/install.ps1 | iex # PowerShell, Windows
go install github.com/botwallet-co/agent-cli@latest # from source

Windows users can also scoop bucket add botwallet https://github.com/botwallet-co/scoop-bucket and then scoop install botwallet.

JSON by default, for agents and scripts. Add --human for formatted output.

Terminal window
$ botwallet wallet balance
{"balance": 42.50, "daily_limit": 500.00, "spent_today": 10.00, "remaining_today": 490.00}

Errors are JSON too: { "error": "CODE", "message": "...", "how_to_fix": "..." }.

FlagDescription
--api-key <key>API key (or set BOTWALLET_API_KEY / BW_API_KEY)
--wallet <name>Use a specific local wallet (see wallet list)
--api-url <url>API base URL, for development
--humanHuman-readable output with colors

Credential precedence: --api-key, then the environment variable, then --wallet, then the default wallet in ~/.botwallet/config.json.

Terminal window
botwallet register --name "My Agent Wallet" --owner you@email.com

Creates a wallet with FROST key generation and saves the API key and key share locally. register is the recommended entry point; wallet create is identical.

FlagDescription
--name, -nWallet name (required)
--ownerOwner’s email; the wallet appears in their dashboard
--model, -mAgent model, for example claude-3
--descWhat this wallet is for
--meta key=valueMetadata, repeatable (--meta platform=cursor --meta project=my-app)

The output includes claim_url and claim_code. The wallet is blocked until the owner claims it; only wallet info, wallet owner and wallet rename work before then.

CommandDescription
wallet create --name "..." --owner <email>Create a wallet (same as register)
wallet infoWallet info and claim status
wallet balanceBalance and spending limits
wallet listList locally stored wallets
wallet use <name>Switch the default wallet
wallet depositSolana USDC deposit address
wallet owner <email>Update the pledged owner (unclaimed wallets only)
wallet rename <name>Rename the display name (username unchanged)
wallet backupBack up the agent’s key share (two-step safety process)
wallet export -o <file.bwlt>Export the wallet to an encrypted .bwlt file
wallet import <file.bwlt> [--name <name>]Import a wallet from a .bwlt file

Payments are two steps: create an intent, then sign and submit.

CommandDescription
pay @recipient <amount>Step 1: create a payment intent (guard rails checked)
pay confirm <transaction_id>Step 2: FROST-sign and submit
pay --paylink <id>Pay a payment link directly (then pay confirm)
pay preview @recipient <amount>Check whether a payment would succeed
pay listList payments (--status actionable|all|completed|failed|expired, --id, --limit, --offset)
pay cancel <transaction_id>Cancel a pending payment

Flags for pay: --note (alias --memo), --reference, --paylink, --idempotency-key.

Step 1 returns a status: pre_approved means you can confirm right away; awaiting_approval means the owner must approve first (poll approval status <approval_id>); rejected means a guard rail blocked it.

Create payment links and invoices to get paid.

CommandDescription
paylink create [amount] --desc "..."Create a payment link
paylink send <id> --to <email|@bot>Send it by email or to another bot’s inbox
paylink get <id>Check whether it has been paid
paylink get --reference <ref>Look it up by your reference
paylink listList paylinks (--status pending|completed|expired|cancelled, --limit, --offset)
paylink cancel <id>Cancel a pending paylink

Create flags: --desc (required), --item (repeatable), --expires (1h, 24h, 7d; default 24h), --reference, --revealOwner (default true). Send flags: --to (required), --message.

Itemized invoice, total calculated for you:

Terminal window
botwallet paylink create --desc "Dev services" --item "API Calls, 5.00, 2" --item "Setup Fee, 10.00"
CommandDescription
fund <amount> --reason "..."Ask the owner for funds
fund ask <amount> --reason "..."Same, explicit subcommand
fund listList fund requests (--status pending|approved|denied, --limit, --offset)

Two steps: the owner must approve before you can sign.

CommandDescription
withdraw <amount> <solana-address> --reason "..."Step 1: create the request
withdraw confirm <withdrawal_id>Step 2: FROST-sign and submit after approval
withdraw get <withdrawal_id>Check status

Flags: --reason (required), --idempotency-key.

Buy access to paid APIs. Probing is free; you only pay at the confirm step.

CommandDescription
x402 discoverCurated catalog of verified Solana x402 APIs
x402 discover "query"Search the catalog
x402 discover --bazaar [--all]Search the full x402 Bazaar (Coinbase CDP); --all includes non-Solana networks
x402 fetch <url>Step 1: probe the API and see its price
x402 fetch confirm <fetch_id>Step 2: pay and retrieve the data

Discover flags: --bazaar, --limit, --offset, --all, --facilitator. Fetch flags: --method, --body, --header "Key: Value" (repeatable); the same flags on fetch confirm override the original request.

CommandDescription
approvalsList all pending owner approvals
approval status <approval_id>Status of one approval: pending, approved, rejected or expired
eventsUnread notifications (alias notifications)
events --type approval_resolved,deposit_receivedFilter by type
events --allInclude already-read events
events --limit 25 / events --since <ISO timestamp>Paging
events --mark-readMark everything as read

Event types: approval_resolved, deposit_received, payment_completed, fund_requested, fund_request_funded, wallet_pledged, guardrails_updated, x402_payment_completed, x402_payment_failed.

CommandDescription
historyTransaction history (alias transactions; --type in|out|payment|deposit|withdrawal|adjustment|all, --limit, --offset)
limitsSpending limits and guard rails
lookup @usernameCheck whether a recipient exists
pingTest API connectivity (no auth)
versionPrint version
docsFull embedded documentation (--json for a machine-readable schema)
Terminal window
# Pay someone, waiting for approval if needed
botwallet pay @merchant 500.00 # returns awaiting_approval + approval_id
botwallet approval status <approval_id> # poll until approved
botwallet pay confirm <transaction_id>
# Earn
botwallet paylink create 50.00 --desc "Research report"
botwallet paylink send <id> --to client@example.com --message "Here's your invoice"
# Use a paid API
botwallet x402 discover "speech"
botwallet x402 fetch <url_from_results>
botwallet x402 fetch confirm <fetch_id>
# Withdraw earnings
botwallet withdraw 100.00 <YourSolanaAddress> --reason "Monthly earnings"
botwallet withdraw confirm <withdrawal_id> # after the owner approves