Technical writing

Federal Reserve H.15: The Selected Interest Rates Release Behind Treasury Yields, Fed Funds, and Every Rate Benchmark

· AI Analytics
Federal ReserveInterest RatesTreasury YieldsFederal Data

Every morning before markets open, the Federal Reserve publishes H.15 — its “Selected Interest Rates” statistical release. In a single data file it assembles the overnight federal funds rate, Treasury yields from one month out to thirty years, the prime rate, SOFR, corporate bond benchmarks, and the discount window rate. Mortgage rates, corporate bond coupons, student loan resets, derivatives contracts, and trillions of dollars in floating-rate debt all ultimately reference rates that either appear directly in H.15 or are spread over instruments that do. Understanding the release means understanding the entire architecture of US interest rates.

What the H.15 Release Is

Federal Reserve Statistical Release H.15, “Selected Interest Rates,” is published at federalreserve.gov/releases/h15/. Most series are updated daily on business days; the weekly version consolidates the preceding week into a single Friday observation. Historical data for some series — notably the prime rate and longer Treasury maturities — extend back to 1954, making the H.15 one of the longest continuous interest rate datasets in the world.

The release covers a deliberately broad set of rate categories. The federal funds effective rate reflects the cost of overnight unsecured borrowing between banks. Treasury constant maturity yields span the entire term structure from one month to thirty years. The prime rate sets the reference for consumer and small business credit lines. SOFR — the Secured Overnight Financing Rate — has replaced LIBOR as the benchmark for floating-rate instruments. AAA and AA corporate bond yields from Moody's data provide the investment-grade credit anchor. State and local government bond yields round out the picture. Together these series form a complete snapshot of the price of money across credit quality, maturity, and borrower type on any given day.

The H.15 data download program at federalreserve.gov/datadownload allows bulk retrieval in CSV or XML formats. Every series is also mirrored in the Federal Reserve Bank of St. Louis FRED database, where standardized mnemonics and the fredapi Python library make programmatic access straightforward. The FRED series identifiers follow a consistent system: DGS10 for the daily 10-year Treasury yield, DFF for the daily effective federal funds rate, DPRIME for the daily prime rate, and so on through all major H.15 categories.

The Federal Funds Rate

The federal funds rate is the interest rate at which depository institutions lend reserve balances to each other overnight on an uncollateralized basis. The Federal Open Market Committee (FOMC) sets a target range for this rate at its eight scheduled meetings per year, plus occasionally at emergency meetings. The FOMC's primary monetary policy tool is adjusting this target range — raising it to slow inflation, cutting it to support growth and employment.

The effective federal funds rate (EFFR) is the volume-weighted median of all overnight federal funds transactions executed on a given business day. It is published by the Federal Reserve Bank of New York and reported in H.15 as the daily series DFF (and as the monthly average FEDFUNDS in FRED). The EFFR typically trades within a few basis points of the FOMC's target midpoint, held there by the Fed's tools of interest on reserve balances (IORB) and overnight reverse repurchase agreements (ON RRP), which together create a floor under the effective rate.

The upper bound (DFEDTARU) and lower bound (DFEDTARL) of the target range are also published as FRED series. Since the Fed moved to target ranges rather than precise point targets after 2008, tracking both bounds is necessary to characterize policy. From December 2015 through March 2020, the range moved in 25-basis-point increments over a series of gradual hike-and-cut cycles. The 2020 COVID shock prompted the FOMC to cut to the effective zero lower bound (0–0.25%) in March 2020 in a single emergency meeting.

The 2022–2023 tightening cycle was the fastest since the early 1980s Volcker era. Starting from 0–0.25% in March 2022, the FOMC raised the target range at eleven consecutive meetings to reach 5.25–5.50% in July 2023 — a cumulative 525 basis points in seventeen months. This pace reflected an inflation overshoot that reached 9.1% (CPI headline) in June 2022, driven by supply-chain dislocations, energy prices, and the demand surge from pandemic-era fiscal transfers. The Taylor Rule provides a policy-rate benchmark for such episodes: r = r* + π + 0.5(π – π*) + 0.5(y – y*), where r* is the neutral real rate, π is current inflation, π* is the 2% target, and y – y* is the output gap. At peak 2022 inflation, Taylor Rule variants suggested a funds rate of 8–10%, implying the Fed was running significantly accommodative policy even as it hiked aggressively.

