Federal Reserve Bank of New York
NY Fed Markets Data — SOFR, EFFR and the repo rates, published by the desk that computes them
When the question is about money-market plumbing — where overnight rates actually printed, volumes, percentiles — or you need SOFR the day it is published rather than after FRED's mirror.
Reach for it when…
When the question is about money-market plumbing — where overnight rates actually printed, volumes, percentiles — or you need SOFR the day it is published rather than after FRED's mirror.
Not for: Term rates and the yield curve (Treasury, FRED), policy decisions (the FOMC statement), anything before 2016 (SOFR starts 2018, with an indicative history).
Units, revisions, traps
Units. Percent, annualised, on US business days; volumes in billions of dollars. Percentiles are of the underlying transactions.
Revisions. Rates are occasionally republished the same day if a data error is found; the API flags revised prints.
- SOFR is secured and spikes at quarter-ends and tax dates — a spike is plumbing, not policy.
- EFFR is the rate the Fed targets a range for; the target range itself is not in this API (use FRED DFEDTARU).
- The 'last N' endpoints count business days.
Classic mistake: Reading a month-end SOFR spike as a rate hike.
Three recipes
- Recipe 1 · SOFR, last 30 business days
- Recipe 2 · EFFR against the target range
- Recipe 3 · Repo volumes: how much money moves overnight
Each recipe: Python · Excel · Sheets, with how to read the result. Python recipes run under pandas; recipe 1 is re-run by the weekly check where the source allows it.
How to use it in your own work
Copy the snippet, change the series id, read the result the way the footer says. Replace YOUR_…_KEY with your own key where one is needed.
Recipe 1SOFR, last 30 business days
import requests, pandas as pd
u = "https://markets.newyorkfed.org/api/rates/secured/sofr/last/30.json"
df = pd.DataFrame(requests.get(u, timeout=30).json()["refRates"])
s = df.set_index(pd.to_datetime(df.effectiveDate))["percentRate"].sort_index()
print(s.tail(10))- Data → From Web → https://markets.newyorkfed.org/api/rates/secured/sofr/last/30.csv → Load.
=IMPORTDATA("https://markets.newyorkfed.org/api/rates/secured/sofr/last/30.csv")Recipe 2EFFR against the target range
# effective fed funds (NY Fed) next to the target ceiling (FRED)
import requests, pandas as pd
e = pd.DataFrame(requests.get("https://markets.newyorkfed.org/api/rates/unsecured/effr/last/60.json", timeout=30).json()["refRates"])
effr = e.set_index(pd.to_datetime(e.effectiveDate))["percentRate"].sort_index()
top = pd.read_csv("https://fred.stlouisfed.org/graph/fredgraph.csv?id=DFEDTARU", index_col="observation_date", parse_dates=True, na_values=".")["DFEDTARU"]
print(pd.concat([effr, top], axis=1).dropna().tail())- From Web with the EFFR CSV URL (…/effr/last/60.csv) and FRED's DFEDTARU CSV; align by date.
=IMPORTDATA for both CSVs and a VLOOKUP by date.Recipe 3Repo volumes: how much money moves overnight
import requests, pandas as pd
u = "https://markets.newyorkfed.org/api/rates/secured/sofr/last/250.json"
df = pd.DataFrame(requests.get(u, timeout=30).json()["refRates"])
df["date"] = pd.to_datetime(df.effectiveDate)
print(df.set_index("date")[["percentRate", "volumeInBillions"]].resample("ME").mean().tail(6).round(2))- Same CSV URL with 250; pivot by month.
=IMPORTDATA on the CSV URL and a pivot table.Series → question map
The ids we use from NY Fed Markets Data, each with the question it answers. The catalog's compare view reads the concept tags behind these rows.
| Series | Answers | Region | Concept |
|---|---|---|---|
| SOFR | What is the overnight secured rate? | United States | sofr |
| EFFR | Where did fed funds actually trade? | United States | policy_rate |
| OBFR | Overnight bank funding rate | United States | sofr |
Compare with
Same question, different source: FRED, US Treasury data, HKMA API. The compare view lines up coverage, frequency, history and access side by side and lists what the combination makes possible.
Open compare: NY Fed Markets Data · FRED · US Treasury data →
Questions readers ask
SOFR or EFFR?
SOFR is secured (repo against Treasuries) and is now the benchmark for loans and swaps; EFFR is the unsecured interbank rate the Fed's target range is written for.
Why does SOFR jump at month-end?
Balance-sheet reporting dates make dealers pull back from repo; the rate spikes for a day or two and returns. It is not a policy signal.
Is there a CSV?
Yes — replace .json with .csv in any endpoint.
From the paper
Educational only — we explain, we never advise · snippet licence: public domain · corrections to [email protected], fixed within a day and logged in the changelog.