---
title: "Debt Structure"
method: GET
path: "/api/footnotes/debt-structure"
tags: ["Footnotes"]
---

# Debt Structure

`GET /api/footnotes/debt-structure`

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

Returns a company's debt at the individual-borrowing level, straight from the debt footnote of 10-K / 10-Q filings: every note, bond, term loan, and debenture the filer tagged on the XBRL debt-instrument axis, with face amount, carrying amount, stated and effective interest rate, variable-rate spread, fair value, conversion price, and more, data that never appears on the face of the balance sheet.

Each period entry carries two arrays:
- `instruments`: one entry per **tranche** (e.g. "Fixed Rate Senior Notes Due August 2028"). When the filer crossed the tranche with a debt-type axis, `debtType` names it (e.g. `us-gaap:SeniorNotesMember`). Sorted by face amount descending.
- `types`: **aggregates by debt type** (Senior Notes total, Commercial Paper, Term Loans). These are rollups across tranches and must never be summed together with `instruments`.

Monetary values default to **US dollars**. Pass the `currency` parameter to receive any supported ISO 4217 currency instead: values not already in that currency (e.g. EUR-denominated notes) are converted at the period-end spot rate, and the per-period `fx` block records the exact rate(s) applied so each conversion is reproducible. Pass `currency=original` for as-filed values. Interest rates are fractions of 1 (`0.048` = 4.8%) and are never converted.

**What this data can tell you:**
- Refinancing needs per year, from face amounts and due years.
- Coupons on maturing tranches vs current market rates.
- Fixed vs floating rate exposure.
- Potential dilution from convertibles (conversion price vs share price).
- Market pricing of the debt (fair value vs carrying amount).

**Data honesty notes:**
- `dueYear` is **derived** from the member name ("…Due2030…", "…DueApril2025…"), not from a tagged maturity date; it is `null` when the name carries no year token.
- A minority of filers mis-tag rates as whole percents (`4.8` instead of `0.048`); such values are re-scaled to fractions and the entry is flagged `normalized: true`.
- Coverage is US-GAAP filers (10-K/10-Q); the debt-instrument axis does not exist in the IFRS taxonomy, so pure-IFRS 20-F filers are typically not covered.
- Values are point-in-time snapshots at the fiscal period end. In the quarterly view the fiscal-year-end snapshot appears as `Q4`.

## 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-tranche and per-type debt detail, organized by period

- object[]
  - `period` string, date — The fiscal period end date (YYYY-MM-DD), the balance-sheet date the values are measured at
  - `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).
  - `instruments` object[] — One entry per debt tranche, sorted by face amount descending. Fields the filer did not tag are omitted, not serialized as `null`.
    - `member` string — Raw XBRL member QName of the tranche
    - `name` string — Derived display label
    - `debtType` string, nullable — Debt-type member the filer crossed this tranche with; null when not tagged
    - `debtTypeName` string, nullable — Derived display label of `debtType`
    - `dueYear` integer, nullable — Maturity year DERIVED from the member name ("…Due2030…"); null when the name carries no year token. Not a tagged maturity date.
    - `currency` string, nullable — Currency of the monetary values after conversion (the requested `currency` unless listed in `fx.unconverted`); null when the entry's values remain in mixed currencies or no monetary field is present
    - `normalized` boolean — Only present (as `true`) when a rate value was re-scaled from a mis-tagged whole percent (`4.8`) to a fraction (`0.048`).
    - `faceAmount` number — Principal amount at issuance
    - `carryingAmount` number — Balance-sheet carrying amount (net of discounts/issuance costs)
    - `longTermDebt` number — Long-term debt attributed to this tranche
    - `fairValue` number — Disclosed fair value
    - `unamortizedDiscount` number — Unamortized discount remaining
    - `conversionPrice` number — Convertible-debt conversion price per share
    - `statedRate` number — Stated (coupon) interest rate as a fraction of 1
    - `effectiveRate` number — Effective interest rate as a fraction of 1
    - `variableSpread` number — Basis spread over the variable benchmark rate as a fraction of 1
    - `weightedAverageRate` number — Weighted-average interest rate as a fraction of 1
    - `redemptionPrice` number — Redemption price as a fraction of principal (1.0 = 100%)
  - `types` object[] — Aggregates by debt type (Senior Notes, Commercial Paper, ...), rollups across tranches, served separately so they are never summed with `instruments`. Same fields as `instruments` minus `debtType`/`dueYear`.
    - `member` string — Raw XBRL member QName of the debt type
    - `name` string — Derived display label
    - `currency` string, nullable
    - `normalized` boolean — Only present (as `true`) when a rate value was re-scaled from a mis-tagged whole percent.
    - `faceAmount` number
    - `carryingAmount` number
    - `longTermDebt` number
    - `fairValue` number
    - `unamortizedDiscount` number
    - `conversionPrice` number
    - `statedRate` number
    - `effectiveRate` number
    - `variableSpread` number
    - `weightedAverageRate` number — Weighted-average interest rate across the type as a fraction of 1
    - `redemptionPrice` number
  - `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/debt-structure/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)
