Sign up

Products

Status

Fundamentals

Public company financials, ratios, growth metrics, as-reported XBRL facts, point-in-time vintages, and business segments, sourced from SEC EDGAR and licensed institutional archives.

What's inside

DimensionCoverageSource
Financial statementsIncome statements, balance sheets, cash flow statements (quarterly / annual / TTM), and multi-decade annual historySEC EDGAR + market-data vendors
Metrics & ratiosP/E, ROE, margins, FCF yield, debt-to-equity, current ratio, DPS, growth ratesCalculated from vendor and EDGAR data
Company facts & searchSector, industry, CIK, exchange, SIC code, listing date, market cap, description, website; fuzzy name search; the covered ticker universe; same-industry peersMarket-data reference feed; fundamentals vendor feed for search, universe and peers
ScreenerMulti-factor stock filter: profitability, growth, health, dividend filters, plus pre-built strategies; market-cap and liquidity floors, security classes and sorting on USD sizeFundamentals vendor universe, with revenue growth beyond ±100% checked against the issuer's SEC annual report; size, liquidity and security type from exchange prices, shares outstanding and the security master
NarrativeEarnings press releases with guidance language, ticker news, and an AI-generated company analysisFundamentals vendor feed
As-reported XBRLEvery concept a filer has reported, each tagged with the filed date; ?as_of= serves the number that was public on a given date, restatements excludedSEC EDGAR's live companyfacts document for each company, with a labelled archived copy when SEC cannot be read
Point-in-time financialsQuarterly financials as first reported, each version stamped with the date it became public, plus the full restatement trailLicensed point-in-time research archive
Business segmentsRevenue, sales and operating income by line of business, geography, ASC-280 operating segment and US stateLicensed segment archive (2.8M rows / 29,934 companies)

Prices and bars, including /api/v3/fundamentals/price_snapshot and /api/v3/fundamentals/prices, are documented on Market Data. SEC filing lists are on Public Filings, and insider trades and institutional ownership are on Funds & Institutional.

Access

Most routes on this page are the fundamentals product: included on Free and every paid tier (Starter, Pro, Expert, Enterprise), and each call debits 1 credit. Several routes under /api/v3/fundamentals/ bill as a different product:

