Elsa x402 API
v1.0.0DeFi tools for portfolio analysis, token search, and swap execution via Elsa API with x402 micropayments
Like a lobster shell, security has layers — review code before you run it.
License
Runtime requirements
SKILL.md
Elsa x402 DeFi Tools
This skill provides access to the Elsa DeFi API for portfolio management, token analysis, and swap execution using x402 micropayments.
Standard Operating Procedure
Budget Controls
- Maximum $0.05 per API call (configurable)
- Maximum $2.00 per day (configurable)
- Maximum 30 calls per minute rate limit
- Daily budget resets at midnight in configured timezone (default: UTC)
Recommended Swap Flow (OpenClaw)
When executing swaps, follow this 4-step flow:
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────┐ ┌─────────────────────┐
│ 1. Get Quote │ ──▶ │ 2. Dry Run │ ──▶ │ 3. Confirm │ ──▶ │ 4. Execute Pipeline │
│ elsa_get_swap_quote │ │ elsa_execute_swap_ │ │ [User says │ │ elsa_pipeline_run_ │
│ │ │ dry_run │ │ "yes"] │ │ and_wait │
└─────────────────────┘ └─────────────────────┘ └─────────────┘ └─────────────────────┘
Step 1: Get Quote - Show user what they'll receive
npx tsx scripts/index.ts elsa_get_swap_quote '{
"from_chain": "base", "from_token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"from_amount": "10", "to_chain": "base", "to_token": "0x4200000000000000000000000000000000000006",
"wallet_address": "0x...", "slippage": 0.5
}'
Step 2: Dry Run - Create pipeline, get pipeline_id
npx tsx scripts/index.ts elsa_execute_swap_dry_run '{...same params...}'
# Returns: { "pipeline_id": "abc-123", "confirmation_token": "..." }
Step 3: User Confirmation - Present results and wait for explicit "yes"
Step 4: Execute Pipeline - Sign and broadcast transactions
ELSA_ENABLE_EXECUTION_TOOLS=true npx tsx scripts/index.ts elsa_pipeline_run_and_wait '{
"pipeline_id": "abc-123",
"timeout_seconds": 180,
"poll_interval_seconds": 3,
"mode": "local_signer"
}'
# Automatically: signs approve tx → submits → signs swap tx → submits → returns tx hashes
Required Environment Variables
# For x402 API payments
PAYMENT_PRIVATE_KEY=0x...
# For signing swap transactions (optional - falls back to PAYMENT_PRIVATE_KEY)
TRADE_PRIVATE_KEY=0x...
# Enable execution tools
ELSA_ENABLE_EXECUTION_TOOLS=true
Critical Rules
- NEVER execute swaps without showing the user the quote first
- NEVER call execution tools in a loop
- NEVER proceed if budget limits are exceeded
- ALWAYS check
elsa_budget_statusif unsure about remaining budget - ALWAYS use dry-run mode first for any swap operation
Tool Catalog
Read-Only Tools (Always Available)
elsa_search_token
Search for tokens across supported blockchains.
npx tsx scripts/index.ts elsa_search_token '{"query": "USDC", "limit": 5}'
Input:
query(string, required): Token name, symbol, or addresslimit(number, optional): Max results (default: 10)
elsa_get_token_price
Get current price for a token.
npx tsx scripts/index.ts elsa_get_token_price '{"token_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "chain": "base"}'
Input:
token_address(string, required): Token contract addresschain(string, optional): Chain name (default: "base")
elsa_get_balances
Get token balances for a wallet.
npx tsx scripts/index.ts elsa_get_balances '{"wallet_address": "0x..."}'
Input:
wallet_address(string, required): Wallet address to query
elsa_get_portfolio
Get comprehensive portfolio analysis.
npx tsx scripts/index.ts elsa_get_portfolio '{"wallet_address": "0x..."}'
Input:
wallet_address(string, required): Wallet address to analyze
elsa_analyze_wallet
Get wallet behavior and risk assessment.
npx tsx scripts/index.ts elsa_analyze_wallet '{"wallet_address": "0x..."}'
Input:
wallet_address(string, required): Wallet address to analyze
elsa_get_swap_quote
Get a swap quote with optimal routing.
npx tsx scripts/index.ts elsa_get_swap_quote '{
"from_chain": "base",
"from_token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"from_amount": "100",
"to_chain": "base",
"to_token": "0x4200000000000000000000000000000000000006",
"wallet_address": "0x...",
"slippage": 0.5
}'
Input:
from_chain(string, required): Source chainfrom_token(string, required): Source token addressfrom_amount(string, required): Amount to swapto_chain(string, required): Destination chainto_token(string, required): Destination token addresswallet_address(string, required): Wallet addressslippage(number, required): Slippage tolerance (0-50)
elsa_execute_swap_dry_run
Simulate a swap without execution. Returns a confirmation token for subsequent confirmed execution.
npx tsx scripts/index.ts elsa_execute_swap_dry_run '{
"from_chain": "base",
"from_token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"from_amount": "100",
"to_chain": "base",
"to_token": "0x4200000000000000000000000000000000000006",
"wallet_address": "0x...",
"slippage": 0.5
}'
Output includes:
- Swap simulation results
confirmation_token(if ELSA_REQUIRE_CONFIRMATION_TOKEN=true)- Token expires after ELSA_CONFIRMATION_TTL_SECONDS
elsa_budget_status
Check current budget usage and remaining limits.
npx tsx scripts/index.ts elsa_budget_status '{}'
Output:
spent_today_usd: Amount spent todayremaining_today_usd: Remaining daily budgetcalls_last_minute: Recent call countlast_calls: Recent call details
elsa_get_limit_orders
Get all limit orders for a wallet.
npx tsx scripts/index.ts elsa_get_limit_orders '{"wallet_address": "0x...", "chain": "base"}'
Input:
wallet_address(string, required): Wallet address to querychain(string, optional): Chain name (default: "base")
Output:
orders: Array of limit orders with status, prices, and expiry
elsa_get_perp_positions
Get perpetual positions for a wallet.
npx tsx scripts/index.ts elsa_get_perp_positions '{"wallet_address": "0x..."}'
Input:
wallet_address(string, required): Wallet address to query
Output:
positions: Array of open perp positions with PnL, leverage, and liquidation pricestotal_unrealized_pnl: Sum of unrealized profits/lossestotal_margin: Total margin used
elsa_get_transaction_history
Get transaction history for a wallet.
npx tsx scripts/index.ts elsa_get_transaction_history '{"wallet_address": "0x...", "chain": "base", "limit": 20}'
Input:
wallet_address(string, required): Wallet address to querychain(string, optional): Filter by chainlimit(number, optional): Max results (default: 20, max: 100)
Output:
transactions: Array of transactions with details, token transfers, and status
Execution Tools (Requires ELSA_ENABLE_EXECUTION_TOOLS=true)
elsa_execute_swap_confirmed
Execute a confirmed swap. Requires prior dry-run and confirmation token.
npx tsx scripts/index.ts elsa_execute_swap_confirmed '{
"from_chain": "base",
"from_token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"from_amount": "100",
"to_chain": "base",
"to_token": "0x4200000000000000000000000000000000000006",
"wallet_address": "0x...",
"slippage": 0.5,
"confirmation_token": "abc123..."
}'
elsa_pipeline_get_status
Check status of a pipeline/transaction.
npx tsx scripts/index.ts elsa_pipeline_get_status '{"pipeline_id": "pip_123456789"}'
elsa_pipeline_submit_tx_hash
Submit a signed transaction hash to the pipeline.
npx tsx scripts/index.ts elsa_pipeline_submit_tx_hash '{"task_id": "task_123", "tx_hash": "0x..."}'
elsa_pipeline_run_and_wait
Orchestrate full pipeline execution with automatic signing and submission.
npx tsx scripts/index.ts elsa_pipeline_run_and_wait '{
"pipeline_id": "pip_123456789",
"timeout_seconds": 120,
"poll_interval_seconds": 2,
"mode": "local_signer"
}'
Modes:
local_signer: Signs and broadcasts transactions using TRADE_PRIVATE_KEYexternal_signer: Returns unsigned tx_data for external signing
elsa_create_limit_order
Create a limit order to execute when price reaches target.
ELSA_ENABLE_EXECUTION_TOOLS=true npx tsx scripts/index.ts elsa_create_limit_order '{
"wallet_address": "0x...",
"chain": "base",
"from_token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"to_token": "0x4200000000000000000000000000000000000006",
"from_amount": "100",
"limit_price": "0.0004",
"expiry_hours": 24
}'
Input:
wallet_address(string, required): Wallet addresschain(string, required): Chain namefrom_token(string, required): Token to sellto_token(string, required): Token to buyfrom_amount(string, required): Amount to selllimit_price(string, required): Target price to trigger executionexpiry_hours(number, optional): Hours until order expires (default: 24, max: 720)
elsa_cancel_limit_order
Cancel an existing limit order.
ELSA_ENABLE_EXECUTION_TOOLS=true npx tsx scripts/index.ts elsa_cancel_limit_order '{
"wallet_address": "0x...",
"order_id": "order_123",
"chain": "base"
}'
Input:
wallet_address(string, required): Wallet addressorder_id(string, required): Order ID to cancelchain(string, optional): Chain name (default: "base")
elsa_open_perp_position
Open a perpetual futures position.
ELSA_ENABLE_EXECUTION_TOOLS=true npx tsx scripts/index.ts elsa_open_perp_position '{
"wallet_address": "0x...",
"market": "ETH-USD",
"side": "long",
"size_usd": "100",
"leverage": 5,
"take_profit": "4000",
"stop_loss": "2800"
}'
Input:
wallet_address(string, required): Wallet addressmarket(string, required): Market pair (e.g., "ETH-USD", "BTC-USD")side(enum, required): "long" or "short"size_usd(string, required): Position size in USDleverage(number, optional): Leverage multiplier (default: 1, max: 100)take_profit(string, optional): Take profit pricestop_loss(string, optional): Stop loss price
elsa_close_perp_position
Close an open perpetual position.
ELSA_ENABLE_EXECUTION_TOOLS=true npx tsx scripts/index.ts elsa_close_perp_position '{
"wallet_address": "0x...",
"position_id": "pos_123",
"close_percentage": 100
}'
Input:
wallet_address(string, required): Wallet addressposition_id(string, required): Position ID to closeclose_percentage(number, optional): Percentage to close (default: 100, range: 1-100)
Supported Chains
- base (default)
- ethereum
- arbitrum
- optimism
- polygon
- bsc
- avalanche
- zksync
API Costs
| Tool | Estimated Cost |
|---|---|
| elsa_search_token | $0.002 |
| elsa_get_token_price | $0.002 |
| elsa_get_balances | $0.002 |
| elsa_get_portfolio | $0.002 |
| elsa_analyze_wallet | $0.005 |
| elsa_get_swap_quote | $0.002 |
| elsa_execute_swap_dry_run | $0.005 |
| elsa_get_limit_orders | $0.002 |
| elsa_get_perp_positions | $0.002 |
| elsa_get_transaction_history | $0.002 |
| elsa_create_limit_order | $0.05 |
| elsa_cancel_limit_order | $0.01 |
| elsa_open_perp_position | $0.05 |
| elsa_close_perp_position | $0.05 |
| elsa_execute_swap_confirmed | $0.05 |
Coming Soon
- Polymarket APIs - Prediction market trading and data
Files
20 totalComments
Loading comments…
