bankr/SKILL.md
AI-powered crypto trading agent, wallet API, and LLM gateway via natural language. Use when the user wants to trade crypto, check portfolio balances (with PnL and NFTs), view token prices, search tokens, transfer crypto, manage NFTs, use leverage (Hyperliquid or Avantis), bet on Polymarket, deploy tokens, set up automated trading, sign and submit raw transactions, call or deploy x402 paid API endpoints, browse the web, or access LLM models through the Bankr LLM gateway funded by your Bankr wallet. Supports Base, Ethereum, Polygon, Solana, Unichain, World Chain, Arbitrum, and BNB Chain.
npx skillsauth add bankrbot/skills bankrInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Execute crypto trading and DeFi operations using natural language. Two integration options:
@bankr/cli for a batteries-included terminal experiencehttps://api.bankr.bot directly from any language or toolBoth use the same API key. The API has two layers:
/wallet/*) — Direct, synchronous endpoints for portfolio, transfers, signing, and transaction submission/agent/*) — AI-powered async prompt endpoint for natural language operationsBefore using either option, you need a Bankr API key. Two ways to get one:
Option A: Headless email login (recommended for agents)
Two-step flow — send OTP, then verify and complete setup. See "First-Time Setup" below for the full guided flow with user preference prompts.
# Step 1 — send OTP to email
bankr login email [email protected]
# Step 2 — verify OTP and generate API key (options based on user preferences)
bankr login email [email protected] --code 123456 --accept-terms --key-name "My Agent" --read-write
This creates a wallet, accepts terms, and generates an API key — no browser needed. Before running step 2, ask the user which APIs they need (wallet, agent, both via --read-write, LLM gateway) and their preferred key name.
Option B: Bankr Terminal
bk_...)Both options automatically provision EVM wallets (Base, Ethereum, Polygon, Unichain) and a Solana wallet — no manual wallet setup needed.
bun install -g @bankr/cli
Or with npm:
npm install -g @bankr/cli
When the user asks to log in with an email, walk them through this flow:
Step 1 — Send verification code
bankr login email <user-email>
Step 2 — Ask the user for the OTP code and all preferences in a single message. This avoids unnecessary back-and-forth. Ask for:
--accept-terms. You MUST ask for ToS acceptance and do not pass --accept-terms unless the user has explicitly confirmed.--no-wallet-api to disable--agent-api) — AI-powered prompts and natural language operations--no-token-launch to disable--read-write to allow transactions (without it, enabled APIs are read-only)--llm) — multi-model API at llm.bankr.bot (currently limited to beta testers). Skip if user doesn't need it.--key-name) — a display name for the API key (e.g. "My Agent", "Trading Bot")Step 3 — Construct and run the step 2 command with the user's choices. Do NOT execute if the user has not explicitly accepted the Terms of Service — ask again if needed:
# Full access: wallet + agent with write + LLM
bankr login email <user-email> --code <otp> --accept-terms --key-name "My Agent" --agent-api --read-write --llm
# Agent with write access (AI can execute transactions)
bankr login email <user-email> --code <otp> --accept-terms --key-name "Trading Agent" --agent-api --read-write
# Default key (wallet + token launch, read-only)
bankr login email <user-email> --code <otp> --accept-terms --key-name "My Key"
# Agent read-only (research, prices, balances — no transactions)
bankr login email <user-email> --code <otp> --accept-terms --key-name "Research Agent" --agent-api
# LLM-only (no wallet, no token launch)
bankr login email <user-email> --code <otp> --accept-terms --key-name "LLM Client" --no-wallet-api --no-token-launch --llm
| Option | Description |
|--------|-------------|
| --code <otp> | OTP code received via email (step 2) |
| --accept-terms | Accept Terms of Service without prompting (required for new users) |
| --key-name <name> | Display name for the API key (e.g. "My Agent"). Prompted if omitted |
| --no-wallet-api | Disable Wallet API (enabled by default) |
| --agent-api | Enable Agent API (AI prompts, natural language operations) |
| --read-write | Disable read-only mode (allow transactions). Without this, enabled APIs are read-only |
| --no-token-launch | Disable Token Launch API (enabled by default) |
| --llm | Enable LLM gateway access (multi-model API at llm.bankr.bot). Currently limited to beta testers |
| --allowed-ips <ips> | Comma-separated IP/CIDR allowlist for the API key (e.g., 1.2.3.4,10.0.0.0/24) |
| --allowed-recipients <addresses> | Comma-separated EVM/Solana addresses the key can send to (auto-classified by 0x prefix) |
New key defaults (when no flags are passed):
| Flag | Default | To change |
|------|---------|-----------|
| walletApiEnabled | Enabled | --no-wallet-api |
| agentApiEnabled | Disabled | --agent-api |
| tokenLaunchApiEnabled | Enabled | --no-token-launch |
| llmGatewayEnabled | Disabled | --llm |
| readOnly | Enabled (read-only) | --read-write |
Any option not provided on the command line will be prompted interactively by the CLI, so you can mix headless and interactive as needed.
If the user already has an API key:
bankr login --api-key bk_YOUR_KEY_HERE
If they need to create one at the Bankr Terminal:
bankr login --url — prints the terminal URLbk_... keybankr login --api-key bk_THE_KEYIf your LLM gateway key differs from your API key, pass --llm-key during login or run bankr config set llmKey YOUR_LLM_KEY afterward. When not set, the API key is used for both. See references/llm-gateway.md for full details.
bankr whoami
bankr wallet portfolio
bankr agent prompt "What is my balance?"
No CLI installation required — call the API directly with curl, fetch, or any HTTP client.
All requests require an X-API-Key header:
curl -X POST "https://api.bankr.bot/agent/prompt" \
-H "X-API-Key: bk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "What is my ETH balance?"}'
# 1. Submit a prompt — returns a job ID
JOB=$(curl -s -X POST "https://api.bankr.bot/agent/prompt" \
-H "X-API-Key: $BANKR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "What is my ETH balance?"}')
JOB_ID=$(echo "$JOB" | jq -r '.jobId')
# 2. Poll until terminal status
while true; do
RESULT=$(curl -s "https://api.bankr.bot/agent/job/$JOB_ID" \
-H "X-API-Key: $BANKR_API_KEY")
STATUS=$(echo "$RESULT" | jq -r '.status')
[ "$STATUS" = "completed" ] || [ "$STATUS" = "failed" ] || [ "$STATUS" = "cancelled" ] && break
sleep 2
done
# 3. Read the response
echo "$RESULT" | jq -r '.response'
Every prompt response includes a threadId. Pass it back to continue the conversation:
# Start — the response includes a threadId
curl -X POST "https://api.bankr.bot/agent/prompt" \
-H "X-API-Key: $BANKR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "What is the price of ETH?"}'
# → {"jobId": "job_abc", "threadId": "thr_XYZ", ...}
# Continue — pass threadId to maintain context
curl -X POST "https://api.bankr.bot/agent/prompt" \
-H "X-API-Key: $BANKR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "And what about SOL?", "threadId": "thr_XYZ"}'
Omit threadId to start a new conversation. CLI equivalent: bankr agent prompt --continue (reuses last thread) or bankr agent prompt --thread <id>.
/wallet/*) — Direct endpoints (synchronous)| Endpoint | Method | Auth | Description |
|----------|--------|------|-------------|
| /wallet/me | GET | Read | Wallet info (address, chains) |
| /wallet/portfolio | GET | Read | Portfolio balances, supports ?include=pnl,nfts for progressive loading |
| /wallet/swap-quote | POST | Read | Quote a same-chain EVM swap without executing |
| /wallet/swap | POST | Write | Execute a same-chain EVM swap (output returns to your wallet) |
| /wallet/transfer | POST | Write | Transfer tokens (multi-chain, supports allowedRecipients enforcement) |
| /wallet/sign | POST | Write | Sign messages, typed data, or transactions |
| /wallet/submit | POST | Write | Submit raw transactions to chain |
/wallet/me, /wallet/portfolio) — any valid API key with a wallet/wallet/swap-quote) — a quote is a read, so read-only API keys are allowed; API-key callers still need walletApiEnabled/wallet/swap, /wallet/transfer, /wallet/sign, /wallet/submit) — require walletApiEnabled and reject read-only keys. /wallet/transfer also enforces allowedRecipients; /wallet/swap does not (output returns to your own wallet)| Endpoint | Method | Description |
|----------|--------|-------------|
| /addresses/resolve?value=<recipient>&type=<address\|ens\|twitter\|farcaster> | GET | Resolve a recipient (0x address, ENS-style name .eth/.base.eth/.cb.id, or social handle) to a 0x address. Used by bankr wallet transfer --to to support ENS input. |
| /users/search?... | GET | Search Bankr users by Twitter or Farcaster username. |
The legacy aliases /public/resolve-recipient and /public/search-users still respond but are deprecated (they return Deprecation/Sunset headers) and slated for removal — migrate callers to the structured /addresses/* and /users/* namespaces.
/agent/*) — AI-powered endpoints (async)| Endpoint | Method | Description |
|----------|--------|-------------|
| /agent/prompt | POST | Submit a prompt (async, returns job ID) |
| /agent/job/{jobId} | GET | Check job status and results |
| /agent/job/{jobId}/cancel | POST | Cancel a running job |
| Endpoint | Method | Description |
|----------|--------|-------------|
| /token-launches | GET | List recent token launches (cached, public) |
The following /agent/* endpoints have been removed. Use the /wallet/* equivalents:
| Removed | Use Instead |
|---------|-------------|
| GET /agent/me | GET /wallet/me |
| GET /agent/balances | GET /wallet/portfolio |
| POST /agent/sign | POST /wallet/sign |
| POST /agent/submit | POST /wallet/submit |
For full API details (request/response schemas, job states, rich data, polling strategy), see:
Reference: references/api-workflow.md | references/sign-submit-api.md
@bankr/cli 0.2+ organizes commands into three namespaces: wallet, agent, and tokens. Old flat commands (balances, prompt, status, etc.) still work as deprecated aliases.
bankr wallet — Wallet Operations| Command | Description |
|---------|-------------|
| bankr wallet | Show wallet info (default: whoami) |
| bankr wallet portfolio | Portfolio balances across all chains (hides tokens under $1 by default) |
| bankr wallet portfolio --pnl | Include profit/loss data |
| bankr wallet portfolio --nfts | Include NFT holdings |
| bankr wallet portfolio --all | Include both PnL and NFTs |
| bankr wallet portfolio --chain <chains> | Filter by chain(s): base, polygon, mainnet, unichain, solana (comma-separated) |
| bankr wallet portfolio --json | Output raw JSON |
| bankr wallet transfer --to <recipient> --token <symbol> --amount <amount> | Transfer tokens; --to accepts a 0x address or ENS-style name (.eth, .base.eth, .cb.id), --token resolves symbols to contracts. Social handles work via the AI agent only. |
| bankr wallet transfer --to vitalik.eth --token USDC --amount 50 --chain base | ENS recipient with explicit chain |
| bankr wallet swap --from <symbol/addr> --to <symbol/addr> --amount <amount> | Swap tokens on a single EVM chain (same-chain). Resolves symbols to contracts; --from/--to/--amount required; --chain defaults to base. Solana is not supported. |
| bankr wallet swap --from ETH --to USDC --amount 0.1 --chain base --quote-only | Print the swap quote (you pay / you receive / min received) without executing |
| bankr wallet sign | Sign messages/typed data/transactions |
| bankr wallet submit | Submit raw transactions |
bankr agent — AI Agent Operations| Command | Description |
|---------|-------------|
| bankr agent prompt <text> | Send a prompt to the Bankr AI agent |
| bankr agent prompt --continue <text> | Continue the most recent conversation thread |
| bankr agent prompt --thread <id> <text> | Continue a specific conversation thread |
| bankr agent status <jobId> | Check the status of a running job |
| bankr agent cancel <jobId> | Cancel a running job |
| bankr agent profile | View/manage agent profile |
| bankr agent skills | Show all Bankr AI agent skills with examples |
bankr tokens — Token Discovery| Command | Description |
|---------|-------------|
| bankr tokens search <query> | Search for tokens by name or symbol |
| bankr tokens info <symbol-or-address> | Get detailed token information |
bankr club — Bankr Club MembershipManage Bankr Club subscription from the CLI (status, signup, cancel). Pay with USDC (default), BNKR, ETH, or any Base ERC-20 — non-USDC/BNKR tokens are swapped to USDC at checkout.
| Command | Description |
|---------|-------------|
| bankr club | Show membership status (default; same as status) |
| bankr club status | Show plan, renewal date, and daily message count |
| bankr club signup | Subscribe (monthly, USDC default) |
| bankr club signup --yearly | Subscribe yearly ($198 — saves ~$42/year) |
| bankr club signup --token <symbol-or-addr> | Pay with USDC (default), BNKR, ETH, or any 0x-prefixed Base ERC-20 |
| bankr club signup -y | Skip the confirmation prompt |
| bankr club cancel | Cancel subscription (access continues until period ends) |
Pricing is $20/mo or $198/yr USD-equivalent. Actual on-chain amount depends on the chosen token's price at quote time. The --token flag was added in CLI 0.3.4; older versions only support USDC.
| Command | Description |
|---------|-------------|
| bankr login | Authenticate with the Bankr API (interactive menu) |
| bankr login email <address> | Send OTP to email (headless step 1) |
| bankr login email <address> --code <otp> [options] | Verify OTP and complete setup (headless step 2) |
| bankr login --api-key <key> | Login with an existing API key directly |
| bankr login --api-key <key> --llm-key <key> | Login with separate LLM gateway key |
| bankr login --url | Print Bankr Terminal URL for API key generation |
| bankr logout | Clear stored credentials |
| bankr whoami | Show current authentication info |
| bankr config get [key] | Get config value(s) |
| bankr config set <key> <value> | Set a config value |
| bankr --config <path> <command> | Use a custom config file path |
Valid config keys: apiKey, apiUrl, llmKey, llmUrl
Default config location: ~/.bankr/config.json. Override with --config or BANKR_CONFIG env var.
For headless environments — CI pipelines, Docker containers, cron jobs — pass the --not-interactive (alias --ni) global flag, or set BANKR_NOT_INTERACTIVE=1. Both forms work before or after the subcommand.
The flag implies --yes on every confirmation prompt and fails fast (exit 1, clear error) when a command would otherwise hang on a required prompt. Use it whenever the user asks for an automated/scripted invocation.
| Command | Required headless flag(s) when --ni is set |
|---------|---------------------------------------------|
| bankr login | --api-key <key>, login siwe --private-key <key>, or login email <addr> [--code <otp>] |
| bankr launch | --name <name> (other fields default to empty) |
| bankr fees claim-wallet | --all (plus --private-key or BANKR_PRIVATE_KEY) |
| bankr agent | a prompt argument or piped stdin |
Read-only commands (whoami, wallet portfolio, tokens, agent status, etc.) don't prompt at all — --ni is harmless but redundant.
Examples:
# Cron — claim creator fees nightly
BANKR_PRIVATE_KEY=0x... bankr --ni fees claim-wallet --all
# CI — programmatic token launch (simulate, no broadcast)
bankr --ni launch --name MyToken --symbol MTK --simulate
# Pipeline — agent prompt from stdin
echo "summarize today's trades" | bankr --ni agent prompt
Old flat commands still work but prefer the namespaced versions:
| Deprecated | Use Instead |
|-----------|-------------|
| bankr prompt | bankr agent |
| bankr status | bankr agent status |
| bankr cancel | bankr agent cancel |
| bankr balances | bankr wallet portfolio |
| bankr profile | bankr agent profile |
| bankr sign | bankr wallet sign |
| bankr submit | bankr wallet submit |
| bankr skills | bankr agent skills |
| Variable | Description |
|----------|-------------|
| BANKR_API_KEY | API key (overrides stored key) |
| BANKR_API_URL | API URL (default: https://api.bankr.bot) |
| BANKR_LLM_KEY | LLM gateway key (falls back to BANKR_API_KEY if not set) |
| BANKR_LLM_URL | LLM gateway URL (default: https://llm.bankr.bot) |
| BANKR_NOT_INTERACTIVE | Set to 1 to enable non-interactive mode globally (equivalent to passing --ni / --not-interactive on every invocation) |
Environment variables override config file values. Config file values override defaults.
| Command | Description |
|---------|-------------|
| bankr llm models | List available LLM models |
| bankr llm credits | Check credit balance |
| bankr llm credits add <amount> [--token <addr>] [-y] | Top up LLM credits from wallet |
| bankr llm credits auto [--enable/--disable] [--amount] [--threshold] [--tokens] | View or configure auto top-up |
| bankr llm setup openclaw [--install] | Generate or install OpenClaw config |
| bankr llm setup opencode [--install] | Generate or install OpenCode config |
| bankr llm setup claude | Show Claude Code environment setup |
| bankr llm setup cursor | Show Cursor IDE setup instructions |
| bankr llm claude [args...] | Launch Claude Code via the Bankr LLM Gateway |
For straightforward requests that complete quickly:
bankr agent prompt "What is my ETH balance?"
bankr agent prompt "What's the price of Bitcoin?"
The CLI handles the full submit-poll-complete workflow automatically. You can also use the shorthand — any unrecognized command is treated as a prompt:
bankr What is the price of ETH?
For prompts containing $ or special characters that the shell would expand:
# Interactive mode — no shell expansion issues
bankr agent prompt
# Then type: Buy $50 of ETH on Base
# Or pipe input
echo 'Buy $50 of ETH on Base' | bankr agent prompt
Continue a multi-turn conversation with the agent:
# First prompt — starts a new thread automatically
bankr agent prompt "What is the price of ETH?"
# → Thread: thr_ABC123
# Continue the conversation (agent remembers the ETH context)
bankr agent prompt --continue "And what about BTC?"
bankr agent prompt -c "Compare them"
# Resume any thread by ID
bankr agent prompt --thread thr_ABC123 "Show me ETH chart"
Thread IDs are automatically saved to config after each prompt. The --continue / -c flag reuses the last thread.
For advanced use or long-running operations:
# Submit and get job ID
bankr agent prompt "Buy $100 of ETH"
# → Job submitted: job_abc123
# Check status of a specific job
bankr agent status job_abc123
# Cancel if needed
bankr agent cancel job_abc123
The Bankr LLM Gateway is a unified API for Claude, Gemini, GPT, Grok, DeepSeek, Qwen, Kimi, MiniMax, GLM, and other models — multi-provider access, cost tracking, automatic failover, and SDK compatibility through a single endpoint.
Base URL: https://llm.bankr.bot | Dashboard: bankr.bot/llm | API Keys: bankr.bot/api-keys
llmKey if configured, otherwise falls back to your API keybankr llm credits add 25 or at bankr.bot/llm?tab=credits before making any LLM calls, or you will get a 402 errorbankr llm credits | Top up: bankr llm credits add <amount> | Auto top-up: bankr llm credits auto --enable --amount 25 --tokens USDCbankr/ (e.g. bankr/claude-sonnet-4.6). In direct API calls, use bare IDs (e.g. claude-sonnet-4.6)bankr llm models # List available models
bankr llm credits # Check credit balance
bankr llm credits add 25 # Top up $25 credits (defaults to Base USDC)
bankr llm credits add 25 --token USDT # Pay USDT on whichever chain holds the most
bankr llm credits add 25 --token ETH # Native token; auto-swapped on its chain
bankr llm credits auto --enable --amount 25 --tokens USDC,USDT # Multi-chain auto top-up
bankr llm setup openclaw --install # Install Bankr provider into OpenClaw
bankr llm setup claude # Print Claude Code env vars
bankr llm claude # Launch Claude Code through gateway
The AI agent can top up your LLM credits directly in conversation — no CLI or web dashboard needed:
bankr agent prompt "Top up my LLM credits with $25"
bankr agent prompt "Add $10 of LLM credits using my ETH"
1 credit = $1 USD. Multi-chain: pay with USDC or USDT directly on Base, Polygon, Ethereum, Arbitrum, or BNB Chain, or with any other ERC-20 (auto-swapped to the chain's preferred stablecoin — USDC on most chains, USDT on BNB). When using --token, the CLI picks the chain with the highest USD balance of that token. Maximum $1,000 per top-up.
The gateway supports model deprecation with auto-redirect to replacement models. Deprecated models return X-Model-Deprecated and X-Model-Replacement response headers. Hard-deprecated models return HTTP 410 — update your model ID to the replacement indicated in the header.
For full details — setup paths, model list, provider config, SDK examples, key management, and troubleshooting — see:
Reference: references/llm-gateway.md
Reference: references/token-trading.md
bankr wallet portfolio or GET /wallet/portfolio)--pnl or ?include=pnl)--nfts or ?include=nfts)bankr wallet portfolio --chain base,solana or GET /wallet/portfolio?chains=base,solanaReference: references/portfolio.md
Reference: references/market-research.md
.eth, .base.eth, .cb.id), or social handlesbankr wallet transfer) accepts 0x addresses + ENS only — social handles go through the AI agentReference: references/transfers.md
Reference: references/nft-operations.md
Reference: references/polymarket.md
Reference: references/leverage-trading.md | references/hyperliquid.md
Reference: references/token-deployment.md
Reference: references/automation.md
The agent can discover, call, and deploy x402-protected API endpoints, automatically handling USDC payments on Base:
Reference: references/x402-cloud.md
The agent has a built-in headless browser for web interactions:
Reference: references/x402-cloud.md
Reference: references/arbitrary-transaction.md
| Chain | Native Token | Best For | Gas Cost | | ----------- | ------------ | ----------------------------- | -------- | | Base | ETH | Memecoins, general trading | Very Low | | Polygon | POL | Gaming, NFTs, frequent trades | Very Low | | Ethereum | ETH | Blue chips, high liquidity | High | | Solana | SOL | High-speed trading | Minimal | | Unichain | ETH | Newer L2 option | Very Low | | World Chain | ETH | Uniswap V3/V4 swaps | Very Low | | Arbitrum | ETH | DeFi, low-cost transactions | Very Low | | BNB Chain | BNB | BSC ecosystem trading | Low |
Bankr has two independent layers of safety controls. A transaction must satisfy both to broadcast.
User-controlled settings that apply to every surface — chat, agent, API, CLI. Configured at bankr.bot → Security; requires web authentication (an API key cannot change them).
| Control | Default | Effect |
|---------|---------|--------|
| Pause all transactions | Off | Blocks every outbound transaction until unpaused |
| Daily spending limit | $500 / 24h | Rejects any tx that pushes rolling-24h USD outflow past the limit |
| Per-transaction limit | $500 | Rejects any single tx priced above the limit |
| Permitted recipients | Off | Restricts transfers/swaps to an allowlist; new entries enter a configurable cooldown (default 24h) |
| Disable arbitrary contract calls | Off | Blocks write_contract, raw /wallet/submit, and arbitrary transaction tools (named operations like swaps still work) |
If USD pricing is unavailable and a limit is enabled, the transaction is rejected (fail-closed) rather than waved through. Your own wallet addresses are always implicitly allowed as recipients.
Per-key settings configured at bankr.bot/api-keys:
API Key Types: Bankr uses a single key format (bk_...) with capability flags (walletApiEnabled, agentApiEnabled, tokenLaunchApiEnabled, llmGatewayEnabled). You can optionally configure a separate LLM Gateway key via bankr config set llmKey or BANKR_LLM_KEY — useful when you want independent revocation or different permissions for agent vs LLM access.
Read-Only API Keys: New keys default to readOnly: true. This filters all write tools (swaps, transfers, staking, token launches, etc.) from agent sessions. The /wallet/swap, /wallet/sign, /wallet/submit, and /wallet/transfer write endpoints return 403 (the /wallet/swap-quote read endpoint still works). Use --read-write during login or toggle in the web settings to disable. Ideal for monitoring bots and research agents.
IP Whitelisting: Set allowedIps on your API key to restrict usage to specific IPs or CIDR ranges (e.g., 10.0.0.0/24). Requests from non-whitelisted IPs are rejected with 403 at the auth layer.
Recipient Allowlist: Restrict which addresses the key can send funds to. Independent from the wallet-level permitted recipients — when both are configured, both must pass.
If you suspect a key is compromised:
Dedicated Agent Wallet: When building autonomous agents, create a separate Bankr account rather than using your personal wallet. This isolates agent funds — if a key is compromised, only the agent wallet is exposed. Fund it with limited amounts and replenish as needed.
Rate Limits: 100 messages/day (standard), 1,000/day (Bankr Club), or custom per key. Resets 24h from first message (rolling window). LLM Gateway uses a credit-based system.
Key safety rules:
BANKR_API_KEY, BANKR_LLM_KEY), never in source code~/.bankr/ and .env to .gitignore — the CLI stores credentials in ~/.bankr/config.jsonwaitForConfirmation: true with /wallet/submit — transactions execute immediately with no confirmation promptReference: references/safety.md
# Check balance
bankr wallet portfolio --chain base
# Check price
bankr agent prompt "What's the current price of PEPE?"
# Then trade
bankr agent prompt "Buy $20 of PEPE on Base"
# Direct portfolio check (no AI agent, instant response)
bankr wallet portfolio
bankr wallet portfolio --pnl # Include profit/loss data
bankr wallet portfolio --nfts # Include NFT holdings
bankr wallet portfolio --all # PnL + NFTs
bankr wallet portfolio --chain base
bankr wallet portfolio --chain base,solana
bankr wallet portfolio --json
# Via AI agent (natural language, richer context)
bankr agent prompt "Show my complete portfolio"
# Chain-specific
bankr agent prompt "What tokens do I have on Base?"
# Token-specific
bankr agent prompt "Show my ETH across all chains"
# DCA strategy
bankr agent prompt "DCA $100 into ETH every week"
# Stop loss protection
bankr agent prompt "Set stop loss for my ETH at $2,500"
# Limit order
bankr agent prompt "Buy ETH if price drops to $3,000"
# Token discovery
bankr tokens search PEPE
bankr tokens info USDC
# Price and analysis
bankr agent prompt "Do technical analysis on ETH"
# Trending tokens
bankr agent prompt "What tokens are trending on Base?"
# Compare tokens
bankr agent prompt "Compare ETH vs SOL"
Bankr uses an asynchronous job-based API:
threadId), get job ID and thread IDthreadId for multi-turn conversationsThe bankr agent prompt command handles this automatically. When using the REST API directly, implement the poll loop yourself (see Option 2 above or the reference below). For manual job control via CLI, use bankr agent status <jobId> and bankr agent cancel <jobId>.
For details on the API structure, job states, polling strategy, and error handling, see:
Reference: references/api-workflow.md
For direct signing and transaction submission, use the Wallet API synchronous endpoints:
These endpoints return immediately (no polling required) and are ideal for:
Reference: references/sign-submit-api.md
Common issues and fixes:
bankr login or check bankr whoami (CLI), or verify your X-API-Key header (REST API)For comprehensive error troubleshooting, setup instructions, and debugging steps, see:
Reference: references/error-handling.md
~/.bankr/ to .gitignoreSee references/safety.md for comprehensive safety guidance.
bankr wallet portfolio (direct, no AI processing — hides low-value tokens by default)bankr wallet portfolio --pnl (include profit/loss)bankr wallet portfolio --nfts (include NFT holdings)bankr wallet portfolio --all (PnL + NFTs)bankr wallet portfolio --chain base (single chain)Solana (LaunchLab):
EVM (Clanker):
Transfer tokens via CLI or Wallet API without AI processing. The CLI's --to accepts a 0x address or ENS-style name (.eth, .base.eth, .cb.id); the Wallet API accepts the same plus anything /addresses/resolve understands. For social handles (Twitter, Farcaster, Telegram) use the AI agent.
# CLI — token symbol resolution + ENS resolution built in
bankr wallet transfer --to vitalik.eth --token USDC --amount 50 --chain base
bankr wallet transfer --to name.base.eth --native --amount 0.01
bankr wallet transfer --to 0x1234... --token ETH --amount 0.1
# REST API
curl -X POST "https://api.bankr.bot/wallet/transfer" \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"to": "vitalik.eth", "token": "USDC", "amount": "50", "chain": "base"}'
Swap tokens on a single EVM chain (same-chain) via CLI or Wallet API without AI processing. Both legs must be on the same EVM chain — Solana and cross-chain routes go through the AI agent. The CLI resolves token symbols to contracts and uses the quote's minBuyAmount as slippage protection when executing.
# CLI — quote only (no execution)
bankr wallet swap --from ETH --to USDC --amount 0.1 --chain base --quote-only
# CLI — quote then execute
bankr wallet swap --from ETH --to USDC --amount 0.1 --chain base
# REST API — quote (read; read-only keys allowed)
curl -X POST "https://api.bankr.bot/wallet/swap-quote" \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"fromChain": "base", "fromToken": "0x...", "toChain": "base", "toToken": "0x...", "amount": "0.1"}'
# REST API — execute (write; pass the quote's minBuyAmount for slippage protection)
curl -X POST "https://api.bankr.bot/wallet/swap" \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"fromChain": "base", "fromToken": "0x...", "toChain": "base", "toToken": "0x...", "amount": "0.1", "minBuyAmount": "..."}'
The /wallet/swap* endpoints take token contract addresses (use the zero address for the chain's native token); the CLI resolves symbols for you. Swap output is always returned to your own wallet, so allowedRecipients does not apply.
Direct message signing without AI processing:
# Sign a plain text message
curl -X POST "https://api.bankr.bot/wallet/sign" \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"signatureType": "personal_sign", "message": "Hello, Bankr!"}'
# Sign EIP-712 typed data (permits, orders)
curl -X POST "https://api.bankr.bot/wallet/sign" \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"signatureType": "eth_signTypedData_v4", "typedData": {...}}'
# Sign a transaction without broadcasting
curl -X POST "https://api.bankr.bot/wallet/sign" \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"signatureType": "eth_signTransaction", "transaction": {"to": "0x...", "chainId": 8453}}'
Direct transaction submission without AI processing:
# Submit a raw transaction
curl -X POST "https://api.bankr.bot/wallet/submit" \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"transaction": {"to": "0x...", "chainId": 8453, "value": "1000000000000000000"},
"waitForConfirmation": true
}'
Reference: references/sign-submit-api.md
# Verify installation
which bankr
# Reinstall if needed
bun install -g @bankr/cli
CLI:
# Check current auth
bankr whoami
# Re-authenticate
bankr login
# Check LLM key specifically
bankr config get llmKey
REST API:
# Test your API key
curl -s "https://api.bankr.bot/_health" -H "X-API-Key: $BANKR_API_KEY"
See references/error-handling.md for comprehensive troubleshooting.
bankr whoami to verify auth (CLI) or test with a curl to /_health (REST API)bankr agent prompt "What is my balance?" or POST /agent/prompt)Pro Tip: The most common issue is not specifying the chain for tokens. When in doubt, always include "on Base" or "on Ethereum" in your prompt.
Security: Keep your API key private. Never commit your config file to version control. Only trade amounts you can afford to lose.
Quick Win: Start by checking your portfolio (bankr wallet portfolio) to see what's possible, then try a small $5-10 trade on Base to get familiar with the flow.
Agents can create and manage public profile pages at bankr.bot/agents. Profiles showcase project metadata, team info, token data (chart + market cap), weekly fee revenue, shipped products, and a Twitter activity feed.
Eligibility: You must have deployed a token through Bankr (Doppler or Clanker) or be a fee beneficiary on the token to create a profile. The token address is verified against your deployment history and beneficiary records.
approved: false and become publicly visible after admin approvalbankr agent profile # View own profile
bankr agent profile create # Interactive creation wizard
bankr agent profile create --name "My Agent" --token 0x... --twitter myagent
bankr agent profile update --description "Updated description"
bankr agent profile delete # Delete own profile (with confirmation)
bankr agent profile add-update # Add a project update
bankr agent profile add-update --title "v2 Launch" --content "Shipped new features"
All commands support --json for structured output (enables programmatic use).
All endpoints require API key authentication via X-API-Key header.
| Method | Path | Description |
|--------|------|-------------|
| GET | /agent/profile | Get own profile |
| POST | /agent/profile | Create profile |
| PUT | /agent/profile | Update profile fields |
| DELETE | /agent/profile | Delete own profile |
| POST | /agent/profile/update | Add a project update |
Create profile:
curl -X POST "https://api.bankr.bot/agent/profile" \
-H "X-API-Key: $BANKR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"projectName": "My Agent", "tokenAddress": "0x...", "description": "An AI trading agent"}'
Add a project update:
curl -X POST "https://api.bankr.bot/agent/profile/update" \
-H "X-API-Key: $BANKR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title": "v2 Launch", "content": "Shipped swap optimization and new UI"}'
See references/agent-profiles.md for the full integration guide.
data-ai
Discover, bet on, track, and settle Hunch prediction markets in natural language. Trigger when a user wants to bet, take a position, or get odds on a crypto outcome — token market-cap milestones and flips, launchpad races (Bankr vs pump.fun volume / #1-days / launches over a cap), token head-to-head outperformance, mcap strike-ladders, and up/down price rounds. Also trigger on "what can I bet on about $TOKEN", "odds on …", "take YES/NO on …", "show my Hunch bets", "did my market resolve". Settles in USDC on Base via x402 (≤ $10 / bet); every bet returns an on-chain proof.
tools
HSM-backed secret management for AI agents. Store API keys (including Bankr `bk_` keys), passwords, and credentials in an encrypted vault; retrieve them at runtime via MCP without keeping secrets in chat context. Bankr Dynamic Key Vending issues short-lived scoped `bk_usr_` keys from a partner key (`bk_ptr_`) without manual rotation. Policy-based access control, secret rotation, sharing, EVM transaction intents (sign/simulate/broadcast), multi-chain signing keys, treasury multisig proposals, OIDC federation for external service auth, built-in prompt injection detection, and optional Shroud TEE LLM proxy. Use when the agent needs secure credential storage, just-in-time secret access, guarded on-chain signing, or security scanning — not for Bankr trading prompts, portfolio checks, or x402 calls (use the bankr skill instead).
development
Give your Bankr agent its own brain and a wallet-signed line to every other agent — on any framework, with no API key. SIGNA is the keyless agent layer on Base: resolve any identity to a messageable wallet, send and read wallet-signed DMs, invoke capabilities on the network, and run a brain that reasons on decentralized inference and acts through those capabilities. The Bankr wallet is the only credential. Triggers: "message that agent", "DM this wallet/handle", "reach the agent behind @x", "what is the base market", "resolve @handle to a wallet", "ask the network", "let my agent think and report".
testing
Stake $GEM tokens on Gem Miner (gemminer.app) to earn yield and unlock the in-game earn/cashout system. Use when the user wants to stake GEM, check their staking balance or rewards, unstake, claim rewards, or check whether they meet the 25M GEM gate. Base mainnet only.