Skip to main content
GET
Get historical financial metrics
This route returns one row per historical reporting period: margins, turnovers, and growth rates computed from the statement matrix behind Financial Statements. It has no market price attached to past periods, so valuation fields are left out. Use Snapshot instead for current market cap, P/E, and other live valuation multiples.

What this answers

  • How a company’s gross margin or net margin has trended over recent fiscal periods.
  • How efficiently a company turns over inventory or receivables, by period.

Coverage

Query rules

ticker is required. period accepts annual, quarterly, or ttm, and defaults to annual on this REST route, unlike the underlying MCP tool’s ttm default. limit defaults to 4 and caps at 100. The same report_period* date filters as the statements routes apply here too. This route always omits enterprise_value, every price_to_* ratio, EV multiples, free_cash_flow_yield, peg_ratio, return_on_invested_capital, currency, and filing_datetime. None of these are sourceable for a past period without a historical market price this server does not have. ttm rows also drop filing identity (accession_number, form_type, filing_url, filing_date), since a trailing-twelve-month window spans more than one filing. Our own live captures show filing identity absent even on annual rows in practice, the filings join is best effort, not guaranteed on every row.

Worked example

curl
Response

Authorizations

X-API-KEY
string
header
required

The caller's own Monid API key (get one at https://monid.ai?fpr=dhruv-15136b). Passed straight through to Monid on every call, so usage bills the caller's own wallet — this is never a shared server-side credential, and the server never logs or stores it. Missing, empty, or malformed values answer 401 unauthorized before any paid call is attempted.

Query Parameters

ticker
string
required

Uppercase-normalized ticker symbol (1-20 letters/digits/dots/hyphens).

period
enum<string>
default:annual

Reporting period. REST-level default is "annual"; the tool/FD-schema default is "ttm".

Available options:
annual,
quarterly,
ttm
limit
integer
default:4

Number of records to retrieve (default: 4, max: 100).

Required range: 1 <= x <= 100
report_period
string<date>

Exact report_period date filter (YYYY-MM-DD).

report_period_gte
string<date>

report_period >= this date (YYYY-MM-DD, inclusive).

report_period_lte
string<date>

report_period <= this date (YYYY-MM-DD, inclusive).

report_period_gt
string<date>

report_period > this date (YYYY-MM-DD, exclusive).

report_period_lt
string<date>

report_period < this date (YYYY-MM-DD, exclusive).

cursor
string

Opaque base64url pagination cursor from a previous response's next_page_url. Omit for the first page.

Response

A page of financial-metrics rows, newest report_period first. Identity fields (ticker, report_period, fiscal_period, period) and margins (gross_margin, operating_margin, net_margin) are real values captured from our own live API (docs/our-live-samples/income_statements.json for identity, docs/our-live-samples/metrics_snapshot.json for the margin ratios, which are identical for FY2025). Filing-identity fields (accession_number, form_type, filing_url, filing_date) and every valuation field are omitted: our own live capture did not have them populated for this row, so they are not asserted here (see docs/openapi-notes.md).

Wrapped list envelope: {"financial_metrics": [...], "next_page_url": "..."}. Page size is 10 records (100 for /prices).

financial_metrics
FinancialMetric · object[]
required
next_page_url
string<uri>

Absolute URL for the next page, present only when more records remain. Built from an opaque base64url cursor over this deployment's own host (never a fixed facade base).