> ## Documentation Index
> Fetch the complete documentation index at: https://docs.focusalpha.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Financial statements & metrics

> Standardized income statements, balance sheets, cash-flow statements, computed ratios, segment breakdowns, and issuer reference data for SEC filers.

These endpoints serve standardized financial data built from what each company itself reported in its SEC filings (XBRL company facts): the three statements, 38 computed metrics per period, as-reported segment breakdowns, and a compact issuer reference object.

All routes here return bare wrapper-key responses (no `meta` envelope) and use the flat `{ error, message }` error body — see [Errors](/concepts/errors). Pagination is `limit`-only, newest first — see [Pagination](/concepts/pagination). Unknown query parameters are silently ignored on these routes, so double-check parameter spelling.

## GET /v1/financials

Returns all three statements for a company in one call: income statements, balance sheets, and cash-flow statements.

**Plan:** Free and above · **Credits:** 1 per call

<ParamField query="ticker" type="string">
  Trading symbol. At least one of `ticker` | `cik` is required.
</ParamField>

<ParamField query="cik" type="string">
  SEC Central Index Key, any zero-padding. At least one of `ticker` | `cik` is required.
</ParamField>

<ParamField query="period" type="string" required>
  Reporting grain — one of `annual`, `quarterly`, `ttm`. Required; there is no default.

  * `annual` — full fiscal-year statements.
  * `quarterly` — fiscal quarters Q1–Q3 (EDGAR has no Q4 slot; Q4 is derivable from FY minus Q1–Q3).
  * `ttm` — trailing-twelve-month sums for flow statements; latest instant for balance sheets.
</ParamField>

<ParamField query="limit" type="integer" default="4">
  Number of statement rows per statement type, newest first. Minimum 1.
</ParamField>

<ParamField query="report_period" type="string">
  Exact filter: only the row whose `report_period` equals this `YYYY-MM-DD` date.
</ParamField>

<ParamField query="report_period_gte" type="string">
  Only periods ending on or after this `YYYY-MM-DD` date. `report_period_lte`, `report_period_gt`, and `report_period_lt` work the same way for the other bounds.
</ParamField>

```bash theme={null}
curl "https://api.focusalpha.ai/v1/financials?ticker=AAPL&period=annual&limit=1" \
  -H "Authorization: Bearer $FOCUSALPHA_API_KEY"
```

```json theme={null}
{
  "financials": {
    "income_statements": [
      {
        "ticker": "AAPL",
        "cik": 320193,
        "report_period": "2025-09-27",
        "period": "annual",
        "fiscal_period": "FY",
        "currency": "USD",
        "accounting_standard": "us_gaap",
        "accession_number": "0000320193-25-000123",
        "filing_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000123",
        "calendar_date": null,
        "revenue": 416161000000,
        "cost_of_revenue": 223546000000,
        "gross_profit": 192615000000,
        "operating_income": 127439000000,
        "net_income": 99803000000,
        "earnings_per_share": 6.42,
        "earnings_per_share_diluted": 6.38,
        "weighted_average_shares": 15550061000
      }
    ],
    "balance_sheets": [ { "...": "..." } ],
    "cash_flow_statements": [ { "...": "..." } ]
  }
}
```

Every statement row starts with the same metadata head: `ticker`, `cik` (integer), `report_period` (period **end** date, `YYYY-MM-DD`), `period` (echoes the requested grain), `fiscal_period` (`FY`, `Q1`, `Q2`, or `Q3`), `currency`, `accounting_standard` (`us_gaap`, `ifrs`, or `null`), `accession_number`, and `filing_url`.

<Warning>
  Figures are in the currency the company reports in (`currency` on every row) — never converted to USD. Summing across companies without checking `currency` produces nonsense.
</Warning>

<Warning>
  `accounting_standard` matters: IFRS and US GAAP do not line up item by item, so comparing an IFRS filer's operating income with a US-GAAP filer's is a comparison of two different definitions.
</Warning>

<Note>
  A `null` value means the company did not report that line — not zero. Where a filer reports the split, `net_income_continuing_operations` and `net_income_discontinued_operations` carry both halves as reported; a bottom line can be negative purely because of a disposal.
</Note>

## GET /v1/financials/income-statements

