massive 2.5.0__tar.gz → 2.7.0__tar.gz

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 (49) hide show
  1. {massive-2.5.0 → massive-2.7.0}/PKG-INFO +1 -1
  2. {massive-2.5.0 → massive-2.7.0}/massive/rest/futures.py +17 -17
  3. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/financials.py +254 -0
  4. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/futures.py +7 -7
  5. {massive-2.5.0 → massive-2.7.0}/massive/rest/reference.py +131 -0
  6. {massive-2.5.0 → massive-2.7.0}/pyproject.toml +1 -1
  7. {massive-2.5.0 → massive-2.7.0}/LICENSE +0 -0
  8. {massive-2.5.0 → massive-2.7.0}/massive/__init__.py +0 -0
  9. {massive-2.5.0 → massive-2.7.0}/massive/exceptions.py +0 -0
  10. {massive-2.5.0 → massive-2.7.0}/massive/logging.py +0 -0
  11. {massive-2.5.0 → massive-2.7.0}/massive/modelclass.py +0 -0
  12. {massive-2.5.0 → massive-2.7.0}/massive/rest/__init__.py +0 -0
  13. {massive-2.5.0 → massive-2.7.0}/massive/rest/aggs.py +0 -0
  14. {massive-2.5.0 → massive-2.7.0}/massive/rest/base.py +0 -0
  15. {massive-2.5.0 → massive-2.7.0}/massive/rest/benzinga.py +0 -0
  16. {massive-2.5.0 → massive-2.7.0}/massive/rest/economy.py +0 -0
  17. {massive-2.5.0 → massive-2.7.0}/massive/rest/etf_global.py +0 -0
  18. {massive-2.5.0 → massive-2.7.0}/massive/rest/financials.py +0 -0
  19. {massive-2.5.0 → massive-2.7.0}/massive/rest/indicators.py +0 -0
  20. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/__init__.py +0 -0
  21. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/aggs.py +0 -0
  22. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/benzinga.py +0 -0
  23. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/common.py +0 -0
  24. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/conditions.py +0 -0
  25. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/contracts.py +0 -0
  26. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/dividends.py +0 -0
  27. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/economy.py +0 -0
  28. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/etf_global.py +0 -0
  29. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/exchanges.py +0 -0
  30. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/indicators.py +0 -0
  31. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/markets.py +0 -0
  32. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/quotes.py +0 -0
  33. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/request.py +0 -0
  34. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/snapshot.py +0 -0
  35. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/splits.py +0 -0
  36. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/summaries.py +0 -0
  37. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/tickers.py +0 -0
  38. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/tmx.py +0 -0
  39. {massive-2.5.0 → massive-2.7.0}/massive/rest/models/trades.py +0 -0
  40. {massive-2.5.0 → massive-2.7.0}/massive/rest/quotes.py +0 -0
  41. {massive-2.5.0 → massive-2.7.0}/massive/rest/snapshot.py +0 -0
  42. {massive-2.5.0 → massive-2.7.0}/massive/rest/summaries.py +0 -0
  43. {massive-2.5.0 → massive-2.7.0}/massive/rest/tmx.py +0 -0
  44. {massive-2.5.0 → massive-2.7.0}/massive/rest/trades.py +0 -0
  45. {massive-2.5.0 → massive-2.7.0}/massive/rest/vX.py +0 -0
  46. {massive-2.5.0 → massive-2.7.0}/massive/websocket/__init__.py +0 -0
  47. {massive-2.5.0 → massive-2.7.0}/massive/websocket/models/__init__.py +0 -0
  48. {massive-2.5.0 → massive-2.7.0}/massive/websocket/models/common.py +0 -0
  49. {massive-2.5.0 → massive-2.7.0}/massive/websocket/models/models.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: massive
3
- Version: 2.5.0
3
+ Version: 2.7.0
4
4
  Summary: Official Massive (formerly Polygon.io) REST and Websocket client.
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -21,7 +21,7 @@ from .models.request import RequestOptionBuilder
21
21
  class FuturesClient(BaseClient):
22
22
  """
23
23
  Client for the Futures REST Endpoints
24
- (aligned with the paths from /futures/vX/...)
24
+ (aligned with the paths from /futures/v1/...)
25
25
  """
