Loading...
Loading...
Interpreted crypto wallet data for AI agents. Use when an agent needs portfolio values, token positions, DeFi positions, NFT holdings, transaction history, PnL data, token prices, charts, gas prices, swap quotes, or DApp information across 41+ chains. Zerion transforms raw blockchain data into agent-ready JSON with USD values, protocol labels, and enriched metadata. Supports x402 pay-per-request ($0.01 USDC on Base) and API key access. Triggers on mentions of portfolio, wallet analysis, positions, transactions, PnL, profit/loss, DeFi, token balances, NFTs, swap quotes, gas prices, or Zerion.
npx skill4agent add bankrbot/skills zeriongroup_idZerion (Research) Bankr (Execute)
───────────────── ────────────────
Portfolio analysis → Rebalance trades
PnL tracking → Stop-loss orders
Position monitoring → Take-profit orders
Whale watching → Copy trades
Swap quotes → Execute best route
NFT floor tracking → Buy/sell NFTsnpm install -g zerion-cli
# Set API key
export ZERION_API_KEY="zk_..."
# Or use x402 (no key needed)
zerion-cli wallet portfolio 0x... --x402
# Commands
zerion-cli wallet portfolio <address> # Total USD value
zerion-cli wallet positions <address> # All token positions
zerion-cli wallet transactions <address> # Transaction history
zerion-cli wallet pnl <address> # Profit & loss
zerion-cli wallet analyze <address> # Full analysis
zerion-cli chains list # Supported chainscurl "https://api.zerion.io/v1/wallets/0x.../portfolio?currency=usd" \
-H "Authorization: Basic $(echo -n $ZERION_API_KEY: | base64)"{
"data": {
"attributes": {
"total": { "positions": 44469.60 },
"positions_distribution_by_type": {
"wallet": 40000,
"deposited": 3000,
"staked": 1469.60
},
"positions_distribution_by_chain": {
"base": 27495.06,
"ethereum": 6216.25,
"arbitrum": 1234.56
},
"changes": {
"absolute_1d": 305.86,
"percent_1d": 0.69
}
}
}
}filter[positions]only_simpleonly_defino_filterfilter[chain_ids]base,ethereum,arbitrumfilter[trash]only_non_trashonly_trashno_filtersortvalue-valuegroup_idgroup_idwalletdepositedborrowedstakedlockedgroup_idfilter[chain_ids]filter[asset_types]fungiblenftfilter[trash]only_non_trashno_filterpage[size]page[after]operation_typetradesendreceiveapprovestakeunstakeborrowrepaybridgemintburnbidexecutetransfersfeeapplication_metadatadappchaincurrencyusdfilter[chain_ids]{
"data": {
"attributes": {
"total_gain": -15076.15,
"realized_gain": 45328.28,
"unrealized_gain": -60404.44,
"relative_total_gain_percentage": -5.65,
"relative_realized_gain_percentage": 28.08,
"relative_unrealized_gain_percentage": -57.36,
"total_fee": 681.81,
"total_invested": 266672.34,
"realized_cost_basis": 161370.01,
"net_invested": 105302.33,
"received_external": 128217.01,
"sent_external": 67415.77,
"sent_for_nfts": 4333.36,
"received_for_nfts": 423.01
}
}
}currencyusdfilter[chain_ids]periodfilter[chain_ids]sortfilter[search_query]filter[implementation_chain_id]filter[implementation_address]sortethereum:0xa5a4...filter[period]hourdayweekmonthyearmax{
"data": {
"type": "subscriptions",
"attributes": {
"wallet_addresses": ["0x...", "0x..."],
"chain_ids": ["base", "ethereum"],
"callback_url": "https://your-server/webhook"
}
}
}nullzk_...export ZERION_API_KEY="zk_your_api_key"
curl "https://api.zerion.io/v1/wallets/0x.../portfolio" \
-H "Authorization: Basic $(echo -n $ZERION_API_KEY: | base64)"| Plan | Requests/Second | Requests/Day | Price |
|---|---|---|---|
| Free | 10 | 10,000 | $0 |
| Growth | 50 | 100,000 | $99/mo |
| Scale | 200 | 1,000,000 | $499/mo |
| Enterprise | Custom | Custom | Contact |
// Using x402 HTTP flow
const response = await fetch('https://api.zerion.io/v1/wallets/0x.../portfolio', {
headers: {
'X-402-Payment': signedPaymentHeader // ERC-3009 signature
}
});zerion-cli wallet portfolio 0x... --x402X-Env: testnetcurl "https://api.zerion.io/v1/wallets/0x.../portfolio" \
-H "Authorization: Basic ..." \
-H "X-Env: testnet"#!/bin/bash
# Research with Zerion
positions=$(zerion-cli wallet positions $WALLET --json)
# Find volatile tokens on Base
risky=$(echo $positions | jq '[.data[] | select(.relationships.chain.data.id == "base") | select(.attributes.value > 500)]')
# Execute with Bankr
for token in $(echo $risky | jq -r '.[].attributes.fungible_info.symbol'); do
bankr "set stop loss on $token at -20%"
done// Webhook handler
app.post('/webhook/zerion', async (req, res) => {
const { type, data } = req.body;
if (type === 'transaction' && data.operation_type === 'trade') {
const { transfers } = data;
const bought = transfers.find(t => t.direction === 'in');
if (bought && bought.value > 1000) {
// Mirror the trade via Bankr
await bankr(`buy $100 of ${bought.fungible_info.symbol}`);
}
}
});// Get swap quote from Zerion
const quote = await zerion.get('/v1/swap/offers', {
params: { from: 'USDC', to: 'ETH', amount: '1000' }
});
const bestRate = quote.data[0];
console.log(`Best rate: ${bestRate.rate} from ${bestRate.provider}`);
// Execute via Bankr
await bankr(`swap $1000 USDC to ETH on base`);| Chain | Chain ID |
|---|---|
| Ethereum | |
| Base | |
| Arbitrum | |
| Optimism | |
| Polygon | |
| Solana | |
| zkSync Era | |
| Linea | |
| Scroll | |
| Blast | |
| Zora | |
| Degen | |
| Berachain | |
| Monad | |
| Abstract | |
| ... | +26 more |
{
"mcpServers": {
"zerion": {
"command": "npx",
"args": ["zerion-mcp-server"],
"env": {
"ZERION_API_KEY": "zk_..."
}
}
}
}| Code | Description |
|---|---|
| 200 | Success |
| 202 | Accepted - data being prepared, retry shortly |
| 400 | Bad Request - check query params |
| 401 | Unauthorized - invalid API key |
| 402 | Payment Required - x402 payment needed |
| 404 | Not Found - invalid address or resource |
| 429 | Rate Limited - back off with exponential backoff |
| 500 | Server Error - retry with backoff |