Income-statement rows only. Same parameters as `/v1/financials`. Returns `{ "income_statements": [...] }`.

**Plan:** Free and above · **Credits:** 1 per call

Value fields per row: `revenue`, `cost_of_revenue`, `gross_profit`, `operating_expense`, `selling_general_and_administrative_expenses`, `research_and_development`, `operating_income`, `interest_expense`, `nonoperating_income_expense`, `ebit`, `income_tax_expense`, `net_income_discontinued_operations`, `net_income_continuing_operations`, `net_income_non_controlling_interests`, `net_income`, `net_income_common_stock`, `preferred_dividends_impact`, `consolidated_income`, `earnings_per_share`, `earnings_per_share_diluted`, `dividends_per_common_share`, plus `weighted_average_shares` and `weighted_average_shares_diluted`.

```bash theme={null}
curl "https://api.focusalpha.ai/v1/financials/income-statements?ticker=MSFT&period=quarterly&limit=4" \
  -H "Authorization: Bearer $FOCUSALPHA_API_KEY"
```

## GET /v1/financials/balance-sheets

Balance-sheet rows only. Same parameters as `/v1/financials`. Returns `{ "balance_sheets": [...] }`.

**Plan:** Free and above · **Credits:** 1 per call

Value fields per row include: `total_assets`, `current_assets`, `cash_and_equivalents`, `inventory`, `current_investments`, `trade_and_non_trade_receivables`, `non_current_assets`, `property_plant_and_equipment`, `goodwill_and_intangible_assets`, `investments`, `non_current_investments`, `outstanding_shares`, `tax_assets`, `total_liabilities`, `current_liabilities`, `trade_and_non_trade_payables`, `deferred_revenue`, `deposit_liabilities`, `non_current_liabilities`, `current_debt`, `non_current_debt`, `total_debt`, `tax_liabilities`, `shareholders_equity`, `retained_earnings`, `accumulated_other_comprehensive_income`.

## GET /v1/financials/cash-flow-statements

Cash-flow rows only. Same parameters as `/v1/financials`. Returns `{ "cash_flow_statements": [...] }`.

**Plan:** Free and above · **Credits:** 1 per call

Value fields per row (16): `net_income`, `depreciation_and_amortization`, `share_based_compensation`, `net_cash_flow_from_operations`, `capital_expenditure`, `business_acquisitions_and_disposals`, `investment_acquisitions_and_disposals`, `net_cash_flow_from_investing`, `issuance_or_repayment_of_debt_securities`, `issuance_or_purchase_of_equity_shares`, `dividends_and_other_cash_distributions`, `net_cash_flow_from_financing`, `change_in_cash_and_equivalents`, `effect_of_exchange_rate_changes`, `ending_cash_balance`, `free_cash_flow`.

## GET /v1/financial-metrics

38 computed metric fields per reporting period, built on the standardized statements: valuation (`enterprise_value`, `price_to_earnings_ratio`, `price_to_book_ratio`, `price_to_sales_ratio`, `enterprise_value_to_ebitda_ratio`, `enterprise_value_to_revenue_ratio`, `free_cash_flow_yield`, `peg_ratio`), profitability (`gross_margin`, `operating_margin`, `net_margin`, `return_on_equity`, `return_on_assets`, `return_on_invested_capital`), efficiency (`asset_turnover`, `inventory_turnover`, `receivables_turnover`, `days_sales_outstanding`, `operating_cycle`, `working_capital_turnover`), liquidity (`current_ratio`, `quick_ratio`, `cash_ratio`, `operating_cash_flow_ratio`), leverage (`debt_to_equity`, `debt_to_assets`, `interest_coverage`), growth (`revenue_growth`, `earnings_growth`, `book_value_growth`, `earnings_per_share_growth`, `free_cash_flow_growth`, `operating_income_growth`, `ebitda_growth`), and per-share (`earnings_per_share`, `book_value_per_share`, `free_cash_flow_per_share`, `payout_ratio`).

**Plan:** Free and above · **Credits:** 1 per call

Parameters are identical to `/v1/financials` (`ticker` | `cik` required, `period` required, `limit` default 4, `report_period*` filters). Returns `{ "financial_metrics": [...] }`; each row carries the same metadata head as the statement rows. A metric that cannot be computed for a period is `null`.

