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.
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.
| Column | Type | Description |
|---|---|---|
| record_date | date · not null | The 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_desc | text · not null | Security-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_date | date | PUBLIC-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_desc | text | Coarser 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_rate | double precision | The 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.