Cuts began in September 2024, with the first 50-basis-point reduction marking the start of a new easing cycle as inflation returned closer to target. The H.15 daily series provides the basis for any analysis of the timing and magnitude of FOMC policy shifts across the full modern history of Fed operations.

The Treasury Yield Curve

H.15 publishes Treasury constant maturity yields for eleven tenor points: 1-month, 3-month, 6-month, 1-year, 2-year, 3-year, 5-year, 7-year, 10-year, 20-year, and 30-year. These constant maturity Treasury (CMT) rates are not yields on specific outstanding bonds. Rather, they are interpolated from a fitted yield curve constructed daily by the Treasury Department from the prices of on-the-run (most recently issued) and selected off-the-run Treasury securities. The interpolation produces a smooth curve at standard maturities even when no Treasury matures on exactly that date.

The shape of the yield curve carries substantial macroeconomic information. A normal (upward-sloping) curve means longer maturities yield more than shorter ones — compensating investors for tying up capital and bearing greater interest-rate risk. A flat curve suggests the market sees little difference between near-term and long-term rate expectations. An inverted curve — where short rates exceed long rates — has preceded every US recession since World War II. The inversion reflects a market expectation that the Fed will eventually cut rates substantially, which pushes long yields below current short yields.

Two spread measures are most widely tracked. The 2-year minus 10-year spread (T10Y2Y in FRED, computed as DGS10 minus DGS2) is the standard financial market gauge. The 3-month minus 10-year spread (T10Y3M) is preferred by academic researchers, including work by the Federal Reserve Bank of San Francisco, as a superior recession predictor over 12-month horizons. In late July 2023, the 2yr–10yr spread reached negative 108 basis points — the most severe inversion since the early 1980s — as the Fed held short rates at 5.25–5.50% while the 10-year yield remained below 4%. That extreme inversion reflected a market consensus that policy would eventually ease sharply, which it subsequently did.

The 10-year Treasury yield (DGS10) is the single most referenced interest rate in global finance. It is the benchmark against which US mortgage rates are priced (typically 150–200 basis points above the 10-year), against which corporate bond credit spreads are measured, and at which the US government borrows for a decade. The 2-year yield (DGS2) is closely linked to the expected path of the fed funds rate over the coming two years, making it the market's real-time forecast of Fed policy over the near term.

SOFR and the LIBOR Transition

LIBOR — the London Interbank Offered Rate — was for decades the world's most important benchmark interest rate. At its peak it underpinned roughly $300 trillion in financial contracts: floating-rate mortgages, syndicated loans, interest rate swaps, futures contracts, and corporate floating-rate notes. LIBOR was administered by the British Bankers' Association and, later, ICE Benchmark Administration, and was derived from daily submissions by major banks estimating their unsecured borrowing costs in the interbank market.

The LIBOR manipulation scandal — in which traders at major banks were found to have submitted false rates to benefit their derivatives positions — began to surface in 2012. Regulatory investigations produced billions in fines and criminal convictions, and financial regulators globally concluded that a benchmark based on hypothetical transaction estimates by parties with conflicts of interest was structurally unsound. The Financial Stability Board coordinated an international effort to identify replacement rates anchored in actual transactions.

SOFR — the Secured Overnight Financing Rate — was selected as the US replacement. It is published each business morning by the Federal Reserve Bank of New York and represents the volume-weighted median of overnight Treasury repurchase agreement (repo) transactions — trades in which cash is lent overnight against Treasury collateral. On any given day SOFR is based on roughly $1 trillion in actual transactions, making it far more transaction-grounded than LIBOR ever was. Because repo transactions are collateralized by Treasuries, SOFR is essentially a risk-free rate and typically trades close to the FOMC target range, unlike LIBOR, which embedded a credit risk premium reflecting bank default risk.

LIBOR was retired on June 30, 2023 for most USD maturities. H.15 now includes SOFR, and FRED carries the daily SOFR series back to April 2018, when the New York Fed first began publishing it. Two related variants appear in the market: SOFR compounded in arrears, used for floating-rate notes and bilateral loans where the rate is set at the end of each interest period based on realized SOFR over the period; and SOFR Term Rates, published by CME Group, which are forward-looking rates derived from SOFR futures for 1-month, 3-month, 6-month, and 12-month tenors. Term SOFR is widely used in syndicated loans and commercial mortgages where borrowers need to know their rate at the beginning of an interest period. The transition raised significant legal and operational issues around fallback language in legacy contracts and credit spread adjustments to compensate for the difference between LIBOR (which included a bank credit premium) and risk-free SOFR.

