---
title: "Stock Compensation"
method: GET
path: "/api/footnotes/stock-compensation"
tags: ["Footnotes"]
---

# Stock Compensation

`GET /api/footnotes/stock-compensation`

![Pro](https://img.shields.io/badge/Pro-8b5cf6)

Returns plan-level share-based compensation from the equity footnote: the award roll-forward (granted / vested / forfeited / nonvested with weighted-average grant-date fair values), SBC expense per award type, unrecognized cost, the option book (outstanding / exercisable / exercise prices), plan share reserves, and Black-Scholes assumptions. This complements the per-insider Form 3/4/5 endpoints, this is the plan, those are the people.

Two sections per period:
- `awards`: one entry per award type or plan the filer dimensioned (RSUs, PSUs, options, ESPP, named plans), sorted by expense.
- `planTotals`: the same concepts tagged **without** an award dimension: the whole-plan view, and the only populated section for single-plan filers that never dimension.

The roll-forward identity (prior nonvested + granted − vested − forfeited = nonvested) is checked at read time and surfaced as `rollForward.reconciles` (within 0.5%, present only when every leg and the prior balance are known). Values are always served as filed, never adjusted to force the identity.

Monetary values default to **US dollars** (`currency` parameter as on the statements endpoints: expense flows at the period-average rate, balances and per-share values at the period-end spot rate, `fx` block for the audit trail, `currency=original` for as-filed). Share counts are never converted.

**What this data can tell you:**
- Future dilution: nonvested shares and the option book vs shares outstanding.
- Committed compensation not yet expensed (unrecognized cost).
- Net share-count effect when paired with the buybacks endpoint.
- Valuation assumptions (volatility, risk-free rate, dividend yield) vs peers.
- Roll-forward consistency via the reconciles flag.

**Data honesty notes:**
- `assumptions` are fractions of 1 (`0.45` = 45% volatility). Mis-tagged whole percents are re-scaled and flagged `normalized: true`; volatility uses a wider re-scale threshold because &gt;150% volatility is legitimate for high-volatility issuers.
- Quarterly entries carry whatever the 10-Q tagged; full roll-forwards are 10-K-weighted.
- Coverage is US-GAAP filers; this is the widest-coverage footnote endpoint (~80% of the active universe).

## Query parameters

- `symbol` string
- `cik` integer
- `cusip` string
- `composite_figi` string
- `share_class_figi` string
- `currency` string
- `period` 'annual' | 'quarter' — Base reporting period: `annual` or `quarter` (the periods companies actually report, without the derived `ttm` rollup).
- `limit` integer

## Response `200`

Per-award-type and plan-total share-based compensation, organized by period

- object[]
  - `period` string, date — The fiscal period end date (YYYY-MM-DD)
  - `fiscalYear` integer — The company's fiscal year (handles non-December year-ends).
  - `fiscalPeriod` 'FY' | 'Q1' | 'Q2' | 'Q3' | 'Q4' — Fiscal period of a reported value: `FY` (annual) or `Q1`-`Q4` (quarterly).
  - `awards` object[] — One entry per dimensioned award type / plan, sorted by SBC expense descending. Fields the filer did not tag are omitted.
    - `member` string — Raw XBRL member QName of the award type or plan
    - `name` string — Derived display label
    - `currency` string, nullable — Currency of the monetary values after conversion (the requested `currency` unless listed in `fx.unconverted`); null when values remain in mixed currencies or no monetary field is present
    - `normalized` boolean — Only present (as `true`) when an assumptions rate was re-scaled from a mis-tagged whole percent.
    - `expense` number — Share-based compensation expense allocated to this award type for the period
    - `unrecognizedCost` number — Compensation cost not yet recognized
    - `taxWithholdingPaid` number — Cash paid for tax withholding on share settlements
    - `rollForward` object — Share roll-forward for RSU-family awards. Share counts as filed; `waGrantDateFairValue` is per share.
      - `granted` object
        - `shares` number
        - `waGrantDateFairValue` number
      - `vested` object
        - `shares` number
        - `waGrantDateFairValue` number
        - `totalFairValue` number
      - `forfeited` object
        - `shares` number
        - `waGrantDateFairValue` number
      - `nonvested` object — Balance at period end
        - `shares` number
        - `waGrantDateFairValue` number
      - `reconciles` boolean — Whether prior nonvested + granted − vested − forfeited equals this period's nonvested within 0.5%. Present only when every leg and the prior-period balance are known. Values are served as filed either way.
    - `options` object — Option-book fields for option awards.
      - `outstanding` number — Options outstanding at period end (shares)
      - `waExercisePrice` number — Weighted-average exercise price of outstanding options (per share)
      - `exercisable` number — Options exercisable at period end (shares)
      - `granted` number — Options granted in the period (shares)
      - `waGrantDateFairValue` number — Weighted-average grant-date fair value of options granted (per share)
      - `waGrantExercisePrice` number — Weighted-average exercise price of options granted (per share)
      - `exercised` number — Options exercised in the period (shares)
      - `waExercisedPrice` number — Weighted-average exercise price of options exercised (per share)
    - `plan` object
      - `sharesAvailableForGrant` number — Shares remaining available for future grants
      - `sharesAuthorized` number — Shares authorized under the plan
    - `assumptions` object — Black-Scholes valuation assumptions as fractions of 1.
      - `volatility` number
      - `riskFreeRate` number
      - `dividendYield` number
  - `planTotals` object, nullable — The same fields tagged WITHOUT an award dimension, the whole-plan view (same shape as an `awards` entry minus `member`/`name`). Null when the filer tagged nothing undimensioned. Do not sum with `awards`; they overlap.
  - `dateFiled` string, date, nullable — SEC filing acceptance date of the newest filing contributing to this period. Use this to gate point-in-time data and avoid lookahead bias.
  - `fx` FxConversion — Foreign-currency conversion audit for this period. Every monetary value in `facts` is in the requested `currency` (default **US dollars**). This block is absent when the period was already wholly in the target currency (e.g. a US filer with the default USD, nothing to convert). It is present when one or more line items were originally filed in a different currency and converted on the fly, and it records the exact rate(s) applied so the conversion can be reproduced. Rates come from the Frankfurter API (api.frankfurter.dev). Instant balance-sheet items use the spot rate at period end; flow income/cash-flow items use the day-weighted average rate over the period.
    - `targetCurrency` string, required — The currency (ISO 4217) every `facts` value was converted INTO, the value of the request `currency` parameter (default USD). The literal `original` here means no conversion was requested: each fact stays in its as-reported currency (see `unconverted` for the per-fact mapping).
    - `originalCurrencies` string[], required — Every source currency (ISO 4217) that appeared in this period, the union of converted, unconverted, and already-in-target. The target currency itself is listed when some facts were natively in it (e.g. a foreign filer reporting some lines in USD alongside its converted local currency), so a mixed period reflects its true composition rather than appearing wholly converted.
    - `rates` object[], required — One entry per (source currency, method) actually applied. `rate` is the multiplier: `target = original * rate`.
      - `from` string, required — ISO 4217 source currency that was converted.
      - `method` 'spot' | 'average', required — `spot` for instant balance-sheet items (rate at period end); `average` for flow income/cash-flow items (day-weighted mean over the period).
      - `rate` number, required — Multiply the original-currency amount by this to get the `targetCurrency` amount.
      - `effectiveDate` string, date — Spot only: the date (YYYY-MM-DD) the applied rate was published (≤ period end).
      - `start` string, date — Average only: period start (YYYY-MM-DD).
      - `end` string, date — Average only: period end (YYYY-MM-DD).
    - `unconverted` object — Facts that could NOT be converted (no published rate within tolerance, or an unsupported code/date), grouped by the currency they remain in: each key is a source ISO 4217 code, each value lists the curated fact names in `facts` still in that currency (NOT `targetCurrency`). Absent when everything converted. Use it to know exactly which figures to treat as native currency.

## Other responses

- `400` — Invalid parameters or symbol not found
- `403` — Feature not available on current plan

## Changes

- **2026-08-24** `5ab763e6f203` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/stockfit/apis/stockfit-api/changes/api/footnotes/stock-compensation/get.md)

---

[API](https://skmtc.dev/stockfit/apis/stockfit-api.md) · [All operations](https://skmtc.dev/stockfit/apis/stockfit-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/stockfit/stockfit-api/revisions/256933c2bdd2/schema)