26
26
 
27
27
  def list_futures_aggregates(
@@ -40,7 +40,7 @@ class FuturesClient(BaseClient):
40
40
  options: Optional[RequestOptionBuilder] = None,
41
41
  ) -> Union[Iterator[FuturesAgg], HTTPResponse]:
42
42
  """
43
- Endpoint: GET /futures/vX/aggs/{ticker}
43
+ Endpoint: GET /futures/v1/aggs/{ticker}
44
44
 
45
45
  Get aggregates for a futures contract in a given time range.
46
46
  This endpoint returns data that includes:
@@ -48,7 +48,7 @@ class FuturesClient(BaseClient):
48
48
  - volume, dollar_volume, etc.
49
49
  If `next_url` is present, it will be paginated.
50
50
  """
51
- url = f"/futures/vX/aggs/{ticker}"
51
+ url = f"/futures/v1/aggs/{ticker}"
52
52
  return self._paginate(
53
53
  path=url,
54
54
  params=self._get_params(self.list_futures_aggregates, locals()),
@@ -96,11 +96,11 @@ class FuturesClient(BaseClient):
96
96
  options: Optional[RequestOptionBuilder] = None,
97
97
  ) -> Union[Iterator[FuturesContract], HTTPResponse]:
98
98
  """
99
- Endpoint: GET /futures/vX/contracts
99
+ Endpoint: GET /futures/v1/contracts
100
100
 
101
101
  The Contracts endpoint returns a paginated list of futures contracts.
102
102
  """
103
- url = "/futures/vX/contracts"
103
+ url = "/futures/v1/contracts"
104
104
  return self._paginate(
105
105
  path=url,
106
106
  params=self._get_params(self.list_futures_contracts, locals()),
@@ -151,11 +151,11 @@ class FuturesClient(BaseClient):
151
151
  options: Optional[RequestOptionBuilder] = None,
152
152
  ) -> Union[Iterator[FuturesProduct], HTTPResponse]:
153
153
  """
154
- Endpoint: GET /futures/vX/products
154
+ Endpoint: GET /futures/v1/products
155
155
 
156
156
  Returns a list of futures products (including combos).
157
157
  """
158
- url = "/futures/vX/products"
158
+ url = "/futures/v1/products"
159
159
  return self._paginate(
160
160
  path=url,
161
161
  params=self._get_params(self.list_futures_products, locals()),
@@ -184,11 +184,11 @@ class FuturesClient(BaseClient):
184
184
  options: Optional[RequestOptionBuilder] = None,
185
185
  ) -> Union[Iterator[FuturesQuote], HTTPResponse]:
186
186
  """
187
- Endpoint: GET /futures/vX/quotes/{ticker}
187
+ Endpoint: GET /futures/v1/quotes/{ticker}
188
188
 
189
189
  Get quotes for a contract in a given time range (paginated).
190
190
  """
191
- url = f"/futures/vX/quotes/{ticker}"
191
+ url = f"/futures/v1/quotes/{ticker}"
192
192
  return self._paginate(
193
193
  path=url,
194
194
  params=self._get_params(self.list_futures_quotes, locals()),
@@ -217,11 +217,11 @@ class FuturesClient(BaseClient):
217
217
  options: Optional[RequestOptionBuilder] = None,
218
218
  ) -> Union[Iterator[FuturesTrade], HTTPResponse]:
219
219
  """
220
- Endpoint: GET /futures/vX/trades/{ticker}
220
+ Endpoint: GET /futures/v1/trades/{ticker}
221
221
 
222
222
  Get trades for a contract in a given time range (paginated).
223
223
  """
224
- url = f"/futures/vX/trades/{ticker}"
224
+ url = f"/futures/v1/trades/{ticker}"
225
225
  return self._paginate(
226
226
  path=url,
227
227
  params=self._get_params(self.list_futures_trades, locals()),
@@ -257,12 +257,12 @@ class FuturesClient(BaseClient):
257
257
  options: Optional[RequestOptionBuilder] = None,
258
258
  ) -> Union[Iterator[FuturesSchedule], HTTPResponse]:
259
259
  """
260
- Endpoint: GET /futures/vX/schedules
260
+ Endpoint: GET /futures/v1/schedules
261
261
 
262
262
  Returns a list of trading schedules for multiple futures products on a specific date.
263
263
  If `next_url` is present, this is paginated.
264
264
  """
