Webull Agent Skills
Webull Agent Skills enable AI coding assistants (Cursor, Claude Desktop, Copilot, Kiro, etc.) to securely access Webull OpenAPI trading and market data capabilities via local Python scripts, with multi-environment (production/test) routing for US markets — stocks, options, futures, crypto, and event contracts.
Source code: webull-inc/webull-openapi-skills
What is Webull Agent Skills
Webull Agent Skills is a set of standalone Python scripts built on the official Webull Python SDK. Any AI coding assistant that can execute shell commands can call them directly. With natural language, you can:
- Query real-time market data (stocks, futures, crypto, event contracts)
- View account balances and positions
- Place, modify, and cancel orders (stocks, ETFs, options, futures, crypto, event contracts)
- Execute combo orders (OTO/OCO/OTOCO) and algo orders (TWAP/VWAP/POV)
- Query order history and order details
- Authenticate via 2FA token flow
Architecture Overview
Prerequisites
API Credentials
- Production
- Test Environment
Apply based on your account type:
Individual users: Individual Application Process
Institutional users: Institution Application Process
No application required. Use the publicly shared test credentials to get started immediately. See SDKs and Tools.
Other Requirements
- Python 3.10+
- Webull Python SDK:
pip install webull-openapi-python-sdk - Market Data Subscription (if market data is needed): Subscription Guide
- AI coding assistant with shell command support — e.g. Kiro, Cursor, Claude Desktop
Setup Steps
Step 1: Install Dependencies
pip install webull-openapi-python-sdk
Step 2: Configure Credentials
Create a .env file in the project root with your credentials:
- Production
- Test Environment
WEBULL_APP_KEY=your_app_key
WEBULL_APP_SECRET=your_app_secret
WEBULL_ENVIRONMENT=prod
WEBULL_REGION_ID=us
WEBULL_APP_KEY=your_app_key
WEBULL_APP_SECRET=your_app_secret
WEBULL_ENVIRONMENT=uat
WEBULL_REGION_ID=us
Step 3: Authenticate (Optional)
This step is only required if your account has Two-Factor Authentication enabled.
If your account has 2FA enabled, complete a one-time authentication before first use:
webull-skill auth
Authentication flow:
After approving the 2FA request in the Webull App, the token is cached locally and auto-refreshes on use.
Step 4: Verify Connection
webull-skill trading --action account-list
If account information is returned, the setup is successful.
Integration with Different AI Tools
- Cursor
- Claude Desktop
- GitHub Copilot
- Kiro
Create .cursor/rules/webull.mdc in your project root with script paths and usage instructions:
# Webull OpenAPI
When the user needs to query market data or execute trades, use the following commands:
- Trading: webull-skill trading --action <ACTION> [args...]
- Market data: webull-skill market-data --action <ACTION> [args...]
- Auth: webull-skill auth
Add the project as a working directory in Claude Desktop. Claude can execute shell commands directly in conversation to run the scripts.
In Agent Mode, directly request script command execution. Copilot will execute via terminal and return results.
Place scripts in the .kiro/skills/ directory. Kiro will automatically load SKILL.md and recognize all available operations. Just use natural language:
Get AAPL latest price
Usage Examples
Just talk to your AI assistant in natural language:
Market Data:
Get AAPL latest price
Show me TSLA's daily bars for the last 5 days
Get Bitcoin real-time price
Show ES futures snapshot
Trading:
Show my account list
Check my account balance
Buy 10 shares of AAPL at limit price 180
Buy 1 AAPL call option, strike 220, expiring June 2026
Buy 1 ES futures contract at limit 4500
Cancel my open order for TSLA
Show my open orders
Account:
What are my current positions?
Available Endpoints
| Endpoint | Description |
|---|---|
stock_snapshot | Get real-time stock/ETF snapshot |
stock_bars | Get single stock OHLCV candlestick data |
stock_batch_bars | Get OHLCV bars for multiple stocks |
stock_tick | Get stock tick-by-tick trade data |
stock_quotes | Get real-time bid/ask quotes with depth |
stock_footprint | Get stock large order footprint (order flow) |
futures_snapshot | Get futures real-time snapshot |
futures_bars | Get futures OHLCV candlestick data |
futures_tick | Get futures tick-by-tick trade data |
futures_depth | Get futures order book depth |
futures_footprint | Get futures large order footprint |
crypto_snapshot | Get cryptocurrency real-time snapshot |
crypto_bars | Get cryptocurrency OHLCV bars |
event_snapshot | Get event contract real-time snapshot |
event_depth | Get event contract order book depth |
event_bars | Get event contract OHLCV bars |
event_tick | Get event contract tick-by-tick data |
get_instruments | Get stock/ETF instrument info |
get_crypto_instruments | Get cryptocurrency instrument info |
get_futures_instruments | Get futures instrument info |
get_futures_instruments_by_code | Get futures contracts by product code |
get_futures_products | Get all futures products and codes |
get_event_series | Get event contract series |
get_event_instruments | Get event contract instruments by series |
get_event_categories | Get event contract categories |
get_event_events | Get events within a series |
get_account_list | Get all linked accounts |
get_account_balance | Get account balance, buying power, and cash details |
get_account_positions | Get current positions and holdings |
place_stock_order | Place a stock order |
preview_stock_order | Preview a stock order without submitting |
replace_stock_order | Modify an existing stock order |
place_stock_combo_order | Place a combo stock order (OTO/OCO/OTOCO) |
place_algo_order | Place an algorithmic order (TWAP/VWAP/POV) |
place_option_single_order | Place a single-leg option order |
preview_option_order | Preview an option order without submitting |
replace_option_order | Modify an existing option order |
place_option_strategy_order | Place a multi-leg option strategy order |
place_futures_order | Place a futures order |
replace_futures_order | Modify an existing futures order |
place_crypto_order | Place a cryptocurrency order |
place_event_order | Place an event contract order |
replace_event_order | Modify an existing event contract order |
cancel_order | Cancel an unfilled order |
get_order_history | Get historical orders |
get_open_orders | Get all current open/pending orders |
get_order_detail | Get single order details |
Configuration
Via .env file or environment variables. Required:
WEBULL_APP_KEY=<your_app_key>
WEBULL_APP_SECRET=<your_app_secret>
Optional:
| Variable | Default | Description |
|---|---|---|
WEBULL_ENVIRONMENT | uat | uat (test) or prod (live) |
WEBULL_REGION_ID | us | us for US region |
WEBULL_MAX_ORDER_NOTIONAL_USD | 10000 | Max order value (USD) |
WEBULL_MAX_ORDER_QUANTITY | 1000 | Max shares per order |
WEBULL_SYMBOL_WHITELIST | (none) | Comma-separated allowed symbols |
WEBULL_TOKEN_DIR | conf/ | Token storage directory |
WEBULL_AUDIT_LOG_FILE | (stderr) | Audit log file path |
WEBULL_LOG_LEVEL | WARNING | SDK log level |
Environment Endpoints
| Environment | HTTP API | Trade Events (gRPC) | Market Streaming (MQTT) |
|---|---|---|---|
| Production | api.webull.com | events-api.webull.com | data-api.webull.com |
| Test | us-openapi-alb.uat.webullbroker.com | us-openapi-events.uat.webullbroker.com | — |
Output Format
All operations output formatted text directly to stdout, with a region-aware disclaimer:
⚠️ Disclaimer: The information provided by this tool is for reference only ...
=== Stock Snapshot: AAPL ===
Symbol: AAPL
Price: 255.92
Pre Close: 255.63
Change: 0.29
...
- Success: disclaimer + formatted data to stdout, exit code 0
- Error: error message to stderr, exit code 1
- US region: English disclaimer only
Security Recommendations
- Never share your App Key, App Secret, or Token in chat. Credentials should only be passed via
.envfile or environment variables - Use
previewbefore placing orders - Use
WEBULL_SYMBOL_WHITELISTto restrict tradeable symbols - Use
WEBULL_MAX_ORDER_NOTIONAL_USDandWEBULL_MAX_ORDER_QUANTITYto limit order size - Use
local-checkto validate order parameters without sending requests
Troubleshooting
| Error Message | Cause | Solution |
|---|---|---|
Insufficient permission / subscribe to stock quotes | Insufficient data permissions | Subscribe to market data |
HTTP Status: 401 / UNAUTHORIZED | Credential/environment mismatch | Check .env configuration |
HTTP Status: 417 / INVALID_TOKEN | Token expired or cache issue | Re-run webull-skill auth |
Failed to resolve / NameResolutionError | DNS/network issue | Check network/proxy/firewall settings |
Disclosure
The information provided by this tool is for reference only and does not constitute investment advice. Trading in securities, options, futures, crypto, and other financial instruments involves substantial risk of loss. All trading decisions are made at your own discretion and risk. You are solely responsible for verifying order details before execution. This software is provided "as is" without warranty of any kind.
Related Links
- Webull OpenAPI Docs: developer.webull.com
- Webull MCP Server: Webull MCP
- Python SDK:
pip install webull-openapi-python-sdk