Understanding TTM (Trailing Twelve Months)
What is TTM?
Trailing Twelve Months (TTM) is a financial reporting convention that aggregates the most recent four quarters of data into a single period, smoothing out seasonal variations and giving a more current picture than the last fiscal year.
How TTM Works in the API
Pass ?period=ttm to any statement or financial-ratios endpoint:
curl "https://api.finpoint.dev/api/v1/financial-statements/income-statement/NVDA?period=ttm"curl "https://api.finpoint.dev/api/v1/financial-ratios/ratios/AAPL?period=ttm"TTM is computed server-side per ADR-021. The API handles two distinct semantics based on fact type:
Flow Metrics (Income Statement, Cash Flow)
Flow metrics record activity over a period — revenue, expenses, net income, cash from operations. These are summed over the most recent 4 individual quarterly values:
TTM_Revenue = Q(-3).Revenue + Q(-2).Revenue + Q(-1).Revenue + Q(0).RevenueTTM_NetIncome = sum of last 4 quarterly NetIncome valuesTTM_OperatingCF = sum of last 4 quarterly OperatingCF valuesInstant Metrics (Balance Sheet)
Instant metrics are point-in-time measurements — assets, liabilities, equity, shares outstanding. These use the latest reported value:
TTM_TotalAssets = most recent TotalAssets value (latest balance sheet)TTM_TotalLiabilities = most recent TotalLiabilities valueThis distinction is made automatically per-row using the
is_instant_fact flag in the database — you don’t need to specify
whether a metric is flow or instant.
Ratios
When ?period=ttm is passed to the financial-ratios endpoint, the API:
- Fetches TTM-aggregated inputs from the database
- Computes all active financial ratios in Go from those inputs
- Assigns letter grades (A–F) using the same grading function used for per-period ratios
For example, TTM Net Profit Margin is:
TTM_Net_Profit_Margin = TTM_NetIncomeLoss / TTM_TotalRevenuesThis gives a more meaningful ratio than one computed from a single quarter (which may be seasonally distorted).
TTM Response Shape
A TTM response contains a single period with fiscal_period: "TTM"
and fiscal_year: 0 (trailing windows span multiple fiscal years).
Per-filing metadata fields (filing_date, form_type, accession_number,
period_start_date) are omitted since the values are aggregated across
multiple filings.
{ "periods": [ { "fiscal_year": 0, "fiscal_period": "TTM", "period_end_date": "2025-10-31", "currency": "USD", "line_items": { "TotalRevenues": 88325000000, "TotalNetIncomeLoss": 24563000000 } } ]}Cumulative vs. Incremental
XBRL filings report cumulative (year-to-date) values:
| Filing | Reports | Cumulative Value |
|---|---|---|
| Q1 10-Q | Q1 alone | 100 |
| Q2 10-Q | Q1+Q2 total | 250 |
| Q3 10-Q | Q1+Q2+Q3 total | 450 |
| FY 10-K | Full year | 800 |
The pipeline decumulates these into individual quarterly increments (Q1=100, Q2=150, Q3=200, Q4=350) using fiscal-year-aware LAG window functions. The TTM endpoint sums the 4 most recent increments.
Quarterly values derived by subtraction carry the
is_unverified_flow quality flag. See XBRL Caveats
for details.
Client-Side Option
If you prefer to compute TTM on your own from individual quarters,
you can still use ?period=quarterly&limit=4 and sum the values
on your end. The server-side ?period=ttm does the same thing
but handles the flow-vs-instant distinction automatically.