webull-openapi-python-sdk 2.0.18__py3-none-any.whl → 3.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. samples/screener/screener_client.py +55 -2
  2. webull/__init__.py +1 -1
  3. webull/core/__init__.py +1 -1
  4. webull/core/http/initializer/config/bean/query_config_request.py +1 -1
  5. webull/core/http/initializer/token/bean/check_token_request.py +1 -1
  6. webull/core/http/initializer/token/bean/create_token_request.py +1 -1
  7. webull/core/http/initializer/token/bean/refresh_token_request.py +1 -1
  8. webull/data/__init__.py +1 -1
  9. webull/data/data_streaming_client.py +3 -1
  10. webull/data/internal/quotes_client.py +2 -2
  11. webull/data/quotes/fundamentals.py +19 -0
  12. webull/data/quotes/instrument.py +148 -1
  13. webull/data/quotes/screener.py +179 -0
  14. webull/data/quotes/subscribe/notice_decoder.py +34 -0
  15. webull/data/quotes/subscribe/payload_type.py +2 -1
  16. webull/data/request/get_analyst_rating_request.py +2 -1
  17. webull/data/request/get_analyst_target_price_request.py +2 -1
  18. webull/data/request/get_batch_historical_bars_request.py +1 -1
  19. webull/data/request/get_capital_flow_request.py +1 -1
  20. webull/data/request/get_company_profile_request.py +2 -1
  21. webull/data/request/get_corp_action_request.py +1 -1
  22. webull/data/request/get_crypto_historical_bars_request.py +1 -1
  23. webull/data/request/get_crypto_instruments_request.py +5 -1
  24. webull/data/request/get_crypto_instruments_request_v2.py +41 -0
  25. webull/data/request/get_crypto_snapshot_request.py +1 -1
  26. webull/data/request/get_dividend_calendar_request.py +1 -1
  27. webull/data/request/get_earnings_calendar_request.py +1 -1
  28. webull/data/request/get_eod_bars_request.py +1 -1
  29. webull/data/request/get_event_bars_request.py +1 -1
  30. webull/data/request/get_event_depth_request.py +2 -1
  31. webull/data/request/get_event_events_request.py +2 -1
  32. webull/data/request/get_event_instrument_request.py +5 -1
  33. webull/data/request/get_event_instrument_request_v2.py +45 -0
  34. webull/data/request/get_event_series_categories.py +2 -1
  35. webull/data/request/get_event_series_request.py +5 -1
  36. webull/data/request/get_event_series_request_v2.py +37 -0
  37. webull/data/request/get_event_snapshot_request.py +2 -1
  38. webull/data/request/get_event_tick_request.py +2 -1
  39. webull/data/request/get_financials_alert_request.py +1 -1
  40. webull/data/request/get_financials_balance_sheet_request.py +1 -1
  41. webull/data/request/get_financials_cashflow_request.py +1 -1
  42. webull/data/request/get_financials_income_request.py +1 -1
  43. webull/data/request/get_financials_indicators_request.py +1 -1
  44. webull/data/request/get_footprint_request.py +1 -1
  45. webull/data/request/get_forecast_eps_request.py +1 -1
  46. webull/data/request/get_fund_allocation_request.py +1 -1
  47. webull/data/request/get_fund_brief_request.py +1 -1
  48. webull/data/request/get_fund_dividends_request.py +5 -1
  49. webull/data/request/get_fund_dividends_request_v2.py +35 -0
  50. webull/data/request/get_fund_files_request.py +1 -1
  51. webull/data/request/get_fund_holdings_request.py +1 -1
  52. webull/data/request/get_fund_net_value_request.py +1 -1
  53. webull/data/request/get_fund_performance_request.py +1 -1
  54. webull/data/request/get_fund_rating_request.py +1 -1
  55. webull/data/request/get_fund_splits_request.py +1 -1
  56. webull/data/request/get_futures_depth_request.py +1 -1
  57. webull/data/request/get_futures_footprint_request.py +1 -1
  58. webull/data/request/get_futures_historical_bars_request.py +1 -1
  59. webull/data/request/get_futures_instruments_by_code_request.py +1 -1
  60. webull/data/request/get_futures_instruments_request.py +2 -1
  61. webull/data/request/get_futures_product_class.py +2 -1
  62. webull/data/request/get_futures_products_request.py +2 -1
  63. webull/data/request/get_futures_snapshot_request.py +1 -1
  64. webull/data/request/get_futures_tick_request.py +1 -1
  65. webull/data/request/get_historical_bars_request.py +1 -1
  66. webull/data/request/get_industry_comparison_request.py +1 -1
  67. webull/data/request/get_instruments_request.py +5 -1
  68. webull/data/request/get_instruments_request_v2.py +44 -0
  69. webull/data/request/get_noii_bars_request.py +1 -1
  70. webull/data/request/get_noii_snapshot_request.py +2 -1
  71. webull/data/request/get_option_bars_request.py +1 -1
  72. webull/data/request/get_option_contracts_request.py +5 -1
  73. webull/data/request/get_option_contracts_request_v2.py +78 -0
  74. webull/data/request/get_option_snapshot_request.py +1 -1
  75. webull/data/request/get_option_tick_request.py +1 -1
  76. webull/data/request/get_quotes_request.py +1 -1
  77. webull/data/request/get_sec_filings_request.py +1 -1
  78. webull/data/request/get_snapshot_request.py +1 -1
  79. webull/data/request/get_tick_request.py +1 -1
  80. webull/data/request/screener/get_52whl_request.py +4 -0
  81. webull/data/request/screener/get_52whl_request_v2.py +45 -0
  82. webull/data/request/screener/get_gainers_losers_request.py +5 -1
  83. webull/data/request/screener/get_gainers_losers_request_v2.py +94 -0
  84. webull/data/request/screener/get_high_dividend_request.py +4 -0
  85. webull/data/request/screener/get_high_dividend_request_v2.py +41 -0
  86. webull/data/request/screener/get_market_sectors_detail_request.py +4 -0
  87. webull/data/request/screener/get_market_sectors_detail_request_v2.py +47 -0
  88. webull/data/request/screener/get_market_sectors_request.py +5 -1
  89. webull/data/request/screener/get_market_sectors_request_v2.py +43 -0
  90. webull/data/request/screener/get_most_active_request.py +5 -1
  91. webull/data/request/screener/get_most_active_request_v2.py +92 -0
  92. webull/data/request/subscribe_request.py +1 -1
  93. webull/data/request/unsubscribe_request.py +1 -1
  94. webull/data/request/watchlist/add_watchlist_instruments_request.py +2 -1
  95. webull/data/request/watchlist/create_watchlist_request.py +1 -1
  96. webull/data/request/watchlist/delete_watchlist_request.py +1 -1
  97. webull/data/request/watchlist/get_watchlist_instruments_request.py +2 -1
  98. webull/data/request/watchlist/get_watchlist_request.py +1 -1
  99. webull/data/request/watchlist/remove_watchlist_instruments_request.py +2 -1
  100. webull/data/request/watchlist/update_watchlist_instruments_request.py +2 -1
  101. webull/data/request/watchlist/update_watchlist_request.py +1 -1
  102. webull/trade/__init__.py +1 -1
  103. webull/trade/request/cancel_order_request.py +1 -1
  104. webull/trade/request/get_account_balance_request.py +1 -1
  105. webull/trade/request/get_account_positions_request.py +1 -1
  106. webull/trade/request/get_account_profile_request.py +1 -1
  107. webull/trade/request/get_activities_request.py +4 -0
  108. webull/trade/request/get_activities_request_v2.py +41 -0
  109. webull/trade/request/get_app_subscriptions.py +1 -1
  110. webull/trade/request/get_open_orders_request.py +1 -1
  111. webull/trade/request/get_order_detail_request.py +1 -1
  112. webull/trade/request/get_today_orders_request.py +1 -1
  113. webull/trade/request/get_trade_calendar_request.py +1 -1
  114. webull/trade/request/get_trade_instrument_detail_request.py +1 -1
  115. webull/trade/request/get_trade_security_detail_request.py +1 -1
  116. webull/trade/request/get_tradeable_instruments_request.py +1 -1
  117. webull/trade/request/palce_order_request.py +1 -1
  118. webull/trade/request/place_order_request.py +1 -1
  119. webull/trade/request/place_order_request_v2.py +1 -1
  120. webull/trade/request/replace_order_request.py +1 -1
  121. webull/trade/request/replace_order_request_v2.py +1 -1
  122. webull/trade/request/v2/cancel_option_request.py +1 -1
  123. webull/trade/request/v2/cancel_order_request.py +1 -1
  124. webull/trade/request/v2/get_account_balance_request.py +1 -1
  125. webull/trade/request/v2/get_account_list.py +1 -3
  126. webull/trade/request/v2/get_account_list_request.py +1 -3
  127. webull/trade/request/v2/get_account_position_details_request.py +4 -0
  128. webull/trade/request/v2/get_account_position_details_request_v2.py +31 -0
  129. webull/trade/request/v2/get_account_positions_request.py +1 -1
  130. webull/trade/request/v2/get_order_detail_request.py +1 -1
  131. webull/trade/request/v2/get_order_executions_request.py +5 -0
  132. webull/trade/request/v2/get_order_executions_request_v2.py +35 -0
  133. webull/trade/request/v2/get_order_history_request.py +1 -1
  134. webull/trade/request/v2/get_order_open_request.py +1 -1
  135. webull/trade/request/v2/palce_order_request.py +1 -1
  136. webull/trade/request/v2/place_option_request.py +1 -1
  137. webull/trade/request/v2/place_order_request.py +1 -1
  138. webull/trade/request/v2/preview_option_request.py +1 -1
  139. webull/trade/request/v2/preview_order_request.py +1 -1
  140. webull/trade/request/v2/replace_option_request.py +1 -1
  141. webull/trade/request/v2/replace_order_request.py +1 -1
  142. webull/trade/request/v3/batch_place_order_request.py +1 -1
  143. webull/trade/request/v3/cancel_order_request.py +1 -1
  144. webull/trade/request/v3/get_order_detail_request.py +1 -1
  145. webull/trade/request/v3/get_order_history_request.py +5 -1
  146. webull/trade/request/v3/get_order_history_request_v2.py +35 -0
  147. webull/trade/request/v3/get_order_open_request.py +5 -1
  148. webull/trade/request/v3/get_order_open_request_v2.py +27 -0
  149. webull/trade/request/v3/place_order_request.py +1 -1
  150. webull/trade/request/v3/preview_order_request.py +1 -1
  151. webull/trade/request/v3/replace_order_request.py +1 -1
  152. webull/trade/trade/activity.py +33 -0
  153. webull/trade/trade/v2/account_info_v2.py +24 -0
  154. webull/trade/trade/v3/{order_opration_v3.py → order_operation_v3.py} +94 -1
  155. webull/trade/trade_client.py +1 -1
  156. {webull_openapi_python_sdk-2.0.18.dist-info → webull_openapi_python_sdk-3.0.0.dist-info}/METADATA +1 -1
  157. {webull_openapi_python_sdk-2.0.18.dist-info → webull_openapi_python_sdk-3.0.0.dist-info}/RECORD +161 -143
  158. {webull_openapi_python_sdk-2.0.18.dist-info → webull_openapi_python_sdk-3.0.0.dist-info}/WHEEL +0 -0
  159. {webull_openapi_python_sdk-2.0.18.dist-info → webull_openapi_python_sdk-3.0.0.dist-info}/licenses/LICENSE +0 -0
  160. {webull_openapi_python_sdk-2.0.18.dist-info → webull_openapi_python_sdk-3.0.0.dist-info}/licenses/NOTICE +0 -0
  161. {webull_openapi_python_sdk-2.0.18.dist-info → webull_openapi_python_sdk-3.0.0.dist-info}/top_level.txt +0 -0