265
- url = "/futures/vX/schedules"
265
+ url = "/futures/v1/schedules"
266
266
  return self._paginate(
267
267
  path=url,
268
268
  params=self._get_params(self.list_futures_schedules, locals()),
@@ -284,7 +284,7 @@ class FuturesClient(BaseClient):
284
284
  raw: bool = False,
285
285
  options: Optional[RequestOptionBuilder] = None,
286
286
  ) -> Union[Iterator[FuturesMarketStatus], HTTPResponse]:
287
- url = "/futures/vX/market-status"
287
+ url = "/futures/v1/market-status"
288
288
  return self._paginate(
289
289
  path=url,
290
290
  params=self._get_params(self.list_futures_market_statuses, locals()),
@@ -313,7 +313,7 @@ class FuturesClient(BaseClient):
313
313
  raw: bool = False,
314
314
  options: Optional[RequestOptionBuilder] = None,
315
315
  ) -> Union[Iterator[FuturesSnapshot], HTTPResponse]:
316
- url = "/futures/vX/snapshot"
316
+ url = "/futures/v1/snapshot"
317
317
  return self._paginate(
318
318
  path=url,
319
319
  params=self._get_params(self.get_futures_snapshot, locals()),
@@ -330,11 +330,11 @@ class FuturesClient(BaseClient):
330
330
  options: Optional[RequestOptionBuilder] = None,
331
331
  ) -> Union[Iterator[FuturesExchange], HTTPResponse]:
332
332
  """
333
- Endpoint: GET /futures/vX/exchanges
333
+ Endpoint: GET /futures/v1/exchanges
334
334
 
335
335
  US futures exchanges and trading venues including major derivatives exchanges (CME, CBOT, NYMEX, COMEX) and other futures market infrastructure for commodity, financial, and other derivative contract trading.
336
336
  """
337
- url = "/futures/vX/exchanges"
337
+ url = "/futures/v1/exchanges"
338
338
  return self._paginate(
339
339
  path=url,
340
340
  params=self._get_params(self.list_futures_exchanges, locals()),
@@ -922,6 +922,60 @@ class RiskFactorTaxonomy:
922
922
  )
923
923
 
924
924
 
925
+ @modelclass
926
+ @dataclass
927
+ class Filing13F:
928
+ """SEC Form 13F filings data showing institutional investment manager holdings."""
929
+
930
+ accession_number: Optional[str] = None
931
+ cusip: Optional[str] = None
932
+ file_number: Optional[str] = None
933
+ filer_cik: Optional[str] = None
934
+ filing_date: Optional[str] = None
935
+ filing_url: Optional[str] = None
936
+ film_number: Optional[str] = None
937
+ form_type: Optional[str] = None
938
+ investment_discretion: Optional[str] = None
939
+ issuer_name: Optional[str] = None
940
+ market_value: Optional[int] = None
941
+ other_managers: Optional[List[str]] = None
942
+ period: Optional[str] = None
943
+ put_call: Optional[str] = None
944
+ shares_or_principal_amount: Optional[int] = None
945
+ shares_or_principal_type: Optional[str] = None
946
+ title_of_class: Optional[str] = None
947
+ voting_authority_none: Optional[int] = None
948
+ voting_authority_shared: Optional[int] = None
949
+ voting_authority_sole: Optional[int] = None
950
+
951
+ @staticmethod
952
+ def from_dict(d: Optional[Dict[str, Any]]) -> "Filing13F":
953
+ if not d:
954
+ return Filing13F()
955
+ return Filing13F(
956
+ accession_number=d.get("accession_number"),
957
+ cusip=d.get("cusip"),
958
+ file_number=d.get("file_number"),
959
+ filer_cik=d.get("filer_cik"),
960
+ filing_date=d.get("filing_date"),
961
+ filing_url=d.get("filing_url"),
962
+ film_number=d.get("film_number"),
963
+ form_type=d.get("form_type"),
964
+ investment_discretion=d.get("investment_discretion"),
965
+ issuer_name=d.get("issuer_name"),
966
+ market_value=d.get("market_value"),
967
+ other_managers=d.get("other_managers"),
968
+ period=d.get("period"),
969
+ put_call=d.get("put_call"),
970
+ shares_or_principal_amount=d.get("shares_or_principal_amount"),
971
+ shares_or_principal_type=d.get("shares_or_principal_type"),
972
+ title_of_class=d.get("title_of_class"),
973
+ voting_authority_none=d.get("voting_authority_none"),
974
+ voting_authority_shared=d.get("voting_authority_shared"),
975
+ voting_authority_sole=d.get("voting_authority_sole"),
976
+ )
977
+
978
+
925
979
  @modelclass
