OpenclawCash Agent API
Interact with OpenclawCash-managed wallets to send native assets and tokens, check balances, and execute agent-safe wallet operations across EVM and Solana networks.
Requirements
- Required env var:
AGENTWALLETAPI_KEY
- Optional env var:
AGENTWALLETAPI_URL (default: https://openclawcash.com)
- Required local binary:
curl
- Optional local binary:
jq (for pretty JSON output in CLI)
- Network access required:
https://openclawcash.com
Preferred Integration Path
Safety Model
- Start with read-only calls (
wallets, wallet, balance, tokens) on testnets first.
- High-risk actions are gated:
- API key permissions in dashboard (
allowWalletCreation, allowWalletImport)
- Explicit CLI confirmation (
--yes) for write actions
- Agents should establish an approval mode early in the session for write actions:
confirm_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.
- For
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.
- Ask again only if:
- the user revokes or changes approval mode
- the session is restarted or memory is lost
- the action is outside the scope the user approved
- the agent is unsure which wallet, token, amount, destination, spender, or chain is intended
- If the user gives only a broad instruction like "go ahead" but execution details are still missing, gather the missing details first instead of repeating a generic permission request.
Setup
- Run the setup script to create your
.env file:bash scripts/setup.sh
- Edit the
.env file in this skill folder and replace the placeholder with your real API key:AGENTWALLETAPI_KEY=occ_your_api_key
- Get your API key at https://openclawcash.com (sign up, create a wallet, go to API Keys page).
Legacy CLI Fallback
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 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
# 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
Import Input Safety
- Wallet import is optional and not required for normal wallet operations (list, balance, transfer, swap).
- Import works only when the user explicitly enables API key permission
allowWalletImport in dashboard settings.
- Import execution requires explicit confirmation in the CLI (
--yes for automation, or interactive YES prompt).
- Avoid passing sensitive inputs as CLI arguments when possible (shell history/process logs risk).
- Preferred options:
- Interactive hidden prompt: omit the private key argument.
- Automation: pass
- and pipe input via stdin.
Base URL
https://openclawcash.com
Troubleshooting
If requests fail because of host/URL issues, use this recovery flow:
- Open
agentwalletapi/.env and verify AGENTWALLETAPI_KEY is set and has no extra spaces.
- If the API host is wrong or unreachable, set this in the same
.env file:AGENTWALLETAPI_URL=https://openclawcash.com
- Retry a simple read call first:
bash scripts/agentwalletapi.sh wallets
- If it still fails, report the exact error and stop before attempting transfer/swap actions.
Authentication
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 Surfaces
- Agent API (API key auth):
/api/agent/*
- Authenticate with
X-Agent-Key
- Used for autonomous agent execution (wallets list/create/import, transactions, balance, transfer, swap, quote, approve)
- Dashboard/User API (session auth):
/api/wallets/*
- Authenticate with bearer token or
aw_session cookie
- Used for user-managed dashboard operations (including wallet import and wallet creation).
- Dashboard wallet creation now requires
exportPassphrase (minimum 12 characters).
- Private-key export requires
exportPassphrase and is protected by rate limits and temporary lockouts.
Workflow
GET /api/agent/wallets - Discover available wallets (id, label, address, network, chain). Optional ?includeBalances=true adds native balance + nativeSymbol
GET /api/agent/wallet?walletId=... or ?walletLabel=... or ?walletAddress=... - Fetch one wallet with native/token balances
- Optional wallet lifecycle actions:
POST /api/agent/wallets/create - Create a new wallet under API-key policy controls
POST /api/agent/wallets/import - Import a mainnet or solana-mainnet wallet under API-key policy controls
GET /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)
POST /api/agent/swap - Execute token swap on Uniswap (EVM) or Jupiter (Solana mainnet)
POST /api/agent/transfer - Send native coin or token on the wallet's chain (optional chain guard)
- Use returned
txHash values to confirm transactions
Approval Handling For Agents
Use this pattern for write actions:
- At the first write-intent in a session, ask one short onboarding question:
- "Do you want approval for every write action, or should I operate on your behalf for this session?"
- Store the chosen mode in conversation memory.
- If the mode is
confirm_each_write:
- ask for approval before each transfer, swap, approval, import, or wallet creation
- after approval, execute with the MCP write tool or the legacy CLI fallback with
--yes
- If the mode is
operate_on_my_behalf:
- do not ask again for each transfer
- when the user later says things like "send X to Y" or "swap A for B", execute with the MCP write tool or the legacy CLI fallback with
--yes once the needed details are clear
- In either mode:
- if execution details are missing, ask only for the missing details
- if the user changes modes or revokes permission, update memory and follow the new rule
Recommended onboarding wording:
- "Choose write approval mode for this session:
confirm_each_write or operate_on_my_behalf."
Example:
Quick Reference
| 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/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) |
/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/approve |
POST |
Yes |
Approve spender for ERC-20 token (EVM only) |
Agent Wallet Create/Import (Agent API)
Agent-side wallet lifecycle endpoints:
POST /api/agent/wallets/create
POST /api/agent/wallets/import
Behavior notes:
- Both require
X-Agent-Key.
- Both are gated by API key permissions configured in dashboard:
allowWalletCreation for create
allowWalletImport for import
- Both are rate-limited per API key. Exceeding the limit returns
429 with Retry-After.
- Agent import supports
mainnet and solana-mainnet.
- Agent wallet create requires:
exportPassphrase (minimum 12 characters)
exportPassphraseStorageType
exportPassphraseStorageRef
confirmExportPassphraseSaved: true
- Agent-safe create sequence:
- Save export passphrase in secure storage first.
- Prefer env-backed storage for local agents.
- Record the storage location you used.
- Then call
POST /api/agent/wallets/create with:
- the passphrase
exportPassphraseStorageType
exportPassphraseStorageRef
confirmExportPassphraseSaved: true
- For MCP and the legacy CLI fallback, env-backed storage is the strongest path because the local tool can verify the env var exists before wallet creation.
Transfer Examples
Send native coin (default when no token specified):
{ "walletId": "Q7X2K9P", "to": "0xRecipient...", "amount": "0.01" }
Send 100 USDC by symbol:
{ "walletLabel": "Trading Bot", "to": "0xRecipient...", "token": "USDC", "amount": "100" }
Send arbitrary ERC-20 by contract address:
{ "walletId": "Q7X2K9P", "to": "0xRecipient...", "token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", "amount": "100" }
Send SOL by symbol:
{ "walletId": "Q7X2K9P", "to": "SolanaRecipientWalletAddress...", "token": "SOL", "amount": "0.01" }
Send SOL with memo (Solana only):
{ "walletId": "Q7X2K9P", "to": "SolanaRecipientWalletAddress...", "token": "SOL", "amount": "0.01", "memo": "payment verification note" }
Use amount for human-readable values (e.g., "100" = 100 USDC). Use value for base units (smallest denomination on each chain).
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 requestedValue, adjustedValue, requestedAmount, and adjustedAmount.
Token Support Model
GET /api/agent/supported-tokens returns recommended common, well-known tokens plus guidance fields.
- EVM transfer/swap/balance endpoints support any valid ERC-20 token contract address.
- Solana transfer/balance endpoints support any valid SPL mint address.
- Native tokens appear as
ETH on EVM and SOL on Solana (with chain-specific native token IDs in balance payloads).
Error Codes
- 200: Success
- 400: Invalid input, insufficient funds, unknown token, or policy violation
- 400
chain_mismatch: requested chain does not match the selected wallet
- 400
amount_below_min_transfer: requested native transfer is below minimum transferable amount after fee/network preflight
- 400
insufficient_balance: requested transfer + fees exceed available balance
- 401: Missing/invalid API key
- 404: Wallet not found
- 500: Internal error (retry with corrected payload or reduced amount)
Policy Constraints
Wallets may have governance policies:
- Whitelist: Only transfers to pre-approved addresses allowed
- Spending Limit: Max value per transaction (configured per wallet policy)
Violations return HTTP 401 with an explanation message.
Important Notes
- All POST requests require
Content-Type: application/json
- EVM token transfers require ETH in the wallet for gas fees
- Solana token transfers require SOL in the wallet for fees
- Solana transfer memos are optional and Solana-only: max 5 words, max 256 UTF-8 bytes, no control/invisible characters
- Solana native transfers account for network fee and can auto-adjust requested transfer amount
- Native transfers may return
400 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)
- If requested native SOL + platform fee + network fee cannot fit wallet balance, API returns
400 insufficient_balance
- Swap supports EVM (Uniswap) and Solana mainnet (Jupiter); Quote supports EVM and Solana mainnet; Approve is EVM-only
- A platform fee (default 1%) is deducted from the token amount
- Use
amount for simplicity, use value for precise base-unit control
- For robust agent behavior:
- First call
wallets, then wallet (or token-balance), then quote, then swap.
- On 400 with
insufficient_token_balance, reduce amount or change token.
- The
.env file in this skill folder stores your API key — never commit it to version control
File Structure
agentwalletapi/
├── 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.
1---2name: agentwalletapi3description: OpenclawCash crypto wallet API for AI agents. Use when an agent needs to send native or token transfers, check balances, list wallets, or interact with EVM and Solana wallets programmatically via OpenclawCash.4license: Proprietary5---6
7# OpenclawCash Agent API
8
9Interact with OpenclawCash-managed wallets to send native assets and tokens, check balances, and execute agent-safe wallet operations across EVM and Solana networks.
10
11## Requirements
12
13- Required env var: `AGENTWALLETAPI_KEY`
14- Optional env var: `AGENTWALLETAPI_URL` (default: `https://openclawcash.com`)
15- Required local binary: `curl`
16- Optional local binary: `jq` (for pretty JSON output in CLI)
17- Network access required: `https://openclawcash.com`
18
19## Preferred Integration Path
20
21- If the client supports MCP, prefer the public OpenClawCash MCP server:
22 ```bash
23 npx -y @openclawcash/mcp-server
24 ```
25- Use MCP as the primary execution path because tools, schemas, and results are structured for the client.
26- Use the included CLI script only as a fallback when MCP is unavailable or the client cannot attach MCP servers.
27- MCP and the CLI script target the same underlying OpenClawCash agent API. They are two access paths, not two different products.
28
29## Safety Model
30
31- Start with read-only calls (`wallets`, `wallet`, `balance`, `tokens`) on testnets first.
32- High-risk actions are gated:
33 - API key permissions in dashboard (`allowWalletCreation`, `allowWalletImport`)
34 - Explicit CLI confirmation (`--yes`) for write actions
35- Agents should establish an approval mode early in the session for write actions:
36 - `confirm_each_write`: ask before every write action.
37 - `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.
38- For `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`.
39- Ask again only if:
40 - the user revokes or changes approval mode
41 - the session is restarted or memory is lost
42 - the action is outside the scope the user approved
43 - the agent is unsure which wallet, token, amount, destination, spender, or chain is intended
44- If the user gives only a broad instruction like "go ahead" but execution details are still missing, gather the missing details first instead of repeating a generic permission request.
45
46## Setup
47
481. Run the setup script to create your `.env` file:
49 ```
50 bash scripts/setup.sh
51 ```
522. Edit the `.env` file in this skill folder and replace the placeholder with your real API key:
53 ```
54 AGENTWALLETAPI_KEY=occ_your_api_key
55 ```
563. Get your API key at https://openclawcash.com (sign up, create a wallet, go to API Keys page).
57
58## Legacy CLI Fallback
59
60If MCP is unavailable, use the included tool script to make API calls directly:
61
62```bash
63# Read-only (recommended first)
64bash scripts/agentwalletapi.sh wallets
65bash scripts/agentwalletapi.sh wallet Q7X2K9P
66bash scripts/agentwalletapi.sh wallet "Trading Bot"
67bash scripts/agentwalletapi.sh balance Q7X2K9P
68bash scripts/agentwalletapi.sh transactions Q7X2K9P
69bash scripts/agentwalletapi.sh tokens mainnet
70
71# Write actions (require explicit --yes)
72export WALLET_EXPORT_PASSPHRASE_OPS='your-strong-passphrase'
73bash scripts/agentwalletapi.sh create "Ops Wallet" sepolia WALLET_EXPORT_PASSPHRASE_OPS --yes
74bash scripts/agentwalletapi.sh import "Treasury Imported" mainnet --yes
75# Automation-safe import: read private key from stdin instead of command args
76printf '%s' '<private_key>' | bash scripts/agentwalletapi.sh import "Treasury Imported" mainnet - --yes
77bash scripts/agentwalletapi.sh transfer Q7X2K9P 0xRecipient 0.01 --yes
78bash scripts/agentwalletapi.sh transfer Q7X2K9P 0xRecipient 100 USDC --yes
79bash scripts/agentwalletapi.sh quote mainnet WETH USDC 10000000000000000
80bash scripts/agentwalletapi.sh quote solana-mainnet SOL USDC 10000000 solana
81bash scripts/agentwalletapi.sh swap Q7X2K9P WETH USDC 10000000000000000 0.5 --yes
82```
83
84### Import Input Safety
85
86- Wallet import is optional and not required for normal wallet operations (list, balance, transfer, swap).
87- Import works only when the user explicitly enables API key permission `allowWalletImport` in dashboard settings.
88- Import execution requires explicit confirmation in the CLI (`--yes` for automation, or interactive `YES` prompt).
89- Avoid passing sensitive inputs as CLI arguments when possible (shell history/process logs risk).
90- Preferred options:
91 - Interactive hidden prompt: omit the private key argument.
92 - Automation: pass `-` and pipe input via stdin.
93
94## Base URL
95
96```
97https://openclawcash.com
98```
99
100## Troubleshooting
101
102If requests fail because of host/URL issues, use this recovery flow:
103
1041. Open `agentwalletapi/.env` and verify `AGENTWALLETAPI_KEY` is set and has no extra spaces.
1052. If the API host is wrong or unreachable, set this in the same `.env` file:
106 ```
107 AGENTWALLETAPI_URL=https://openclawcash.com
108 ```
1093. Retry a simple read call first:
110 ```bash
111 bash scripts/agentwalletapi.sh wallets
112 ```
1134. If it still fails, report the exact error and stop before attempting transfer/swap actions.
114
115## Authentication
116
117The API key is loaded from the `.env` file in this skill folder. For direct HTTP calls, include it as a header:
118
119```
120X-Agent-Key: occ_your_api_key
121Content-Type: application/json
122```
123
124## API Surfaces
125
126- **Agent API (API key auth):** `/api/agent/*`
127 - Authenticate with `X-Agent-Key`
128 - Used for autonomous agent execution (wallets list/create/import, transactions, balance, transfer, swap, quote, approve)
129- **Dashboard/User API (session auth):** `/api/wallets/*`
130 - Authenticate with bearer token or `aw_session` cookie
131 - Used for user-managed dashboard operations (including wallet import and wallet creation).
132 - Dashboard wallet creation now requires `exportPassphrase` (minimum 12 characters).
133 - Private-key export requires `exportPassphrase` and is protected by rate limits and temporary lockouts.
134
135## Workflow
136
1371. `GET /api/agent/wallets` - Discover available wallets (id, label, address, network, chain). Optional `?includeBalances=true` adds native `balance` + `nativeSymbol`
1382. `GET /api/agent/wallet?walletId=...` or `?walletLabel=...` or `?walletAddress=...` - Fetch one wallet with native/token balances
1393. Optional wallet lifecycle actions:
140 - `POST /api/agent/wallets/create` - Create a new wallet under API-key policy controls
141 - `POST /api/agent/wallets/import` - Import a `mainnet` or `solana-mainnet` wallet under API-key policy controls
1424. `GET /api/agent/transactions?walletId=...` (or `walletLabel`/`walletAddress`) - Read merged wallet transaction history (on-chain + app-recorded)
1435. `GET /api/agent/supported-tokens?network=...` or `?chain=evm|solana` - Get recommended common, well-known token list + guidance (requires `X-Agent-Key`)
1446. `POST /api/agent/token-balance` - Check wallet balances (native + token balances; specific token by symbol/address supported)
1457. `POST /api/agent/quote` - Get a swap quote before execution on Uniswap (EVM) or Jupiter (Solana mainnet)
1468. `POST /api/agent/swap` - Execute token swap on Uniswap (EVM) or Jupiter (Solana mainnet)
1479. `POST /api/agent/transfer` - Send native coin or token on the wallet's chain (optional `chain` guard)
14810. Use returned `txHash` values to confirm transactions
149
150### Approval Handling For Agents
151
152Use this pattern for write actions:
153
1541. At the first write-intent in a session, ask one short onboarding question:
155 - "Do you want approval for every write action, or should I operate on your behalf for this session?"
1562. Store the chosen mode in conversation memory.
1573. If the mode is `confirm_each_write`:
158 - ask for approval before each transfer, swap, approval, import, or wallet creation
159 - after approval, execute with the MCP write tool or the legacy CLI fallback with `--yes`
1604. If the mode is `operate_on_my_behalf`:
161 - do not ask again for each transfer
162 - when the user later says things like "send X to Y" or "swap A for B", execute with the MCP write tool or the legacy CLI fallback with `--yes` once the needed details are clear
1635. In either mode:
164 - if execution details are missing, ask only for the missing details
165 - if the user changes modes or revokes permission, update memory and follow the new rule
166
167Recommended onboarding wording:
168
169- "Choose write approval mode for this session: `confirm_each_write` or `operate_on_my_behalf`."
170
171Example:
172
173- User selects: `operate_on_my_behalf`
174- Later user message: "Send 100 USDC from wallet Q7X2K9P to 0xabc... on Ethereum."
175- If MCP is available, the agent should call the matching MCP write tool directly.
176- If MCP is not available, the agent should execute:
177 ```bash
178 bash scripts/agentwalletapi.sh transfer Q7X2K9P 0xabc... 100 USDC evm --yes
179 ```
180- The agent should not ask for transfer permission again in that same session unless the user revokes the mode or the instruction is ambiguous.
181
182## Quick Reference
183
184| Endpoint | Method | Auth | Purpose |
185|---|---|---|---|
186| `/api/agent/wallets` | GET | Yes | List wallets (discovery; optional `includeBalances=true` for native balances) |
187| `/api/agent/wallet` | GET | Yes | Get one wallet detail with native/token balances |
188| `/api/agent/wallets/create` | POST | Yes | Create a new API-key-managed wallet |
189| `/api/agent/wallets/import` | POST | Yes | Import a mainnet/solana-mainnet wallet via API key |
190| `/api/agent/transactions` | GET | Yes | List per-wallet transaction history |
191| `/api/agent/transfer` | POST | Yes | Send native/token transfers (EVM + Solana) |
192| `/api/agent/swap` | POST | Yes | Execute DEX swap (Uniswap on EVM, Jupiter on Solana mainnet) |
193| `/api/agent/quote` | POST | Yes | Get swap quotes (Uniswap on EVM, Jupiter on Solana mainnet) |
194| `/api/agent/token-balance` | POST | Yes | Check balances |
195| `/api/agent/supported-tokens` | GET | Yes | List recommended common, well-known tokens per network |
196| `/api/agent/approve` | POST | Yes | Approve spender for ERC-20 token (EVM only) |
197
198## Agent Wallet Create/Import (Agent API)
199
200Agent-side wallet lifecycle endpoints:
201
202- `POST /api/agent/wallets/create`
203- `POST /api/agent/wallets/import`
204
205Behavior notes:
206- Both require `X-Agent-Key`.
207- Both are gated by API key permissions configured in dashboard:
208 - `allowWalletCreation` for create
209 - `allowWalletImport` for import
210- Both are rate-limited per API key. Exceeding the limit returns `429` with `Retry-After`.
211- Agent import supports `mainnet` and `solana-mainnet`.
212- Agent wallet create requires:
213 - `exportPassphrase` (minimum 12 characters)
214 - `exportPassphraseStorageType`
215 - `exportPassphraseStorageRef`
216 - `confirmExportPassphraseSaved: true`
217- Agent-safe create sequence:
218 - Save export passphrase in secure storage first.
219 - Prefer env-backed storage for local agents.
220 - Record the storage location you used.
221 - Then call `POST /api/agent/wallets/create` with:
222 - the passphrase
223 - `exportPassphraseStorageType`
224 - `exportPassphraseStorageRef`
225 - `confirmExportPassphraseSaved: true`
226 - For MCP and the legacy CLI fallback, env-backed storage is the strongest path because the local tool can verify the env var exists before wallet creation.
227
228## Transfer Examples
229
230Send native coin (default when no token specified):
231```json
232{ "walletId": "Q7X2K9P", "to": "0xRecipient...", "amount": "0.01" }
233```
234
235Send 100 USDC by symbol:
236```json
237{ "walletLabel": "Trading Bot", "to": "0xRecipient...", "token": "USDC", "amount": "100" }
238```
239
240Send arbitrary ERC-20 by contract address:
241```json
242{ "walletId": "Q7X2K9P", "to": "0xRecipient...", "token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", "amount": "100" }
243```
244
245Send SOL by symbol:
246```json
247{ "walletId": "Q7X2K9P", "to": "SolanaRecipientWalletAddress...", "token": "SOL", "amount": "0.01" }
248```
249
250Send SOL with memo (Solana only):
251```json
252{ "walletId": "Q7X2K9P", "to": "SolanaRecipientWalletAddress...", "token": "SOL", "amount": "0.01", "memo": "payment verification note" }
253```
254
255Use `amount` for human-readable values (e.g., "100" = 100 USDC). Use `value` for base units (smallest denomination on each chain).
256Use optional `chain: "evm" | "solana"` in agent payloads for explicit chain routing and validation.
257`memo` is supported only for Solana transfers and must pass safety validation (max 5 words, max 256 UTF-8 bytes, no control/invisible characters).
258Native 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.
259For native SOL transfers, the API may auto-adjust requested value to fit platform fee + network fee.
260Transfer responses include `requestedValue`, `adjustedValue`, `requestedAmount`, and `adjustedAmount`.
261
262## Token Support Model
263
264- `GET /api/agent/supported-tokens` returns recommended common, well-known tokens plus guidance fields.
265- EVM transfer/swap/balance endpoints support **any valid ERC-20 token contract address**.
266- Solana transfer/balance endpoints support **any valid SPL mint address**.
267- Native tokens appear as `ETH` on EVM and `SOL` on Solana (with chain-specific native token IDs in balance payloads).
268
269## Error Codes
270
271- 200: Success
272- 400: Invalid input, insufficient funds, unknown token, or policy violation
273- 400 `chain_mismatch`: requested `chain` does not match the selected wallet
274- 400 `amount_below_min_transfer`: requested native transfer is below minimum transferable amount after fee/network preflight
275- 400 `insufficient_balance`: requested transfer + fees exceed available balance
276- 401: Missing/invalid API key
277- 404: Wallet not found
278- 500: Internal error (retry with corrected payload or reduced amount)
279
280## Policy Constraints
281
282Wallets may have governance policies:
283- **Whitelist**: Only transfers to pre-approved addresses allowed
284- **Spending Limit**: Max value per transaction (configured per wallet policy)
285
286Violations return HTTP 401 with an explanation message.
287
288## Important Notes
289
290- All POST requests require `Content-Type: application/json`
291- EVM token transfers require ETH in the wallet for gas fees
292- Solana token transfers require SOL in the wallet for fees
293- Solana transfer memos are optional and Solana-only: max 5 words, max 256 UTF-8 bytes, no control/invisible characters
294- Solana native transfers account for network fee and can auto-adjust requested transfer amount
295- Native transfers may return `400 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)
296- If requested native SOL + platform fee + network fee cannot fit wallet balance, API returns `400 insufficient_balance`
297- Swap supports EVM (Uniswap) and Solana mainnet (Jupiter); Quote supports EVM and Solana mainnet; Approve is EVM-only
298- A platform fee (default 1%) is deducted from the token amount
299- Use `amount` for simplicity, use `value` for precise base-unit control
300- For robust agent behavior:
301 - First call `wallets`, then `wallet` (or `token-balance`), then `quote`, then `swap`.
302 - On 400 with `insufficient_token_balance`, reduce amount or change token.
303- The `.env` file in this skill folder stores your API key — never commit it to version control
304
305## File Structure
306
307```
308agentwalletapi/
309├── SKILL.md # This file
310├── .env # Your API key (created by setup.sh)
311├── scripts/
312│ ├── setup.sh # Creates .env with API key placeholder
313│ └── agentwalletapi.sh # CLI tool for making API calls
314└── references/
315 └── api-endpoints.md # Full endpoint documentation
316```
317
318See [references/api-endpoints.md](references/api-endpoints.md) for full endpoint details with request/response examples.