treasury-fiscaldata

July 11, 2026 · View on GitHub

Typed, zero-dependency client for the US Treasury FiscalData API — Debt to the Penny, average interest rates on Treasury securities, exchange rates, and every other endpoint, with typed pagination, sorting, and filtering. No API key required.

npm install treasury-fiscaldata

Why

FiscalData is the Treasury's clean, documented API for federal financial data — the national debt to the penny, what the government pays on its securities, official exchange rates, daily Treasury statements, and much more. It's free and keyless, but its filter/pagination syntax (filter=record_date:gte:2020-01-01, page[size]=…) is fiddly to hand-build. This wraps it with a typed query, convenience methods for the popular endpoints, and an async paginator.

This is the sibling of treasurydirect — a different Treasury API. TreasuryDirect is auctions and securities; FiscalData is accounting and debt.

import { latestDebt, debtToPenny, avgInterestRates, query } from "treasury-fiscaldata";

const debt = await latestDebt();
Number(debt.tot_pub_debt_out_amt);  // 39_414_179_016_130.09

// A date range, with the two-condition filter handled for you:
const history = await debtToPenny({ startDate: "2026-07-01", endDate: "2026-07-08" });

// Any endpoint, fully typed pagination/sort/filter:
const rates = await query("v2/accounting/od/avg_interest_rates", {
  filter: { security_type_desc: "Marketable", record_date: ">=2026-01-01" },
  sort: ["-record_date"],
  pageSize: 100,
});

API

Every function takes an optional final options: { fetch?, baseUrl? } (inject fetch for tests/proxies).

  • query(endpoint, params?) — any endpoint (path after /services/api/fiscal_service/). params: fields, filter, sort, pageNumber, pageSize. Returns { data, meta, links }.
  • queryAll(endpoint, params?) — async generator that follows pagination and yields every row. Narrow with filter first — some endpoints have millions of rows.
  • latestDebt() / debtToPenny({ startDate, endDate }) — Debt to the Penny.
  • avgInterestRates() — average interest rates on Treasury securities.
  • exchangeRates(params?) — Treasury reporting rates of exchange.

Filters come in two forms: a record { field: ">=value" } (leading operators >= <= > < = are translated; bare value means equality — one condition per field), or a raw string array ["record_date:gte:2020-01-01", "record_date:lte:2020-12-31"] when you need two conditions on one field. Failures throw FiscalDataError with status and url.

The mocked test suite runs offline; npm run smoke exercises the live API.

Sibling to treasurydirect. Part of a fixed-income toolkit: newyorkfed · tbill · tips-index-ratio · compounded-sofr · day-count · accrued-interest · 32nds · sifma-holidays · instrument-identifiers.

Author

Built by Moshe Malka — engineering leader in New York City. Studio work at Quentin.Code.

MIT © Moshe Malka