Prime Rate and Corporate Bond Yields

The prime rate is the reference interest rate that large US commercial banks charge their most creditworthy corporate customers for short-term loans. By long-standing convention it is set at the upper bound of the FOMC target range plus 3 percentage points. When the FOMC target range is 5.25–5.50%, the prime rate is 8.50%. When the target is 0–0.25%, the prime rate is 3.25%. This mechanical relationship means the prime rate moves in lockstep with FOMC decisions. FRED publishes it as DPRIME (daily) and MPRIME (monthly average), both sourced from H.15.

The prime rate matters because a large volume of consumer and business credit is priced as prime plus a spread. Home equity lines of credit, credit card rates, and many small business loans reference prime. In the 2022–2023 hiking cycle, the prime rate rose from 3.25% to 8.50% — a 525-basis-point increase that passed directly through to any borrower on a prime-linked rate, producing one of the largest and fastest increases in consumer borrowing costs in the modern era.

H.15 also publishes AAA and AA corporate bond yields sourced from Moody's data. Investment-grade credit spreads — the difference between a corporate bond yield and a Treasury of similar maturity — measure the market's assessment of default and liquidity risk in the corporate sector. In normal conditions, AAA corporate bonds trade 50–150 basis points above comparable Treasuries. In periods of credit stress, spreads widen sharply. During the 2008 financial crisis, even AAA-rated corporate bonds saw spreads spike above 300 basis points as investors demanded steep compensation for perceived systemic risk. In March 2020, investment-grade spreads briefly touched 350 basis points as pandemic uncertainty triggered a flight to quality, before the Federal Reserve's announcement of corporate bond purchase programs drove spreads sharply tighter within days.

The Discount Rate and Discount Window

The Federal Reserve's discount window is the mechanism through which the Fed lends directly to depository institutions. H.15 publishes three discount window rates. The primary credit rate is the rate at which banks in sound financial condition can borrow for up to 90 days, typically set at the upper bound of the FOMC target range plus 10 basis points. The secondary credit rate applies to institutions that do not qualify for primary credit and is set 50 basis points above the primary rate. Seasonal credit is available to smaller depository institutions with predictable seasonal borrowing needs.

Despite the discount window's role as a “lender of last resort” backstop, borrowing from it carries historical stigma. Banks have long worried that using the discount window signals financial weakness to the market, so they typically exhaust other funding sources before accessing it. During ordinary times, daily discount window borrowing is minimal.

Crisis episodes produce dramatic exceptions. During the 2008 financial crisis, discount window borrowing surged to hundreds of billions of dollars as the interbank funding market froze. The Fed introduced the Term Auction Facility (TAF) partly to reduce stigma by allowing anonymous competitive bidding for term loans. In March 2020, the Fed cut the primary credit rate to 0.25% and announced that it encouraged banks to use the discount window — borrowing briefly exceeded $50 billion in a single day. And in March 2023, following the failure of Silicon Valley Bank, the Fed created the Bank Term Funding Program (BTFP), which allowed banks to borrow at par against eligible Treasury and agency securities — a discount-window-like facility specifically designed to prevent forced asset sales during a bank run. The BTFP wound down in March 2024 after the immediate stress passed.

Accessing H.15 Data Through FRED

The FRED database at the St. Louis Fed hosts the complete H.15 series catalog with daily updates. Key series and their mnemonics:

FRED's fredapi Python library provides one-line access to any of these series. The Federal Reserve's own data download program at federalreserve.gov/datadownload allows bulk retrieval of the complete H.15 series set in CSV or XML, useful for applications that need the full cross-section of all published rates simultaneously rather than individual FRED series.

The Python code below retrieves DGS10, DGS2, DGS3MO, and DFF from FRED for 2018 through 2024, computes the two standard yield curve spread measures, and generates a four-panel chart covering the fed funds rate with annotated FOMC turning points, the 10-year Treasury yield, both spread measures with inversion shading, and the 2-year and 3-month yields for context. NBER recession shading is applied across all panels using the USREC indicator series.