@@ -19,7 +19,7 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetFinancialsBalanceSheetRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/fundamentals/financial/balance-sheet", version='v2', method="GET",
22
+ ApiRequest.__init__(self, "/market-data/fundamentals/balance-sheets/get", version='v3', method="GET",
23
23
  query_params={})
24
24
 
25
25
  def set_symbol(self, symbol):
@@ -19,7 +19,7 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetFinancialsCashflowRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/fundamentals/financial/cash-flow", version='v2', method="GET",
22
+ ApiRequest.__init__(self, "/market-data/fundamentals/cash-flows/get", version='v3', method="GET",
23
23
  query_params={})
24
24
 
25
25
  def set_symbol(self, symbol):
@@ -19,7 +19,7 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetFinancialsIncomeRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/fundamentals/financial/income", version='v2', method="GET",
22
+ ApiRequest.__init__(self, "/market-data/fundamentals/income-statements/get", version='v3', method="GET",
23
23
  query_params={})
24
24
 
25
25
  def set_symbol(self, symbol):
@@ -19,7 +19,7 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetFinancialsIndicatorsRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/fundamentals/financial/indicators", version='v2', method="GET",
22
+ ApiRequest.__init__(self, "/market-data/fundamentals/indicators/get", version='v3', method="GET",
23
23
  query_params={})
