Install
openclaw skills install open-claw-cashOpenclawCash crypto wallet API for AI agents (also called openclawcash). Use when an agent needs to send native or token transfers, check balances, list wall...
openclaw skills install open-claw-cashInteract with OpenclawCash-managed wallets to send native assets and tokens, check balances, execute DEX swaps, and manage Polymarket account, orders, and redeem flows via Polygon wallets.
This skill may also be referred to as openclawcash.
AGENTWALLETAPI_KEYAGENTWALLETAPI_URL (default: https://openclawcash.com)curljq (for pretty JSON output in CLI)https://openclawcash.comnpx -y @openclawcash/mcp-server
wallets, wallet, balance, tokens) on testnets first.allowWalletCreation, allowWalletImport)--yes) for write actionsconfirm_each_write: ask before every write action.operate_on_my_behalf: after one explicit onboarding approval, execute future write actions without re-asking, as long as the user keeps instructing the agent in the same session.operate_on_my_behalf, the agent should treat the user's later task messages as execution instructions and run the corresponding write commands with --yes..env file:
bash scripts/setup.sh
.env file in this skill folder and replace the placeholder with your real API key:
AGENTWALLETAPI_KEY=occ_your_api_key
If MCP is unavailable, use the included tool script to make API calls directly:
# Read-only (recommended first)
bash scripts/agentwalletapi.sh wallets
bash scripts/agentwalletapi.sh user-tag-get
bash scripts/agentwalletapi.sh user-tag-set my-agent-tag --yes
bash scripts/agentwalletapi.sh wallet Q7X2K9P
bash scripts/agentwalletapi.sh wallet "Trading Bot"
bash scripts/agentwalletapi.sh balance Q7X2K9P
bash scripts/agentwalletapi.sh transactions Q7X2K9P
bash scripts/agentwalletapi.sh tokens mainnet
# Write actions (require explicit --yes)
export WALLET_EXPORT_PASSPHRASE_OPS='your-strong-passphrase'
bash scripts/agentwalletapi.sh create "Ops Wallet" sepolia WALLET_EXPORT_PASSPHRASE_OPS --yes
bash scripts/agentwalletapi.sh import "Treasury Imported" mainnet --yes
bash scripts/agentwalletapi.sh import "Poly Ops" polygon-mainnet --yes
# Automation-safe import: read private key from stdin instead of command args
printf '%s' '<private_key>' | bash scripts/agentwalletapi.sh import "Treasury Imported" mainnet - --yes
bash scripts/agentwalletapi.sh transfer Q7X2K9P 0xRecipient 0.01 --yes
bash scripts/agentwalletapi.sh transfer Q7X2K9P 0xRecipient 100 USDC --yes
bash scripts/agentwalletapi.sh quote mainnet WETH USDC 10000000000000000
bash scripts/agentwalletapi.sh quote solana-mainnet SOL USDC 10000000 solana
bash scripts/agentwalletapi.sh swap Q7X2K9P WETH USDC 10000000000000000 0.5 --yes
# Checkout escrow lifecycle
bash scripts/agentwalletapi.sh checkout-payreq-create Q7X2K9P 30000000 --yes
bash scripts/agentwalletapi.sh checkout-payreq-get pr_a1b2c3
bash scripts/agentwalletapi.sh checkout-escrow-get es_d4e5f6
bash scripts/agentwalletapi.sh checkout-quick-pay es_d4e5f6 Q7X2K9P --yes
bash scripts/agentwalletapi.sh checkout-swap-and-pay-quote es_d4e5f6 Q7X2K9P
bash scripts/agentwalletapi.sh checkout-swap-and-pay-confirm es_d4e5f6 Q7X2K9P 1 --yes
bash scripts/agentwalletapi.sh checkout-release es_d4e5f6 --yes
bash scripts/agentwalletapi.sh checkout-refund es_d4e5f6 --yes
bash scripts/agentwalletapi.sh checkout-cancel es_d4e5f6 --yes
bash scripts/agentwalletapi.sh checkout-webhooks-list
# Polymarket setup is user-managed in dashboard Venues settings
# Direct setup page: https://openclawcash.com/venues/polymarket
bash scripts/agentwalletapi.sh polymarket-market Q7X2K9P 123456 BUY 25 FAK 0.65 --yes
bash scripts/agentwalletapi.sh polymarket-resolve https://polymarket.com/market/market-slug No
bash scripts/agentwalletapi.sh polymarket-account Q7X2K9P
bash scripts/agentwalletapi.sh polymarket-orders Q7X2K9P OPEN 50
bash scripts/agentwalletapi.sh polymarket-activity Q7X2K9P 50
bash scripts/agentwalletapi.sh polymarket-positions Q7X2K9P 100
bash scripts/agentwalletapi.sh polymarket-redeem Q7X2K9P all 100 --yes
bash scripts/agentwalletapi.sh polymarket-redeem Q7X2K9P 1234567890 100 --yes
bash scripts/agentwalletapi.sh polymarket-cancel Q7X2K9P order_id_here --yes
quote.amountIn, swap.amountIn, approve.amount, and transfer valueBaseUnits must be base-units integer strings (digits only).0.001), or validation will fail immediately.0.001 ETH -> 1000000000000000 wei1 USDC (6 decimals) -> 1000000amountDisplay when you want human-readable units and let the API convert.amount and value are still accepted for compatibility.allowWalletImport in dashboard settings.--yes for automation, or interactive YES prompt).- and pipe input via stdin.https://openclawcash.com
If requests fail because of host/URL issues, use this recovery flow:
agentwalletapi/.env and verify AGENTWALLETAPI_KEY is set and has no extra spaces..env file:
AGENTWALLETAPI_URL=https://openclawcash.com
bash scripts/agentwalletapi.sh wallets
The API key is loaded from the .env file in this skill folder. For direct HTTP calls, include it as a header:
X-Agent-Key: occ_your_api_key
Content-Type: application/json
/api/agent/*
X-Agent-Key/api/agent/* endpoints.GET /api/agent/wallets - Discover available wallets (id, label, address, network, chain). Optional ?includeBalances=true adds native balance + nativeSymbolGET /api/agent/wallet?walletId=... or ?walletLabel=... or ?walletAddress=... - Fetch one wallet with native/token balancesPOST /api/agent/wallets/create - Create a new wallet under API-key policy controlsPOST /api/agent/wallets/import - Import a mainnet, polygon-mainnet, or solana-mainnet wallet under API-key policy controlsGET /api/agent/transactions?walletId=... (or walletLabel/walletAddress) - Read merged wallet transaction history (on-chain + app-recorded)GET /api/agent/supported-tokens?network=... or ?chain=evm|solana - Get recommended common, well-known token list + guidance (requires X-Agent-Key)POST /api/agent/token-balance - Check wallet balances (native + token balances; specific token by symbol/address supported)POST /api/agent/quote - Get a swap quote before execution on Uniswap (EVM) or Jupiter (Solana mainnet). amountIn is base-units integer string.POST /api/agent/swap - Execute token swap on Uniswap (EVM) or Jupiter (Solana mainnet). amountIn is base-units integer string.POST /api/agent/transfer - Send native coin or token on the wallet's chain (optional chain guard). Do not use this for checkout escrow funding.GET /api/agent/user-tag and PUT /api/agent/user-tag - Read/set the global checkout user tag (set is one-time / immutable once configured)checkout_fund (tries quick-pay, falls back to swap-and-pay when needed)POST /api/agent/checkout/payreq - Create pay request + escrowGET /api/agent/checkout/payreq/:id - Read pay requestPOST /api/agent/checkout/escrows/:id/funding-confirm - Confirm funding by tx hashPOST /api/agent/checkout/escrows/:id/quick-pay - Direct buyer fundingPOST /api/agent/checkout/escrows/:id/swap-and-pay - Quote/execute swap fundingGET /api/agent/checkout/escrows/:id - Read escrow statePOST /api/agent/checkout/escrows/:id/accept - Accept as buyerPOST /api/agent/checkout/escrows/:id/proof - Submit proofPOST /api/agent/checkout/escrows/:id/dispute - Open disputePOST /api/agent/checkout/escrows/:id/release - Release fundsPOST /api/agent/checkout/escrows/:id/refund - Refund fundsPOST /api/agent/checkout/escrows/:id/cancel - Cancel escrowGET|POST /api/agent/checkout/webhooks and PATCH|DELETE /api/agent/checkout/webhooks/:id - Manage webhooksCheckout timing fields for POST /api/agent/checkout/payreq:
expiresInSeconds: funding deadline before request expires.autoReleaseSeconds: when funded escrow can auto-release if no dispute exists.disputeWindowSeconds: how long dispute can be opened after auto-release point.3600 seconds, and disputeWindowSeconds <= autoReleaseSeconds.GET /api/agent/venues/polymarket/market/resolve resolves marketUrl/slug + human-readable outcome to the exact tokenId needed for order toolspolymarket_market_resolve calls the same agent endpointPOST /api/agent/venues/polymarket/orders/limit - Place BUY/SELL limit ordersPOST /api/agent/venues/polymarket/orders/market - Place BUY/SELL market ordersGET /api/agent/venues/polymarket/account - Read account summaryGET /api/agent/venues/polymarket/orders - List open ordersPOST /api/agent/venues/polymarket/orders/cancel - Cancel an orderPOST /api/agent/venues/polymarket/redeem - Redeem one position by tokenId or redeem all redeemable positionsPOST /api/agent/venues/polymarket/unlink - Clear stored Polymarket integration config for a walletGET /api/agent/venues/polymarket/activity - List trade activityGET /api/agent/venues/polymarket/positions - List open positions (open-market filtered, includes PnL fields)txHash / orderId values to confirm execution and lifecycle statusUse this pattern for write actions:
confirm_each_write:
--yesoperate_on_my_behalf:
--yes once the needed details are clearRecommended onboarding wording:
confirm_each_write or operate_on_my_behalf."Example:
operate_on_my_behalfbash scripts/agentwalletapi.sh transfer Q7X2K9P 0xabc... 100 USDC evm --yes
| Endpoint | Method | Auth | Purpose |
|---|---|---|---|
/api/agent/wallets | GET | Yes | List wallets (discovery; optional includeBalances=true for native balances) |
/api/agent/wallet | GET | Yes | Get one wallet detail with native/token balances |
/api/agent/wallets/create | POST | Yes | Create a new API-key-managed wallet |
/api/agent/wallets/import | POST | Yes | Import a mainnet/polygon-mainnet/solana-mainnet wallet via API key |
/api/agent/transactions | GET | Yes | List per-wallet transaction history |
/api/agent/transfer | POST | Yes | Send native/token transfers (EVM + Solana). Not the checkout escrow funding path. |
/api/agent/swap | POST | Yes | Execute DEX swap (Uniswap on EVM, Jupiter on Solana mainnet) |
/api/agent/quote | POST | Yes | Get swap quotes (Uniswap on EVM, Jupiter on Solana mainnet) |
/api/agent/token-balance | POST | Yes | Check balances |
/api/agent/supported-tokens | GET | Yes | List recommended common, well-known tokens per network |
/api/agent/user-tag | GET | Yes | Read the global checkout user tag for the API key owner |
/api/agent/user-tag | PUT | Yes | Set the global checkout user tag once (immutable after set) |
/api/agent/approve | POST | Yes | Approve spender for ERC-20 token (EVM only) |
/api/agent/checkout/payreq | POST | Yes | Create checkout pay request + escrow |
/api/agent/checkout/payreq/:id | GET | Yes | Read checkout pay request |
/api/agent/checkout/escrows/:id/funding-confirm | POST | Yes | Confirm escrow funding tx |
/api/agent/checkout/escrows/:id/quick-pay | POST | Yes | Directly fund escrow from buyer wallet |
/api/agent/checkout/escrows/:id/swap-and-pay | POST | Yes | Quote/execute swap + fund escrow |
/api/agent/checkout/escrows/:id | GET | Yes | Read escrow lifecycle details |
/api/agent/checkout/escrows/:id/accept | POST | Yes | Accept escrow as buyer |
/api/agent/checkout/escrows/:id/proof | POST | Yes | Submit seller proof |
/api/agent/checkout/escrows/:id/dispute | POST | Yes | Open escrow dispute |
/api/agent/checkout/escrows/:id/release | POST | Yes | Release escrow funds |
/api/agent/checkout/escrows/:id/refund | POST | Yes | Refund escrow funds |
/api/agent/checkout/escrows/:id/cancel | POST | Yes | Cancel escrow |
/api/agent/checkout/webhooks | GET | Yes | List checkout webhooks |
/api/agent/checkout/webhooks | POST | Yes | Create checkout webhook |
/api/agent/checkout/webhooks/:id | PATCH | Yes | Update checkout webhook |
/api/agent/checkout/webhooks/:id | DELETE | Yes | Delete checkout webhook |
/api/agent/venues/polymarket/market/resolve | GET | Yes | Resolve market URL/slug + outcome to Polymarket tokenId |
/api/agent/venues/polymarket/orders/limit | POST | Yes | Place Polymarket limit order |
/api/agent/venues/polymarket/orders/market | POST | Yes | Place Polymarket market order |
/api/agent/venues/polymarket/account | GET | Yes | Read Polymarket account summary |
/api/agent/venues/polymarket/orders | GET | Yes | List Polymarket open orders |
/api/agent/venues/polymarket/orders/cancel | POST | Yes | Cancel Polymarket order |
/api/agent/venues/polymarket/redeem | POST | Yes | Redeem one or all redeemable Polymarket positions via gasless relay |
/api/agent/venues/polymarket/unlink | POST | Yes | Clear Polymarket integration for wallet |
/api/agent/venues/polymarket/activity | GET | Yes | List Polymarket trade activity |
/api/agent/venues/polymarket/positions | GET | Yes | List Polymarket open positions (open-market filtered with PnL fields) |
Agent-side wallet lifecycle endpoints:
POST /api/agent/wallets/createPOST /api/agent/wallets/importBehavior notes:
X-Agent-Key.allowWalletCreation for createallowWalletImport for import429 with Retry-After.mainnet, polygon-mainnet, and solana-mainnet.exportPassphrase (minimum 12 characters)exportPassphraseStorageTypeexportPassphraseStorageRefconfirmExportPassphraseSaved: truePOST /api/agent/wallets/create with:
exportPassphraseStorageTypeexportPassphraseStorageRefconfirmExportPassphraseSaved: truepolygon-mainnet.tokenId first via GET /api/agent/venues/polymarket/market/resolve (or MCP tool polymarket_market_resolve).POST /api/agent/venues/polymarket/orders/limit with tokenId, side, price, sizePOST /api/agent/venues/polymarket/orders/market with tokenId, side, amount, optional orderType and worstPrice{ "marketUrl": "https://polymarket.com/market/<slug>", "outcome": "No" }outcome.tokenId (use this as tokenId in order tools)POST /api/agent/venues/polymarket/orders/market with side: "SELL" and amount as shares.SELL only when the user explicitly asks for a limit/target price.amount semantics follow Polymarket CLOB behavior: BUY uses notional/collateral amount; SELL uses share amount.GET /api/agent/venues/polymarket/accountGET /api/agent/venues/polymarket/ordersPOST /api/agent/venues/polymarket/orders/cancel with orderIdPOST /api/agent/venues/polymarket/redeem with optional tokenId (omit tokenId to redeem all)POST /api/agent/venues/polymarket/unlink to clear stored venue config for a walletGET /api/agent/venues/polymarket/activityGET /api/agent/venues/polymarket/positionscashPnl, percentPnl, and currentValue (with computed fallback values when upstream fields are missing).Send native coin (default when no token specified):
{ "walletId": "Q7X2K9P", "to": "0xRecipient...", "amountDisplay": "0.01" }
Send 100 USDC by symbol:
{ "walletLabel": "Trading Bot", "to": "0xRecipient...", "token": "USDC", "amountDisplay": "100" }
Send arbitrary ERC-20 by contract address:
{ "walletId": "Q7X2K9P", "to": "0xRecipient...", "token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", "amountDisplay": "100" }
Send SOL by symbol:
{ "walletId": "Q7X2K9P", "to": "SolanaRecipientWalletAddress...", "token": "SOL", "amountDisplay": "0.01" }
Send SOL with memo (Solana only):
{ "walletId": "Q7X2K9P", "to": "SolanaRecipientWalletAddress...", "token": "SOL", "amountDisplay": "0.01", "memo": "payment verification note" }
Use amountDisplay for human-readable values (e.g., "100" = 100 USDC). Use valueBaseUnits for base units (smallest denomination on each chain).
Legacy transfer aliases amount and value remain available for compatibility.
Use optional chain: "evm" | "solana" in agent payloads for explicit chain routing and validation.
memo is supported only for Solana transfers and must pass safety validation (max 5 words, max 256 UTF-8 bytes, no control/invisible characters).
Native transfers (EVM + Solana) enforce a minimum transferable amount preflight that accounts for platform fee and network fee; Solana may also require a larger first funding transfer for a brand-new recipient address.
For native SOL transfers, the API may auto-adjust requested value to fit platform fee + network fee.
Transfer responses include requestedValueBaseUnits, adjustedValueBaseUnits, requestedAmountDisplay, and adjustedAmountDisplay (legacy aliases also included).
GET /api/agent/supported-tokens returns recommended common, well-known tokens plus guidance fields.ETH on EVM and SOL on Solana (with chain-specific native token IDs in balance payloads).chain_mismatch: requested chain does not match the selected walletamount_below_min_transfer: requested native transfer is below minimum transferable amount after fee/network preflightinsufficient_balance: requested transfer + fees exceed available balanceWallets may have governance policies:
Violations return HTTP 401 with an explanation message.
Content-Type: application/json400 amount_below_min_transfer when requested amount is too small after platform fee or below chain transferability minimum (for example, first funding a new Solana address)400 insufficient_balanceamountDisplay for simplicity, use valueBaseUnits for precise base-unit controlwallets, then wallet (or token-balance), then quote, then swap.insufficient_token_balance, reduce amount or change token..env file in this skill folder stores your API key — never commit it to version controlagentwalletapi/
├── SKILL.md # This file
├── .env # Your API key (created by setup.sh)
├── scripts/
│ ├── setup.sh # Creates .env with API key placeholder
│ └── agentwalletapi.sh # CLI tool for making API calls
└── references/
└── api-endpoints.md # Full endpoint documentation
See references/api-endpoints.md for full endpoint details with request/response examples.