Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create and manage AI agents, send USDC/USDT payments, check balances across Ethereum, BSC, and Tron
.claude/skills/leoyeai-agentwallex-openclaw/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 841% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 303% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 250% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 496% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 524% | 0% |
The AgentWallex Payment skill gives AI agents core capabilities for managing agents and crypto payments:
| Chain | Tokens | Address Format | |-------|--------|----------------| | Ethereum | USDC, USDT | 0x... (42 chars) | | BSC | USDC, USDT | 0x... (42 chars) | | Tron | USDT | T... (34 chars) |
| Chain | Network | Tokens | |-------|---------|--------| | Ethereum | Sepolia | USDC, USDT | | BSC | BSC Testnet | USDC, USDT | | Tron | Nile Testnet | USDT |
Start with sandbox for development and testing. Sandbox transactions use testnet tokens and don't cost real money.
| Requirement | Details | |---|---| | System binaries | curl, jq |
No API key or environment variable is needed upfront — credentials are configured through conversation and stored locally.
Install via ClawHub:
bashclawhub install agentwallex-openclaw
Then tell your AI agent:
"Set up AgentWallex"The agent will use the agentwallex_setup tool and guide you through:
awx_)Credentials are stored locally at ~/.openclaw/agentwallex/config.json with owner-only permissions (0600). No environment variables needed.
To change credentials or switch agents, just say:
"Reconfigure AgentWallex with my new API key awx_xxx and agent ID agent-123"The agent will validate the new credentials and update the local config.
Update to the latest version:
bashopenclaw plugins update @agentwallex/agentwallex-openclaw
Or update all plugins at once:
bashopenclaw plugins update --all
bashopenclaw plugins uninstall @agentwallex/agentwallex-openclaw
To keep plugin files on disk:
bashopenclaw plugins uninstall @agentwallex/agentwallex-openclaw --keep-files
To also remove locally stored credentials:
bashrm -rf ~/.openclaw/agentwallex
| Tool | Requires Config | Description | |---|---|---| | agentwallex_setup | No | Check configuration status and get setup instructions | | agentwallex_configure | No | Validate and save API credentials | | agentwallex_create_agent | Yes | Create a new AI agent with its own wallet | | agentwallex_list_agents | Yes | List all agents and their status | | agentwallex_update_agent | Yes | Update an agent's name or description | | agentwallex_delete_agent | Yes | Delete an agent | | agentwallex_agent_status | Yes | Update agent status (active / suspended) | | agentwallex_create_wallet | Yes | Get or create a deposit address for the agent | | agentwallex_check_balance | Yes | Check the agent's token balances (per chain) | | agentwallex_pay | Yes | Send a payment to a recipient address | | agentwallex_tx_status | Yes | Query the status of a transaction | | agentwallex_list_transactions | Yes | List transactions with filtering |
| Environment | Base URL | Description | |---|---|---| | Sandbox | https://api-sandbox.agentwallex.com/api/v1 | Testing and development. Use sandbox API keys (awx_sk_test_*). | | Production | $AGENTWALLEX_BASE_URL | Live environment. Use production API keys (awx_sk_live_*). |
Start with sandbox for development and testing. Switch to production when ready to go live.
bash# Set the base URL (default: sandbox) export AGENTWALLEX_BASE_URL="https://api-sandbox.agentwallex.com/api/v1"
All requests require the API key header:
X-API-Key: <your-api-key>Success (single object): Returns the object directly, no envelope.
json{ "agent_id": "agent-a1b2c3", "agent_name": "payment-bot", "chain": "ethereum", "status": "active" }
Success (paginated list):
json{ "data": [ ... ], "total": 42, "has_more": true }
Error:
json{ "code": "not_found", "type": "not_found_error", "message": "Agent not found" }
Error types: validation_error (400), authentication_error (401), authorization_error (403), not_found_error (404), conflict_error (409), rate_limit_error (429), internal_error (500), service_unavailable (503).
All list endpoints support:
| Parameter | Type | Default | Description | |---|---|---|---| | page_num | number | 1 | Page number | | page_size | number | 20 | Items per page (max 100) | | sort | string | created_at | Field to sort by | | order | string | desc | Sort order: asc or desc |
Creates a new AI agent with its own wallet on the specified chain. Returns 201 Created.
bashcurl -s -X POST \ "$AGENTWALLEX_BASE_URL/agents" \ -H "X-API-Key: $AGENTWALLEX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "agent_name": "payment-bot", "chain": "ethereum", "agent_description": "Handles outbound payments" }' | jq
Request body:
| Field | Type | Required | Description | |---|---|---|---| | agent_name | string | yes | Name for the new agent | | chain | string | yes | Blockchain network: ethereum, bsc, tron (mainnet) or ethereum-sepolia, bsc-testnet, tron-nile (sandbox) | | agent_description | string | no | Optional description of the agent's purpose | | wallet_address | string | no | Existing wallet address to associate | | metadata | string | no | Arbitrary metadata string |
Response — An Agent object:
| Field | Type | Description | |---|---|---| | agent_id | string | Unique agent identifier | | agent_name | string | Agent name | | chain | string | Blockchain network | | status | string | Agent status (active, inactive, suspended) | | wallet_address | string | Associated wallet address (if any) | | created_at | string | ISO 8601 creation timestamp |
Lists all agents accessible to the current API key, with optional filtering.
bashcurl -s -X GET \ "$AGENTWALLEX_BASE_URL/agents?status=active&page_num=1&page_size=20" \ -H "X-API-Key: $AGENTWALLEX_API_KEY" | jq
Query parameters:
| Field | Type | Required | Description | |---|---|---|---| | status | string | no | Filter by status: active, inactive, suspended | | chain | string | no | Filter by blockchain network | | page_num | number | no | Page number (default: 1) | | page_size | number | no | Items per page (default: 20) | | sort | string | no | Sort field (default: created_at) | | order | string | no | Sort order: asc or desc (default: desc) |
Response — A paginated list:
json{ "data": [ { "agent_id": "agent-a1b2c3", "agent_name": "payment-bot", "chain": "ethereum", "status": "active", "wallet_address": "0x...", "created_at": "2025-03-01T12:00:00Z" } ], "total": 1, "has_more": false }
Returns balances for a specific agent (one entry per chain/token).
bashcurl -s -X GET \ "$AGENTWALLEX_BASE_URL/agents/AGENT_ID/balance" \ -H "X-API-Key: $AGENTWALLEX_API_KEY" | jq
Response — An array of balance objects (one per chain/token):
| Field | Type | Description | |---|---|---| | agent_id | string | The agent identifier | | chain | string | Blockchain network | | token | string | Token symbol (USDC or USDT) | | available | string | Available balance for spending | | locked | string | Balance locked in pending transactions | | pending_income | string | Incoming funds not yet confirmed | | total_deposited | string | Lifetime deposited amount | | total_withdrawn | string | Lifetime withdrawn amount | | total_paid | string | Lifetime outbound payments | | total_earned | string | Lifetime earned income |
Returns a deposit address for funding the agent wallet. EVM chains (Ethereum, BSC) share the same address.
bashcurl -s -X POST \ "$AGENTWALLEX_BASE_URL/agents/AGENT_ID/deposit" \ -H "X-API-Key: $AGENTWALLEX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "chain": "ethereum" }' | jq
Request body:
| Field | Type | Required | Description | |---|---|---|---| | chain | string | no | Target chain: ethereum, bsc, tron (defaults to ethereum) |
Response:
json{ "agent_id": "AGENT_ID", "chain": "ethereum", "address": "0x..." }
Initiates a transfer from an agent's wallet.
bashcurl -s -X POST \ "$AGENTWALLEX_BASE_URL/agents/AGENT_ID/transfer" \ -H "X-API-Key: $AGENTWALLEX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "amount": "10.00", "to_address": "0xRecipientAddress", "chain": "ethereum", "token": "USDC" }' | jq
Request body:
| Field | Type | Required | Description | |---|---|---|---| | amount | string | yes | Amount to transfer | | to_address | string | yes | Recipient wallet address | | chain | string | no | Target chain (defaults to ethereum) | | token | string | no | Token to transfer: USDC or USDT (defaults to USDC) |
Response:
| Field | Type | Description | |---|---|---| | transaction_id | string | Transaction identifier | | amount | string | Transferred amount | | to_address | string | Recipient address | | chain | string | Blockchain network | | tx_hash | string | On-chain transaction hash (when available) | | status | string | Transaction status |
Retrieves the current status and details of a transaction.
bashcurl -s -X GET \ "$AGENTWALLEX_BASE_URL/transactions/TRANSACTION_ID" \ -H "X-API-Key: $AGENTWALLEX_API_KEY" | jq
Response:
| Field | Type | Description | |---|---|---| | transaction_id | string | Transaction identifier | | status | string | One of: pending, completed, failed, cancelled | | amount | string | Transaction amount | | from_address | string | Sender wallet address | | to_address | string | Recipient wallet address | | token | string | Token symbol (USDC or USDT) | | chain | string | Blockchain network | | tx_hash | string | On-chain transaction hash (when available) | | error_message | string | Error details if status is failed | | confirmed_at | string | ISO 8601 timestamp of confirmation |
Lists transactions with optional filtering. Transactions are read-only.
bashcurl -s -X GET \ "$AGENTWALLEX_BASE_URL/transactions?agent_id=AGENT_ID&status=completed&page_num=1" \ -H "X-API-Key: $AGENTWALLEX_API_KEY" | jq
Query parameters:
| Field | Type | Required | Description | |---|---|---|---| | agent_id | string | no | Filter by agent | | status | string | no | Filter by status | | direction | string | no | Filter by direction: inbound, outbound | | page_num | number | no | Page number (default: 1) | | page_size | number | no | Items per page (default: 20) |
Step 1 — Check the agent's available balance:
bashcurl -s -X GET \ "$AGENTWALLEX_BASE_URL/agents/AGENT_ID/balance" \ -H "X-API-Key: $AGENTWALLEX_API_KEY" | jq '.[0].available'
Step 2 — Transfer funds (only if balance is sufficient):
bashTX=$(curl -s -X POST \ "$AGENTWALLEX_BASE_URL/agents/AGENT_ID/transfer" \ -H "X-API-Key: $AGENTWALLEX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "amount": "10.00", "to_address": "0xRecipientAddress", "chain": "ethereum", "token": "USDC" }') TX_ID=$(echo "$TX" | jq -r '.transaction_id') echo "Transaction ID: $TX_ID"
Step 3 — Check the transaction:
bashcurl -s -X GET \ "$AGENTWALLEX_BASE_URL/transactions?agent_id=AGENT_ID&status=completed" \ -H "X-API-Key: $AGENTWALLEX_API_KEY" | jq '.data[0]'
Step 1 — Create a new agent:
bashAGENT=$(curl -s -X POST \ "$AGENTWALLEX_BASE_URL/agents" \ -H "X-API-Key: $AGENTWALLEX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "agent_name": "payment-bot", "chain": "ethereum", "agent_description": "Handles outbound payments" }') AGENT_ID=$(echo "$AGENT" | jq -r '.agent_id') echo "Agent ID: $AGENT_ID"
Step 2 — Get a deposit address for the new agent:
bashDEPOSIT=$(curl -s -X POST \ "$AGENTWALLEX_BASE_URL/agents/$AGENT_ID/deposit" \ -H "X-API-Key: $AGENTWALLEX_API_KEY" \ -H "Content-Type: application/json" \ -d '{"chain": "ethereum"}') echo "Deposit to: $(echo "$DEPOSIT" | jq -r '.address')"
Step 3 — After funding, check balance and transfer:
bash# Check balance curl -s -X GET \ "$AGENTWALLEX_BASE_URL/agents/$AGENT_ID/balance" \ -H "X-API-Key: $AGENTWALLEX_API_KEY" | jq '.[0].available' # Transfer USDC curl -s -X POST \ "$AGENTWALLEX_BASE_URL/agents/$AGENT_ID/transfer" \ -H "X-API-Key: $AGENTWALLEX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "amount": "10.00", "to_address": "0xRecipientAddress", "chain": "ethereum", "token": "USDC" }' | jq
When using this skill, you MUST follow these rules:
to_address is a non-empty, properly formatted address before creating a transaction.0x and is 42 characters. For Tron: address starts with T and is 34 characters.| HTTP Status | Error Type | Description | Action | |---|---|---|---| | 400 | validation_error | Invalid request parameters | Check request body and fix validation errors | | 401 | authentication_error | Invalid or missing API key | Run agentwallex_setup to reconfigure credentials | | 403 | authorization_error | Insufficient permissions | Check API key scope and agent ownership | | 404 | not_found_error | Resource does not exist | Verify the ID is correct and exists | | 409 | conflict_error | Resource conflict | The resource already exists or has a conflict | | 429 | rate_limit_error | Too many requests | Back off with exponential delay and retry | | 500 | internal_error | Internal server error | Retry after a short delay | | 503 | service_unavailable | Service temporarily unavailable | Retry after a short delay |
| Problem | Solution | |---|---| | "AgentWallex is not configured yet" | Run agentwallex_setup to start the setup flow, then use agentwallex_configure to save credentials. | | "Invalid API key format" | API keys must start with awx_. Get a valid key from the Dashboard. | | Balance shows 0 but funds were deposited | Deposits may take a few minutes to confirm on-chain. Wait and re-query. Also verify you are checking the correct chain. | | Transaction stuck in pending | On-chain confirmation times vary. Poll the transaction status endpoint periodically. If stuck for over 10 minutes, check the chain's block explorer using the tx_hash. | | curl: command not found | Install curl via your system package manager (apt install curl, brew install curl, etc.). | | jq: command not found | Install jq via your system package manager (apt install jq, brew install jq, etc.). |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 4,843 | 15,361 | +217% | 1 | 1 | 0% | 708 | 6,661 | +841% | 0 | 0 | — |
case-02 | fail→pass | 9,786 | 13,969 | +43% | 1 | 1 | 0% | 1,823 | 7,347 | +303% | 0 | 0 | — |
case-03 | fail→pass | 11,050 | 10,781 | -2% | 1 | 1 | 0% | 1,972 | 6,905 | +250% | 0 | 0 | — |
case-04 | fail→pass | 7,053 | 4,579 | -35% | 1 | 1 | 0% | 975 | 5,811 | +496% | 0 | 0 | — |
case-05 | pass→pass | 4,197 | 4,175 | -1% | 1 | 1 | 0% | 700 | 5,799 | +728% | 0 | 0 | — |
case-06 | fail→pass | 10,366 | 3,143 | -70% | 1 | 1 | 0% | 909 | 5,668 | +524% | 0 | 0 | — |
case-07 | fail→pass | 6,308 | 3,071 | -51% | 1 | 1 | 0% | 1,210 | 5,576 | +361% | 0 | 0 | — |
case-08 | fail→pass | 9,606 | 4,143 | -57% | 1 | 1 | 0% | 1,257 | 5,268 | +319% | 0 | 0 | — |
case-09 | pass→pass | 7,929 | 2,312 | -71% | 1 | 1 | 0% | 1,356 | 5,403 | +298% | 0 | 0 | — |
case-10 | fail→pass | 9,746 | 1,847 | -81% | 1 | 1 | 0% | 1,516 | 5,313 | +250% | 0 | 0 | — |
case-11 | pass→pass | 9,312 | 3,948 | -58% | 1 | 1 | 0% | 1,503 | 5,571 | +271% | 0 | 0 | — |
case-12 | fail→fail | 9,083 | 5,013 | -45% | 1 | 1 | 0% | 1,649 | 5,822 | +253% | 0 | 0 | — |
case-13 | pass→pass | 11,859 | 4,537 | -62% | 1 | 1 | 0% | 1,907 | 5,749 | +201% | 0 | 0 | — |
case-14 | pass→pass | 9,759 | 3,604 | -63% | 1 | 1 | 0% | 1,796 | 5,451 | +204% | 0 | 0 | — |
case-15 | pass→pass | 22,478 | 2,221 | -90% | 1 | 1 | 0% | 3,640 | 5,309 | +46% | 0 | 0 | — |
case-16 | pass→pass | 12,941 | 3,183 | -75% | 1 | 1 | 0% | 1,995 | 5,389 | +170% | 0 | 0 | — |
case-17 | fail→pass | 5,173 | 1,472 | -72% | 1 | 1 | 0% | 955 | 5,236 | +448% | 0 | 0 | — |
case-18 | pass→pass | 10,095 | 4,422 | -56% | 1 | 1 | 0% | 1,676 | 5,805 | +246% | 0 | 0 | — |
case-19 | pass→pass | 9,570 | 4,399 | -54% | 1 | 1 | 0% | 1,547 | 5,462 | +253% | 0 | 0 | — |
case-20 | pass→pass | 11,463 | 9,079 | -21% | 1 | 1 | 0% | 2,588 | 6,891 | +166% | 0 | 0 | — |
case-21 | pass→fail | 9,993 | 13,998 | +40% | 1 | 1 | 0% | 1,728 | 7,215 | +318% | 0 | 0 | — |
case-22 | pass→pass | 17,665 | 7,576 | -57% | 1 | 1 | 0% | 2,942 | 6,320 | +115% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +36 percentage points is the difference between those two pass rates over the 21 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.