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
| 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.). |
Other measured skills in the registry, with their headline benchmark lift.