926
980
  class FilingSection:
927
981
  """SEC document text section from a 10-K/10-Q (raw text content)."""
@@ -947,6 +1001,206 @@ class FilingSection:
947
1001
  )
948
1002
 
949
1003
 
1004
+ @modelclass
1005
+ @dataclass
1006
+ class FilingFootnote:
1007
+ """Footnote from SEC Form 3/4 filings."""
1008
+
1009
+ id: Optional[str] = None
1010
+ description: Optional[str] = None
1011
+
1012
+ @staticmethod
1013
+ def from_dict(d: Optional[Dict[str, Any]]) -> "FilingFootnote":
1014
+ if not d:
1015
+ return FilingFootnote()
1016
+ return FilingFootnote(
1017
+ id=d.get("id"),
1018
+ description=d.get("description"),
1019
+ )
1020
+
1021
+
1022
+ @modelclass
1023
+ @dataclass
1024
+ class FilingForm3:
1025
+ """SEC Form 3 filings reporting initial statements of beneficial ownership of securities.
1026
+ Filed by corporate insiders (directors, officers, and 10%+ shareholders) when they first acquire a position.
1027
+ """
1028
+
1029
+ accession_number: Optional[str] = None
1030
+ aff_10b5_one: Optional[bool] = None
1031
+ date_of_original_submission: Optional[str] = None
1032
+ direct_or_indirect: Optional[str] = None
1033
+ exercise_date: Optional[str] = None
1034
+ exercise_price: Optional[float] = None
1035
+ filing_date: Optional[str] = None
1036
+ filing_url: Optional[str] = None
1037
+ footnotes: Optional[List[FilingFootnote]] = None
1038
+ form_type: Optional[str] = None
1039
+ is_director: Optional[bool] = None
1040
+ is_officer: Optional[bool] = None
1041
+ is_other: Optional[bool] = None
1042
+ is_ten_percent_owner: Optional[bool] = None
1043
+ issuer_cik: Optional[str] = None
1044
+ issuer_name: Optional[str] = None
1045
+ nature_of_ownership: Optional[str] = None
1046
+ not_subject_to_section_16: Optional[bool] = None
1047
+ officer_title: Optional[str] = None
1048
+ owner_cik: Optional[str] = None
1049
+ owner_name: Optional[str] = None
1050
+ period_of_report: Optional[str] = None
1051
+ remarks: Optional[str] = None
1052
+ security_title: Optional[str] = None
1053
+ security_type: Optional[str] = None
1054
+ shares_owned: Optional[float] = None
1055
+ tickers: Optional[List[str]] = None
1056
+ underlying_security_shares: Optional[float] = None
1057
+ underlying_security_title: Optional[str] = None
1058
+
1059
+ @staticmethod
1060
+ def from_dict(d: Optional[Dict[str, Any]]) -> "FilingForm3":
1061
+ if not d:
1062
+ return FilingForm3()
1063
+ footnotes = d.get("footnotes")
1064
+ return FilingForm3(
1065
+ accession_number=d.get("accession_number"),
1066
+ aff_10b5_one=d.get("aff_10b5_one"),
1067
+ date_of_original_submission=d.get("date_of_original_submission"),
1068
+ direct_or_indirect=d.get("direct_or_indirect"),
1069
+ exercise_date=d.get("exercise_date"),
1070
+ exercise_price=d.get("exercise_price"),
1071
+ filing_date=d.get("filing_date"),
1072
+ filing_url=d.get("filing_url"),
1073
+ footnotes=(
1074
+ [FilingFootnote.from_dict(f) for f in footnotes]
1075
+ if footnotes is not None
1076
+ else None
1077
+ ),
1078
+ form_type=d.get("form_type"),
1079
+ is_director=d.get("is_director"),
1080
+ is_officer=d.get("is_officer"),
1081
+ is_other=d.get("is_other"),
1082
+ is_ten_percent_owner=d.get("is_ten_percent_owner"),
1083
+ issuer_cik=d.get("issuer_cik"),
1084
+ issuer_name=d.get("issuer_name"),
1085
+ nature_of_ownership=d.get("nature_of_ownership"),
1086
+ not_subject_to_section_16=d.get("not_subject_to_section_16"),
1087
+ officer_title=d.get("officer_title"),
1088
+ owner_cik=d.get("owner_cik"),
1089
+ owner_name=d.get("owner_name"),
1090
+ period_of_report=d.get("period_of_report"),
1091
+ remarks=d.get("remarks"),
1092
+ security_title=d.get("security_title"),
1093
+ security_type=d.get("security_type"),
1094
+ shares_owned=d.get("shares_owned"),
1095
+ tickers=d.get("tickers"),
1096
+ underlying_security_shares=d.get("underlying_security_shares"),
1097
+ underlying_security_title=d.get("underlying_security_title"),
1098
+ )
1099
+
1100
+
1101
+ @modelclass
1102
+ @dataclass
1103
+ class FilingForm4:
1104
+ """SEC Form 4 filings reporting changes in beneficial ownership of securities.
1105
+ Filed by corporate insiders (directors, officers, and 10%+ shareholders) within two business days of a transaction.
1106
+ """
1107
+
1108
+ accession_number: Optional[str] = None
1109
+ aff_10b5_one: Optional[bool] = None
1110
+ date_of_original_submission: Optional[str] = None
1111
+ deemed_execution_date: Optional[str] = None
1112
+ direct_or_indirect: Optional[str] = None
1113
+ equity_swap_involved: Optional[bool] = None
1114
+ exercise_date: Optional[str] = None
1115
+ exercise_price: Optional[float] = None
1116
+ expiration_date: Optional[str] = None
1117
+ filing_date: Optional[str] = None
1118
+ filing_url: Optional[str] = None
1119
+ footnotes: Optional[List[FilingFootnote]] = None
1120
+ form_type: Optional[str] = None
1121
+ is_director: Optional[bool] = None
1122
+ is_officer: Optional[bool] = None
1123
+ is_other: Optional[bool] = None
1124
+ is_ten_percent_owner: Optional[bool] = None
1125
+ issuer_cik: Optional[str] = None
1126
+ issuer_name: Optional[str] = None
1127
+ nature_of_ownership: Optional[str] = None
1128
+ not_subject_to_section_16: Optional[bool] = None
1129
+ officer_title: Optional[str] = None
1130
+ owner_cik: Optional[str] = None
1131
+ owner_name: Optional[str] = None
1132
+ period_of_report: Optional[str] = None
1133
+ record_type: Optional[str] = None
1134
+ remarks: Optional[str] = None
1135
+ security_title: Optional[str] = None
1136
+ security_type: Optional[str] = None
1137
+ shares_owned_following_transaction: Optional[float] = None
1138
+ tickers: Optional[List[str]] = None
1139
+ transaction_acquired_disposed: Optional[str] = None
1140
+ transaction_code: Optional[str] = None
1141
+ transaction_date: Optional[str] = None
1142
+ transaction_price_per_share: Optional[float] = None
1143
+ transaction_shares: Optional[float] = None
1144
+ transaction_timeliness: Optional[str] = None
1145
+ transaction_value: Optional[float] = None
1146
+ underlying_security_shares: Optional[float] = None
1147
+ underlying_security_title: Optional[str] = None
1148
+
1149
+ @staticmethod
1150
+ def from_dict(d: Optional[Dict[str, Any]]) -> "FilingForm4":
1151
+ if not d:
1152
+ return FilingForm4()
1153
+ footnotes = d.get("footnotes")
1154
+ return FilingForm4(
1155
+ accession_number=d.get("accession_number"),
1156
+ aff_10b5_one=d.get("aff_10b5_one"),
1157
+ date_of_original_submission=d.get("date_of_original_submission"),
1158
+ deemed_execution_date=d.get("deemed_execution_date"),
1159
+ direct_or_indirect=d.get("direct_or_indirect"),
1160
+ equity_swap_involved=d.get("equity_swap_involved"),
1161
+ exercise_date=d.get("exercise_date"),
1162
+ exercise_price=d.get("exercise_price"),
1163
+ expiration_date=d.get("expiration_date"),
1164
+ filing_date=d.get("filing_date"),
1165
+ filing_url=d.get("filing_url"),
1166
+ footnotes=(
1167
+ [FilingFootnote.from_dict(f) for f in footnotes]
1168
+ if footnotes is not None
1169
+ else None
1170
+ ),
1171
+ form_type=d.get("form_type"),
1172
+ is_director=d.get("is_director"),
1173
+ is_officer=d.get("is_officer"),
1174
+ is_other=d.get("is_other"),
1175
+ is_ten_percent_owner=d.get("is_ten_percent_owner"),
1176
+ issuer_cik=d.get("issuer_cik"),
1177
+ issuer_name=d.get("issuer_name"),
1178
+ nature_of_ownership=d.get("nature_of_ownership"),
1179
+ not_subject_to_section_16=d.get("not_subject_to_section_16"),
1180
+ officer_title=d.get("officer_title"),
1181
+ owner_cik=d.get("owner_cik"),
1182
+ owner_name=d.get("owner_name"),
1183
+ period_of_report=d.get("period_of_report"),
1184
+ record_type=d.get("record_type"),
1185
+ remarks=d.get("remarks"),
1186
+ security_title=d.get("security_title"),
1187
+ security_type=d.get("security_type"),
1188
+ shares_owned_following_transaction=d.get(
1189
+ "shares_owned_following_transaction"
1190
+ ),
1191
+ tickers=d.get("tickers"),
1192
+ transaction_acquired_disposed=d.get("transaction_acquired_disposed"),
1193
+ transaction_code=d.get("transaction_code"),
1194
+ transaction_date=d.get("transaction_date"),
1195
+ transaction_price_per_share=d.get("transaction_price_per_share"),
1196
+ transaction_shares=d.get("transaction_shares"),
1197
+ transaction_timeliness=d.get("transaction_timeliness"),
1198
+ transaction_value=d.get("transaction_value"),
1199
+ underlying_security_shares=d.get("underlying_security_shares"),
1200
+ underlying_security_title=d.get("underlying_security_title"),
1201
+ )
1202
+
1203
+
950
1204
  @modelclass
