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/sandbox) routing for Hong Kong, US, and A-share markets.
Source code: webull-inc/webull-agent-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 (HK stocks, US stocks, A-shares)
- View account balances and positions
- Place, modify, and cancel orders (stocks, ETFs, options)
- Query order history and order details
- Authenticate via 2FA token flow
Architecture Overview
Prerequisites
API Credentials
- Production
- Sandbox (Test)
Apply based on your account type:
Individual users: Trading API Application Guide
Institutional users: Broker API Application Guide
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): webullapp.hk/quote | Subscription Guide
- AI coding assistant with shell command support — e.g. Kiro, Cursor, Claude Desktop
Demo Video
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
- Sandbox
WEBULL_APP_KEY=your_app_key
WEBULL_APP_SECRET=your_app_secret
WEBULL_ENVIRONMENT=prod
WEBULL_REGION_ID=hk
WEBULL_APP_KEY=your_app_key
WEBULL_APP_SECRET=your_app_secret
WEBULL_ENVIRONMENT=uat
WEBULL_REGION_ID=hk
Step 3: Authenticate
Complete a one-time 2FA authentication before first use:
python3 scripts/cli.py 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
python3 scripts/cli.py 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: python3 scripts/cli.py trading --action <ACTION> [args...]
- Market data: python3 scripts/cli.py market-data --action <ACTION> [args...]
- Auth: python3 scripts/cli.py 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 00700 latest price
Usage Examples
Just talk to your AI assistant in natural language:
Market Data:
Get 00700 latest price
Show me AAPL's daily bars for the last 5 days
Get real-time quotes for 09988
Trading:
Show my account list
Check my account balance
Buy 100 shares of 00700 at enhanced limit price 350
Cancel my open order for AAPL
Show my open orders
Show my order history
Account:
What are my current positions?
Available Endpoints
| Endpoint | Description |
|---|---|
stock_snapshot | Get real-time stock snapshot (HK, US, A-shares) |
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) |
get_instruments | Get stock/ETF instrument info |
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_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 |
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 (sandbox) or prod (live) |
WEBULL_REGION_ID | us | Set to hk for HK 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.hk | events-api.webull.hk | data-api.webull.hk |
| Sandbox | api.sandbox.webull.hk | events-api.sandbox.webull.hk | data-api.sandbox.webull.hk |
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: 00700 ===
Symbol: 00700
Price: 350.20
Pre Close: 348.60
Change: 1.60
...
- Success: disclaimer + formatted data to stdout, exit code 0
- Error: error message to stderr, exit code 1
- HK region: English + Simplified Chinese + Traditional Chinese disclaimer
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 python3 scripts/cli.py 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, 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.hk
- Webull MCP Server: Webull MCP
- Python SDK:
pip install webull-openapi-python-sdk