Products
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
| Dimension | Coverage | Source |
|---|---|---|
| Financial statements | Income statements, balance sheets, cash flow statements (quarterly / annual / TTM), and multi-decade annual history | SEC EDGAR + market-data vendors |
| Metrics & ratios | P/E, ROE, margins, FCF yield, debt-to-equity, current ratio, DPS, growth rates | Calculated from vendor and EDGAR data |
| Company facts & search | Sector, industry, CIK, exchange, SIC code, listing date, market cap, description, website; fuzzy name search; the covered ticker universe; same-industry peers | Market-data reference feed; fundamentals vendor feed for search, universe and peers |
| Screener | Multi-factor stock filter: profitability, growth, health, dividend filters, plus pre-built strategies; market-cap and liquidity floors, security classes and sorting on USD size | Fundamentals 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 |
| Narrative | Earnings press releases with guidance language, ticker news, and an AI-generated company analysis | Fundamentals vendor feed |
| As-reported XBRL | Every concept a filer has reported, each tagged with the filed date; ?as_of= serves the number that was public on a given date, restatements excluded | SEC EDGAR's live companyfacts document for each company, with a labelled archived copy when SEC cannot be read |
| Point-in-time financials | Quarterly financials as first reported, each version stamped with the date it became public, plus the full restatement trail | Licensed point-in-time research archive |
| Business segments | Revenue, sales and operating income by line of business, geography, ASC-280 operating segment and US state | Licensed segment archive (2.8M rows / 29,934 companies) |
Prices and bars, including /api/ 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:
| Routes | Product | Credits/call | Plans |
|---|---|---|---|
/api/v3/fundamentals/* (except below) | fundamentals | 1 | Free and up |
/api/ | public_filings | 1 | Free and up |
/api/ | funds | 4 | Starter and up |
/api/, /api/ | funds | 4 | Starter and up |
The insider-trade and institutional-holder panes of /api/ | funds entitlement, billed as fundamentals | 1 (the call) | Starter and up; on Free they are null with plan_required |
/api/, /pit/{ticker}/vintages, /pit_coverage | alt_data | 3 | Pro and up |
/api/ | llm_research | 6 | Pro and up |
Each row in the tables below states its plan and credit cost. Failed requests are not billed.
Endpoints
Company snapshots, profiles and search
| Method | Path | Plan / credits | MCP tool | Description |
|---|---|---|---|---|
GET | /api/ | Free+ / 1 | fundamentals_full | One-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_ 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/ | Free+ / 1 | fundamentals_ | Company 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/ | Free+ / 1 | fundamentals_ | The 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/ | Free+ / 1 | fundamentals_ | Static 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/search | Free+ / 1 | fundamentals_search | Fuzzy 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/tickers | Free+ / 1 | fundamentals_tickers | Paged 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/ | Free+ / 1 | fundamentals_peers | Same-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_ 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_, 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
| Method | Path | Plan / credits | MCP tool | Description |
|---|---|---|---|---|
GET | /api/ | Free+ / 1 | fundamentals_ | Income 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/ | Free+ / 1 | fundamentals_ | Balance 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/ | Free+ / 1 | fundamentals_ | Cash 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/all | Free+ / 1 | fundamentals_all | All three statements in one call. ticker (required). period (annual, quarterly or ttm, default quarterly). limit (1 to 200, default 4). |
GET | /api/v3/fundamentals/metrics | Free+ / 1 | fundamentals_metrics | Financial 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/ | Free+ / 1 | fundamentals_historical | Multi-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_), 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_) from the filer's SEC filings, and says how in fiscal_q4_per_share:
statusisreportedwhen the filer tagged a three-month figure for the quarter, which is served as filed, andderivedwhen 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_derivedmeans only some of the figures could be derived.withheld(with areason) andsec_check_unavailable(the SEC read failed; retry shortly) leave the per-share fieldsnull; they are never the year's figures under the quarter's label.period(start,end,days),shares_diluted,source(sec_companyfacts) andsec_as_ofdescribe the derivation, andshares_diluted_basislists the filings it used. Basic weighted shares add up exactly over days. Diluted shares are a close approximation.cent_ambiguouslists 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_dilutedandvendor_keep the previous figures wherever the served one differs.shares_ outstanding
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
| Method | Path | Plan / credits | MCP tool | Description |
|---|---|---|---|---|
GET | /api/v3/fundamentals/growth | Free+ / 1 | fundamentals_growth | Growth 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/ | Free+ / 1 | fundamentals_dividends | Dividend 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_. tickers (string, required): comma-separated. See Dividends. |
GET | /api/v3/fundamentals/screener | Free+ / 1 | fundamentals_screener | Multi-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_ (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/ | Free+ / 1 | fundamentals_ | Catalogue of pre-built screener strategies, such as Aristocrats, Cash Cows, Value and Quality. No parameters. |
Earnings releases, news and analysis
| Method | Path | Plan / credits | MCP tool | Description |
|---|---|---|---|---|
GET | /api/ | Free+ / 1 | (retired) | Retired 2026-09-26. Answers 410 with error_, not billed: the upstream source of the text no longer exists and nothing else holds it. For report dates and estimates use /api/; the filed release is usually exhibit 99.1 of the company's Item 2.02 8-K (/api/). |
GET | /api/v3/fundamentals/news | Free+ / 1 | fundamentals_news | Curated 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/ | Pro+ / 6 | fundamentals_ai_analyze | AI-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_ 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_), 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
| Method | Path | Plan / credits | MCP tool | Description |
|---|---|---|---|---|
GET | /api/ | Free+ / 1 | xbrl_concepts | Discover 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/ | Free+ / 1 | xbrl_concept_history | One 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/ | Pro+ / 3 (alt_data) | fundamentals_pit | What 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/ | Pro+ / 3 (alt_data) | fundamentals_ | The 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/ | Pro+ / 3 (alt_data) | fundamentals_ | The 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
| Method | Path | Plan / credits | MCP tool | Description |
|---|---|---|---|---|
GET | /api/ | Starter+ / 4 (funds) | fundamentals_segments | Business 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.
type | Meaning |
|---|---|
quarter | One fiscal quarter. |
fiscal_year | One fiscal year. |
ttm | Exactly four consecutive fiscal quarters (ttm_status ok or derived_q4). Adds quarters (for example 2027Q2), quarters_contiguous and n_quarters. |
partial_ttm | Anything labelled trailing that is not four consecutive quarters. Same extra keys. |
point_in_time | A balance-sheet date. |
trailing_days | The dividend block: days, start, end and basis (ex_dividend_date). |
mixed | The fallback snapshot served when the primary source returns nothing: a flat set of metrics from mixed periods, with units_unverified and units_basis. |
unknown | The 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_) and the block adds currency, the ISO code, or currency: null with currency_. 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.
| Block | period.type | Units |
|---|---|---|
latest_annual, balance_sheet_summary, cash_flow_summary | fiscal_year (the balance sheet point_in_time at the year end) | Money, per share, shares |
latest_quarterly | quarter | Money, per share, shares |
ttm, income_statement_ttm, cash_flow_ttm | ttm or partial_ttm | Money, per share |
ttm.ttm_ratios | ttm | Percent 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_mrq | point_in_time | Money. balance_sheet_mrq is the newest quarter-end balance sheet, with its own fiscal_period (for example Q2). |
ratios | quarter | Fractions 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. |
growth | fiscal_year | Percent, the latest fiscal year over the one before. Revenue growth beyond ±100% is checked; see The revenue growth check. Carries definitions. |
dividends | fiscal_year | units describes each field in words; see Dividends. |
dividend | trailing_days | Per 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_status | Meaning |
|---|---|
ok | Four consecutive quarters. |
derived_q4 | Four quarters, with Q4 derived from the fiscal year. |
partial | The source has fewer than four quarters. Every flow field is null and listed in ttm_underfilled_fields; fiscal_period reads TTM(partial:NQ). |
non_contiguous | A 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_ | Cash 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_, split_basis_unknown, inconsistent_, cross_check_failed, splits_unavailable or restatement_failed), basis (as_reported, split_adjusted or as_), split_factors, cross_ 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_ is restated the same way, with the original in book_, and is null when a split leaves its basis unknown.
Debt ratios
ratios.debt_to_assetsis 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 nowliabilities_to_assets. NVDA:debt_to_assets0.1042,liabilities_to_assets0.285. Whendebt_to_assetsisnull,debt_to_assets_statussays why:balance_,sheet_ unavailable debt_not_establishedorvendor_.definition_ unverified - Debt to equity is
nullwithdebt_when the balance sheet lacks a debt component;to_ equity_ status: "debt_ components_ missing" debt_components_missinglists which (short_term_debt,long_term_debt).long_is withheld the same way when long-term debt is the gap. The same rule applies interm_ debt_ to_ equity ttm.ttm_ratios.
The cash-flow bridge
cash_flow_ttm and, in full, cash_flow_latest reconcile operating cash flow with net income:
| Field | Meaning |
|---|---|
operating_ | The 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_receivables | The change in receivables, in cash-flow sign (an increase is negative). change_ (not_reported, not_established) says why it is null. |
other_operating_items | The residual: working-capital changes other than receivables, non-cash gains and every other operating item. |
change_ | Always null: the source's figure is the receivables change alone, not working capital. change_ is vendor_, not_reported or vendor_, and working_capital_check shows the source's figure and what it reads as. |
cash_conversion_pct | Operating 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_basis | reconciled 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_pairspairs the panes that cover the same period:ttm(income_statement_ttmwithcash_flow_ttm),latest_quarter(income_withstatement_ latest_ quarter cash_flow_latest) andpoint_in_time(balance_sheet_latest). Each has thepanes, theirendandmatched, which istrueonly 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
fundsproduct (Starter and up); the call still costs 1fundamentalscredit. On Free both panes arenullwith statusplan_required, and aplan_requiredblock names the fields and the plans that unlock them.
| Pane | Status field | Values |
|---|---|---|
insider_trades_recent (up to 5) | insider_trades_status | ok; none_reported (served as []); vendor_unavailable (null); plan_required (null) |
institutional_ (up to 10) | institutional_ | ok; none_reported ([]); archive_unavailable (null, retry); plan_required (null) |
Holder rows carry investor, holder, shares, value_usd and report_period, from 13F filings. institutional_ 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:
| Field | Meaning |
|---|---|
dividends_per_share | USD per share: the fiscal year's dividends paid over that year's weighted shares, as filed, not split-adjusted. |
dividends_ | USD: dividends paid in the fiscal year fiscal_year. |
dividends_paid_ttm | USD: 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_ratio | Percent: fiscal-year dividends paid over net income. NVDA's 0.81 is 0.81%, not 81%. |
dividend_growth_yoy, years_ | Growth of TOTAL dividends paid (percent) and the streak of fiscal years it grew. Buybacks move them. |
dividend_ | Percent: growth of per_, latest fiscal year over the one before. |
years_ | Fiscal years in which the split-adjusted regular dividend rate rose (or held while regular plus special rose). A floor when years_ is true. |
dividend_history[] | One row per fiscal year: year, total_paid, per_share (as filed), per_ (USD per share on today's share basis: cash dividends with a pay date in the fiscal year), per_, fiscal_year_end and n_payments. |
Use per_ 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_ 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_); 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_ (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_status | revenue_growth_yoy served | Meaning |
|---|---|---|
sec_confirmed | The source's figure | It agrees with the annual report. NVDA's fiscal 2025 +114.2% is confirmed. |
vendor_concept_mismatch | The SEC figure | The source's figure compares different lines. TRV: +5.18% (total revenues, 48,828M against 46,423M). |
sec_check_pending | null | The SEC read did not finish in time; revenue_ is true. Retry shortly: the answer is not cached. |
unverified_outlier | null | The filings cannot settle it (no SEC facts, a fiscal year that cannot be placed, or a prior-year revenue of zero or less). revenue_ says which. |
A row the check did not run on has no growth_status. A checked row adds:
vendor_: the source's figure, always kept.revenue_ growth_ yoy revenue_growth_basis: thetrigger; when settled,concept,unit,fiscal_year,currentandprior(eachperiod_start,period_end,value,accession,form,filed), theformulaandrevenue_growth_yoy(secandvendor); when not,reasonand, where it applies,retryable.- On
/growthand the snapshotgrowthblocks, onvendor_concept_mismatch: the 3-year and 5-year CAGRs are recomputed on the same concept, ornullwhen SEC cannot compute them (TRV: 157.83 and 81.54 become 9.8 and 8.83), with the source's invendor_andrevenue_ growth_ 3y_ cagr vendor_. The six margin fields, computed on the contradicted revenue, arerevenue_ growth_ 5y_ cagr nulland kept invendor_margins. - A CAGR whose span crosses a change of revenue concept is
nulleven 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) andmarket_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=0ormin_adv_usd=0to 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_classis a comma list ofcommon,adr,preferred,fund,unit,warrantandother. An unknown class returns400 invalid_listing the allowed ones.security_ class market_cap_usdisnullfor ADRs and non-equity classes, so widen to them withmin_market_cap_usd=0. -
Currency.
revenueandnet_incomestay in the issuer's own reporting currency and are not comparable across rows.revenue_usdandnet_income_usdare 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 isnull, with the reason in the row'snotes.reporting_currency,currency_statusandfxsay how each value was derived. -
Sorting.
sort_bydefaults tomarket_cap_usd. It acceptsmarket_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_yoyandyears_dividend_growth, plus aliases:market_capandmarketcapsort onmarket_cap_usd,revenueonrevenue_usd,net_incomeonnet_income_usd,adv,adv_21d,adv_usdanddollar_volumeonadv_21d_usd,priceonprice_usd, and the short*_growthnames on their*_growth_yoyfields. Any other key returns400 invalid_sort_bylisting the allowed ones. Rows without a value sort last in both directions;revenue_growth_yoysorts on the checked figure, so a growth withheld by the check sorts last. The response echoes the key it sorted on insort_byand what you sent insort_by_requested. -
Market cap withheld.
market_cap_usdisnullwhen 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 inuniverse.liquid_and inwithout_ market_ cap 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 inuniverse.sized_.on_ former_ symbol -
What was left out.
floorsechoes the floors applied.total_matchedandtotal_pagescount the rows that cleared the floors and the second debt-to-equity and growth filter. Rows that second filter drops are counted inuniverse.excludedundernegative_equity,debt_to_equity_unknown,debt_,to_ equity_ above_ max revenue_,growth_ unverified revenue_growth_unknown,revenue_orgrowth_ below_ min_ after_ sec_ check revenue_.growth_ below_ min universereports the source's match count, whether every matched row was retrieved (candidate_set_complete), exclusions by reason (excluded, with tickers inexcluded_examples), androws_without_sort_value.fundamentals_staleon a row istruewhen its fiscal period ended more than 18 months ago. -
Where each number comes from.
field_sourcesnames the source of every field, andas_ofdates them:prices,shares_outstanding,fx_rates_through,size_snapshot_built_atandsize_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
nulldoes not pass a growth floor. The row'srevenueis left as the source reported it, and itsnotessay what was recomputed.universe.revenue_counts the checks by status andgrowth_ checks growth_statusesexplains 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
_pctis a percent number; the older names are the same unit.debt_to_equity,current_ratioandquick_ratioare multiples, andyears_dividend_growthis in years. Ratios, margins, growth and payout are for each row's latest fiscal year (fiscal_year), not TTM.unitsmaps every row field to its unit. filters_appliedstates each filter as applied, with its unit and basis, for exampleroe >= 20% (each row's latest fiscal year (fiscal_. A filter sent under an older name ends with a note naming theyear), not TTM; net income / average shareholders' equity) _pctparameter. Sector, industry and floor lines are included. Thefiltersecho keeps the older names even when you send_pctones.- Negative equity. A row whose equity is negative carries
equity_negative: trueand keeps its negativedebt_to_equity(ABBV -20.49). It never passesdebt_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_, retryable: false and billed: false, and no items. None is billed. The first failing check wins:
error_code | When | Extra fields |
|---|---|---|
non_finite_threshold | A filter is nan, inf or -inf. | params |
debt_ | debt_to_equity_max is outside 0 to 20. | param, value, unit (multiple), min, max |
conflicting_ | An older name and its _pct name carry different values. The same value sent under both runs once. | conflicts |
ambiguous_ | An 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_, 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_ and error_code screener_ or screener_. 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:
| Field | Meaning |
|---|---|
source | sec_, 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_filed | The newest filing date among all the company's facts. |
financial_ | The newest filing date among its financial statement facts (us-gaap, ifrs-full). |
concept_last_filed | xbrl only: the newest filing date of this concept, whatever the filters. |
is_stale | true 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. |
freshness | as_of, last_filed, financial_, source, is_stale, stale_reason (later_, financial_, no_financial_facts, archive_), 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_.
warning: "no_ 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_ and error_, 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 whoseknowledge_dateis on or beforeas_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 afinancialsblock. - The
vintageblock on each period says whether this was the first report (is_first_report), how many versions exist (vintages_), whether it has been restated since (held_ for_ period restated_since_as_of), and, when it has,restated_fieldsand thecurrent_valuesof those fields. A figure that was first reported afteras_ofis listed infields_, not counted as a restatement.first_ reported_ after_ as_ of financialsholdsrevenue,sales,net_income,income_, basic and diluted EPS including and excluding extraordinary items,before_ 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 aunitsmap. - 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 asnullinfinancials; its as-filed value is kept underdata_, and its name is listed inquality.as_ filed_ unverified data_. Read aquality.values_ withheld nullthere as withheld, not missing. The vintages response also lists such fields infields_.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_states. A fund, warrant or preferred line returnsstatement_ grain security_instead of an empty panel.type_ not_ covered - 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_ofbefore the knowledge span cannot be answered;pit_coveragereports 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.
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%).
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.
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.
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.
# 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)
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:
{ "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/ for the bundle.