Skip to content

Commit 481e5c2

Browse files
[bot] Add 8-K disclosures and disclosure categories endpoints (#1025)
Add support for two new SEC filings vX endpoints: - GET /stocks/filings/8-K/vX/disclosures via list_stocks_filings_8k_disclosures, returning Disclosure results. - GET /stocks/taxonomies/vX/disclosures via list_stocks_taxonomies_disclosures, returning DisclosureTaxonomy results. Both methods live in ContractsClient alongside the other filings endpoints, and the Disclosure/DisclosureTaxonomy models mirror the existing RiskFactor/RiskFactorTaxonomy pattern.
1 parent fc8cdaf commit 481e5c2

2 files changed

Lines changed: 141 additions & 0 deletions

File tree

massive/rest/models/financials.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -922,6 +922,63 @@ def from_dict(d):
922922
)
923923

924924

925+
@modelclass
926+
class Disclosure:
927+
"""
928+
A single tagged disclosure within an SEC 8-K filing. A filing can produce
929+
multiple disclosures, each classified into primary, secondary, and tertiary
930+
categories with a supporting text excerpt.
931+
"""
932+
933+
accession_number: Optional[str] = None
934+
cik: Optional[str] = None
935+
filing_date: Optional[str] = None
936+
filing_url: Optional[str] = None
937+
primary_category: Optional[str] = None
938+
secondary_category: Optional[str] = None
939+
supporting_text: Optional[str] = None
940+
tertiary_category: Optional[str] = None
941+
tickers: Optional[List[str]] = None
942+
943+
@staticmethod
944+
def from_dict(d):
945+
return Disclosure(
946+
accession_number=d.get("accession_number"),
947+
cik=d.get("cik"),
948+
filing_date=d.get("filing_date"),
949+
filing_url=d.get("filing_url"),
950+
primary_category=d.get("primary_category"),
951+
secondary_category=d.get("secondary_category"),
952+
supporting_text=d.get("supporting_text"),
953+
tertiary_category=d.get("tertiary_category"),
954+
tickers=d.get("tickers"),
955+
)
956+
957+
958+
@modelclass
959+
class DisclosureTaxonomy:
960+
"""
961+
A single 8-K disclosure classification, part of the complete list of
962+
classifications used in the 8-K disclosures endpoint.
963+
"""
964+
965+
description: Optional[str] = None
966+
primary_category: Optional[str] = None
967+
secondary_category: Optional[str] = None
968+
taxonomy: Optional[str] = None
969+
tertiary_category: Optional[str] = None
970+
971+
@staticmethod
972+
def from_dict(d):
973+
return DisclosureTaxonomy(
974+
description=d.get("description"),
975+
primary_category=d.get("primary_category"),
976+
secondary_category=d.get("secondary_category"),
977+
taxonomy=d.get("taxonomy"),
978+
tertiary_category=d.get("tertiary_category"),
979+
)
980+
981+
925982
@modelclass
926983
@dataclass
927984
class Filing13F:

massive/rest/reference.py

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
ShortVolume,
2929
RiskFactor,
3030
RiskFactorTaxonomy,
31+
Disclosure,
32+
DisclosureTaxonomy,
3133
FilingSection,
3234
Filing8K,
3335
Filing13F,
@@ -862,6 +864,88 @@ def list_stocks_taxonomies_risk_factors(
862864
options=options,
863865
)
864866

867+
def list_stocks_filings_8k_disclosures(
868+
self,
869+
cik: Optional[str] = None,
870+
cik_any_of: Optional[str] = None,
871+
tickers: Optional[str] = None,
872+
tickers_all_of: Optional[str] = None,
873+
tickers_any_of: Optional[str] = None,
874+
filing_date: Optional[Union[str, date]] = None,
875+
filing_date_any_of: Optional[str] = None,
876+
filing_date_gt: Optional[Union[str, date]] = None,
877+
filing_date_gte: Optional[Union[str, date]] = None,
878+
filing_date_lt: Optional[Union[str, date]] = None,
879+
filing_date_lte: Optional[Union[str, date]] = None,
880+
tertiary_category: Optional[str] = None,
881+
limit: Optional[int] = 100,
882+
sort: Optional[Union[str, Sort]] = "filing_date.desc",
883+
params: Optional[Dict[str, Any]] = None,
884+
raw: bool = False,
885+
options: Optional[RequestOptionBuilder] = None,
886+
) -> Union[Iterator[Disclosure], HTTPResponse]:
887+
"""
888+
SEC 8-K filing disclosure categorization. A single 8-K filing can produce
889+
multiple rows when it covers multiple disclosure types, each classified into
890+
primary, secondary, and tertiary categories with a supporting text excerpt.
891+
The full classification list is available at /stocks/taxonomies/vX/disclosures.
892+
"""
893+
url = "/stocks/filings/8-K/vX/disclosures"
894+
return self._paginate(
895+
path=url,
896+
params=self._get_params(self.list_stocks_filings_8k_disclosures, locals()),
897+
result_key="results",
898+
deserializer=Disclosure.from_dict,
899+
raw=raw,
900+
options=options,
901+
)
902+
903+
def list_stocks_taxonomies_disclosures(
904+
self,
905+
taxonomy: Optional[str] = None,
906+
taxonomy_any_of: Optional[str] = None,
907+
taxonomy_gt: Optional[str] = None,
908+
taxonomy_gte: Optional[str] = None,
909+
taxonomy_lt: Optional[str] = None,
910+
taxonomy_lte: Optional[str] = None,
911+
primary_category: Optional[str] = None,
912+
primary_category_any_of: Optional[str] = None,
913+
primary_category_gt: Optional[str] = None,
914+
primary_category_gte: Optional[str] = None,
915+
primary_category_lt: Optional[str] = None,
916+
primary_category_lte: Optional[str] = None,
917+
secondary_category: Optional[str] = None,
918+
secondary_category_any_of: Optional[str] = None,
919+
secondary_category_gt: Optional[str] = None,
920+
secondary_category_gte: Optional[str] = None,
921+
secondary_category_lt: Optional[str] = None,
922+
secondary_category_lte: Optional[str] = None,
923+
tertiary_category: Optional[str] = None,
924+
tertiary_category_any_of: Optional[str] = None,
925+
tertiary_category_gt: Optional[str] = None,
926+
tertiary_category_gte: Optional[str] = None,
927+
tertiary_category_lt: Optional[str] = None,
928+
tertiary_category_lte: Optional[str] = None,
929+
limit: Optional[int] = 200,
930+
sort: Optional[Union[str, Sort]] = "taxonomy.desc",
931+
params: Optional[Dict[str, Any]] = None,
932+
raw: bool = False,
933+
options: Optional[RequestOptionBuilder] = None,
934+
) -> Union[Iterator[DisclosureTaxonomy], HTTPResponse]:
935+
"""
936+
The complete list of 8-K disclosure classifications used in the 8-K
937+
disclosures endpoint.
938+
"""
939+
url = "/stocks/taxonomies/vX/disclosures"
940+
return self._paginate(
941+
path=url,
942+
params=self._get_params(self.list_stocks_taxonomies_disclosures, locals()),
943+
result_key="results",
944+
deserializer=DisclosureTaxonomy.from_dict,
945+
raw=raw,
946+
options=options,
947+
)
948+
865949
def list_stocks_filings_10k_sections(
866950
self,
867951
cik: Optional[str] = None,

0 commit comments

Comments
 (0)