24
24
 
25
25
  def set_symbol(self, symbol):
@@ -17,7 +17,7 @@ from webull.core.request import ApiRequest
17
17
 
18
18
  class GetFootprintRequest(ApiRequest):
19
19
  def __init__(self):
20
- ApiRequest.__init__(self, "/openapi/market-data/stock/footprint", version='v2', method="GET", query_params={})
20
+ ApiRequest.__init__(self, "/market-data/stocks/footprints/list", version='v3', method="GET", query_params={})
21
21
 
22
22
  def set_symbols(self, symbols):
23
23
  if isinstance(symbols, str):
@@ -19,7 +19,7 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetForecastEpsRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/fundamentals/stock/forecast-eps", version='v2', method="GET",
22
+ ApiRequest.__init__(self, "/market-data/fundamentals/forecast-eps/get", version='v3', method="GET",
23
23
  query_params={})
24
24
 
25
25
  def set_symbol(self, symbol):
@@ -19,7 +19,7 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetFundAllocationRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/fundamentals/fund/allocation", version='v2', method="GET",
22
+ ApiRequest.__init__(self, "/market-data/fundamentals/fund-allocations/get", version='v3', method="GET",
23
23
  query_params={})
24
24
 
25
25
  def set_symbol(self, symbol):
@@ -19,7 +19,7 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetFundBriefRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/fundamentals/fund/brief", version='v2', method="GET",
22
+ ApiRequest.__init__(self, "/market-data/fundamentals/fund-brief/get", version='v3', method="GET",
23
23
  query_params={})
