Obscura

Treasury Average Rates

Average interest rates the U.S. Treasury pays on its outstanding debt, by security type.

treasury_avg_rates — the dataset name to pass to the Obscura API.

Category Macro Columns 5 Refresh Weekly Point-in-time available_date

What one row means

One security-class's average interest rate on outstanding U.S. Treasury debt for a single reporting month, from Treasury's FiscalData "Average Interest Rates on U.S. Treasury Securities" API (od/avg_interest_rates) — one row per (month, security_desc) combination, e.g. "Treasury Bills" or "Government Account Series" for a given month-end.

One row per (record_date, security_desc).

Point-in-time availability

Every Obscura dataset carries available_date: the calendar day the publisher made the row available, day-of, with no session rounding. It is the one column a backtest filters on, and it means the same thing on every dataset in the catalog.

For treasury_avg_rates: release_calendar: available_date = record_date (month-end) + 4 business days, the MSPD release cadence; materialized by the collector.

Refresh cadence

Obscura refreshes treasury_avg_rates weekly — the most frequent scheduled job that re-collects or re-exports it. This is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when a row became public is recorded per row in available_date.

Schema — 5 columns

The full public column list for treasury_avg_rates, with the meaning of every field. The same schema is served unauthenticated at https://api.obscura.trade/v1/catalog/treasury_avg_rates.

ColumnTypeDescription
record_datedate · not nullThe reporting month, stored as its month-end calendar date (e.g. 2026-06-30) — the FiscalData API's `record_date` field. This is the period the average rate covers, NOT the date the report became public; see `available_date` for that. Part of the composite primary key.
security_desctext · not nullSecurity-class label from the API's `security_desc` field, e.g. "Treasury Bills", "Treasury Notes", "Federal Financing Bank", "Total Marketable", "Domestic Series". Second half of the composite primary key; blank values are dropped during parsing so this is never empty.
available_datedatePUBLIC-availability date = record_date (month-end) + 4 business days, the MSPD release cadence; materialized by the collector. The point-in-time column to filter/join on — never record_date itself, which is only the reporting period label.
security_type_desctextCoarser grouping of security_desc, e.g. "Marketable" vs "Non-marketable". Nullable — some rollup rows in the source (e.g. grand totals) omit it.
avg_interest_ratedouble precisionThe weighted-average interest rate, in percent (e.g. 3.690 = 3.690%), on the outstanding debt of this security class for the reporting month. Sourced from the API's `avg_interest_rate_amt` field; some (record_date, security_desc) combinations legitimately have no rate reported that month, hence nullable.

Access treasury_avg_rates

Two delivery paths, one identifier. Both require an Obscura account and an active subscription; the catalog entry and the schema above are public.

import obscura

client = obscura.Client("obs_live_…")

df = client.query(
    dataset="treasury_avg_rates",
    start="2024-01-01",
)

Create a free account Browse all 95 datasets

Frequently asked questions

What is in the treasury_avg_rates dataset?

Average interest rates the U.S. Treasury pays on its outstanding debt, by security type. One security-class's average interest rate on outstanding U.S. Treasury debt for a single reporting month, from Treasury's FiscalData "Average Interest Rates on U.S. Treasury Securities" API (od/avg_interest_rates) — one row per (month, security_desc) combination, e.g. "Treasury Bills" or "Government Account Series" for a given month-end.

How do I avoid look-ahead bias with treasury_avg_rates?

Filter on treasury_avg_rates.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — release_calendar: available_date = record_date (month-end) + 4 business days, the MSPD release cadence; materialized by the collector. A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.

In what formats can I get treasury_avg_rates?

As a Parquet bulk export (POST https://api.obscura.trade/v1/download) or as JSON from the typed query API (POST https://api.obscura.trade/v1/query), both with dataset="treasury_avg_rates". The column schema is public at https://api.obscura.trade/v1/catalog/treasury_avg_rates.

How often is treasury_avg_rates updated?

Obscura refreshes treasury_avg_rates on a weekly schedule — that is the most frequent scheduled job that re-collects or re-exports the table. It is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when the publisher makes a row available is described by the availability rule above, and is recorded per row in available_date.

Related datasets

BLS SeriesEconomic series from the U.S. Bureau of Labor Statistics, fetched by series ID: employment, unemployment, CPI, PPI, wage… Comtrade FlowsAnnual bilateral goods-trade totals between countries, from UN Comtrade. ECB SeriesEuropean Central Bank Data Portal series, retrieved by series key. FRED SeriesSeries from the Federal Reserve's FRED database by series ID — rates, prices, output, employment and more — as a point-i… IMF IndicatorsCountry-level macro indicators from the IMF's DataMapper. ONS SeriesUK macroeconomic series from the Office for National Statistics. Policy RatesThe policy interest rate set by each currency's monetary authority, on every calendar day back to 1946 — twenty currenci… Treasury DebtTotal U.S. public debt outstanding, updated daily ('debt to the penny').