Dashboard

Stock Compensation

GET/api/footnotes/stock-compensation

Pro

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:

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:

Data honesty notes:

Get API key Try it live in the API explorer

Query parameters

Example request

curl 'https://api.stockfit.io/v1/api/footnotes/stock-compensation?symbol=AAPL&cik=320193&cusip=037833100&composite_figi=BBG000B9XRY4&share_class_figi=BBG001S5N8V8&currency=USD' \
  -H 'Authorization: Bearer YOUR_API_TOKEN'

Responses

200 OK

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

Response schema

array of:
  • period string (date)

    The fiscal period end date (YYYY-MM-DD)

  • fiscalYear integer

    The company's fiscal year (handles non-December year-ends).

  • fiscalPeriod string (enum)

    Fiscal period of a reported value: `FY` (annual) or `Q1`-`Q4` (quarterly).

    Allowed values: FY, Q1, Q2, Q3, Q4
  • awards array of object

    One entry per dimensioned award type / plan, sorted by SBC expense descending. Fields the filer did not tag are omitted.

    array of:
    • member string

      Raw XBRL member QName of the award type or plan

    • name string

      Derived display label

    • currency string | null

      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 | null

    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) | null

    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 object

    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

      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 array of string

      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 array of object

      One entry per (source currency, method) actually applied. `rate` is the multiplier: `target = original * rate`.

      array of:
      • from string

        ISO 4217 source currency that was converted.

      • method string (enum)

        `spot` for instant balance-sheet items (rate at period end); `average` for flow income/cash-flow items (day-weighted mean over the period).

        Allowed values: spot, average
      • rate number

        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 map of string to array of string

      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.

      • * (additional properties) array of string

Example response

[
  {
    "period": "2025-09-27",
    "fiscalYear": 2025,
    "fiscalPeriod": {},
    "awards": [
      {
        "member": "us-gaap:RestrictedStockUnitsRSUMember",
        "name": "Restricted Stock Units RSU",
        "currency": "USD",
        "normalized": true,
        "expense": 8200000000,
        "unrecognizedCost": 21800000000,
        "taxWithholdingPaid": 0,
        "rollForward": {
          "granted": {
            "shares": 73466000,
            "waGrantDateFairValue": 226.68
          },
          "vested": {
            "shares": 76845000,
            "waGrantDateFairValue": 159.85,
            "totalFairValue": 17100000000
          },
          "forfeited": {
            "shares": 8373000,
            "waGrantDateFairValue": 183.03
          },
          "nonvested": {
            "shares": 151574000,
            "waGrantDateFairValue": 189.75
          },
          "reconciles": true
        },
        "options": {
          "outstanding": 0,
          "waExercisePrice": 0,
          "exercisable": 0,
          "granted": 0,
          "waGrantDateFairValue": 0,
          "waGrantExercisePrice": 0,
          "exercised": 0,
          "waExercisedPrice": 0
        },
        "plan": {
          "sharesAvailableForGrant": 0,
          "sharesAuthorized": 0
        },
        "assumptions": {
          "volatility": 0.45,
          "riskFreeRate": 0.042,
          "dividendYield": 0.006
        }
      }
    ],
    "planTotals": {},
    "dateFiled": "2025-10-31",
    "fx": {}
  }
]

400 Bad Request

Invalid parameters or symbol not found

Response schema

  • error string

    Human-readable error message

Example response

{}

403 Forbidden

Feature not available on current plan

Response schema

  • error string

    Human-readable error message

Example response

{}