24
24
 
25
25
  def set_symbol(self, symbol):
@@ -18,8 +18,12 @@ from webull.core.request import ApiRequest
18
18
 
19
19
 
20
20
  class GetFundDividendsRequest(ApiRequest):
21
+ """
22
+ .. deprecated::
23
+ Use :class:`GetFundDividendsRequestV2` instead.
24
+ """
21
25
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/fundamentals/fund/dividends", version='v2', method="GET",
26
+ ApiRequest.__init__(self, "/openapi/fundamentals/fund/dividends", version='v3', method="GET",
23
27
  query_params={})
24
28
 
25
29
  def set_symbol(self, symbol):
@@ -0,0 +1,35 @@
1
+ # Copyright 2022 Webull
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ # coding=utf-8
16
+
17
+ from webull.core.request import ApiRequest
18
+
19
+
20
+ class GetFundDividendsRequestV2(ApiRequest):
21
+ def __init__(self):
22
+ ApiRequest.__init__(self, "/market-data/fundamentals/fund-dividends/get", version='v3', method="GET",
23
+ query_params={})
24
+
25
+ def set_symbol(self, symbol):
26
+ if symbol:
27
+ self.add_query_param("symbol", symbol)
28
+
29
+ def set_category(self, category):
30
+ if category:
31
+ self.add_query_param("category", category)
32
+
33
+ def set_pagination_key(self, pagination_key):
34
+ if pagination_key:
35
+ self.add_query_param("pagination_key", pagination_key)
@@ -19,7 +19,7 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetFundFilesRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/fundamentals/fund/files", version='v2', method="GET",
22
+ ApiRequest.__init__(self, "/market-data/fundamentals/fund-files/get", version='v3', method="GET",
23
23
  query_params={})
24
24
 
25
25
  def set_symbol(self, symbol):
@@ -19,7 +19,7 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetFundHoldingsRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/fundamentals/fund/holdings", version='v2', method="GET",
22
+ ApiRequest.__init__(self, "/market-data/fundamentals/fund-holdings/get", version='v3', method="GET",
23
23
  query_params={})
24
24
 
25
25
  def set_symbol(self, symbol):
@@ -19,7 +19,7 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetFundNetValueRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/fundamentals/fund/net-value", version='v2', method="GET",
22
+ ApiRequest.__init__(self, "/market-data/fundamentals/fund-net-values/get", version='v3', method="GET",
23
23
  query_params={})
