Repository navigation
π LibFMP 0.12.0
·
142 commits
to main
since this release
0.12.0 (2026-09-25)
β BREAKING CHANGES
- fmp-py: type checkers now reject non-canonical spellings (for example period="quarterly") for closed string arguments.
- fmp-py-gen: constructors take int or float for JSON-number fields instead of JSON text.
- fmp-py-gen: model constructors are keyword-only, rows compare by value and are no longer hashable (cannot be set members or dict keys).
- fmp-py-gen: Go identifiers spell Uid as UID (TipRanksExpertUid.ExpertUid -> ExpertUID, WithExpertUid -> WithExpertUID, ExpertUid() -> ExpertUID()).
- fmp-py-gen: namespaces Esg -> ESG and Tipranks -> TipRanks;
IposCalendar -> IPOCalendar, IpoDate -> IPODate, Sp500Constituents ->
SP500Constituents, Cusip -> CUSIP, Isin -> ISIN, EsgRating -> ESGRating. - fmp-py-gen: namespaces SecFilings -> SECFilings and Dcf -> DCF, and
identifiers such as Latest8k -> Latest8K, Form13fFilingDate ->
Form13FFilingDate, CotReport -> COTReport, and DcfValuation ->
DCFValuation. - fmp-py-gen: Go identifiers spell Etf as ETF, Etfs as ETFs, Ttm as TTM,
and Eps as EPS (for example Quote.Etfs -> Quote.ETFs, EtfHolding ->
ETFHolding, KeyMetricsTtm -> KeyMetricsTTM, EpsActual -> EPSActual). - fmp-py-gen: Go identifiers spell Cik as CIK and Id as ID (for
example ByCik -> ByCIK, CikListing -> CIKListing, MemberId -> MemberID,
NewCikSearchQuery -> NewCIKSearchQuery).
Issue: 344
- fmp-py-gen: Go names change with the initialism table. UsDate ->
USDate, NewUsDate -> NewUSDate, ParseUsDate -> ParseUSDate,
GeographyUsOnly -> GeographyUSOnly,
EconomicIndicatorSmoothedUsRecessionProbabilities ->
EconomicIndicatorSmoothedUSRecessionProbabilities, LinkJson -> LinkJSON,
FinancialReportJson -> FinancialReportJSON, FinancialReportsJsonQuery ->
FinancialReportsJSONQuery, Reports.Json -> Reports.JSON, and Url struct
fields (IpoDisclosure, IpoProspectus, EsgDisclosure, InsiderTrade,
BeneficialOwnershipAcquisition, NewsArticle, SecFilingsUrl,
TipRanks results) -> URL. - sdk: Rust Client::fmp_articles/fmp_articles()/FmpArticlesQuery/FmpArticle -> articles/ArticlesQuery/Article; Python news.fmp_articles/FmpArticle -> news.articles/Article; Go News.FmpArticles/FmpArticlesQuery/FmpArticle -> News.Articles/ArticlesQuery/Article.
- sdk/go: FmpHeader is now FMPHeader, FmpQuery is now FMPQuery,
FmpHeaderFromEnv is now FMPHeaderFromEnv, and FmpAPIKeyFromEnv is now
APIKeyFromEnv. - libfmp: Rust only: the beta fields are types::Ratio and the dividend and DCF per-share fields are types::PerShareAmount instead of types::MarketValue (all remain f64).
- libfmp: row types renamed in every SDK: BulkStockPeers -> BulkStockPeer, CikEntry -> CikListing, CompanyScreenerEntry -> CompanyScreenerResult, CongressionalMemberNetWorthEntry -> CongressionalMemberNetWorth. Refs #343.
- sdk: Python statements.growth.income_statement -> growth.income, growth.balance_sheet_statement -> growth.balance_sheet, growth.cash_flow_statement -> growth.cash_flow, growth.financial_statement -> growth.financial (Go: Statements.Growth.Income, .BalanceSheet, .CashFlow, .Financial); Rust Client methods unchanged. Refs #343.
- sdk: Python dcf.discounted_cash_flow -> dcf.standard, dcf.levered_discounted_cash_flow -> dcf.levered, dcf.custom_discounted_cash_flow -> dcf.custom, dcf.custom_levered_discounted_cash_flow -> dcf.custom_levered (Go: Dcf.Standard, Dcf.Levered, Dcf.Custom, Dcf.CustomLevered); Rust Client methods unchanged. Refs #343.
- sdk: Python transcripts.latest_earnings_transcripts -> transcripts.latest, transcripts.earnings_transcript -> transcripts.by_quarter, transcripts.earnings_transcript_dates -> transcripts.dates, market_hours.exchange_market_hours -> market_hours.exchange, market_hours.all_exchange_market_hours -> market_hours.all_exchanges, market_hours.holidays_by_exchange -> market_hours.holidays (Go: same names in UpperCamelCase); Rust Client methods unchanged. Refs #343.
- sdk: Python funds.fund_disclosures -> funds.disclosures, funds.fund_disclosure_dates -> funds.disclosure_dates, funds.latest_fund_disclosure_holders -> funds.latest_disclosure_holders, funds.search_fund_disclosure_holders -> funds.search_disclosure_holders (Go: Funds.Disclosures, Funds.DisclosureDates, Funds.LatestDisclosureHolders, Funds.SearchDisclosureHolders); Rust Client methods unchanged. Refs #343.
- libfmp: Rust Client::tipranks_ratings_search is now search_tipranks_ratings; Python tipranks.ratings_search is tipranks.search_ratings; Go Tipranks.RatingsSearch is Tipranks.SearchRatings. Refs #343.
- libfmp: company renames in every SDK: market_capitalization_batch -> batch_market_capitalization, shares_float_all -> all_shares_float, mergers_acquisitions_latest -> latest_mergers_acquisitions, mergers_acquisitions_search -> search_mergers_acquisitions (with matching query types), MarketCapitalizationRecord -> CompanyMarketCapitalization, AllSharesFloatRecord -> ShareFloat. Refs #343.
- sdk: quote.batch_quote is now quote.batch and quote.batch_quote_short is quote.batch_short in Python (Go: Quote.Batch, Quote.BatchShort); Rust Client methods unchanged.
- libfmp: every public response struct (incl. technical-indicator rows) is #[non_exhaustive]; downstream code can no longer build them with struct literals or exhaustive destructuring, deserialize JSON instead.
- libfmp: StatementAmount is now f64 (float64 in Go, float in Python) on all 276 response fields; values above 2^53 round.
- libfmp: the listed money and quantity fields are now f64, and InstitutionalHolding and InstitutionalIndustrySummary no longer derive Eq.
- libfmp: the following fields are now f64. As Quantity:
floatShares and outstandingShares on the float records,
numberOfSecurityOffered on crowdfunding offerings,
dilutedSharesOutstanding on DCF valuations, weightedAverageShsOut and
weightedAverageShsOutDil on income statements, numberOfShares on
summaries, and tradeSize, bidSize and askSize on aftermarket quotes and
trades. As MarketValue: salary, bonus, stockAward, optionAward,
incentivePlanCompensation, allOtherCompensation and total on executive
compensation, minimumInvestmentAccepted, totalOfferingAmount,
totalAmountSold, totalAmountRemaining, salesCommissions, findersFees and
grossProceedsUsed on Regulation D offerings, and revenueActual and
revenueEstimated on earnings calendar events. ExecutiveCompensation,
CrowdfundingOffering and RegulationDOffering no longer derive Eq. - libfmp: insider securities_owned/securities_transacted/total_acquired/total_disposed and funds shares_number/shares/change/balance are f64 (Quantity); ETF assets_under_management is f64 (MarketValue).
- libfmp: MarketCapitalization is f64; crypto circulating_supply/total_supply and stock split numerator/denominator are f64; the affected response structs no longer derive Eq; the screener market-cap filters take u64.
- libfmp:
libfmp::codecs::volumeis removed; the serializer is crate-private ascodecs::integral_f64. - fmp-py: fmp._native no longer exposes the _Fmp* exception aliases and fmp.QuoteShort is removed; import QuoteShort from fmp.quote.
- fmp-py: FmpClient raises FmpConfigError for non-str headers and out-of-range max_response_body_bytes; internal runtime failures raise FmpError rather than FmpConfigError.
- sdk/go: WithDangerAllowInsecureAuthentication takes no argument; replace WithDangerAllowInsecureAuthentication(true) with WithDangerAllowInsecureAuthentication() and drop any (false) call
- sdk/go: CustomQuery names outside ASCII letters, digits and -._~ are now rejected by NewClient with ConfigurationKindInvalidQueryName
- libfmp: TLS now comes from the default rustls cargo feature,
default-features = false drops TLS. - libfmp: the
ExecutorErrorunit literal is no longer constructible downstream; useExecutorError::new.StringValueErrorandSecretNameErrorare now#[non_exhaustive], and the codec with-helper modules are#[doc(hidden)]and exempt from semver guarantees.
π Features
- fmp-py-gen: add match_args, field-listing repr, and to_dict to models (3309195)
- fmp-py-gen: keyword-only models with value equality (1d17f51)
- fmp-py-gen: type closed enum model fields as Literal (b618788)
- fmp-py-gen: type JSON number fields as int or float (5065270)
- fmp-py: type closed string arguments as Literal and headers as Mapping (3bd2ab7)
- libfmp: make TLS a toggleable rustls cargo feature (c805153)
- libfmp: mark public response structs non_exhaustive (c8107d6), closes #342 #342
- libfmp: re-export core dependencies and assert client bounds (64a250e), closes #346
- sdk/go/artifact: add EndpointMetadataByID (60392f4)
βοΈ Enhancement & Maintenance
- fmp-py-gen: add the Go initialism table to gen_go (078ef5b)
- fmp-py-gen: spell CIK and ID in Go names (fdf5578)
- fmp-py-gen: spell ESG, CUSIP, ISIN, IPO, SP500, and TipRanks in Go names (7e42c4a)
- fmp-py-gen: spell ETF, TTM, and EPS in Go names (7e317f9)
- fmp-py-gen: spell SEC, COT, DCF, 8K, and 13F in Go names (321f19b), closes #344
- fmp-py-gen: spell UID in Go names (417e27d), closes #344
- fmp-py: drop private error aliases and root QuoteShort re-export (85c74a7), closes #348
- libfmp: decouple volume doc references from codec module (072abe8)
- libfmp: generalize volume codec to integral_f64 (fca2c84)
- libfmp: make integral_f64 generic and tag StatementAmount fields (e96094c), closes #341 #341
- libfmp: make row type names singular and consistent (8d28f28)
- libfmp: rename company endpoints verb-first (5d42eb0)
- libfmp: retype beta and dividend fields as Ratio and PerShareAmount (9b1e043), closes #343
- libfmp: seal public error and codec surface (b1eb530)
- libfmp: use verb-first search name for tipranks ratings (3560b6f)
- sdk/go: drop argument from insecure auth option (babab0e)
- sdk/go: rename FMP auth constructors to Go initialism casing (edbf91f)
- sdk: drop namespace noun from transcripts and hours methods (cbbeb8c)
- sdk: drop redundant fund noun from funds methods (d825af2), closes #343 #343
- sdk: drop statement noun from growth methods (dfdb403)
- sdk: rename fmp_articles to articles across all SDKs (7cecca9)
- sdk: shorten dcf method names (0934995)
- sdk: shorten quote batch method names (85ce77e), closes #343
β¨οΈ CI, Workflows & Configs
- pre-commit: allow incompat commit type in message validation (#361) (934afac)
- sdk/go: spell out ST1003 initialisms since inherit panics golangci-lint 2.14.0 (8757bef)
πͺ² Bug Fixes
- fmp-py-gen: store decoded numbers in canonical text (5c903c8)
- fmp-py: raise typed errors for invalid config and runtime failures (12bdfc6), closes #348
- fmp-py: stop shadowed module references and version mismatch (8ac6c3c)
- libfmp: decode institutional ownership shares and amounts as f64 (578ffad)
- libfmp: decode market cap, crypto supply and split terms as f64 (d47e98e)
- libfmp: decode statement amounts as f64 (0331e50), closes #341
- libfmp: move share and money fields to f64 domain types (03eda18)
- libfmp: use Quantity and MarketValue f64 for share and money fields (b2c3940)
- sdk/go: accept obs-text bytes in request header values (5f51f8e)
- sdk/go: build proxy probe request with a real context (415b835)
- sdk/go: drop network topology from transport causes (03cdc5c)
- sdk/go: reject custom query names the Redactor cannot protect (ca61c23)
- sdk/go: return a fresh slice from DocumentedEconomicIndicators (9763fe0), closes #324