Appendix m — Data Card — U.S. Treasury (TreasuryDirect + Daily Yield Curve) and FINRA TRACE
Provider & what it is
Two providers on the same shelf: the risk-free curve and the corporate-bond tape.
- U.S. Department of the Treasury runs two things you will use. TreasuryDirect is the record of Treasury security auctions — every bill, note, bond, TIPS, and FRN sold, with auction date, high yield, bid-to-cover ratio, and CUSIP. The Daily Treasury Par Yield Curve is a separate, daily table of constant-maturity yields (1-month to 30-year), the canonical “risk-free rate today” series that anchors discounting and the macro event studies of Capstone 5.
- FINRA (Financial Industry Regulatory Authority) runs TRACE — the Trade Reporting and Compliance Engine, which since 2002 requires dealers to report secondary-market trades in corporate (now also agency/securitized) bonds. The public dissemination feed is the post-trade tape: price, size (capped), and time per transaction, on a delay. This is how a high-schooler can see that corporate bonds, unlike stocks, trade rarely and in lumps.
The reveal: the “interest rate” is not one number. It is a curve the Treasury republishes every afternoon, and the spread between a corporate bond’s TRACE price and the matching point on that curve is the credit risk premium you spend Week 3 onward learning to measure.
Coverage
- TreasuryDirect auctions: all marketable Treasury auctions; the API goes back to the late 1970s for some series, with consistent coverage from the late 1990s.
[CHECK]exact earliest date per security type. - Daily Treasury Yield Curve: business days from 1990 to present for the par yield curve; the constant-maturity (CMT) tenors are 1, 2, 3, 4, and 6 months and 1, 2, 3, 5, 7, 10, 20, and 30 years (some tenors begin later — the 20-year and 4-month were added in different decades).
[CHECK]tenor start dates. - TRACE public dissemination: corporate bonds from July 2002 (phased in by issue size, fully disseminated by 2005); agency debt and later securitized products added afterward. The free public view is end-of-day / delayed and trade-size-capped (large trades show “$5MM+” rather than the true size). The full, uncapped, real-time academic file is a separate licensed WRDS product, not the free feed.
Key identifiers
- CUSIP (9-character security id) is the spine for both Treasury auctions and TRACE bonds. A bond’s CUSIP links its TRACE trades to its issuance terms.
- For yields, the join key is (date, tenor) — there is no CUSIP, because the par curve is a synthetic constant-maturity construct, not a tradable security.
- TRACE adds a bond symbol and the trade timestamp; the issuer ties back to a parent company via a separate mapping (you will need a CUSIP-to-issuer crosswalk, which the free feed does not give you).
Access path
- Treasury Fiscal Data API (auctions, debt, rates): base
https://api.fiscaldata.treasury.gov/services/api/fiscal_service/. JSON, paginated, no key required, generous rate limits. Auctions live under an/v1/accounting/od/auctions_querystyle endpoint.[CHECK]exact endpoint slug for your pinned vintage. - Daily Treasury Yield Curve: published as XML/CSV at
https://home.treasury.gov/...and also queryable through the Fiscal Data API; the most reproducible route for the camp ispandas_datareaderagainst FRED (series likeDGS10,DGS2,DGS3MO), which mirrors the Treasury CMT series and is what nb appears to use for the macro labs. No key for the CSV; a free FRED key for the FRED route, via env var${FRED_API_KEY}. - FINRA TRACE public feed: the human-facing tool is the FINRA Fixed Income / Market Data site (
finra-markets.morningstar.com-style pages, migrating to FINRA’s own portal). There is no clean, free, programmatic bulk API for the public delayed tape; you query a bond at a time, or you use the licensed WRDS Enhanced TRACE file on GMU infrastructure for any real panel.[CHECK]current public-feed URL after FINRA’s site migration.
import requests
BASE = "https://api.fiscaldata.treasury.gov/services/api/fiscal_service"
# Recent Treasury auctions, newest first (public, no key):
r = requests.get(f"{BASE}/v1/accounting/od/auctions_query",
params={"sort": "-auction_date", "page[size]": 10}, timeout=60)
auctions = r.json()["data"] # list of dicts; see schema sketch belowLicense & note
Both are free and public. Treasury data is U.S. government work, effectively public domain — cite it, no permission needed. FINRA’s public dissemination tape is free to view under SEC-approved rules, but bulk TRACE redistribution is restricted, and the uncapped Academic/Enhanced TRACE file carries a WRDS/FINRA license. Rule of thumb: the delayed, capped public view is free to quote; any panel of corporate trades you regress on should come from the licensed WRDS file on Hopper (CONVENTIONS §5).
Gotchas
- The yield curve is par yields, not spot/zero rates. For multi-year discounting you bootstrap a zero curve from the par curve — quoting the 10-year par yield as if it were the 10-year spot rate is a beginner error.
- TRACE size is capped. The public feed shows “1MM+” or “5MM+” for large trades, so you cannot sum reported volume and get true volume. Do not compute “total traded” from the free feed.
- TRACE is delayed and bonds barely trade. Most bonds go days without a print; a “stale” last price is the norm, not a data error. This illiquidity is the lesson, not a nuisance.
- CUSIP, not ticker. A company has one stock ticker but dozens of bond CUSIPs (different maturities/coupons). You must aggregate to the issuer yourself.
- CMT tenors changed over time. The 20-year was discontinued (2002) then reintroduced (2020); the 4-month was added in 2022. A long time series has structural gaps —
[CHECK]before charting a single tenor across decades.
First 10 rows (illustrative schema sketch — not real values)
TreasuryDirect auctions (Fiscal Data API), shape only:
| cusip | security_type | auction_date | maturity_date | high_yield | bid_to_cover_ratio | offering_amt |
|---|---|---|---|---|---|---|
| 912797XX1 | Bill | 2026-05-21 | 2026-08-20 | 5.210 | 2.84 | 80000000000 |
| 91282CXX3 | Note | 2026-05-14 | 2036-05-15 | 4.382 | 2.51 | 42000000000 |
| … | … | … | … | … | … | … |
Daily Treasury par yield curve (one row per date), shape only:
| date | dgs1mo | dgs3mo | dgs2 | dgs5 | dgs10 | dgs30 |
|---|---|---|---|---|---|---|
| 2026-05-26 | 5.31 | 5.22 | 4.61 | 4.20 | 4.39 | 4.71 |
| … | … | … | … | … | … | … |
FINRA TRACE public print (per trade, size capped), shape only:
| trade_datetime | cusip | symbol | price | yield | size_indicator |
|---|---|---|---|---|---|
| 2026-05-26 14:31:07 | 037833XX2 | AAPL4.xx | 98.412 | 4.55 | 1MM+ |
| … | … | … | … | … | … |
Which chapter / lab / capstone uses it
- Daily Treasury Yield Curve is the risk-free anchor for Capstone 5 (FRED Macro Event Study) and any discounting/term-premium discussion; the FRED
DGSxxroute is the reproducible path. - TreasuryDirect auctions support fixed-income worked examples and the bid-to-cover “demand for safety” intuition behind the risk-free rate.
- FINRA TRACE is the public window onto corporate-bond illiquidity, a contrast to equity markets (Week 2 returns work) and a feed into the credit-spread framing that connects to the municipal-market thread (
msrb-emma.md) and Mentor Session 5. For any panel, swap the capped public feed for the licensed WRDS Enhanced TRACE file on GMU infrastructure.