24
24
 
25
25
  def set_symbol(self, symbol):
@@ -19,7 +19,7 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetFundPerformanceRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/fundamentals/fund/performance", version='v2', method="GET",
22
+ ApiRequest.__init__(self, "/market-data/fundamentals/fund-performances/get", version='v3', method="GET",
23
23
  query_params={})
24
24
 
25
25
  def set_symbol(self, symbol):
@@ -19,7 +19,7 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetFundRatingRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/fundamentals/fund/rating", version='v2', method="GET",
22
+ ApiRequest.__init__(self, "/market-data/fundamentals/fund-ratings/get", version='v3', method="GET",
23
23
  query_params={})
24
24
 
25
25
  def set_symbol(self, symbol):
@@ -19,7 +19,7 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetFundSplitsRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/fundamentals/fund/splits", version='v2', method="GET",
22
+ ApiRequest.__init__(self, "/market-data/fundamentals/fund-splits/get", version='v3', method="GET",
23
23
  query_params={})
24
24
 
25
25
  def set_symbol(self, symbol):
@@ -19,7 +19,7 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetFuturesDepthRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/market-data/futures/depth", version='v2', method="GET", query_params={})
22
+ ApiRequest.__init__(self, "/market-data/futures/depths/list", version='v3', method="GET", query_params={})
23
23
 
24
24
  def set_symbol(self, symbol):
25
25
  self.add_query_param("symbol", symbol)
@@ -17,7 +17,7 @@ from webull.core.request import ApiRequest
17
17
 
18
18
  class GetFuturesFootprintRequest(ApiRequest):
19
19
  def __init__(self):
20
- ApiRequest.__init__(self, "/openapi/market-data/futures/footprint", version='v2', method="GET", query_params={})
20
+ ApiRequest.__init__(self, "/market-data/futures/footprints/list", version='v3', method="GET", query_params={})
21
21
 
22
22
  def set_symbols(self, symbols):
23
23
  if isinstance(symbols, str):
@@ -17,7 +17,7 @@ from webull.core.request import ApiRequest
17
17
 
18
18
  class GetFuturesHistoricalBarsRequest(ApiRequest):
19
19
  def __init__(self):
20
- ApiRequest.__init__(self, "/openapi/market-data/futures/bars", version='v2', method="GET", query_params={})
20
+ ApiRequest.__init__(self, "/market-data/futures/bars/list", version='v3', method="GET", query_params={})
21
21
 
22
22
  def set_symbols(self, symbol):
23
23
  self.add_query_param("symbols", symbol)
@@ -18,7 +18,7 @@ from webull.core.request import ApiRequest
18
18
 
19
19
  class GetFuturesInstrumentsByCodeRequest(ApiRequest):
20
20
  def __init__(self):
21
- ApiRequest.__init__(self, "/openapi/instrument/futures/by-code", version='v2', method="GET", query_params={})
21
+ ApiRequest.__init__(self, "/openapi/instrument/futures/by-code", version='v3', method="GET", query_params={})
22
22
 
23
23
  def set_codes(self, code):
24
24
  self.add_query_param("code", code)
@@ -19,7 +19,8 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetFuturesInstrumentsRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/instrument/futures/list", version='v2', method="GET", query_params={})
22
+ ApiRequest.__init__(self, "/trading/instruments/futures/contracts/list", version='v3', method="GET",
23
+ query_params={})
23
24
 
24
25
  def set_symbols(self, symbols):
25
26
  if isinstance(symbols, str):
@@ -18,7 +18,8 @@ from webull.core.request import ApiRequest
18
18
 
19
19
  class GetFuturesProductClassRequest(ApiRequest):
20
20
  def __init__(self):
21
- ApiRequest.__init__(self, "/openapi/instrument/futures/product-classes", version='v2', method="GET", query_params={})
21
+ ApiRequest.__init__(self, "/trading/instruments/futures/product-classes/list", version='v3', method="GET",
22
+ query_params={})
22
23
 
23
24
  def set_category(self, category):
24
25
  self.add_query_param("category", category)
@@ -19,7 +19,8 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetFuturesProductsRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/instrument/futures/products", version='v2', method="GET", query_params={})
22
+ ApiRequest.__init__(self, "/trading/instruments/futures/product-codes/list", version='v3', method="GET",
23
+ query_params={})
23
24
 