RoutesProductCredits/callPlans
/api/v3/fundamentals/* (except below)fundamentals1Free and up
/api/v3/fundamentals/sec_filingspublic_filings1Free and up
/api/v3/fundamentals/segments/{ticker}funds4Starter and up
/api/v3/fundamentals/insider_trades, /api/v3/fundamentals/institutional_ownershipfunds4Starter and up
The insider-trade and institutional-holder panes of /api/v3/fundamentals/full/{ticker}funds entitlement, billed as fundamentals1 (the call)Starter and up; on Free they are null with plan_required
/api/v3/fundamentals/pit/{ticker}, /pit/{ticker}/vintages, /pit_coveragealt_data3Pro and up
/api/v3/fundamentals/ai_analyze/{ticker}llm_research6Pro and up

Each row in the tables below states its plan and credit cost. Failed requests are not billed.

Endpoints

MethodPathPlan / creditsMCP toolDescription
GET/api/v3/fundamentals/full/{ticker}Free+ / 1fundamentals_fullOne-shot bundle fetched in parallel: the metrics snapshot (same blocks as metrics_snapshot), statements in matched periods (income_statement_ttm with cash_flow_ttm, income_statement_latest_quarter with cash_flow_latest, and balance_sheet_latest at the quarter end; period_pairs says which match), company facts, the last 5 insider trades and the top 10 institutional holders from 13F filings. The insider and holder panes need a plan with the funds product (Starter and up); on Free they are null with status plan_required. Every block carries period and units. See Periods and units in company snapshots. Start here for "give me the full fundamental picture of X".
GET/api/v3/fundamentals/company_full/{ticker}Free+ / 1fundamentals_company_fullCompany info, latest annual and quarterly statements, trailing twelve months (four consecutive quarters, or null with ttm_status), the latest quarter-end balance sheet, the latest quarter's ratios (fractions), fiscal-year growth (percent), the cash-flow bridge, and the dividends and dividend blocks, in one call. Every block carries period and units. See Periods and units in company snapshots.
GET/api/v3/fundamentals/metrics_snapshotFree+ / 1fundamentals_metrics_snapshotThe latest metrics snapshot: company profile, latest annual and quarterly figures, a trailing-twelve-months block (income, cash flow, ttm_ratios in percent), the latest quarter-end balance sheet, the latest quarter's ratios (fractions of that one quarter, not annualised), fiscal-year growth (percent), and the dividends and dividend blocks. The blocks cover different periods and units, and each says which in period and units. ticker (string, required). Use metrics for the per-period history. See Periods and units in company snapshots.
GET/api/v3/fundamentals/company_factsFree+ / 1fundamentals_company_factsStatic company profile: name, CIK, exchange, sector, industry, SIC code, listing date, market cap, description, website, address and active flag. The response has two shapes; see the note below this table. ticker (string, required): a symbol that cannot exist (anything but letters and digits with an optional share-class suffix such as BRK.B) returns 422 invalid_ticker, not billed. Not the XBRL corpus, which is companyfacts/{ticker} below.
GET/api/v3/fundamentals/searchFree+ / 1fundamentals_searchFuzzy lookup from a company name or partial ticker to matching companies. q (string, required). limit (integer, 1 to 50, default 10).
GET/api/v3/fundamentals/tickersFree+ / 1fundamentals_tickersPaged list of the covered ticker universe. is_sp500 (boolean, default false). sector (string, optional). limit (integer, 1 to 500, default 100). page (integer, 1 to 200, default 1).
GET/api/v3/fundamentals/peers/{ticker}Free+ / 1fundamentals_peersSame-industry comparables with the company's rank on revenue, margin and growth (company_rank). limit (integer, 1 to 50, default 10). min_relative_size (number, 0 to 1, default 0.10): peers whose revenue is below this fraction of the company's are dropped; 0 keeps every peer the source returns. Peers with an absolute net margin above 200% or an absolute ROE above 1,000% are dropped as data errors. Each dropped peer is listed in peer_filter_stats.dropped with its filtered_reasons and filtered_codes (below_min_relative_size, net_margin_implausible, roe_implausible). peers_status says why a list is empty: ok, none_after_size_filter (pass min_relative_size=0 to see them), none_after_data_error_filter, vendor_no_peers or vendor_unavailable (peers is null for the last two). The industry grouping is the source's and can be broad.

company_facts has two shapes. Usually facts holds ticker, name, cik, exchange (a market identifier code such as XNAS), sector (the SIC division, such as Manufacturing), industry (the SIC description), sic_code, sic_description, list_date, market_cap, description, homepage_url, address, is_active, currency_name, locale and market. It carries no employee count, officers, S&P 500 flag or financial figures. When that source has no record for the symbol, for example BRK-B (hyphenated share class) or a delisted ticker, a fallback profile is served instead. The fallback uses a different sector and industry taxonomy, names the website website and the SIC code sic, has no market_cap, and adds ipo_date, is_sp500, full_time_employees, officers, fiscal_year_end, former_names and the latest annual, quarterly and TTM figures. Check which keys are present before reading them. For employees, officers and financial figures on any ticker, use company_full/{ticker}.

Financial statements and history

MethodPathPlan / creditsMCP toolDescription
GET/api/v3/fundamentals/income_statementsFree+ / 1fundamentals_income_statementsIncome statements, revenue through net income and EPS. ticker (string, required). period (annual, quarterly or ttm, default quarterly). limit (integer, 1 to 200, default 8). An EPS figure whose sign contradicts its row's net income is replaced with the figure a second source reports for the same period, or withheld as null; that row carries eps_repair (see below).
GET/api/v3/fundamentals/balance_sheetsFree+ / 1fundamentals_balance_sheetsBalance sheets: assets, liabilities and equity line items per period. ticker (required). period (annual, quarterly or ttm, default quarterly). limit (1 to 200, default 8).
GET/api/v3/fundamentals/cash_flow_statementsFree+ / 1fundamentals_cash_flow_statementsCash flow statements: operating, investing and financing flows per period. ticker (required). period (annual, quarterly or ttm, default quarterly). limit (1 to 200, default 8).
GET/api/v3/fundamentals/allFree+ / 1fundamentals_allAll three statements in one call. ticker (required). period (annual, quarterly or ttm, default quarterly). limit (1 to 200, default 4).
GET/api/v3/fundamentals/metricsFree+ / 1fundamentals_metricsFinancial metrics by period: P/E, ROE, margins, FCF yield, debt ratios. ticker (required). period (annual, quarterly or ttm, default quarterly). limit (1 to 200, default 4).
GET/api/v3/fundamentals/historical/{ticker}Free+ / 1fundamentals_historicalMulti-decade statements from SEC EDGAR, annual by default. statement_type (income, balance, cashflow or all, default all). start_year, end_year (integer, 1990 to 2100, optional): fiscal years. With no end_year the range runs to next calendar year, so the latest fiscal year is included (NVDA's fiscal 2027 ends in January 2027), and the response adds end_year_default. With no start_year the source's own default applies. include_quarterly (boolean, default false).

eps_repair on income statements. A quarterly EPS derived as the fiscal year minus the other quarters can straddle a stock split and come out with the wrong sign. When a row's EPS contradicts its own net income, income_statements looks the period up in a second source. If that source reports the same net income and an EPS with the same sign, its EPS is served; otherwise the EPS field is null. The row then carries eps_repair with reason (eps_sign_contradicts_net_income), vendor_values (what the first source said), fields_replaced and fields_withheld. Read a null EPS on such a row as withheld, not as zero.

Fiscal fourth quarters carry their own per-share figures. A 10-K reports the year, not its fourth quarter, so a fiscal-Q4 row is the year less the first three quarters. That is right for revenue and net income and wrong per share: the row used to carry the year's weighted share count under the quarter's label, and an EPS a cent or two away from the company's own release. A fiscal-Q4 row on quarterly income_statements now takes eps_basic, eps_diluted and shares_outstanding (also weighted_average_shares_basic) from the filer's SEC filings, and says how in fiscal_q4_per_share:

  • status is reported when the filer tagged a three-month figure for the quarter, which is served as filed, and derived when the quarter's weighted shares were taken out of the year, day-weighted: the year's average times its days, less each of the first three quarters' average times its days, over the quarter's days. EPS is then the quarter's net income over those shares, rounded to the cent. partially_derived means only some of the figures could be derived. withheld (with a reason) and sec_check_unavailable (the SEC read failed; retry shortly) leave the per-share fields null; they are never the year's figures under the quarter's label.
  • period (start, end, days), shares_diluted, source (sec_companyfacts) and sec_as_of describe the derivation, and shares_diluted_basis lists the filings it used. Basic weighted shares add up exactly over days. Diluted shares are a close approximation.
  • cent_ambiguous lists the EPS fields (eps_basic, eps_diluted) whose cent cannot be decided because the filer rounds its share counts, to millions for example. Microsoft's fiscal Q4 2025 basic EPS derives to 3.67 against a reported 3.66. Treat a listed field as accurate to within a cent.
  • vendor_eps_basic, vendor_eps_diluted and vendor_shares_outstanding keep the previous figures wherever the served one differs.

Apple's fiscal Q4 2025 row reads eps_basic 1.85 and eps_diluted 1.85 on 14,815,308,000 shares (status: "derived"), where it read 1.86 and 1.84 on 14,948,500,000. TTM figures sum the corrected quarter: on TTM income_statements, metrics_snapshot, full and company_full, and in eps_ttm, pe_ttm and forward_pe on price_snapshot (Apple's eps_ttm is 8.72, was 8.71).

Growth, dividends and screening

MethodPathPlan / creditsMCP toolDescription
GET/api/v3/fundamentals/growthFree+ / 1fundamentals_growthGrowth metrics for each ticker's latest fiscal year, not TTM: year-over-year growth, 3-year and 5-year CAGR (percent per year) and current and prior margins, all percent numbers (units names each). Revenue growth beyond ±100% is checked against the issuer's SEC annual report; see The revenue growth check. tickers (string, required): comma-separated, for side-by-side comparison. limit (integer, 1 to 20, default 1): the source answers one row per ticker, its latest fiscal year, whatever the limit.
GET/api/v3/fundamentals/dividendsFree+ / 1fundamentals_dividendsDividend profile per ticker: the dividends block (dividends per share, payout ratio in percent, growth streaks and 10-year history with split-adjusted per-share amounts) and the dividend block (trailing and indicated dividends per share with their dates), with units. dividends_paid_ttm is null on this route; the fiscal year's total is dividends_paid_fiscal_year. tickers (string, required): comma-separated. See Dividends.
GET/api/v3/fundamentals/screenerFree+ / 1fundamentals_screenerMulti-filter stock screener, sized, floored and sorted on Wealthnow's own price and share data. Filters (all optional), each on the row's latest fiscal year, not TTM: sector, industry; percent filters roe_min_pct, roe_max_pct, roa_min_pct, net_margin_min_pct, revenue_growth_min_pct, eps_growth_min_pct, payout_ratio_max_pct (roe_min_pct=20 means ROE of at least 20%, and 0.5 means 0.5%); multiples debt_to_equity_max (0 to 20; 0.5 means debt at most half of equity) and current_ratio_min; years_dividend_growth_min (integer, years). The older names roe_min, roe_max, roa_min, net_margin_min, revenue_growth_min, eps_growth_min and payout_ratio_max are deprecated aliases in the same percent unit; a value strictly between -1 and 1, other than 0, is refused as ambiguous. See Screener units and refusals. Floors: min_market_cap_usd (number, 0 to 1,000,000,000,000, default 300000000), min_adv_usd (number, 0 to 10,000,000,000, default 1000000), security_class (comma list of common, adr, preferred, fund, unit, warrant, other; default common). sort_by (default market_cap_usd), sort_order (asc or desc, default desc). limit (integer, 1 to 100, default 50). page (integer, 1 to 100, default 1). See How the screener sizes and sorts.
GET/api/v3/fundamentals/screener/presetsFree+ / 1fundamentals_screener_presetsCatalogue of pre-built screener strategies, such as Aristocrats, Cash Cows, Value and Quality. No parameters.

Earnings releases, news and analysis

MethodPathPlan / creditsMCP toolDescription
GET/api/v3/fundamentals/earnings_press_releasesFree+ / 1(retired)Retired 2026-09-26. Answers 410 with error_code: "press_release_text_unavailable", not billed: the upstream source of the text no longer exists and nothing else holds it. For report dates and estimates use /api/v3/earnings/next/{ticker}; the filed release is usually exhibit 99.1 of the company's Item 2.02 8-K (/api/v3/sec/filing/{ticker}/8-K).
GET/api/v3/fundamentals/newsFree+ / 1fundamentals_newsCurated news for one ticker from the fundamentals feed. ticker (string, required). limit (integer, 1 to 100, default 50). start_date, end_date (YYYY-MM-DD, optional). For broad or breaking coverage, use News & Sentiment.
GET/api/v3/fundamentals/ai_analyze/{ticker}Pro+ / 6fundamentals_ai_analyzeAI-generated company analysis in data: a summary, strengths, concerns, a peer comparison and a quality score, for a synthesized qualitative read rather than raw numbers. Billed as llm_research. The text is the source's model output (is_model_output: true): check quoted figures against fundamentals_metrics_snapshot before relying on them. Each customer gets 3 new analyses a day (UTC), across all its keys, and new analyses stop for the month once the monthly allowance is used: both refusals are a 503 (daily_limit_reached, quota_exhausted) with Retry-After, not billed. A ticker analysed in the last 24 hours answers from cache and counts against neither limit. When the source fails the call is a 503 upstream_unavailable (error_code: "ai_analyze_vendor_error"), never an empty analysis; a symbol the source has no analysis for is a 404 no_analysis_available, and one the platform does not know at all a 404 unknown_ticker. None of these is billed.

As-reported and point-in-time

MethodPathPlan / creditsMCP toolDescription
GET/api/v3/fundamentals/companyfacts/{ticker}Free+ / 1xbrl_conceptsDiscover the as-reported XBRL concepts a company has filed (taxonomy, units, observation count, first and last period) from SEC EDGAR's live companyfacts document, dated with as_of, last_filed and is_stale (see XBRL freshness). search (string, optional): case-insensitive substring filter on the concept tag. limit (integer, 1 to 2000, default 400).
GET/api/v3/fundamentals/xbrl/{ticker}/{concept}Free+ / 1xbrl_concept_historyOne XBRL concept's as-reported history from SEC EDGAR's live companyfacts document. Each row carries fy and fp (the fiscal year and period of the filing that carried the fact) and period_fy, period_fp and period_months (the fact's own period). as_of (YYYY-MM-DD): only values filed on or before that date, which excludes later restatements; it is echoed as as_of, and data_as_of says when SEC's document was read. history (boolean, default false): every original and restated filing instead of one best value per period. Filters: taxonomy (us-gaap, dei or ifrs-full; default auto), unit (such as USD or shares), form (such as 10-K), start, end (period end dates). limit (integer, 1 to 5000, default 500).
GET/api/v3/fundamentals/pit/{ticker}Pro+ / 3 (alt_data)fundamentals_pitWhat the market actually knew on a date: quarterly financials as they stood on as_of, with later restatements excluded, and for each period whether it has been restated since and what it reads today. as_of (YYYY-MM-DD, optional): omit for the current view. periods (integer, 1 to 60, default 8): fiscal periods returned, newest first. Advanced format keys indfmt, consol, popsrc, datafmt (optional; the dominant variant is chosen for you).
GET/api/v3/fundamentals/pit/{ticker}/vintagesPro+ / 3 (alt_data)fundamentals_pit_vintagesThe restatement trail for one fiscal quarter: every published version in order, the day each became the live view and was superseded, and which line items changed from the previous version. datadate (YYYY-MM-DD, optional): fiscal period end; omit for the latest quarter held. Advanced format keys indfmt, consol, popsrc, datafmt (optional). When a quarter has several format variants, the one with the longest trail is served and the others are listed in key_variants.
GET/api/v3/fundamentals/pit_coveragePro+ / 3 (alt_data)fundamentals_pit_coverageThe bounds of the point-in-time archive: versions held, companies, the span of knowledge dates an as_of query can answer, and the span of fiscal periods. ticker (string, optional): per-company bounds; omit for the whole archive.

Knowledge dates in the point-in-time archive. as_of answers use S&P's own snapshot dates as knowledge dates, not the dates Wealthnow received each version. The newest weekly snapshot reaches us about two weeks after its snapshot date, so an as_of within the last two weeks can include a version we did not yet hold on that date. The values match S&P's exactly.

Segments

MethodPathPlan / creditsMCP toolDescription
GET/api/v3/fundamentals/segments/{ticker}Starter+ / 4 (funds)fundamentals_segmentsBusiness and geographic segment breakdown: sales, revenue and operating income by line of business (BUSSEG), region (GEOSEG), ASC-280 operating segment (OPSEG) and US state (STSEG). year (integer, 1960 to 2100): fiscal year, matched on the segment date's year. date (YYYY-MM-DD): an exact segment date, which overrides year. stype (business, geographic, operating, state, or the raw codes): one segment type. limit (integer, 1 to 2000, default 200): maximum segment rows across all groups. With no year or date, the latest available period is returned. Values are in millions of the reported currency.

Periods and units in company snapshots

metrics_snapshot, company_full and full combine blocks that cover different periods and use different units. A quarter's ROE of 28% and a trailing ROE of 84% can sit side by side, so read each block's period and units before comparing numbers.

period is on every block: type, fiscal_year, fiscal_quarter, start and end.

typeMeaning
quarterOne fiscal quarter.
fiscal_yearOne fiscal year.
ttmExactly four consecutive fiscal quarters (ttm_status ok or derived_q4). Adds quarters (for example 2027Q2), quarters_contiguous and n_quarters.
partial_ttmAnything labelled trailing that is not four consecutive quarters. Same extra keys.
point_in_timeA balance-sheet date.
trailing_daysThe dividend block: days, start, end and basis (ex_dividend_date).
mixedThe fallback snapshot served when the primary source returns nothing: a flat set of metrics from mixed periods, with units_unverified and units_basis.
unknownThe source's fiscal period could not be read.

Cash-flow blocks add period.basis: discrete, year_to_date or unverified.

units names the unit of every numeric field in the block; a null field has no unit. The vocabulary is percent (84.23 is 84.23%), fraction (0.2812 is 28.12%), usd, usd_per_share, multiple, shares, count and days. Money is usd for a US issuer. Otherwise it is reporting_currency (or reporting_currency_per_share) and the block adds currency, the ISO code, or currency: null with currency_status: "not_reported_by_source". field_periods flags a field whose period differs from its block's, for example shares_outstanding as the latest quarter's count inside a TTM block. Cash-flow blocks carry a sign_convention.

Blockperiod.typeUnits
latest_annual, balance_sheet_summary, cash_flow_summaryfiscal_year (the balance sheet point_in_time at the year end)Money, per share, shares
latest_quarterlyquarterMoney, per share, shares
ttm, income_statement_ttm, cash_flow_ttmttm or partial_ttmMoney, per share
ttm.ttm_ratiosttmPercent for margins, roe_ttm and roa_ttm (TTM figure over the ending balance); multiple for current_ratio and debt_to_equity. Carries definitions.
ttm.mrq_balance_sheet, balance_sheet_mrqpoint_in_timeMoney. balance_sheet_mrq is the newest quarter-end balance sheet, with its own fiscal_period (for example Q2).
ratiosquarterFractions of that one quarter, not annualised, for margins, returns, debt_to_assets and liabilities_to_assets; multiple for the current, quick and cash ratios, debt to equity, long-term debt to equity and asset turnover; per share for EPS and book_value_per_share. Carries definitions.
growthfiscal_yearPercent, the latest fiscal year over the one before. Revenue growth beyond ±100% is checked; see The revenue growth check. Carries definitions.
dividendsfiscal_yearunits describes each field in words; see Dividends.
dividendtrailing_daysPer share in the dividends' currency. period and units are on this block in metrics_snapshot and full.

For NVDA's fiscal 2027 second quarter, ratios.roe is 0.2812 (28.12% for that quarter, on average equity) and ttm.ttm_ratios.roe_ttm is 84.23 (84.23% over the trailing twelve months).

Trailing twelve months

A TTM figure is the sum of the four consecutive fiscal quarters ending with the latest one. A missing fourth quarter is derived as the fiscal year minus the first three. ttm_status says what the window is:

ttm_statusMeaning
okFour consecutive quarters.
derived_q4Four quarters, with Q4 derived from the fiscal year.
partialThe source has fewer than four quarters. Every flow field is null and listed in ttm_underfilled_fields; fiscal_period reads TTM(partial:NQ).
non_contiguousA quarter is missing inside the window and no fiscal-year row fills it. Every flow field is null; ttm_missing_quarter names the gap.
cash_flow_basis_unknown, cash_flow_ttm_inconsistentCash flow only: the quarters' cash flows cannot be told apart from year-to-date figures, or do not add up. Every cash-flow field is null.

In a complete window, a field that some quarters leave empty is summed over the rest and named in ttm_underfilled_fields; treat it as a floor. cash_flow_row_basis gives each quarter's cash-flow basis (discrete, ytd or unknown). ttm_ratios are recomputed from the checked TTM, and are null when the window is not ok.

Per-share figures on today's share basis. TTM EPS sums each quarter's diluted and basic EPS after restating any quarter filed before a later split, and the latest share count is put on today's basis the same way. eps_ttm_basis says how: status (ok, or why EPS is null: incomplete_ttm, period_end_unknown, mixed_basis_in_data, derived_quarter_spans_split, split_basis_unknown, inconsistent_share_counts, cross_check_failed, splits_unavailable or restatement_failed), basis (as_reported, split_adjusted or as_reported_splits_unchecked), split_factors, cross_check_net_income_over_shares and splits_checked. KLAC's TTM EPS is 3.657 after its 10-for-1 split, not the 27.30 that summing the quarters as filed gives. ratios.book_value_per_share is restated the same way, with the original in book_value_per_share_as_filed, and is null when a split leaves its basis unknown.

Debt ratios

  • ratios.debt_to_assets is total debt (short-term plus long-term) over total assets. The source's figure under that name was total liabilities over total assets; it is now liabilities_to_assets. NVDA: debt_to_assets 0.1042, liabilities_to_assets 0.285. When debt_to_assets is null, debt_to_assets_status says why: balance_sheet_unavailable, debt_not_established or vendor_definition_unverified.
  • Debt to equity is null with debt_to_equity_status: "debt_components_missing" when the balance sheet lacks a debt component; debt_components_missing lists which (short_term_debt, long_term_debt). long_term_debt_to_equity is withheld the same way when long-term debt is the gap. The same rule applies in ttm.ttm_ratios.

The cash-flow bridge

cash_flow_ttm and, in full, cash_flow_latest reconcile operating cash flow with net income:

FieldMeaning
operating_cash_flow_componentsThe served parts of the bridge: net income, depreciation and amortization, stock-based compensation, change_in_receivables and other_operating_items. They always sum to operating_cash_flow.
change_in_receivablesThe change in receivables, in cash-flow sign (an increase is negative). change_in_receivables_status (not_reported, not_established) says why it is null.
other_operating_itemsThe residual: working-capital changes other than receivables, non-cash gains and every other operating item.
change_in_working_capitalAlways null: the source's figure is the receivables change alone, not working capital. change_in_working_capital_status is vendor_reports_receivables_only, not_reported or vendor_concept_unverified, and working_capital_check shows the source's figure and what it reads as.
cash_conversion_pctOperating cash flow over net income, in percent. null with cash_conversion_status (net_income_not_positive, period_basis_unverified) when it cannot be stated.
operating_bridge_status, period_basisreconciled or period_basis_unverified; and whether the figures are discrete, year_to_date or unverified. A 10-Q's cash flows are year to date, so cash_flow_latest can be a half-year or nine months.

NVDA's second fiscal quarter of 2027: operating cash flow 24.08B against net income 59.7B, with change_in_receivables -22.35B, other_operating_items -16.42B and cash_conversion_pct 40.34.

The full bundle

  • period_pairs pairs the panes that cover the same period: ttm (income_statement_ttm with cash_flow_ttm), latest_quarter (income_statement_latest_quarter with cash_flow_latest) and point_in_time (balance_sheet_latest). Each has the panes, their end and matched, which is true only when both panes end on the same day, have the named period, and the cash-flow pane is on a discrete basis.
  • Insider trades and institutional holders need a plan with the funds product (Starter and up); the call still costs 1 fundamentals credit. On Free both panes are null with status plan_required, and a plan_required block names the fields and the plans that unlock them.
PaneStatus fieldValues
insider_trades_recent (up to 5)insider_trades_statusok; none_reported (served as []); vendor_unavailable (null); plan_required (null)
institutional_holders_top (up to 10)institutional_holders_statusok; none_reported ([]); archive_unavailable (null, retry); plan_required (null)

Holder rows carry investor, holder, shares, value_usd and report_period, from 13F filings. institutional_holders_freshness gives newest_report_period, expected_report_period, is_stale and quarters_behind. A null pane always has a status and means unknown; [] means none reported.

Dividends

The dividends block (in the snapshots and each /dividends item) is the fundamentals source's fiscal-year dividend profile, with its fields named for what they are. Its units map describes each:

FieldMeaning
dividends_per_shareUSD per share: the fiscal year's dividends paid over that year's weighted shares, as filed, not split-adjusted.
dividends_paid_fiscal_yearUSD: dividends paid in the fiscal year fiscal_year.
dividends_paid_ttmUSD: dividends paid over the trailing four fiscal quarters of the cash-flow statement. null when that TTM is not complete, and always null on /dividends. NVDA: 6.73B, against 0.97B for fiscal 2026.
payout_ratioPercent: fiscal-year dividends paid over net income. NVDA's 0.81 is 0.81%, not 81%.
dividend_growth_yoy, years_consecutive_growthGrowth of TOTAL dividends paid (percent) and the streak of fiscal years it grew. Buybacks move them.
dividend_per_share_growth_yoy_pctPercent: growth of per_share_split_adjusted, latest fiscal year over the one before.
years_consecutive_per_share_growthFiscal years in which the split-adjusted regular dividend rate rose (or held while regular plus special rose). A floor when years_consecutive_per_share_growth_is_floor is true.
dividend_history[]One row per fiscal year: year, total_paid, per_share (as filed), per_share_split_adjusted (USD per share on today's share basis: cash dividends with a pay date in the fiscal year), per_share_split_adjusted_basis, fiscal_year_end and n_payments.

Use per_share_split_adjusted for any trend: per_share is never restated for later splits, so a split reads as a cut. NVDA's fiscal 2021 dividend is 0.6402 as filed and 0.016 split-adjusted, the same rate it paid through fiscal 2024. per_share_split_adjusted_basis says whether a year was summed from the market-data dividend record by pay date, or scaled from the as-filed figure by the later splits (vendor_per_share_split_scaled); it is null, with the value, when neither is known.

The dividend block gives the current dividend: status, trailing_per_share (regular dividends with an ex-date in the last 365 days, split-adjusted), indicated_annual_per_share (the latest declared regular dividend times payments per year), frequency, special_ttm_per_share, currency, last_regular with its four dates, source (the market-data corporate-actions feed) and as_of. NVDA: trailing 0.52, indicated 1.00. Its statuses are those listed under Dividend status, except implausible, which only price_snapshot sets.

The revenue growth check

The fundamentals source can compare two different revenue lines across years. TRV's fiscal 2025 revenue growth was served as +1,123%: net investment income in one year against premiums in the next. So any revenue growth beyond ±100%, or a row whose revenue minus cost of revenue misses its gross profit, is checked against the issuer's SEC annual report, on one revenue concept in both years, with the prior year from that report's comparative column. The check applies on the screener, on /growth, and to the growth block of metrics_snapshot, company_full and full.

growth_statusrevenue_growth_yoy servedMeaning
sec_confirmedThe source's figureIt agrees with the annual report. NVDA's fiscal 2025 +114.2% is confirmed.
vendor_concept_mismatchThe SEC figureThe source's figure compares different lines. TRV: +5.18% (total revenues, 48,828M against 46,423M).
sec_check_pendingnullThe SEC read did not finish in time; revenue_growth_basis.retryable is true. Retry shortly: the answer is not cached.
unverified_outliernullThe filings cannot settle it (no SEC facts, a fiscal year that cannot be placed, or a prior-year revenue of zero or less). revenue_growth_basis.reason says which.

A row the check did not run on has no growth_status. A checked row adds:

  • vendor_revenue_growth_yoy: the source's figure, always kept.
  • revenue_growth_basis: the trigger; when settled, concept, unit, fiscal_year, current and prior (each period_start, period_end, value, accession, form, filed), the formula and revenue_growth_yoy (sec and vendor); when not, reason and, where it applies, retryable.
  • On /growth and the snapshot growth blocks, on vendor_concept_mismatch: the 3-year and 5-year CAGRs are recomputed on the same concept, or null when SEC cannot compute them (TRV: 157.83 and 81.54 become 9.8 and 8.83), with the source's in vendor_revenue_growth_3y_cagr and vendor_revenue_growth_5y_cagr. The six margin fields, computed on the contradicted revenue, are null and kept in vendor_margins.
  • A CAGR whose span crosses a change of revenue concept is null even when the year-over-year figure is confirmed.

While a check is pending, warning says how many figures are still being checked. /growth also returns revenue_growth_checks (counts by status) and growth_statuses (what each status means) whenever a row was checked.

How the screener sizes and sorts

The fundamentals source applies the ratio filters (roe_min_pct, revenue_growth_min_pct and the rest). Everything else happens on Wealthnow's own data, over the whole matched set, before the page is cut, and the debt-to-equity ceiling and the revenue-growth floor are applied again to the values served:

  • Size and liquidity. Each row gains listing_ticker (the active US listing it was sized on), security_class, exchange, price_usd (last exchange close), adv_21d_usd (average daily dollar volume over the last 21 sessions) and market_cap_usd (close times shares outstanding, summed over the issuer's US-listed common share classes).

  • Default floors. With no floor parameters the screen returns only common stock with a market cap of at least $300M and at least $1M a day of dollar volume. A row whose market cap or dollar volume is unknown does not clear a non-zero floor. Pass min_market_cap_usd=0 or min_adv_usd=0 to turn a floor off, which also admits rows whose value is unknown. Rows with no active US listing are always left out.

  • Security classes. security_class is a comma list of common, adr, preferred, fund, unit, warrant and other. An unknown class returns 400 invalid_security_class listing the allowed ones. market_cap_usd is null for ADRs and non-equity classes, so widen to them with min_market_cap_usd=0.

  • Currency. revenue and net_income stay in the issuer's own reporting currency and are not comparable across rows. revenue_usd and net_income_usd are in US dollars when the reporting currency can be established (a US-incorporated registrant, or the issuer's own SEC filings). A non-USD value is converted at the average rate over its fiscal period, for JPY, KRW, CNY, BRL and EUR only; otherwise the field is null, with the reason in the row's notes. reporting_currency, currency_status and fx say how each value was derived.

  • Sorting. sort_by defaults to market_cap_usd. It accepts market_cap_usd, adv_21d_usd, price_usd, revenue_usd, net_income_usd, revenue_growth_yoy, net_income_growth_yoy, eps_growth_yoy, roe, roa, gross_margin, operating_margin, net_margin, debt_to_equity, current_ratio, quick_ratio, payout_ratio, dividend_growth_yoy and years_dividend_growth, plus aliases: market_cap and marketcap sort on market_cap_usd, revenue on revenue_usd, net_income on net_income_usd, adv, adv_21d, adv_usd and dollar_volume on adv_21d_usd, price on price_usd, and the short *_growth names on their *_growth_yoy fields. Any other key returns 400 invalid_sort_by listing the allowed ones. Rows without a value sort last in both directions; revenue_growth_yoy sorts on the checked figure, so a growth withheld by the check sorts last. The response echoes the key it sorted on in sort_by and what you sent in sort_by_requested.

  • Market cap withheld. market_cap_usd is null when the close has moved more than 3x, either way, from the split-adjusted close on the date of the share count, because the share count can no longer be trusted. Such rows leave a floored screen. Listings trading at least $1M a day that the market-cap floor dropped because their size could not be verified are named in universe.liquid_without_market_cap and in warning.

  • Renamed issuers. A row still filed under a symbol its issuer retired in the last 18 months is sized on the current listing (listing_ticker, with a note), and counted in universe.sized_on_former_symbol.

  • What was left out. floors echoes the floors applied. total_matched and total_pages count the rows that cleared the floors and the second debt-to-equity and growth filter. Rows that second filter drops are counted in universe.excluded under negative_equity, debt_to_equity_unknown, debt_to_equity_above_max, revenue_growth_unverified, revenue_growth_unknown, revenue_growth_below_min_after_sec_check or revenue_growth_below_min. universe reports the source's match count, whether every matched row was retrieved (candidate_set_complete), exclusions by reason (excluded, with tickers in excluded_examples), and rows_without_sort_value. fundamentals_stale on a row is true when its fiscal period ended more than 18 months ago.

  • Where each number comes from. field_sources names the source of every field, and as_of dates them: prices, shares_outstanding, fx_rates_through, size_snapshot_built_at and size_snapshot_age_s.

  • Revenue growth. Growth beyond ±100% is checked against the issuer's SEC annual report (see The revenue growth check), and the growth floor is applied again to the checked figure: TRV's served +1,123% becomes +5.18% and leaves a 20% screen. A figure the check withholds as null does not pass a growth floor. The row's revenue is left as the source reported it, and its notes say what was recomputed. universe.revenue_growth_checks counts the checks by status and growth_statuses explains each. A company the source itself excluded on a wrong figure cannot be recovered.

Screener units and refusals

  • Units. Every filter and row field ending in _pct is a percent number; the older names are the same unit. debt_to_equity, current_ratio and quick_ratio are multiples, and years_dividend_growth is in years. Ratios, margins, growth and payout are for each row's latest fiscal year (fiscal_year), not TTM. units maps every row field to its unit.
  • filters_applied states each filter as applied, with its unit and basis, for example roe >= 20% (each row's latest fiscal year (fiscal_year), not TTM; net income / average shareholders' equity). A filter sent under an older name ends with a note naming the _pct parameter. Sector, industry and floor lines are included. The filters echo keeps the older names even when you send _pct ones.
  • Negative equity. A row whose equity is negative carries equity_negative: true and keeps its negative debt_to_equity (ABBV -20.49). It never passes debt_to_equity_max.

Before sending anything to the source, the screener refuses a filter it cannot read. Each refusal is a 422 with error and error_code set to the code, a detail that starts "NOTHING WAS SCREENED", is_empty_result_set: false, retryable: false and billed: false, and no items. None is billed. The first failing check wins:

error_codeWhenExtra fields
non_finite_thresholdA filter is nan, inf or -inf.params
debt_to_equity_max_out_of_rangedebt_to_equity_max is outside 0 to 20.param, value, unit (multiple), min, max
conflicting_filter_valuesAn older name and its _pct name carry different values. The same value sent under both runs once.conflicts
ambiguous_percent_thresholdAn older percent name carries a value strictly between -1 and 1, other than 0: roe_min=0.2 could mean 0.2% or 20%. A _pct name is never refused for its size.ambiguous: each param, value, both readings and the use_instead parameters for each

Over MCP, the screener refuses an argument it does not declare instead of ignoring it, because an ignored filter returns an unfiltered screen that looks filtered. The result has isError: true, text that starts "NOTHING WAS RUN" and lists the accepted arguments (with a suggestion when one is close), and structuredContent with error: "unknown_argument", unknown_arguments, accepted_arguments and did_you_mean. Nothing is run or billed. Other tools still ignore arguments they do not declare.

The screener refuses rather than serving an unfloored screen. While its size data is still loading on a server it answers 503 with error: "build_timeout" and Retry-After: 10: a warm-up, so retry once after the wait. When the size data or the fundamentals source cannot be read it answers 503 with error: "upstream_unavailable" and error_code screener_size_data_unavailable or screener_vendor_unavailable. None of these is billed, and none carries an items list.

XBRL freshness

companyfacts/{ticker} and xbrl/{ticker}/{concept} read SEC EDGAR's live companyfacts document for the company. Each server keeps a copy for up to 3 hours, so a new filing can take a few hours to appear, and the answer says when its copy was read:

FieldMeaning
sourcesec_edgar_companyfacts_live, or archive when SEC could not be read on this call and an older archived copy was served.
as_of (companyfacts), data_as_of (xbrl)When the document was read (for archive, the copy's date). On the xbrl route as_of still echoes your point-in-time parameter.
last_filedThe newest filing date among all the company's facts.
financial_facts_last_filedThe newest filing date among its financial statement facts (us-gaap, ifrs-full).
concept_last_filedxbrl only: the newest filing date of this concept, whatever the filters.
is_staletrue when the financial facts lag: a later filing carried none for over 60 days, they are over 460 days old, or there are none; or when an archived copy is over a day old.
freshnessas_of, last_filed, financial_facts_last_filed, source, is_stale, stale_reason (later_filings_carry_no_financial_facts, financial_facts_older_than_max_age, no_financial_facts, archive_copy_older_than_max_age), age_days, note, and on an archive answer fallback_reason (throttled, rate_limited, timeout, transport_error, http_<status>, bad_payload, disabled).

TSM's last filing (2026-04-16) carried no financial facts, and its newest are from 2025-04-17, so it answers is_stale: true with later_filings_carry_no_financial_facts.

warning: "no_companyfacts" means SEC holds no XBRL facts for the company. When SEC cannot be read and no archived copy exists, the route answers 503 with error: "upstream_unavailable" and error_code: "sec_edgar_unavailable", Retry-After: 60, not billed.

Whose period is it? On xbrl rows, fy and fp are the fiscal year and period of the filing that carried the fact, so a 10-Q repeats the prior year-end balance under its own Q1. period_fy, period_fp (FY, Q1 to Q4, Q2_YTD, Q3_YTD) and period_months (null for a balance) are the fact's own period. AAPL's total assets at 2025-09-27, carried by its first-quarter fiscal 2026 10-Q, have fy 2026 and fp Q1 but period_fy 2025 and period_fp FY. field_notes explains the five fields.

Point-in-time financials

The ordinary statement routes serve today's view of every figure, including later restatements. A backtest built on them trades on numbers nobody had at the time. The point-in-time routes keep every version of each fiscal quarter as it was published, stamped with the day that version became public.

  • The as-of rule. For each fiscal period, pit/{ticker}?as_of= returns the latest version whose knowledge_date is on or before as_of. Versions published later are excluded by construction.
  • Each period carries datadate, fiscal_year, fiscal_quarter, fiscal_year_end_month, currency, knowledge_date, vintage_valid_until, is_current_vintage, earnings_report_date, and a financials block.
  • The vintage block on each period says whether this was the first report (is_first_report), how many versions exist (vintages_held_for_period), whether it has been restated since (restated_since_as_of), and, when it has, restated_fields and the current_values of those fields. A figure that was first reported after as_of is listed in fields_first_reported_after_as_of, not counted as a restatement.
  • financials holds revenue, sales, net_income, income_before_extraordinary_items, basic and diluted EPS including and excluding extraordinary items, total_assets, total_liabilities, common_equity, stockholders_equity, total_equity, shares_outstanding, and the share counts used for basic and diluted EPS.
  • Units. Financial items are in millions of the filing's own reporting currency, carried per period in currency. The archive covers North American filers, so the currency is USD or CAD; do not assume USD. Share counts are in millions of shares. Every response includes a units map.
  • What counts as a restatement. Only a value that changed. Re-publishing identical numbers is not a restatement, and the response states this in restatement_definition. A first-version value that differs from the current one by a power of ten is treated as a data-entry scale error and not counted as a restatement. That field is served as null in financials; its as-filed value is kept under data_quality.as_filed_unverified, and its name is listed in data_quality.values_withheld. Read a null there as withheld, not missing. The vintages response also lists such fields in fields_with_scale_corrections.
  • Identity. The symbol is resolved to one security first. Financial statements are filed by the issuer, so every share class of one company returns the same figures, as financial_statement_grain states. A fund, warrant or preferred line returns security_type_not_covered instead of an empty panel.
  • Coverage. When the archive was loaded it held about 1.03 million versions for 21,747 companies, with knowledge dates from 2018-01-01 and fiscal periods back to 1973. An as_of before the knowledge span cannot be answered; pit_coverage reports the current bounds, overall or for one ticker.

Examples

Example 1: Get a full company snapshot

Retrieve a complete fundamentals snapshot for Apple in one call.

Shell
curl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \  "https://firm.wealthnow.io/api/v3/fundamentals/company_full/AAPL" # Response structure (abbreviated):# {#   "ok": true,#   "timestamp": "2026-09-23T01:57:05Z",#   "ticker": "AAPL",#   "data": {#     "name": "Apple Inc.",#     "sector": "Consumer Goods",#     "industry": "Electronic Equipment",#     "full_time_employees": 150000,#     "latest_annual": { "fiscal_year": 2025, "revenue": 416161000000, "net_income": 112010000000, ... },#     "income_statement_ttm": { "fiscal_period": "TTM", "end_date": "2026-06-27", "revenue": 466823000000, "net_income": 128930000000, ... },#     "balance_sheet_mrq": { "fiscal_period": "Q3", "period": { "type": "point_in_time", ... }, "total_assets": 383266000000, ... },#     "cash_flow_ttm": { "operating_cash_flow": 146724000000, "free_cash_flow": 136683000000, ... },#     "ratios": { "fiscal_period": "Q3", "period": { "type": "quarter", ... }, "net_margin": 0.2723, "roe": 0.2784, "debt_to_equity": 0.7659, "units": { "roe": "fraction", "debt_to_equity": "multiple", ... }, ... },#     "growth": { "fiscal_year": 2025, "revenue_growth_yoy": 6.43, "eps_growth_yoy": 22.7, ... },#     "dividends": { "payout_ratio": 13.77, "dividends_paid_fiscal_year": ..., "dividends_paid_ttm": ..., "years_consecutive_growth": 5, ... },#     "dividend": { "status": "ok", "trailing_per_share": ..., "indicated_annual_per_share": ..., ... },#     ...#   }# }

ratios covers the latest reported quarter: margins and returns are fractions (0.2784 is 27.84%), and the current ratio and debt to equity are multiples, as ratios.units states. They are that one quarter's ratios, not annualised and not trailing twelve months: roe here is one quarter's return on equity. Trailing ratios are in ttm.ttm_ratios, in percent. growth covers the latest fiscal year and its values are percents (6.43 is 6.43%). payout_ratio is a percent too (13.77 is 13.77%).

Python
import os, requests r = requests.get(    "https://firm.wealthnow.io/api/v3/fundamentals/company_full/AAPL",    headers={"Authorization": f"Bearer {os.environ['WEALTHNOW_API_KEY']}"},    timeout=30,)r.raise_for_status()body = r.json()company = body["data"]ttm = company["income_statement_ttm"]print(f"{body['ticker']}: {company['name']}")print(f"Revenue (TTM to {ttm['end_date']}): ${ttm['revenue'] / 1e9:.1f}B")print(f"Net margin ({company['ratios']['fiscal_period']}): {company['ratios']['net_margin']:.1%}")print(f"Revenue growth (FY{company['growth']['fiscal_year']}): {company['growth']['revenue_growth_yoy']:.1f}%")

Example 2: Screen stocks by multiple factors

Find stocks with ROE of at least 15%, revenue growth of at least 10%, and at least 10 consecutive years of dividend growth. Percent filters use the same percent units as the response: roe_min_pct=15 means 15%, not 0.15. With no floor parameters, only common stock with at least a $300M market cap and $1M a day of dollar volume is returned, largest first.

Shell
curl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \  "https://firm.wealthnow.io/api/v3/fundamentals/screener?roe_min_pct=15&revenue_growth_min_pct=10&years_dividend_growth_min=10&limit=50" # Response structure (abbreviated; "..." stands for values not shown):# {#   "ok": true,#   "timestamp": "...",#   "filters": {#     "roe_min": 15.0,#     "revenue_growth_min": 10.0,#     "years_dividend_growth_min": 10#   },#   "filters_applied": [#     "roe >= 15% (each row's latest fiscal year (fiscal_year), not TTM; net income / average shareholders' equity)",#     ...#   ],#   "units": { "roe": "percent", "revenue_growth_yoy": "percent", "debt_to_equity": "multiple", ... },#   "sort_by": "market_cap_usd",#   "sort_by_requested": null,#   "sort_order": "desc",#   "floors": {#     "min_market_cap_usd": 300000000.0,#     "min_adv_usd": 1000000.0,#     "security_class": ["common"]#   },#   "total_matched": ...,#   "total_pages": ...,#   "items": [#     {#       "ticker": "MSFT",#       "name": "MICROSOFT CORP",#       "sector": "Technology",#       "fiscal_year": 2026,#       "roe": 34.04,#       "revenue_growth_yoy": 17.79,#       "payout_ratio": 19.77,#       "years_dividend_growth": 16,#       "listing_ticker": "MSFT",#       "security_class": "common",#       "price_usd": ...,#       "adv_21d_usd": ...,#       "market_cap_usd": ...,#       "reporting_currency": "USD",#       "revenue_usd": ...,#       "net_income_usd": ...,#       "fundamentals_stale": false,#       ...#     },#     ...#   ],#   "universe": { "candidate_set_complete": true, "excluded": { ... }, "liquid_without_market_cap": [ ... ], ... },#   "field_sources": { ... },#   "as_of": { "prices": "...", "shares_outstanding": "...", ... }# }

Each row reports its own fiscal_year, which can lag the calendar for companies with stale filings; fundamentals_stale is true when that fiscal period ended more than 18 months ago. Check it before comparing names. Compare size across rows on market_cap_usd, and revenue on revenue_usd, never on revenue.

Python
import os, requests r = requests.get(    "https://firm.wealthnow.io/api/v3/fundamentals/screener",    params={        "roe_min_pct": 15,        "revenue_growth_min_pct": 10,        "years_dividend_growth_min": 10,        "limit": 50,    },    headers={"Authorization": f"Bearer {os.environ['WEALTHNOW_API_KEY']}"},    timeout=30,)r.raise_for_status()results = r.json()print(f"Found {len(results['items'])} dividend growers with ROE >= 15% and revenue growth >= 10%")for stock in results["items"][:5]:    print(f"  {stock['ticker']}: ROE {stock['roe']:.1f}%, "          f"revenue growth {stock['revenue_growth_yoy']:.1f}%, "          f"dividend growth {stock['years_dividend_growth']} years")

Example 3: Point-in-time, as-reported XBRL (no restatement look-ahead)

Vendors serve restated numbers, the value a period shows today after later revisions, which bakes look-ahead bias into any backtest. SEC's companyfacts document carries the filed date on every fact, so ?as_of= returns exactly what was public on a given date. First discover the concept tag, then query it as of a historical date.

# 1. Discover the XBRL concepts Apple has filed (filter to net income)curl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \  "https://firm.wealthnow.io/api/v3/fundamentals/companyfacts/AAPL?search=netincome" # Response structure:# {#   "ok": true,#   "timestamp": "2024-12-16T14:22:00Z",#   "ticker": "AAPL",#   "cik": 320193,#   "entity_name": "Apple Inc.",#   "n_concepts": 2,#   "concepts": [#     {#       "taxonomy": "us-gaap",#       "concept": "NetIncomeLoss",#       "label": "Net Income (Loss) Attributable to Parent",#       "units": ["USD"],#       "n_observations": 112,#       "first_period": "2008-09-27",#       "last_period": "2024-09-28"#     },#     { ... }#   ],#   "source": "sec_edgar_companyfacts_live",#   "as_of": "...", "last_filed": "...", "financial_facts_last_filed": "...", "is_stale": false, "freshness": { ... }# } # 2. Net income AS IT WAS PUBLIC on 2020-02-01, no later restatement leaks incurl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \  "https://firm.wealthnow.io/api/v3/fundamentals/xbrl/AAPL/NetIncomeLoss?form=10-K&as_of=2020-02-01" # Response structure:# {#   "ok": true,#   "timestamp": "2024-12-16T14:22:10Z",#   "ticker": "AAPL",#   "cik": 320193,#   "entity_name": "Apple Inc.",#   "taxonomy": "us-gaap",#   "concept": "NetIncomeLoss",#   "units_available": ["USD"],#   "as_of": "2020-02-01",#   "mode": "latest_per_period",#   "n": 2,#   "rows": [#     {#       "unit": "USD",#       "start": "2018-09-30",#       "end": "2019-09-28",#       "val": 55256000000,#       "fy": 2019,#       "fp": "FY",#       "form": "10-K",#       "filed": "2019-10-31",#       "accn": "0000320193-19-000119",#       "frame": "CY2019",#       "period_fy": 2019,#       "period_fp": "FY",#       "period_months": 12#     },#     { ... }#   ],#   "source": "sec_edgar_companyfacts_live",#   "data_as_of": "...", "last_filed": "...", "concept_last_filed": "...", "is_stale": false, "freshness": { ... }, "field_notes": { ... }# }

Example 4: Business & geographic segments (4 credits, Starter and up)

See where a company earns, revenue mix by region and by line of business, from the licensed segment archive. The archive lags by a few quarters, so with no year/date the latest available period is returned and the datadate served is reported.

Shell
# Latest available segment breakdown for Applecurl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \  "https://firm.wealthnow.io/api/v3/fundamentals/segments/AAPL" # Response structure (abbreviated):# {#   "ok": true,#   "timestamp": "2024-12-16T14:22:20Z",#   "ticker": "AAPL",#   "gvkey": "001690",#   "company_name": "APPLE INC",#   "datadate": "2023-09-30",#   "fiscal_year": 2023,#   "mode": "latest_available",#   "currency": "USD",#   "n_segments": 9,#   "truncated": false,#   "segment_type_legend": {#     "BUSSEG": "business segment: line of business",#     "GEOSEG": "geographic segment: region"#   },#   "segments": {#     "GEOSEG": [#       { "segment_id": "01", "name": "Americas", "sales": 162560.0, "revenue": 162560.0,#         "operating_income": 60508.0, "geographic_type_code": "2", "geographic_type": null,#         "currency": "USD", "datadate": "2023-09-30" },#       { "segment_id": "03", "name": "Greater China", "sales": 72559.0, "revenue": 72559.0,#         "operating_income": 30328.0, "geographic_type_code": "3", "geographic_type": "non_domestic",#         "currency": "USD", "datadate": "2023-09-30" }#     ],#     "BUSSEG": [#       { "segment_id": "01", "name": "iPhone", "sales": 200583.0, "revenue": 200583.0, ... }#     ]#   },#   "available_datadates": ["...", "2022-09-30", "2023-09-30"],#   "source": "warehouse:segments-archive"# }

Example 5: What did the market know on a date? (3 credits, Pro and up)

Pull Apple's last eight quarters as they stood on 2025-03-01, then check which of those figures have been revised since.

curl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \  "https://firm.wealthnow.io/api/v3/fundamentals/pit/AAPL?as_of=2025-03-01&periods=8" # The restatement trail for one of those quarterscurl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \  "https://firm.wealthnow.io/api/v3/fundamentals/pit/AAPL/vintages?datadate=2024-12-31"

Example 6: Find a company, then pull its full picture (1 credit each)

Shell
curl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \  "https://firm.wealthnow.io/api/v3/fundamentals/search?q=apple&limit=3"

Live response captured 2026-09-23, abbreviated:

JSON
{  "ok": true,  "timestamp": "2026-09-23T04:59:58.433896+00:00",  "query": "apple",  "items": [    { "ticker": "AAPL", "name": "Apple Inc.", "country": "USA", "industry": "Electronic Equipment", "sector": "Consumer Goods", "exchange": "NASDAQ", "is_sp500": true },    { "ticker": "AAPI", "name": "Apple iSports Group, Inc.", "country": "Australia", "industry": "Gaming Activities", "sector": "Consumer Cyclical", "exchange": "Other OTC", "is_sp500": false }  ]}

Then call /api/v3/fundamentals/full/AAPL for the bundle.