```bash theme={null}
curl "https://api.focusalpha.ai/v1/financial-metrics?ticker=NVDA&period=ttm&limit=1" \
  -H "Authorization: Bearer $FOCUSALPHA_API_KEY"
```

## GET /v1/financials/segments

As-reported business and geographic segment breakdowns — how revenue and related line items split across a company's own segments. Returns `{ "segmented_financials": [...] }`, one row per period.

**Plan:** Free and above · **Credits:** 1 per call

<ParamField query="ticker" type="string">
  Trading symbol. At least one of `ticker` | `cik` is required.
</ParamField>

<ParamField query="cik" type="string">
  SEC Central Index Key. At least one of `ticker` | `cik` is required.
</ParamField>

<ParamField query="period" type="string" default="annual">
  `annual` or `quarterly`. Unlike `/v1/financials`, there is **no `ttm`** — segment breakdowns are as-reported per filing — and `period` is optional (defaults to `annual`).
</ParamField>

<ParamField query="limit" type="integer" default="4">
  Number of period rows, newest first. Minimum 1. `report_period` and `report_period_gte/lte/gt/lt` filters work as on `/v1/financials`.
</ParamField>

```bash theme={null}
curl "https://api.focusalpha.ai/v1/financials/segments?ticker=AAPL&limit=1" \
  -H "Authorization: Bearer $FOCUSALPHA_API_KEY"
```

Each row leads with seven scalars — `ticker`, `report_period`, `fiscal_period`, `period`, `currency`, `accession_number`, `filing_url` — followed by (all-in-one route) `income_statement`, `balance_sheet`, and `cash_flow_statement` payloads. A payload is a metric → dimension → buckets map, where each bucket is `{ "label": "...", "value": ... }` with the company's own segment names as labels.

Per-statement variants return the same rows flattened, with the payload spread beside the scalars:

* `GET /v1/financials/income-statements/segments` → `{ "income_statement_segments": [...] }` — the populated one.
* `GET /v1/financials/balance-sheets/segments` → `{ "balance_sheet_segments": [] }` — always empty; companies do not report balance-sheet segment splits in this form.
* `GET /v1/financials/cash-flow-statements/segments` → `{ "cash_flow_statement_segments": [] }` — always empty, same reason.

<Note>
  Segment names are the company's own and change when it reorganizes — a segment that disappears between years is usually renamed, not discontinued.
</Note>

## GET /v1/company/facts

A compact 13-field reference object for one SEC issuer: `ticker`, `name`, `cik` (zero-padded string), `industry`, `sector`, `category`, `exchange`, `is_active`, `location`, `sec_filings_url`, `sic_code`, `sic_industry`, `sic_sector`.

**Plan:** Free and above · **Credits:** 1 per call

<ParamField query="ticker" type="string">
  Trading symbol. At least one of `ticker` | `cik` is required.
</ParamField>

<ParamField query="cik" type="string">
  SEC Central Index Key. At least one of `ticker` | `cik` is required.
</ParamField>

```bash theme={null}
curl "https://api.focusalpha.ai/v1/company/facts?ticker=AAPL" \
  -H "Authorization: Bearer $FOCUSALPHA_API_KEY"
```

```json theme={null}
{
  "company_facts": {
    "ticker": "AAPL",
    "name": "Apple Inc.",
    "cik": "0000320193",
    "industry": "Electronic Computers",
    "sector": "Technology",
    "category": "Large Cap",
    "exchange": "NASDAQ",
    "is_active": true,
    "location": "Cupertino, California",
    "sec_filings_url": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0000320193",
    "sic_code": "3571",
    "sic_industry": "Electronic Computers",
    "sic_sector": "Technology"
  }
}
```

<Note>
  A field with no source resolves to an empty string (`""`), never a guess. This dataset is SEC-scoped — a company with no SEC presence will 404 here.
</Note>

### Free discovery endpoints

* `GET /v1/company/facts/tickers` → `{ "resource": "company-facts", "tickers": [...] }`
* `GET /v1/company/facts/ciks` → `{ "resource": "company-facts", "ciks": [...] }` (zero-padded to 10)

**Plan:** Free and above · **Credits:** free (not metered)