24
25
  def set_category(self, category):
25
26
  self.add_query_param("category", category)
@@ -19,7 +19,7 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetFuturesSnapshotRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/market-data/futures/snapshot", version='v2', method="GET", query_params={})
22
+ ApiRequest.__init__(self, "/market-data/futures/snapshots/list", version='v3', method="GET", query_params={})
23
23
 
24
24
  def set_symbols(self, symbols):
25
25
  if isinstance(symbols, str):
@@ -19,7 +19,7 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetFuturesTickRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/market-data/futures/tick", version='v2', method="GET", query_params={})
22
+ ApiRequest.__init__(self, "/market-data/futures/ticks/list", version='v3', method="GET", query_params={})
23
23
 
24
24
  def set_symbol(self, symbol):
25
25
  self.add_query_param("symbol", symbol)
@@ -17,7 +17,7 @@ from webull.core.request import ApiRequest
17
17
 
18
18
  class GetHistoricalBarsRequest(ApiRequest):
19
19
  def __init__(self):
20
- ApiRequest.__init__(self, "/openapi/market-data/stock/bars", version='v2', method="GET", query_params={})
20
+ ApiRequest.__init__(self, "/market-data/stocks/bars/get", version='v3', method="GET", query_params={})
21
21
 
22
22
  def set_symbol(self, symbol):
23
23
  self.add_query_param("symbol", symbol)
@@ -19,7 +19,7 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetIndustryComparisonRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/fundamentals/stock/industry-comparison", version='v2', method="GET",
22
+ ApiRequest.__init__(self, "/market-data/fundamentals/industry-comparisons/get", version='v3', method="GET",
23
23
  query_params={})
24
24
 
25
25
  def set_symbol(self, symbol):
@@ -17,8 +17,12 @@
17
17
  from webull.core.request import ApiRequest
18
18
 
19
19
  class GetInstrumentsRequest(ApiRequest):
20
+ """
21
+ .. deprecated::
22
+ Use :class:`GetInstrumentsRequestV2` instead.
23
+ """
20
24
  def __init__(self):
21
- ApiRequest.__init__(self, "/openapi/instrument/stock/list", version='v2', method="GET", query_params={})
25
+ ApiRequest.__init__(self, "/openapi/instrument/stock/list", version='v3', method="GET", query_params={})
22
26
 
23
27
  def set_symbols(self, symbols):
24
28
  if isinstance(symbols, str):
@@ -0,0 +1,44 @@
1
+ # Copyright 2022 Webull
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ # coding=utf-8
16
+
17
+ from webull.core.request import ApiRequest
18
+
19
+
20
+ class GetInstrumentsRequestV2(ApiRequest):
21
+ def __init__(self):
22
+ ApiRequest.__init__(self, "/trading/instruments/stocks/profiles/list", version='v3', method="GET",
23
+ query_params={})
24
+
25
+ def set_symbols(self, symbols):
26
+ if isinstance(symbols, str):
27
+ self.add_query_param("symbols", symbols)
28
+ elif isinstance(symbols, list):
29
+ self.add_query_param("symbols", ",".join(symbols))
30
+
31
+ def set_category(self, category):
32
+ self.add_query_param("category", category)
33
+
34
+ def set_status(self, status):
35
+ if status:
36
+ self.add_query_param("status", status)
37
+
38
+ def set_sub_category(self, sub_category):
39
+ if sub_category:
40
+ self.add_query_param("sub_category", sub_category)
41
+
42
+ def set_pagination_key(self, pagination_key):
43
+ if pagination_key:
44
+ self.add_query_param("pagination_key", pagination_key)
@@ -26,7 +26,7 @@ class GetNoiiBarsRequest(ApiRequest):
26
26
  """
27
27
 
28
28
  def __init__(self):
29
- ApiRequest.__init__(self, "/openapi/market-data/stock/noii/bars", version="v2", method="GET", query_params={})
29
+ ApiRequest.__init__(self, "/market-data/stocks/noii-bars/list", version="v3", method="GET", query_params={})
30
30
 
31
31
  def set_symbol(self, symbol):
32
32
  """
