Data API
The Data API uses the HTTP protocol for on-demand market data queries. Use it for historical data retrieval, snapshot lookups, and backtesting. For the full list of available endpoints, see Market Data API Overview.
For real-time streaming data via MQTT, see Data Streaming API.
Base URLs
| Environment | URL |
|---|---|
| Production | https://api.webull.com |
| Test | https://us-openapi-alb.uat.webullbroker.com |
Request Format
All Data API requests are standard HTTP GET or POST calls. Every request must include the authentication headers described in Authentication Overview.
Example request:
GET /openapi/market-data/stock/snapshot?symbols=AAPL&category=US_STOCK&extend_hour_required=false&overnight_required=false
x-app-key: <your_app_key>
x-timestamp: 2025-03-19T10:00:00Z
x-signature-algorithm: HMAC-SHA1
x-signature-version: 1.0
x-signature-nonce: <unique_nonce>
x-version: v2
x-signature: <computed_signature>
The app_secret is used only for computing the signature on the client side. It is not included as a request header. See Signature for details.
Response Format
All responses are returned as JSON. A successful response returns HTTP 200 with the data payload directly:
[
{
"symbol": "AAPL",
"instrument_id": "913256135",
"price": "185.50",
"open": "184.00",
"high": "186.20",
"low": "183.80",
"volume": "52340000",
"change": "1.50",
"change_ratio": "0.0082",
"pre_close": "184.00",
"last_trade_time": 1710849600000
}
]
Timestamps in responses are Unix timestamps in milliseconds. Prices and numeric values are returned as strings to preserve precision.
Asset Categories
When calling Data API endpoints, you need to specify the asset category:
| Category Value | Description |
|---|---|
US_STOCK | US Stocks |
US_ETF | US ETFs |
Futures and crypto endpoints use their own dedicated paths and do not require a category parameter.
Rate Limits
| Limit | Value |
|---|---|
| Market Data API | 300 requests per minute |
If you exceed the rate limit, the server will return an error.