Skip to content

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:

Terminal window
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).Revenue
TTM_NetIncome = sum of last 4 quarterly NetIncome values
TTM_OperatingCF = sum of last 4 quarterly OperatingCF values

Instant 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 value

This 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:

  1. Fetches TTM-aggregated inputs from the database
  2. Computes all active financial ratios in Go from those inputs
  3. 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_TotalRevenues

This 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:

FilingReportsCumulative Value
Q1 10-QQ1 alone100
Q2 10-QQ1+Q2 total250
Q3 10-QQ1+Q2+Q3 total450
FY 10-KFull year800

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.