@@ -30,7 +30,8 @@ class GetNoiiSnapshotRequest(ApiRequest):
30
30
  """
31
31
 
32
32
  def __init__(self):
33
- ApiRequest.__init__(self, "/openapi/market-data/stock/noii/snapshot", version="v2", method="GET", query_params={})
33
+ ApiRequest.__init__(self, "/market-data/stocks/noii-snapshots/list", version="v3", method="GET",
34
+ query_params={})
34
35
 
35
36
  def set_symbol(self, symbol):
36
37
  """
@@ -25,7 +25,7 @@ class GetOptionBarsRequest(ApiRequest):
25
25
  """
26
26
 
27
27
  def __init__(self):
28
- ApiRequest.__init__(self, "/openapi/market-data/option/bars", version='v2', method="GET", query_params={})
28
+ ApiRequest.__init__(self, "/market-data/options/bars/list", version='v3', method="GET", query_params={})
29
29
 
30
30
  def set_symbols(self, symbols):
31
31
  """
@@ -18,8 +18,12 @@ from webull.core.request import ApiRequest
18
18
 
19
19
 
20
20
  class GetOptionContractsRequest(ApiRequest):
21
+ """
22
+ .. deprecated::
23
+ Use :class:`GetOptionContractsRequestV2` instead.
24
+ """
21
25
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/instrument/option/contracts", version="v2", method="GET",
26
+ ApiRequest.__init__(self, "/openapi/instrument/option/contracts", version="v3", method="GET",
23
27
  query_params={})
24
28
 
25
29
  def set_category(self, category):
@@ -0,0 +1,78 @@
1
+ # Copyright 2022 Webull
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ # coding=utf-8
16
+
17
+ from webull.core.request import ApiRequest
18
+
19
+
20
+ class GetOptionContractsRequestV2(ApiRequest):
21
+ def __init__(self):
22
+ ApiRequest.__init__(self, "/trading/instruments/options/contracts/list", version="v3", method="GET",
23
+ query_params={})
24
+
25
+ def set_category(self, category):
26
+ self.add_query_param("category", category)
27
+
28
+ def set_option_symbols(self, option_symbols):
29
+ if option_symbols:
30
+ self.add_query_param("option_symbols", option_symbols)
31
+
32
+ def set_underlying_symbols(self, underlying_symbols):
33
+ if underlying_symbols:
34
+ self.add_query_param("underlying_symbols", underlying_symbols)
35
+
36
+ def set_status(self, status):
37
+ if status:
38
+ self.add_query_param("status", status)
39
+
40
+ def set_start_date(self, start_date):
41
+ if start_date:
42
+ self.add_query_param("start_date", start_date)
43
+
44
+ def set_end_date(self, end_date):
45
+ if end_date:
46
+ self.add_query_param("end_date", end_date)
47
+
48
+ def set_root_symbol(self, root_symbol):
49
+ if root_symbol:
50
+ self.add_query_param("root_symbol", root_symbol)
51
+
52
+ def set_option_type(self, option_type):
53
+ if option_type:
54
+ self.add_query_param("option_type", option_type)
55
+
56
+ def set_style(self, style):
57
+ if style:
58
+ self.add_query_param("style", style)
59
+
60
+ def set_strike_price_gte(self, strike_price_gte):
61
+ if strike_price_gte is not None:
62
+ self.add_query_param("strike_price_gte", strike_price_gte)
63
+
64
+ def set_strike_price_lte(self, strike_price_lte):
65
+ if strike_price_lte is not None:
66
+ self.add_query_param("strike_price_lte", strike_price_lte)
67
+
68
+ def set_ppind(self, ppind):
69
+ if ppind is not None:
70
+ self.add_query_param("ppind", ppind)
71
+
72
+ def set_show_deliverables(self, show_deliverables):
73
+ if show_deliverables is not None:
74
+ self.add_query_param("show_deliverables", show_deliverables)
75
+
76
+ def set_pagination_key(self, pagination_key):
77
+ if pagination_key:
78
+ self.add_query_param("pagination_key", pagination_key)
@@ -25,7 +25,7 @@ class GetOptionSnapshotRequest(ApiRequest):
25
25
  """
26
26
 
27
27
  def __init__(self):
28
- ApiRequest.__init__(self, "/openapi/market-data/option/snapshot", version='v2', method="GET", query_params={})
28
+ ApiRequest.__init__(self, "/market-data/options/snapshots/list", version='v3', method="GET", query_params={})
29
29
 
30
30
  def set_symbols(self, symbols):
31
31
  """
