Developer API docs

Stock summary endpoint

Compact JSON summary of a stock's fundamentals: latest close, valuation ratios, margins, dividends, growth CAGRs, as-of dates, honest nulls. Keyless, CORS-open.

Documentation updated 2026-09-02. Machine-readable: openapi.json · llms.txt

Endpoint

GET https://tgmcharts.com/api/v1/summary/{symbol} returns a compact (~5 KB) JSON view of one US-listed stock or ETF: identity, latest end-of-day close, valuation, profitability, financial health, dividends, growth CAGRs, provenance dates, and page links. No key is required; responses are CORS-open and edge-cached.

Symbols are 1–10 characters (letters, digits, dot, dash) and are matched case-insensitively. A malformed symbol answers 400; an uncovered symbol answers 404 with an onboarding hint (see below).

curl
curl -s https://tgmcharts.com/api/v1/summary/AAPL
Response headers (keyless)
Content-Type: application/json
Cache-Control: public, s-maxage=3600, stale-while-revalidate=86400
Access-Control-Allow-Origin: *

Fields

Every scalar is number | null. Percent fields carry a Percent suffix and are expressed in percentage points (a 2.9% yield is 2.9). Fundamentals are trailing-twelve-month unless a field name says otherwise; prices are official end-of-day closes.

FieldContents
symbol, name, sector, industryIdentity as stored; name/sector/industry are null when not stored.
currency, reportedCurrencycurrency is always USD. reportedCurrency names the filer's own currency for foreign filers whose statements were converted at per-date FX; null otherwise.
asOfdataUpdatedAt — the ISO time the symbol was last precomputed — plus a fixed basis note (end-of-day closes; TTM fundamentals unless suffixed).
priceLatest official close, day change, market cap, 52-week high/low, YTD and 1-year returns (percent).
valuationP/E (trailing and forward), P/S, P/B, P/FCF, PEG, EV/EBITDA, EV/Sales, earnings yield, FCF yield. FCF- and EV-family fields are null when not meaningful for the company type (see applicability).
profitabilityGross, operating and net margin, ROE, ROA, ROIC — percent.
financialHealthCurrent ratio, quick ratio, debt-to-equity, interest coverage.
dividendsYield (percent), payout ratio (percent), dividend per share, consecutive years of increases.
growthCagrPercent3-, 5- and 10-year CAGRs for revenue, gross profit, net income, EPS, free cash flow, dividends and total return — null where the window is not covered.
applicabilityWhether free-cash-flow and enterprise-value metrics are applicable, secondary context, or intentionally withheld for this company type.
linksThe stock's overview, metrics and financials pages, plus llms.txt.

Response shape

The skeleton below is produced by the same builder the endpoint runs, given no stored data — so every value reads null. A live response has the identical keys with the stored numbers filled in. It is shown this way on purpose: the docs never print numbers that were not read from the data store.

GET /api/v1/summary/AAPL — shape (all values null here)
{
  "symbol": "AAPL",
  "name": null,
  "sector": null,
  "industry": null,
  "currency": "USD",
  "reportedCurrency": null,
  "asOf": {
    "dataUpdatedAt": null,
    "note": "Prices are official end-of-day closes; fundamentals are trailing-twelve-month unless suffixed otherwise."
  },
  "price": {
    "lastClose": null,
    "change": null,
    "changePercent": null,
    "marketCap": null,
    "high52Week": null,
    "low52Week": null,
    "returnYtdPercent": null,
    "return1YPercent": null
  },
  "valuation": {
    "peRatio": null,
    "peRatioForward": null,
    "psRatio": null,
    "pbRatio": null,
    "pfcfRatio": null,
    "pegRatio": null,
    "evToEbitda": null,
    "evToSales": null,
    "earningsYieldPercent": null,
    "fcfYieldPercent": null
  },
  "profitability": {
    "grossMarginPercent": null,
    "operatingMarginPercent": null,
    "netMarginPercent": null,
    "roePercent": null,
    "roaPercent": null,
    "roicPercent": null
  },
  "financialHealth": {
    "currentRatio": null,
    "quickRatio": null,
    "debtToEquity": null,
    "interestCoverage": null
  },
  "dividends": {
    "yieldPercent": null,
    "payoutRatioPercent": null,
    "dividendPerShare": null,
    "consecutiveYears": null
  },
  "growthCagrPercent": {
    "revenue": {
      "y3": null,
      "y5": null,
      "y10": null
    },
    "grossProfit": {
      "y3": null,
      "y5": null,
      "y10": null
    },
    "netIncome": {
      "y3": null,
      "y5": null,
      "y10": null
    },
    "eps": {
      "y3": null,
      "y5": null,
      "y10": null
    },
    "freeCashFlow": {
      "y3": null,
      "y5": null,
      "y10": null
    },
    "dividends": {
      "y3": null,
      "y5": null,
      "y10": null
    },
    "totalReturn": {
      "y3": null,
      "y5": null,
      "y10": null
    }
  },
  "links": {
    "overview": "https://tgmcharts.com/stocks/AAPL",
    "metrics": "https://tgmcharts.com/stocks/AAPL/metrics",
    "financials": "https://tgmcharts.com/stocks/AAPL/financials",
    "docs": "https://tgmcharts.com/llms.txt"
  },
  "applicability": {
    "freeCashFlow": "applicable",
    "enterpriseValue": "applicable"
  }
}

Honest states

  • null means the value is not stored or not meaningful for the company type — it is never a zero standing in for missing data. A stored zero (for example a zero dividend per share) is served as 0.
  • Free-cash-flow and enterprise-value metrics are withheld (null) for banks, insurers, REITs and funds, where the definitions are not meaningful; applicability says which and why.
  • An uncovered symbol answers 404 with a short negative cache (s-maxage=120) so coverage onboarding — visiting the stock page triggers it, about two minutes — is not outlived by a cached miss.
404 — symbol not covered
{
  "error": "Symbol not covered",
  "symbol": "ZZZQ",
  "hint": "If this is a real ticker, visiting https://tgmcharts.com/stocks/ZZZQ triggers coverage onboarding (~2 minutes)."
}

Caching and keys

Data changes at most once a day (after the US close), so cache responses for at least an hour — the headers above do it for you. With an API key the same request is metered at one unit and answered with Cache-Control: private plus X-RateLimit-* headers; see authentication and limits.

FAQ

What does the stock summary endpoint return?
A compact JSON object with the stock's identity, latest end-of-day close and market cap, valuation ratios (P/E, P/S, P/B, P/FCF, PEG, EV/EBITDA, EV/Sales, earnings and FCF yield), margins and returns, financial-health ratios, dividend record, 3/5/10-year growth CAGRs, as-of dates, and page links.
Why is a value null?
Because it is not stored, or because it is not meaningful for the company type (free-cash-flow and enterprise-value metrics for banks, insurers, REITs and funds). The applicability block explains the withheld families. Nothing is zero-filled.
Do I need an API key for the summary endpoint?
No. It is keyless and CORS-open with attribution. A key adds exact metering, per-account quotas and X-RateLimit headers.