What does a funding-stress series actually measure?
A spread is a subtraction. That sounds too simple to need an endpoint, except that the interesting part is which subtraction — and this endpoint is unusual in shipping the formula alongside the number.
The endpoint
GET /spreads/funding-stress takes filter[code], filter[from], filter[to] and fmt. That is the complete list: there is no paging. meta carries only total, and links comes back as an empty array rather than an object with a next key — so client code that assumes every endpoint in this family pages alike will break here.
Each row carries date, code, value_bps, formula, leg_a, leg_b, leg_a_rate and leg_b_rate.
Six spreads, and what each one is asking
Querying 20 to 27 July 2026 returns 36 rows: six business days times six codes.
| Code | formula |
|---|---|
| EFFR_SOFR | EFFR − SOFR |
| OBFR_EFFR | OBFR − EFFR |
| TGCR_BGCR | TGCR − BGCR |
| SOFR_TARGET_LOWER | SOFR − FED_TARGET_LOWER |
| EFFR_TARGET_MID | EFFR − (FED_TARGET_LOWER + FED_TARGET_UPPER) / 2 |
| TARGET_UPPER_SOFR | FED_TARGET_UPPER − SOFR |
Read that column and the design becomes clear. Each spread pairs two of the reference rates from the previous lesson, or a market rate against a policy rate. EFFR − SOFR is unsecured minus secured: the price of lending without collateral against the price of lending against it, which mixes credit, collateral supply, balance-sheet cost and who is allowed to trade in each market. Its sign is not fixed — it prints negative three times in the week below. SOFR − FED_TARGET_LOWER asks where the market is printing inside the band the Fed drew.
Verify one, and you can verify all of them
Take 27 July 2026, code SOFR_TARGET_LOWER: leg_a_rate 3.64, leg_b_rate 3.50, value_bps 14. And 3.64 − 3.50 = 0.14 percentage points = 14 basis points, exactly. Because leg_a and leg_b name the legs, you can pull both yourself from /rates/reference-rates and /rates/policy-rates.
The EFFR_TARGET_MID row is the neatest case: leg_a_rate 3.63, leg_b_rate 3.625, value_bps 0.5. The endpoint computed the Fed midpoint — a number the Fed never publishes — and the result is half a basis point, so value_bps is not an integer.
Signs flip, and only the formula tells you which way
Over the week of 20 July 2026, EFFR_SOFR went +6, +2, +1, −1 basis points as SOFR rose from 3.57 to 3.64 while EFFR sat unmoved at 3.63. Seven basis points of range and a sign change in four sessions, driven entirely by one leg.
Over the same week TARGET_UPPER_SOFR fell from 18 bps to 11 while SOFR_TARGET_LOWER rose from 7 to 14. Those two are mirror images by construction: SOFR moved up inside a band that did not move, so its distance from the floor grew by exactly what its distance from the ceiling lost.
A spread with no sign convention attached is meaningless. Because formula ships in the row, you never have to guess — and any spread you compute yourself should carry the same string next to it.
What the series looks like when it is not quiet
Every number so far has been single or low double digits of basis points, because mid-2026 was uneventful. Query 16 to 18 September 2019 and the scale changes:
| Date | leg_a_rate (SOFR) |
leg_b_rate (floor) |
value_bps |
|---|---|---|---|
| 2019-09-16 | 2.43 | 2.00 | 43 |
| 2019-09-17 | 5.25 | 2.00 | 325 |
| 2019-09-18 | 2.55 | 2.00 | 55 |
On one day the secured overnight rate printed 5.25% against a policy floor of 2.00% — 325 basis points above it, and outside a target range whose ceiling was 2.25%. EFFR_SOFR for the same day reads −295 bps (EFFR 2.30 against SOFR 5.25), against −18 the day before. Unsecured lending was calm; the repo market was not.
That is the shape a funding-stress series exists to make visible: roughly eight times the surrounding level, resolved within two sessions. It is also a scale check on your own axes, because a chart auto-scaled to a quiet week will not survive a day like that.
What "stress" means here, carefully
These series describe the mechanics of overnight funding: whether unsecured lending costs more than secured, whether repo rates are drifting toward the top of the policy band, whether two measures of the same market have parted company. Saying a series measures a spread between two named legs is a description; treating any level of it as a signal to act is neither supported by this data nor within this course's scope.
Try it now
- Here is
/spreads/funding-stress?filter[from]=2026-07-20&filter[to]=2026-07-27. Itsmeta.totalis every row there is; the same response, read on 28 September 2026, ended in"links": [], an empty array with nonextkey. Check thatmeta.totalequals six codes times the business days in the window, which is how you know nothing is waiting on a second page.
- Take the
EFFR_SOFRrow above. Here are its two legs for the same date, from/rates/reference-rates, the endpoint that publishes them. Reproducevalue_bpsby hand, then do the same for theSOFR_TARGET_LOWERrow. Remember the factor of 100 between percentage points and basis points.