import pandas as pd
from fredapi import Fred
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.patches as mpatches

# Set your FRED API key here
fred = Fred(api_key="YOUR_FRED_API_KEY")

start = "2018-01-01"
end   = "2024-12-31"

# --- Pull core H.15 series ---
# DFF:    Effective federal funds rate (daily)
# DGS10:  10-year Treasury constant maturity yield (daily)
# DGS2:   2-year Treasury constant maturity yield (daily)
# DGS3MO: 3-month Treasury constant maturity yield (daily)
dff    = fred.get_series("DFF",    observation_start=start, observation_end=end)
dgs10  = fred.get_series("DGS10",  observation_start=start, observation_end=end)
dgs2   = fred.get_series("DGS2",   observation_start=start, observation_end=end)
dgs3mo = fred.get_series("DGS3MO", observation_start=start, observation_end=end)

# Yield curve spread measures
spread_2_10  = dgs10 - dgs2    # T10Y2Y equivalent: negative = inverted
spread_3m_10 = dgs10 - dgs3mo  # T10Y3M: preferred recession indicator

# NBER recession indicator for shading
usrec = fred.get_series("USREC", observation_start=start, observation_end=end)

def add_recession_shading(ax):
    in_rec = False
    rec_start = None
    for date, val in usrec.items():
        if val == 1 and not in_rec:
            in_rec = True
            rec_start = date
        elif val == 0 and in_rec:
            in_rec = False
            ax.axvspan(rec_start, date, alpha=0.12, color="#6b7280", zorder=0)
    if in_rec:
        ax.axvspan(rec_start, usrec.index[-1], alpha=0.12, color="#6b7280", zorder=0)

# Key FOMC event dates
hike_start = pd.Timestamp("2022-03-17")   # First hike: March 2022
rate_peak  = pd.Timestamp("2023-07-27")   # Peak: July 2023 (5.25-5.50%)
first_cut  = pd.Timestamp("2024-09-19")   # First cut: September 2024

# --- Four-panel chart ---
fig, axes = plt.subplots(4, 1, figsize=(13, 16), sharex=True)
fig.suptitle("Federal Reserve H.15: Selected Interest Rates 2018-2024",
             fontsize=13, fontweight="bold", y=0.98)

# Panel 1: Effective federal funds rate
ax1 = axes[0]
ax1.plot(dff.index, dff.values, color="#0b4a8f", linewidth=1.8, label="Effective Fed Funds Rate")
add_recession_shading(ax1)
ax1.axvline(hike_start, color="#b45309", linewidth=1.1, linestyle="--", alpha=0.8)
ax1.axvline(rate_peak,  color="#dc2626", linewidth=1.1, linestyle="--", alpha=0.8)
ax1.axvline(first_cut,  color="#166534", linewidth=1.1, linestyle="--", alpha=0.8)
ax1.annotate("Mar 2022
hike cycle", xy=(hike_start, 0.1),
             xytext=(hike_start + pd.Timedelta(days=30), 1.8),
             fontsize=7.5, color="#b45309",
             arrowprops=dict(arrowstyle="->", color="#b45309", lw=0.8))
ax1.annotate("Jul 2023
5.25-5.50%", xy=(rate_peak, 5.33),
             xytext=(rate_peak - pd.Timedelta(days=280), 5.6),
             fontsize=7.5, color="#dc2626",
             arrowprops=dict(arrowstyle="->", color="#dc2626", lw=0.8))
ax1.annotate("Sep 2024
first cut", xy=(first_cut, 4.83),
             xytext=(first_cut - pd.Timedelta(days=200), 3.6),
             fontsize=7.5, color="#166534",
             arrowprops=dict(arrowstyle="->", color="#166534", lw=0.8))
ax1.set_ylabel("Rate (%)")
ax1.set_title("Effective Federal Funds Rate (DFF)", fontsize=10)
ax1.legend(fontsize=8, loc="upper left")
ax1.grid(axis="y", alpha=0.35)
ax1.set_ylim(bottom=-0.1)