@@ -25,7 +25,7 @@ class GetOptionTickRequest(ApiRequest):
25
25
  """
26
26
 
27
27
  def __init__(self):
28
- ApiRequest.__init__(self, "/openapi/market-data/option/tick", version='v2', method="GET", query_params={})
28
+ ApiRequest.__init__(self, "/market-data/options/ticks/list", version='v3', method="GET", query_params={})
29
29
 
30
30
  def set_symbol(self, symbol):
31
31
  """
@@ -18,7 +18,7 @@ from webull.core.request import ApiRequest
18
18
 
19
19
  class GetQuotesRequest(ApiRequest):
20
20
  def __init__(self):
21
- ApiRequest.__init__(self, "/openapi/market-data/stock/quotes", version='v2', method="GET", query_params={})
21
+ ApiRequest.__init__(self, "/market-data/stocks/depths/list", version='v3', method="GET", query_params={})
22
22
 
23
23
  def set_symbol(self, symbol):
24
24
  self.add_query_param("symbol", symbol)
@@ -19,7 +19,7 @@ from webull.core.request import ApiRequest
19
19
 
20
20
  class GetSecFilingsRequest(ApiRequest):
21
21
  def __init__(self):
22
- ApiRequest.__init__(self, "/openapi/fundamentals/stock/filings", version='v2', method="GET",
22
+ ApiRequest.__init__(self, "/market-data/fundamentals/filings/list", version='v3', method="GET",
23
23
  query_params={})
24
24
 
25
25
  def set_symbol(self, symbol):
@@ -18,7 +18,7 @@ from webull.core.request import ApiRequest
18
18
 
19
19
  class GetSnapshotRequest(ApiRequest):
20
20
  def __init__(self):
21
- ApiRequest.__init__(self, "/openapi/market-data/stock/snapshot", version='v2', method="GET", query_params={})
21
+ ApiRequest.__init__(self, "/market-data/stocks/snapshots/list", version='v3', method="GET", query_params={})
22
22
 
23
23
  def set_symbols(self, symbols):
24
24
  if isinstance(symbols, str):
@@ -18,7 +18,7 @@ from webull.core.request import ApiRequest
18
18
 
19
19
  class GetTickRequest(ApiRequest):
20
20
  def __init__(self):
21
- ApiRequest.__init__(self, "/openapi/market-data/stock/tick", version='v2', method="GET", query_params={})
21
+ ApiRequest.__init__(self, "/market-data/stocks/ticks/list", version='v3', method="GET", query_params={})
22
22
 
23
23
  def set_symbol(self, symbol):
24
24
  self.add_query_param("symbol", symbol)
@@ -18,6 +18,10 @@ from webull.core.request import ApiRequest
18
18
 
19
19
 
20
20
  class Get52WHLRequest(ApiRequest):
21
+ """
22
+ .. deprecated::
23
+ Use :class:`Get52WHLRequestV2` instead.
24
+ """
21
25
  def __init__(self):
22
26
  ApiRequest.__init__(self, "/openapi/market-data/screener/52whl", version='v2', method="GET",
23
27
  query_params={})
@@ -0,0 +1,45 @@
1
+ # Copyright 2022 Webull
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ # coding=utf-8
16
+
17
+ from webull.core.request import ApiRequest
18
+
19
+
20
+ class Get52WHLRequestV2(ApiRequest):
21
+ """
22
+ Request class for 52 Week High/Low Rank API.
23
+
24
+ The ranking is not paginated and returns the top 200 results.
25
+ """
26
+
27
+ def __init__(self):
28
+ ApiRequest.__init__(self, "/market-data/screeners/week52-high-low/list", version='v3', method="GET",
29
+ query_params={})
30
+
31
+ def set_rank_type(self, rank_type):
32
+ if rank_type:
33
+ self.add_query_param("rank_type", rank_type)
34
+
35
+ def set_category(self, category):
36
+ if category:
37
+ self.add_query_param("category", category)
38
+
39
+ def set_sort_by(self, sort_by):
40
+ if sort_by:
41
+ self.add_query_param("sort_by", sort_by)
42
+
43
+ def set_direction(self, direction):
44
+ if direction:
45
+ self.add_query_param("direction", direction)