---
title: "Interest expense on the public debt (FYTD totals plus component breakdown)"
method: GET
path: "/api/v1/treasury/interest-expense"
tags: ["Public Finance & Government"]
---

# Interest expense on the public debt (FYTD totals plus component breakdown)

`GET /api/v1/treasury/interest-expense`

Fiscal-year-to-date interest expense on the US public debt. The records are disaggregated leaf components (by category, accrual group, and security type) and there is no total row, so read the canonical fytd_total_public_issues, fytd_total_gas, and fytd_total_public_debt fields (computed for the latest record_date) rather than summing rows, which double-counts. fytd_expense_amt is cumulative within the fiscal year, so do not sum across record_dates either.

## Response `200`

Interest expense leaf rows plus canonical FYTD totals.

- EnvelopeTreasuryInterestExpenseData
  - `data` TreasuryInterestExpenseData, required — Interest expense on the public debt. The upstream dataset has NO total row - records are disaggregated leaf components. Read the fytd_total_* fields for the canonical fiscal-year-to-date totals (computed for the latest record_date); never sum the rows, which double-counts.
    - `records` TreasuryInterestExpenseRecord[], required — Leaf component rows, newest record_date first.
      - `record_date` string, required — Reporting month-end date (YYYY-MM-DD).
      - `expense_catg_desc` string, required — Top-level category: 'INTEREST EXPENSE ON PUBLIC ISSUES' or 'INTEREST EXPENSE ON GOVT ACCOUNT SERIES'.
      - `expense_group_desc` string, required — Accrual group, e.g. 'ACCRUED INTEREST EXPENSE', 'AMORTIZED DISCOUNT', 'AMORTIZED PREMIUM', 'SAVINGS BONDS'.
      - `expense_type_desc` string, required — Security or instrument type, e.g. 'Treasury Notes', 'Treasury Bills', 'Treasury Bonds'.
      - `month_expense_amt` string, required — Interest expense for the month (USD).
      - `fytd_expense_amt` string, required — Fiscal-year-to-date interest expense (USD), cumulative within the fiscal year.
    - `total_count` integer, required — Total available records across all pages.
    - `total_pages` integer, required — Total number of pages.
    - `fytd_total_record_date` string, nullable — The record_date the fytd_total_* values are computed for (the latest available).
    - `fytd_total_public_issues` number, nullable — Canonical FYTD interest expense on public issues = sum of all INTEREST EXPENSE ON PUBLIC ISSUES rows for fytd_total_record_date (USD). This is the headline 'interest expense on public issues' figure - use it directly, do not sum rows.
    - `fytd_total_gas` number, nullable — Canonical FYTD interest expense on Government Account Series (intragovernmental holdings) for fytd_total_record_date (USD).
    - `fytd_total_public_debt` number, nullable — Canonical FYTD interest expense on the total public debt outstanding = public issues + GAS (USD).
  - `meta` SugraMeta, required — Metadata attached to every /api/v1/* response envelope.
    - `endpoint` string, required — Requested endpoint path.
    - `data_time` string, required — ISO 8601 UTC timestamp of the source data, not of the request.
    - `response_time` string, required — ISO 8601 UTC timestamp when this response was produced.
    - `provider` string, required — API name and version.
    - `source` string, nullable — Identifier of the primary upstream source used for this response.
    - `attribution` string, nullable — Human-readable attribution mandated by an upstream source (e.g. a securities regulator or self-regulatory organization). Present only on responses whose source requires the owner and source to be clearly identified. Do not remove or alter it when using the response.
    - `fallback_used` boolean, nullable — True when the primary source failed and a fallback produced the data.
    - `fallback_chain` string[], nullable — Ordered list of sources attempted, in the order they were tried.
    - `cached` boolean, nullable — True when this response was served from the internal cache.
    - `stale` boolean, nullable — True when the cached response was returned after the upstream rate-limited or errored. Clients can use this to detect degraded data.

## Other responses

- `401` — Missing or invalid `x-api-key` header.
- `429` — Daily rate limit exceeded. Check `X-RateLimit-Reset` for the next window.
- `503` — Upstream source is temporarily unavailable. Retry after a short delay.

---

[API](https://skmtc.net/sugra/apis/sugra-api.md) · [All operations](https://skmtc.net/sugra/apis/sugra-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sugra/sugra-api/versions/dcf7427e6897/schema)