951
1205
  class Filing8K:
952
1206
  """Parsed 8-K filing with item-level text content."""
@@ -6,7 +6,7 @@ from ...modelclass import modelclass
6
6
  class FuturesAgg:
7
7
  """
8
8
  A single aggregate bar for a futures contract in a given time window.
9
- Corresponds to /futures/vX/aggs/{ticker}.
9
+ Corresponds to /futures/v1/aggs/{ticker}.
10
10
  """
11
11
 
12
12
  ticker: Optional[str] = None
@@ -42,7 +42,7 @@ class FuturesAgg:
42
42
  class FuturesContract:
43
43
  """
44
44
  Represents a single futures contract (or a 'combo' contract).
45
- Corresponds to /futures/vX/contracts endpoints.
45
+ Corresponds to /futures/v1/contracts endpoints.
46
46
  """
47
47
 
48
48
  ticker: Optional[str] = None
@@ -90,7 +90,7 @@ class FuturesContract:
90
90
  class FuturesProduct:
91
91
  """
92
92
  Represents a single futures product (or product 'combo').
93
- Corresponds to /futures/vX/products endpoints.
93
+ Corresponds to /futures/v1/products endpoints.
94
94
  """
95
95
 
96
96
  product_code: Optional[str] = None
@@ -138,7 +138,7 @@ class FuturesProduct:
138
138
  class FuturesQuote:
