Webull Data API: Quotes, Buying Power & Orders
Webull: Investing & Trading, by Webull Technologies Pte. Ltd., is a brokerage app for US retail investors who follow stocks and ETFs, trade options, futures and crypto, and practice with paper trading before funding a live account. Its watchlists, Level 2 quotes, news and ticker charts support day-to-day market monitoring, while fractional shares, recurring investments, IPO subscriptions and options chains give users several ways to manage their investing routines. Lite and Pro display modes accommodate different trading preferences, and the account view brings buying power, holdings and working orders together.
Buying-power balances separate dayBuyingPower, overnightBuyingPower and optionBp from netLiquidationValue and totalCashValue, with dayTradesRemaining and isPdt providing the pattern-day-trading context. Holdings connect tickerId, quantity and costPrice to lastPrice and unrealizedProfitLoss; market snapshots add bidPrice, askPrice, changeRatio and mkVolume. Chart records carry interval, preClose and timeZone alongside their price bars.
Ticket records track orderId, orderType, filledQuantity, timeInForce and outsideRegularTradingHour, while a ticket review exposes checkVo.reqDtbp for buying-power checks. Watchlist folders associate portfolioId with instrument symbol, addedPrice and addedTime; headlines attach sourceName and sentiment to relTickers. Paper-account balances include todayProfitLoss for comparisons with live capital totals.
Risk-monitoring teams can compare remaining day trades with buying power, bookkeeping tools can mark holdings against quotes, and order-reconciliation jobs can distinguish working tickets from fills. Trading coaches can compare simulated todayProfitLoss and netLiquidationValue with funded-account capital.todayProfitLoss and capital.netLiquidationValue. openData Studio turns these account, quote, position, ticket, watchlist and news records into callable open data; the example records use mock values rather than live account balances or market quotes.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
Account login
POST
/v1/investor-access/session-grantsopenbankingExchanges account credentials for accessToken / refreshToken plus userId, uuid and haveAccount so later quote, trade and watchlist calls can attach a session.
Auth: Unauthenticated. JSON body carries account plus loginPassword, or account plus verificationCode for SMS. The response accessToken is sent as access_token on later calls; refreshToken rotates the session.
- account
- accountType
- loginPassword
- verificationCode
- accessToken
- refreshToken
- userId
- uuid
- tokenExpireTime
- haveAccount
- phone
- userDomain
POST /v1/investor-access/session-grants HTTP/1.1 Content-Type: application/json { "account": "<example-email>", "accountType": 2, "loginPassword": "<loginPassword>", "verificationCode": null }{ "accessToken": "<accessToken>", "refreshToken": "<refreshToken>", "userId": "USER-DEMO-001", "uuid": "00000000-0000-4000-8000-000000000001", "tokenExpireTime": "2026-10-24T12:00:00.000+0000", "haveAccount": true, "email": "<example-email>", "phone": "<example-phone>", "userDomain": "us", "accountType": "2", "appModeType": "Pro" }User profile
GET
/v1/investor-profiles/currentosintReads the signed-in profile: nickName, contact fields, Lite/Pro appModeType, serviceRegionCode and whether a brokerage account is already open.
Auth: accessToken from login, sent as access_token.
- nickName
- phone
- avatarUrl
- haveAccount
- hasSecurityPwd
- appModeType
- regionId
- serviceRegionCode
- userDomain
- cryptoBind
GET /v1/investor-profiles/current HTTP/1.1 access_token: <accessToken>{ "nickName": "example-trader", "email": "<example-email>", "phone": "<example-phone>", "avatarUrl": "/assets/example-avatar.png", "haveAccount": true, "hasSecurityPwd": true, "appModeType": "Pro", "regionId": "6", "serviceRegionCode": "US", "userDomain": "us", "cryptoBind": false }Realtime ticker quote
GET
/v1/market/price-snapshotsopendataReturns live NBBO-style ticks for one or more tickerId values: last price, changeRatio, bid/ask, session high/low and mkVolume used on the quote strip and watchlist cells.
Auth: Device session; accessToken attached when the user is signed in. Splash prefetch can run without a user token.
- tickerId
- symbol
- disSymbol
- name
- exchangeCode
- price
- change
- changeRatio
- close
- preClose
- bidPrice
- askPrice
- high
- low
- fiftyTwoWkHigh
- fiftyTwoWkLow
- mkVolume
- status
GET /v1/market/price-snapshots?tickerId=TICKER-DEMO-001 HTTP/1.1 access_token: <accessToken>[ { "tickerId": "TICKER-DEMO-001", "symbol": "AAPL", "disSymbol": "AAPL", "name": "Apple Inc", "exchangeCode": "NASDAQ", "price": "227.52", "change": "1.84", "changeRatio": "0.0081", "close": "227.52", "preClose": "225.68", "bidPrice": "227.50", "askPrice": "227.53", "high": "228.40", "low": "225.10", "fiftyTwoWkHigh": "260.10", "fiftyTwoWkLow": "164.08", "mkVolume": "48231500", "status": "A", "currencyCode": "USD" } ]OHLC chart bars
GET
/v1/market/candle-seriesopendataPages OHLC bars for the ticker chart: packed data rows plus interval, preClose and timeZone for minute and daily candles.
Auth: accessToken when signed in.
- tickerId
- dataType
- interval
- preClose
- timeZone
- hasMore
- marketId
- data
GET /v1/market/candle-series?tickerId=TICKER-DEMO-001&dataType=m1 HTTP/1.1 access_token: <accessToken>{ "tickerId": "TICKER-DEMO-001", "dataType": "m1", "interval": 60, "preClose": "225.68", "timeZone": "America/New_York", "hasMore": 1, "marketId": "2", "data": [ "1698067200,227.10,227.52,226.80,227.40,1254300" ] }Brokerage account summary
GET
/v1/brokerage/balance-overviewopenfinanceLoads the account header: netLiquidationValue, cash vs market value, day/overnight/option buying power, PDT remaining day trades and availableWithdraw.
Auth: accessToken from login, sent as access_token; scoped to the signed-in secAccountId.
- secAccountId
- brokerId
- accountType
- accountNumber
- currency
- netLiquidationValue
- totalCashValue
- totalMarketValue
- dayBuyingPower
- overnightBuyingPower
- optionBp
- profitLoss
- unrealizedProfitLoss
- dayTradesRemaining
- isPdt
- availableWithdraw
GET /v1/brokerage/balance-overview?secAccountId=ACCOUNT-DEMO-001 HTTP/1.1 access_token: <accessToken>{ "secAccountId": "ACCOUNT-DEMO-001", "brokerId": 8, "accountType": "2", "accountTypeName": "MARGIN", "accountNumber": "DEMO-ACCOUNT-001", "currency": "USD", "netLiquidationValue": "52840.12", "totalCashValue": "4120.55", "totalMarketValue": "48719.57", "dayBuyingPower": "18500.00", "overnightBuyingPower": "9200.00", "optionBp": "6400.00", "profitLoss": "312.40", "unrealizedProfitLoss": "1288.19", "unrealizedProfitLossRate": "0.0271", "dayTradesRemaining": 3, "isPdt": false, "availableWithdraw": "3800.00" }Assets and positions snapshot
GET
/v1/portfolios/asset-snapshotopenfinanceReturns the Positions tab snapshot: nested capital buying-power fields plus positions groups, openOrderQty and openIPOQty.
Auth: accessToken from login.
- capital.netLiquidationValue
- capital.buyingPower
- capital.dayBuyingPower
- capital.overnightBuyingPower
- capital.optionBuyingPower
- capital.totalCashValue
- capital.todayProfitLoss
- capital.unrealizedProfitLoss
- positions
- openOrderQty
- openIPOQty
GET /v1/portfolios/asset-snapshot?secAccountId=ACCOUNT-DEMO-001 HTTP/1.1 access_token: <accessToken>{ "capital": { "netLiquidationValue": "52840.12", "buyingPower": "18500.00", "dayBuyingPower": "18500.00", "overnightBuyingPower": "9200.00", "optionBuyingPower": "6400.00", "totalCashValue": "4120.55", "totalMarketValue": "48719.57", "todayProfitLoss": "312.40", "todayProfitLossRatio": "0.0059", "unrealizedProfitLoss": "1288.19", "currency": "USD" }, "positions": [ { "tickerId": "TICKER-DEMO-001", "quantity": "40", "costPrice": "214.10", "lastPrice": "227.52", "marketValue": "9100.80", "unrealizedProfitLoss": "536.80" } ], "openOrderQty": 2, "openIPOQty": 0 }Ticker position detail
GET
/v1/holdings/instrument-overviewopenfinanceOpens a single-symbol lot: quantity vs costPrice, lastPrice, unrealized and day P&L, plus that ticker's openOrders and filledOrders.
Auth: accessToken from login.
- positionSummary.currency
- positionSummary.marketValue
- positionSummary.unrealizedProfitLoss
- positionSummary.dayProfitLoss
- tickerId
- symbol
- position
- quantity
- costPrice
- lastPrice
- marketValue
- action
GET /v1/holdings/instrument-overview?secAccountId=ACCOUNT-DEMO-001&tickerId=TICKER-DEMO-001 HTTP/1.1 access_token: <accessToken>{ "positionSummary": { "currency": "USD", "marketValue": "9100.80", "unrealizedProfitLoss": "536.80", "unrealizedProfitLossRate": "0.0627", "dayProfitLoss": "73.60", "dayProfitLossRate": "0.0081", "positions": [ { "tickerId": "TICKER-DEMO-001", "symbol": "AAPL", "position": "40", "quantity": "40", "costPrice": "214.10", "lastPrice": "227.52", "marketValue": "9100.80", "unrealizedProfitLoss": "536.80", "action": "BUY", "currency": "USD" } ] }, "openOrders": [], "filledOrders": [] }Open order list
GET
/v1/execution/ticket-ledgeropenfinanceLists working and today's tickets with orderId, side, orderType, limit, fill progress, TIF and extended-hours flag.
Auth: accessToken from login.
- orderId
- comboId
- action
- orderType
- quantity
- lmtPrice
- filledQuantity
- avgFilledPrice
- status
- timeInForce
- outsideRegularTradingHour
- canCancel
- canModify
- openOrders
- todayOrders
GET /v1/execution/ticket-ledger?secAccountId=ACCOUNT-DEMO-001 HTTP/1.1 access_token: <accessToken>{ "openOrders": [ { "orderId": "ORDER-DEMO-001", "comboId": "COMBO-DEMO-001", "action": "BUY", "orderType": "LMT", "quantity": "10", "lmtPrice": "226.50", "filledQuantity": "0", "avgFilledPrice": "0", "status": "Working", "statusStr": "Working", "timeInForce": "DAY", "outsideRegularTradingHour": true, "canCancel": true, "canModify": true } ], "todayOrders": [], "openIpoOrders": [] }Stock order pre-check
POST
/v1/execution/ticket-reviewopenfinancePre-checks (and can place) a stock ticket: buying-power debit in reqDtbp, openOrClose, then placeVo.orderId / comboId when the desk accepts.
Auth: accessToken from login.
- secAccountId
- tickerId
- action
- orderType
- lmtPrice
- quantity
- timeInForce
- outsideRegularTradingHour
- checkVo.confirm
- checkVo.reqDtbp
- checkVo.openOrClose
- placeVo.result
- placeVo.orderId
- placeVo.comboId
POST /v1/execution/ticket-review HTTP/1.1 access_token: <accessToken> Content-Type: application/json { "secAccountId": "ACCOUNT-DEMO-001", "tickerId": "TICKER-DEMO-001", "action": "BUY", "orderType": "LMT", "lmtPrice": "226.50", "quantity": "10", "timeInForce": "DAY", "outsideRegularTradingHour": true }{ "checkVo": { "confirm": true, "forward": true, "openOrClose": "OPEN", "reqDtbp": "2265.00", "reqOnBp": "2265.00", "reqImlBP": "0" }, "placeVo": { "result": true, "orderId": "ORDER-DEMO-002", "comboId": "COMBO-DEMO-002", "lastSerialId": "SN-9001" } }Watchlist portfolios
GET
/v1/lists/instrument-groupsopendataSyncs watchlist folders: portfolioId, name and per-ticker symbol / addedPrice / addedTime used by the Watchlist tab.
Auth: accessToken from login.
- version
- portfolioList
- portfolioId
- name
- categoryType
- sortOrder
- isVisible
- tickerList
- tickerId
- symbol
- addedPrice
- addedTime
GET /v1/lists/instrument-groups HTTP/1.1 access_token: <accessToken>{ "version": 42, "portfolioList": [ { "portfolioId": "WATCHLIST-DEMO-001", "name": "Tech", "categoryType": 0, "sortOrder": 1, "isVisible": true, "tickerList": [ { "tickerId": "TICKER-DEMO-001", "symbol": "AAPL", "name": "Apple Inc", "disSymbol": "AAPL", "addedPrice": "214.10", "addedTime": 1698067200000, "exchangeCode": "NASDAQ" } ] } ] }Realtime news feed
GET
/v1/headlines/streamosintPages the news rail: headline, sourceName, timestamp, sentiment and related tickers used on the News and ticker-headlines screens.
Auth: accessToken when signed in.
- id
- title
- summary
- newsUrl
- sourceName
- newsTime
- sentiment
- sentimentType
- likes
- comments
- relTickers
GET /v1/headlines/stream HTTP/1.1 access_token: <accessToken>[ { "id": "NEWS-DEMO-001", "title": "Illustrative market headline for AAPL", "summary": "Example news summary linked to the sample ticker.", "newsUrl": "/articles/example-market-brief", "sourceName": "Example News Source", "newsTime": "2026-10-23T13:04:00.000+0000", "sentiment": "positive", "sentimentType": "1", "likes": 128, "comments": 14, "relTickers": [ { "tickerId": "TICKER-DEMO-001", "symbol": "AAPL" } ] } ]Paper-trading account summary
GET
/v1/practice/balance-overviewopenfinanceReads the paper-trading blotter: simulated net liquidation, cash vs holdings and paper positions used by the Paper Trade tab.
Auth: accessToken from login, sent as access_token; requires a paper-trading account selected by the signed-in user.
- netLiquidationValue
- totalCashValue
- totalMarketValue
- unrealizedProfitLoss
- todayProfitLoss
- currency
- openOrderQty
- positions
- tickerId
- quantity
- costPrice
GET /v1/practice/balance-overview HTTP/1.1 access_token: <accessToken>{ "netLiquidationValue": "100000.00", "totalCashValue": "64210.40", "totalMarketValue": "35789.60", "unrealizedProfitLoss": "1288.19", "todayProfitLoss": "312.40", "currency": "USD", "openOrderQty": 1, "positions": [ { "tickerId": "TICKER-DEMO-001", "symbol": "AAPL", "quantity": "40", "costPrice": "214.10", "lastPrice": "227.52" } ] }
Data categories
- accounts
- positions
- orders
- quotes
- watchlists
- news
- paper-trading
Where teams use this data
Buying-power vs PDT remaining
A risk bot pulls dayBuyingPower, overnightBuyingPower and optionBp from the account summary, then matches capital.buyingPower and dayTradesRemaining / isPdt so overnight and pattern-day calls page the same ledger.
Lot mark-to-market vs NBBO
A bookkeeping job joins position quantity and costPrice to quote price, bidPrice and askPrice so unrealizedProfitLoss and lastPrice stay in one blotter with the watchlist addedPrice.
Working-order vs fill blotter
A desk poller lists orderId, action, orderType, lmtPrice and filledQuantity, then reconciles checkPlace reqDtbp against the live ticket so DAY vs extended-hours fills do not double-count buying power.
Paper vs live P&L
A coaching feed compares paper-account todayProfitLoss and netLiquidationValue with the live capital.todayProfitLoss so a practice book and a funded book can be scored on the same field names.
Frequently asked questions
What authentication and buying-power fields does the Webull data model include?
The sign-in example exchanges account credentials or an SMS verification code for accessToken, refreshToken, userId, uuid and tokenExpireTime. Protected examples send accessToken in an access_token header; quote snapshots also support a device session before user sign-in. secAccountId identifies the brokerage account and accountNumber is its customer-facing reference. netLiquidationValue, totalCashValue, dayBuyingPower, overnightBuyingPower and optionBp describe balances and trading capacity, while dayTradesRemaining, isPdt and availableWithdraw cover remaining day trades, pattern-day-trading status and available withdrawals. All paths and credential values shown here are illustrative.
What quote and chart data can the examples represent?
Quote snapshots include tickerId, symbol, price, changeRatio, preClose, bidPrice, askPrice, high, low, fiftyTwoWkHigh, fiftyTwoWkLow and mkVolume. Historical chart records provide packed price-bar data with interval, timeZone, preClose and hasMore for pagination. Example prices are mock values, not a live market feed.
How do holdings and order records support reconciliation?
Holdings expose quantity, costPrice, lastPrice and marketValue with unrealizedProfitLoss; positionSummary.dayProfitLoss adds daily profit and loss. Ticket records add orderId, comboId, action, orderType, lmtPrice, filledQuantity and avgFilledPrice, plus timeInForce and outsideRegularTradingHour. The ticket-review example illustrates buying-power checks and an acceptance result; it does not submit a live trade.
Does the data model include paper trading, watchlists and news?
Yes. Paper-account records contain simulated netLiquidationValue, totalCashValue, todayProfitLoss and positions. Watchlists organize tickers by portfolioId with addedPrice and addedTime, while news records carry title, sourceName, newsTime, sentiment and relTickers. Coaching tools can compare paper-account totals with live-account capital fields, and research tools can connect saved instruments with their headlines.
Apps similar to Webull: Investing & Trading
- Robinhood: Trading & Investing — Robinhood Markets is a Menlo Park, California financial-services company whose app trades stocks, ETFs, options, futures, prediction-market event contracts and cryptocurrency, and it launched commission-free options trading in December 2017.
- Fidelity Investments — Fidelity Investments is a Boston brokerage that operates securities execution and clearance, manages mutual funds and ETFs, and also offers cryptocurrency investing plus IRAs, 401(k)s and 529 plans.
- Charles Schwab — Charles Schwab is a Westlake, Texas brokerage for stocks, portfolio management and banking that added fractional S&P 500 shares in June 2020, acquired OptionsXpress in 2011, and acquired TD Ameritrade in October 2020.
- E*TRADE — E*TRADE from Morgan Stanley is a self-directed U.S. brokerage that has offered commission-free trading on U.S.-listed stocks, ETFs and options since October 2019, with E*TRADE Web and Power E*TRADE desks.
- Interactive Brokers — Interactive Brokers is a Greenwich, Connecticut brokerage that routes stocks, options, futures, foreign exchange, bonds and funds on more than 170 markets, and it launched commission-free IBKR Lite U.S. trades in September 2019.
- SoFi Invest — SoFi Active Investing is SoFi's commission- and fee-free brokerage for stocks and ETFs, with Options Level 1 and 2 plus traditional, Roth and SEP IRAs, inside the San Francisco consumer-bank app.
- Moomoo — Moomoo is Futu Holdings' digital brokerage platform, introduced to U.S. investors in 2018, that trades equities and derivatives and offers margin financing and securities lending through licensed subsidiaries.
Topics
- webull data api
- webull quotes
- webull positions
- webull orders
- webull buying power
- webull watchlist
- webull paper trading
- webull market data
- webull account balances
- org.dayup.stocks
Need this app's data API integrated?
We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.
- NDA + SOW on every engagement
- Delivery in 3–7 days
- Payment only after acceptance
- Work scoped to authorized use