What do the best corporate borrowers pay, and how stressed is that market?
Sovereign credit is one row per country per year. Corporate credit has its own curve and its own stress gauge, and both carry a lag that will quietly corrupt any spread you compute against Treasuries.
The corporate curve
/credit-risk/corporate/hqm-yields takes filter[tenor] (single or comma-separated; allowed values 1, 2, 3, 5, 7, 10, 15, 20, 25, 30), filter[type] (par, spot, or both), filter[from], filter[to], paging and fmt.
Rows carry series_id, tenor_years, yield_type, as_of_date, yield_value and source. The High Quality Market (HQM) curve is built by the US Treasury from high-grade corporate bonds and republished through FRED. Asking for the 10-year:
2026-06-01,par, seriesHQMCB10YRP— 5.182026-06-01,spot, seriesHQMCB10YR— 5.27
Here is the par-versus-spot distinction the Treasury endpoints never gave you, in the same dataset: 9 basis points apart at the same tenor on the same date. A par yield is the coupon a new bond would need to trade at 100; a spot (zero-coupon) rate discounts a single cash flow at that maturity. Choose one and record which.
The lag, and the spread it ruins
The meta reports frequency: "monthly", and every as_of_date is the first of a month. On 28 July 2026 the newest HQM observation is 2026-06-01 — nearly two months old. That is not a gap in the data; it is how the series is published.
Now compute a credit spread the right way and the wrong way.
Right. Treasury 10Y CMT on the same date, 1 June 2026, is 4.47. HQM 10Y par is 5.18.
5.18 − 4.47 = 0.71 percentage points, or 71 basis points.
Wrong. Take the newest HQM value (5.18, dated 1 June) and the newest Treasury value (4.65, dated 27 July) because both are "the latest".
5.18 − 4.65 = 0.53 pp, or 53 basis points.
The error is 18 basis points, a quarter of the true spread, and it comes entirely from a date mismatch between a monthly series and a daily one. Nothing refuses the join — but the warning is there if you read it, in the two date fields and in the frequency: "monthly" the HQM meta states outright. Always join credit and Treasury data on an explicit shared date, never on "most recent from each".
The tenor grids do not line up either
HQM publishes tenors 1, 2, 3, 5, 7, 10, 15, 20, 25 and 30. The Treasury CMT curve publishes 1Y, 2Y, 3Y, 5Y, 7Y, 10Y, 20Y and 30Y. There is no Treasury 15-year or 25-year point. A loop that computes a spread at every HQM tenor will either fail or, worse, match nothing and produce nulls at two of the ten. Interpolating the Treasury curve at 15 and 25 years is a legitimate answer; doing it accidentally is not.
The stress gauge
/credit-risk/corporate/cmdi takes only filter[from], filter[to], paging and fmt. Rows carry as_of_date, market_cmdi, ig_cmdi, hy_cmdi and source. Its meta names the dataset precisely — corporate_bond_market_distress_index — sourced from the New York Fed at weekly frequency.
That meta.dataset field is worth trusting over any acronym expansion you find elsewhere. Three recent observations:
as_of_date |
market_cmdi |
ig_cmdi |
hy_cmdi |
|---|---|---|---|
| 2026-06-19 | 0.13 | 0.23 | 0.06 |
| 2026-06-12 | 0.16 | 0.26 | 0.08 |
| 2026-06-05 | 0.16 | 0.23 | 0.08 |
These are index levels on a 0-to-1 scale, not percentages and not basis points. Investment grade reads higher than high yield in all three weeks, which is a property of how the index is constructed relative to each segment's own history rather than a claim that IG bonds are riskier than HY bonds.
And note the lag again: on 28 July 2026 the newest weekly observation was 19 June, more than five weeks old; re-checked in late August it was three and a half weeks behind. The lag is real and it is not constant, which is worse than a fixed one — a "current" dashboard built on this series is current as of some number of weeks ago, and only as_of_date next to the value tells you which.
Try it now
- Compute the HQM-to-Treasury 10-year spread both ways, inner-joined on date and "latest of each". The corporate leg is
/credit-risk/corporate/hqm-yields?filter[tenor]=10&filter[type]=par, read here from 1 June 2026 to its newest month:
The Treasury leg is /ust/yield-rates, once on 1 June 2026 and once on its newest date (the 10Y is data[-3]):
Measure the difference yourself. Then check which weekday the newest HQM as_of_date fell on: when the first of a month is a weekend, an inner join on it finds no Treasury row at all. Decide which of the two your code does, and what it does on those months.
2. List the HQM tenors that have no exact Treasury counterpart. Write down what your pipeline does at 15 and 25 years before it silently does something.
3. Here are the six newest weeks of /credit-risk/corporate/cmdi, each value with its as_of_date. Count the weeks between the newest as_of_date and the date beside the table's title. Any dashboard that shows the number without the date is telling that story in the present tense.