139
139
  """
140
140
  Represents a futures NBBO quote within a given time range.
141
- Corresponds to /futures/vX/quotes/{ticker}
141
+ Corresponds to /futures/v1/quotes/{ticker}
142
142
  """
143
143
 
144
144
  ticker: Optional[str] = None
@@ -174,7 +174,7 @@ class FuturesQuote:
174
174
  class FuturesTrade:
175
175
  """
176
176
  Represents a futures trade within a given time range.
177
- Corresponds to /futures/vX/trades/{ticker}
177
+ Corresponds to /futures/v1/trades/{ticker}
178
178
  """
179
179
 
180
180
  ticker: Optional[str] = None
@@ -202,7 +202,7 @@ class FuturesTrade:
202
202
  class FuturesSchedule:
203
203
  """
204
204
  Represents a single schedule event for a given session_end_date and product.
205
- Corresponds to /futures/vX/schedules
205
+ Corresponds to /futures/v1/schedules
206
206
  """
207
207
 
208
208
  event: Optional[str] = None
@@ -397,7 +397,7 @@ class FuturesSnapshot:
397
397
  class FuturesExchange:
398
398
  """
399
399
  Represents a futures exchange or trading venue.
400
- Corresponds to /futures/vX/exchanges endpoint.
400
+ Corresponds to /futures/v1/exchanges endpoint.
401
401
  """
