---
title: "Workforce Cost"
method: GET
path: "/api/footnotes/workforce-cost"
tags: ["Footnotes"]
---

# Workforce Cost

`GET /api/footnotes/workforce-cost`

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

Returns what a company's workforce costs, assembled from the disclosures filers actually tag: the direct labor expense line where one exists (airlines, banks, railroads, insurers), the accrued compensation balances almost every filer carries (accrued salaries, bonuses, vacation, payroll taxes, workers compensation), and 401(k) / defined-contribution plan cost. Labor expense by business segment is served as separate series where disclosed.

Response blocks:
- `periods`: company-level values per fiscal period, newest first. Fields the filer did not tag are omitted.
- `perSegment`: labor expense series per business segment (raw XBRL members, subtotal rollups excluded). Components of the company figure; never sum them with `periods`.
- `byExpenseCaption`: employee compensation per income-statement caption from the FASB DISE disclosure (ASU 2024-03). Mandatory for public filers in fiscal years beginning after 2026-12-15, so this block and the `employeeCompensation` field fill in as filers adopt; expect sparse data before then.

Monetary values default to **US dollars** (`currency` parameter as on the statements endpoints: balances at spot, flows at the period-average rate, `fx` audit block, `currency=original` for as-filed).

**What this data can tell you:**
- Labor cost trajectory vs revenue, and labor cost per employee where headcount is tagged.
- Wage pressure read-through: accrued compensation balances move with pay levels even when the expense line is not disclosed.
- Which segments carry the labor intensity.
- 401(k) contribution cost as a benefits-spend proxy.

**Data honesty notes:**
- Coverage is tiered by disclosure practice: accrued balances cover roughly 45% of the active universe, a direct labor expense line roughly 20% (concentrated in financials, industrials, materials); companies burying labor in SG&A or cost of revenue serve accruals only.
- Accrued fields serve the current portion where tagged, the filer's combined current-and-noncurrent figure otherwise.
- In the quarterly view, expense flows appear for Q1 to Q3 as tagged; full-year flows are not served as Q4. Year-end accrued balances are the Q4 snapshot.
- `numberOfEmployees` is a voluntary tag (about 100 filers per year); treat it as opportunistic.

## 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`

Workforce cost periods plus per-segment and per-caption series

- object
  - `periods` object[] — Company-level workforce cost per fiscal period, newest first. Fields the filer did not tag are omitted.
    - `period` string, date
    - `fiscalYear` integer
    - `fiscalPeriod` 'FY' | 'Q1' | 'Q2' | 'Q3' | 'Q4' — Fiscal period of a reported value: `FY` (annual) or `Q1`-`Q4` (quarterly).
    - `currency` string, nullable — Currency of this period's monetary values after conversion; null when mixed
    - `laborExpense` number — Salaries, wages and related expense line (flow). Sourced from the labor-expense concept family, IFRS employee benefits expense for 20-F filers
    - `employeeCompensation` number — DISE employee compensation excluding one-time termination benefits (flow), when tagged without a caption breakdown
    - `directLabor` number — Direct labor within cost of goods sold (flow)
    - `otherLaborExpense` number — Other labor-related expenses (flow)
    - `definedContributionPlanCost` number — 401(k) / defined-contribution plan cost recognized (flow)
    - `accruedCompensation` number — Employee-related liabilities (balance)
    - `accruedSalaries` number — Accrued salaries and wages (balance)
    - `accruedBonuses` number — Accrued bonuses (balance)
    - `accruedVacation` number — Accrued vacation (balance)
    - `accruedPayrollTaxes` number — Accrued payroll taxes (balance)
    - `accruedEmployeeBenefits` number — Accrued employee benefits (balance)
    - `workersCompensationLiability` number — Workers compensation liability (balance)
    - `numberOfEmployees` number — Employee headcount where tagged (voluntary disclosure, sparse)
    - `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.
  - `perSegment` object[] — Labor expense by business segment, most recently disclosed first. Subtotal rollup members are excluded.
    - `member` string — Raw XBRL member QName of the segment
    - `name` string — Derived display label
    - `role` 'segment' | 'elimination' | 'reconciling' — What the member contributes to the consolidated figure: `segment` rows are additive, `elimination` and `reconciling` rows bridge to the total.
    - `history` object[] — Newest first, up to `limit` points.
      - `period` string, date
      - `fiscalYear` integer
      - `fiscalPeriod` 'FY' | 'Q1' | 'Q2' | 'Q3' | 'Q4' — Fiscal period of a reported value: `FY` (annual) or `Q1`-`Q4` (quarterly).
      - `value` number — Labor expense of this segment in the period (flow)
      - `currency` string, nullable
      - `dateFiled` string, date, nullable
  - `byExpenseCaption` object[] — DISE employee compensation per income-statement caption (ASU 2024-03), same shape as `perSegment` without `role`. Sparse until fiscal 2027 filings arrive.
    - `member` string — Raw XBRL member QName identifying the expense caption
    - `name` string — Derived display label
    - `history` object[]
      - `period` string, date
      - `fiscalYear` integer
      - `fiscalPeriod` 'FY' | 'Q1' | 'Q2' | 'Q3' | 'Q4' — Fiscal period of a reported value: `FY` (annual) or `Q1`-`Q4` (quarterly).
      - `value` number — Employee compensation within this caption (flow)
      - `currency` string, nullable
      - `dateFiled` string, date, nullable
  - `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-26** `706329fcf23d` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/stockfit/apis/stockfit-api/changes/api/footnotes/workforce-cost/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/de5578af3c78/schema)