# Panel 2: 10-year Treasury yield
ax2 = axes[1]
ax2.plot(dgs10.index, dgs10.values, color="#0b4a8f", linewidth=1.8, label="10-Year CMT Yield")
add_recession_shading(ax2)
ax2.set_ylabel("Yield (%)")
ax2.set_title("10-Year Treasury Constant Maturity Yield (DGS10)", fontsize=10)
ax2.legend(fontsize=8, loc="upper left")
ax2.grid(axis="y", alpha=0.35)

# Panel 3: Both yield curve spread measures
ax3 = axes[2]
ax3.plot(spread_2_10.index,  spread_2_10.values,  color="#0b4a8f", linewidth=1.6,
         label="10yr minus 2yr (T10Y2Y)")
ax3.plot(spread_3m_10.index, spread_3m_10.values, color="#b45309", linewidth=1.6,
         linestyle="--", label="10yr minus 3-month (T10Y3M)")
ax3.axhline(0, color="#6b7280", linewidth=0.9, linestyle="-")
ax3.fill_between(spread_2_10.index, spread_2_10.values, 0,
                 where=(spread_2_10.values < 0),
                 interpolate=True, alpha=0.18, color="#dc2626", label="Inverted (2yr-10yr)")
add_recession_shading(ax3)
ax3.annotate("-108 bps
Jul 2023", xy=(pd.Timestamp("2023-07-03"), -1.08),
             xytext=(pd.Timestamp("2022-08-01"), -1.5),
             fontsize=7.5, color="#dc2626",
             arrowprops=dict(arrowstyle="->", color="#dc2626", lw=0.8))
ax3.set_ylabel("Spread (pp)")
ax3.set_title("Yield Curve Spreads: Inversion Signals", fontsize=10)
ax3.legend(fontsize=8, loc="lower left")
ax3.grid(axis="y", alpha=0.35)

# Panel 4: 2yr and 3-month yields stacked for context
ax4 = axes[3]
ax4.plot(dgs2.index,   dgs2.values,   color="#0b4a8f", linewidth=1.6, label="2-Year CMT (DGS2)")
ax4.plot(dgs3mo.index, dgs3mo.values, color="#b45309", linewidth=1.6,
         linestyle="--", label="3-Month CMT (DGS3MO)")
add_recession_shading(ax4)
ax4.set_ylabel("Yield (%)")
ax4.set_title("2-Year and 3-Month Treasury Yields", fontsize=10)
ax4.legend(fontsize=8, loc="upper left")
ax4.grid(axis="y", alpha=0.35)

ax4.xaxis.set_major_formatter(mdates.DateFormatter("%Y"))
ax4.xaxis.set_major_locator(mdates.YearLocator(1))
plt.setp(ax4.xaxis.get_majorticklabels(), rotation=30, ha="right")

plt.tight_layout()
plt.savefig("h15_interest_rates.png", dpi=150, bbox_inches="tight")
plt.show()
print("Chart saved to h15_interest_rates.png")

The annotation approach above marks three pivotal dates: the March 2022 commencement of the hiking cycle (first rate increase since 2018), the July 2023 peak at 5.25–5.50% (the highest effective funds rate since 2001), and the September 2024 first cut that initiated the subsequent easing cycle. Plotting these against the yield curve spread panels makes clear how the inversion deepened as the Fed approached peak rates and then began to narrow as cut expectations materialized in longer yields before the first actual rate reduction.

The 3-month minus 10-year spread (T10Y3M) warrants particular attention. Research by Estrella and Mishkin and later updated studies by economists at the Federal Reserve Banks of San Francisco and New York demonstrate that this spread has a superior out-of-sample record as a recession predictor compared to the more widely publicized 2-year minus 10-year measure. The intuition is that 3-month Treasury rates closely track the expected near-term path of the fed funds rate, making the 3-month vs. 10-year spread a cleaner measure of how far current policy stands above long-run expectations. The series is available in FRED as T10Y3M and in H.15 directly as the difference between DGS3MO and DGS10.

Related writing

Federal Reserve Z.1: The Complete Quarterly Accounting of Every Dollar in the US Financial System — the quarterly financial accounts release that places Treasury issuance, household wealth, and corporate borrowing into the broader sectoral balance sheet framework.

Federal Reserve Senior Loan Officer Survey: The Quarterly Credit Conditions Data the Fed Uses to Track Lending Tightening — the SLOOS survey that tracks how changes in policy rates feed through to actual bank lending standards and credit availability.