402
402
 
403
403
  acronym: Optional[str] = None
@@ -30,6 +30,9 @@ from .models import (
30
30
  RiskFactorTaxonomy,
31
31
  FilingSection,
32
32
  Filing8K,
33
+ Filing13F,
34
+ FilingForm3,
35
+ FilingForm4,
33
36
  FilingIndex,
34
37
  )
35
38
  from urllib3 import HTTPResponse
@@ -991,3 +994,131 @@ class ContractsClient(BaseClient):
991
994
  raw=raw,
992
995
  options=options,
993
996
  )
997
+
998
+ def list_stocks_filings_13f(
999
+ self,
1000
+ filer_cik: Optional[str] = None,
1001
+ filer_cik_any_of: Optional[str] = None,
1002
+ filing_date: Optional[Union[str, date]] = None,
1003
+ filing_date_gt: Optional[Union[str, date]] = None,
1004
+ filing_date_gte: Optional[Union[str, date]] = None,
1005
+ filing_date_lt: Optional[Union[str, date]] = None,
1006
+ filing_date_lte: Optional[Union[str, date]] = None,
1007
+ limit: Optional[int] = 100,
1008
+ sort: Optional[Union[str, Sort]] = "filing_date.desc",
1009
+ params: Optional[Dict[str, Any]] = None,
1010
+ raw: bool = False,
1011
+ options: Optional[RequestOptionBuilder] = None,
1012
+ ) -> Union[Iterator[Filing13F], HTTPResponse]:
1013
+ """
1014
+ SEC Form 13F filings data showing institutional investment manager holdings.
1015
+ Form 13F is required to be filed quarterly by institutional investment managers
1016
+ with at least $100 million in qualifying assets under management.
1017
+ """
1018
+ url = "/stocks/filings/vX/13-F"
1019
+
1020
+ return self._paginate(
1021
+ path=url,
1022
+ params=self._get_params(self.list_stocks_filings_13f, locals()),
1023
+ result_key="results",
1024
+ deserializer=Filing13F.from_dict,
1025
+ raw=raw,
1026
+ options=options,
1027
+ )
1028
+
1029
+ def list_stocks_filings_form_3(
1030
+ self,
1031
+ issuer_cik: Optional[str] = None,
1032
+ issuer_cik_any_of: Optional[str] = None,
1033
+ owner_cik: Optional[str] = None,
1034
+ owner_cik_any_of: Optional[str] = None,
1035
+ tickers: Optional[str] = None,
1036
+ tickers_all_of: Optional[str] = None,
1037
+ tickers_any_of: Optional[str] = None,
1038
+ form_type: Optional[str] = None,
1039
+ filing_date: Optional[Union[str, date]] = None,
1040
+ filing_date_gt: Optional[Union[str, date]] = None,
1041
+ filing_date_gte: Optional[Union[str, date]] = None,
1042
+ filing_date_lt: Optional[Union[str, date]] = None,
1043
+ filing_date_lte: Optional[Union[str, date]] = None,
1044
+ max_ticker: Optional[str] = None,
1045
+ max_ticker_any_of: Optional[str] = None,
1046
+ max_ticker_gt: Optional[str] = None,
1047
+ max_ticker_gte: Optional[str] = None,
1048
+ max_ticker_lt: Optional[str] = None,
1049
+ max_ticker_lte: Optional[str] = None,
1050
+ min_ticker: Optional[str] = None,
1051
+ min_ticker_any_of: Optional[str] = None,
1052
+ min_ticker_gt: Optional[str] = None,
1053
+ min_ticker_gte: Optional[str] = None,
1054
+ min_ticker_lt: Optional[str] = None,
1055
+ min_ticker_lte: Optional[str] = None,
1056
+ limit: Optional[int] = 100,
1057
+ sort: Optional[Union[str, Sort]] = "filing_date.desc",
1058
+ params: Optional[Dict[str, Any]] = None,
1059
+ raw: bool = False,
1060
+ options: Optional[RequestOptionBuilder] = None,
1061
+ ) -> Union[Iterator[FilingForm3], HTTPResponse]:
1062
+ """
1063
+ SEC Form 3 filings reporting initial statements of beneficial ownership of securities.
1064
+ Filed by corporate insiders (directors, officers, and 10%+ shareholders) when they first acquire a position.
1065
+ """
1066
+ url = "/stocks/filings/vX/form-3"
1067
+
1068
+ return self._paginate(
1069
+ path=url,
1070
+ params=self._get_params(self.list_stocks_filings_form_3, locals()),
1071
+ result_key="results",
1072
+ deserializer=FilingForm3.from_dict,
1073
+ raw=raw,
1074
+ options=options,
1075
+ )
1076
+
1077
+ def list_stocks_filings_form_4(
1078
+ self,
1079
+ issuer_cik: Optional[str] = None,
1080
+ issuer_cik_any_of: Optional[str] = None,
1081
+ owner_cik: Optional[str] = None,
1082
+ owner_cik_any_of: Optional[str] = None,
1083
+ tickers: Optional[str] = None,
1084
+ tickers_all_of: Optional[str] = None,
1085
+ tickers_any_of: Optional[str] = None,
1086
+ form_type: Optional[str] = None,
1087
+ transaction_code: Optional[str] = None,
1088
+ filing_date: Optional[Union[str, date]] = None,
1089
+ filing_date_gt: Optional[Union[str, date]] = None,
1090
+ filing_date_gte: Optional[Union[str, date]] = None,
1091
+ filing_date_lt: Optional[Union[str, date]] = None,
1092
+ filing_date_lte: Optional[Union[str, date]] = None,
1093
+ max_ticker: Optional[str] = None,
1094
+ max_ticker_any_of: Optional[str] = None,
1095
+ max_ticker_gt: Optional[str] = None,
1096
+ max_ticker_gte: Optional[str] = None,
1097
+ max_ticker_lt: Optional[str] = None,
1098
+ max_ticker_lte: Optional[str] = None,
1099
+ min_ticker: Optional[str] = None,
1100
+ min_ticker_any_of: Optional[str] = None,
1101
+ min_ticker_gt: Optional[str] = None,
1102
+ min_ticker_gte: Optional[str] = None,
1103
+ min_ticker_lt: Optional[str] = None,
1104
+ min_ticker_lte: Optional[str] = None,
1105
+ limit: Optional[int] = 100,
1106
+ sort: Optional[Union[str, Sort]] = "filing_date.desc",
1107
+ params: Optional[Dict[str, Any]] = None,
1108
+ raw: bool = False,
1109
+ options: Optional[RequestOptionBuilder] = None,
1110
+ ) -> Union[Iterator[FilingForm4], HTTPResponse]:
1111
+ """
1112
+ SEC Form 4 filings reporting changes in beneficial ownership of securities.
1113
+ Filed by corporate insiders (directors, officers, and 10%+ shareholders) within two business days of a transaction.
1114
+ """
1115
+ url = "/stocks/filings/vX/form-4"
1116
+
1117
+ return self._paginate(
1118
+ path=url,
1119
+ params=self._get_params(self.list_stocks_filings_form_4, locals()),
1120
+ result_key="results",
1121
+ deserializer=FilingForm4.from_dict,
1122
+ raw=raw,
1123
+ options=options,
1124
+ )
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "massive"
3
- version = "2.5.0"
3
+ version = "2.7.0"
4
4
  description = "Official Massive (formerly Polygon.io) REST and Websocket client."
5
5
  authors = ["massive.com"]
6
6
  license = "MIT"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes