NY Fed Rates
Benchmark rates published by the New York Fed, including SOFR and the other repo and Treasury reference rates.
nyfed_rates — the dataset name to pass to the Obscura API.
What one row means
One published value of a single NY Fed overnight reference rate (SOFR, EFFR, OBFR, TGCR, BGCR, or the SOFR Averages & Index) for a single trading/effective day — the headline rate plus whichever dispersion statistics its methodology publishes and the total transaction volume underlying it, as returned by the `/api/rates/all/search.json` endpoint. One row per rate type per day. The rates have been recalculated three times without the back history ever being restated, so every row also carries the `regime` that produced it; see `entities::nyfed_rate::REGIMES`.
One row per (rate_type, occurred_on).
Point-in-time availability
Every Obscura dataset carries available_date: the calendar day the publisher made the row
available, day-of, with no session rounding. It is the one column a backtest filters on, and it means the
same thing on every dataset in the catalog.
For nyfed_rates: release_calendar, PER RATE TYPE. The five daily reference rates publish ~08:00 ET on the next business day (T+1); the SOFR Averages & Index (SOFRAI) publish ~08:00 ET on the day they are dated (T+0). The business-day calendar also differs by series: EFFR/OBFR are unsecured and settle over Fedwire, which keeps the US FEDERAL calendar; SOFR/TGCR/BGCR/SOFRAI are backed by Treasury repo, which follows SIFMA's US government-securities calendar and CLOSES on Good Friday when the federal one does not. Materialized by the collector (`tasks::nyfed::RateType`).
Refresh cadence
Obscura refreshes nyfed_rates every weekday — the most frequent scheduled job that re-collects or re-exports it. This is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when a row became public is recorded per row in available_date.
Schema — 21 columns
The full public column list for nyfed_rates, with the meaning of every field. The same
schema is served unauthenticated at https://api.obscura.trade/v1/catalog/nyfed_rates.
| Column | Type | Description |
|---|---|---|
| rate_type | text · not null | Reference rate series code from the source JSON's `type` field: one of EFFR, OBFR, SOFR, TGCR, BGCR, or SOFRAI (the SOFR Averages & Index, which carries no `percent_rate` but does carry the compounded averages and the index level). Each series has its OWN methodology history — see `regime` — so this column and `regime` are read together. |
| occurred_on | date · not null | The trading/effective day the rate applies to, from the API's `effectiveDate` field — the natural event date: the overnight market activity the percentiles/volume summarize actually occurred on this calendar day. Composite primary key with rate_type. |
| available_date | date | Public-availability date, materialized by the collector PER RATE TYPE: the five daily reference rates are `occurred_on` + 1 business day (they publish ~08:00 ET on T+1), while SOFRAI is `occurred_on` itself (the SOFR Averages & Index publish ~08:00 ET the same day). The business-day calendar is the producing market's: FEDERAL for the unsecured rates (EFFR/OBFR, which settle over Fedwire and DO publish on Good Friday), and SIFMA's US government-securities calendar for the repo-backed ones (SOFR/TGCR/BGCR/SOFRAI, which do not). NULL only for a series the collector does not yet know a publication schedule for. The point-in-time column to filter/join on. |
| regime | text · not null | WHICH METHODOLOGY PRODUCED THIS ROW — the discriminator that stops a consumer splicing two definitions of `percent_rate` together. Never null: one of the names declared in `entities::nyfed_rate::REGIMES` (materialized by the collector from `(rate_type, occurred_on)`), or `undeclared` for a series the collector does not yet know. The NY Fed has changed the calculation of these rates three times and revised the back history NONE of those times, so `percent_rate` is not one series: EFFR before 2016-03-01 is a volume-weighted MEAN of brokers' data and after it a volume-weighted MEDIAN of FR 2420 transactions. Always group or filter by this column before comparing rates across a long window. |
| percent_rate | double precision | The headline published rate for this series/day, in percent per annum (e.g. 3.62 = 3.62%), from the source's `percentRate` field. This is the number quoted as "the SOFR"/"the EFFR"/etc. for the day. |
| percent_rate_1 | double precision | 1st percentile of the underlying transaction-rate distribution for this series/day, in percent per annum, from the source's `percentPercentile1` field — the low end of the traded-rate spread. |
| percent_rate_25 | double precision | 25th percentile of the underlying transaction-rate distribution, in percent per annum, from the source's `percentPercentile25` field. |
| percent_rate_75 | double precision | 75th percentile of the underlying transaction-rate distribution, in percent per annum, from the source's `percentPercentile75` field. |
| percent_rate_99 | double precision | 99th percentile of the underlying transaction-rate distribution, in percent per annum, from the source's `percentPercentile99` field — the high end of the traded-rate spread, useful for gauging market stress/dispersion on the day. |
| volume_billions | double precision | Total dollar volume of transactions underlying this rate calculation, in USD billions, from the source's `volumeInBillions` field. Reflects the depth/liquidity of the overnight market that produced the rate. Published only from the FR 2420 / transaction-based regimes onward; null for EFFR before 2016-03-01, where the brokers' collection carried no volume at all. |
| intra_day_low | double precision | Lowest rate transacted during the day, in percent per annum, from the source's `intraDayLow` field — the OLD-REGIME dispersion statistic, present only on EFFR before 2016-03-01 (regimes `effr_brokered_mean_*`). The NY Fed discontinued the low, high and standard deviation when the percentiles began; this is not a percentile and is not comparable with `percent_rate_1`, which is a volume-weighted quantile rather than an extremum. |
| intra_day_high | double precision | Highest rate transacted during the day, in percent per annum, from the source's `intraDayHigh` field. Old-regime only (EFFR before 2016-03-01); the counterpart of `intra_day_low`, and likewise an extremum rather than the `percent_rate_99` volume-weighted quantile. |
| std_deviation | double precision | Standard deviation of the day's transacted rates, in percentage points, from the source's `stdDeviation` field. Old-regime only (EFFR before 2016-03-01) — the brokers'-survey era's single dispersion measure, replaced from 2016-03-01 by the 1st/25th/75th/99th volume-weighted percentiles. |
| footnote_id | integer | The NY Fed's own publication footnote for this observation, from the source's `footnoteId` field; null on the ordinary ~99.9% of rows. `1` marks an unsecured rate published on REDUCED VOLUME (missing FR 2420 reporters); `2` marks a Treasury repo rate calculated from the primary dealer survey CONTINGENCY data because a market segment's production data was unavailable — on which the NY Fed suppresses the percentiles (the source returns the string "NA", stored here as null). A data-quality flag on individual days, NOT a methodology change: unlike `regime` it says nothing about what the column means, only how well this one observation was measured. |
| target_rate_from | double precision | FOMC federal-funds target, in percent per annum, from the source's `targetRateFrom` field. Present on EFFR records only. A distinct policy signal (where the Fed has set the funds target) — not derivable from the reference rates; EFFR-vs-target is a watched spread. **ITS MEANING CHANGES AT 2008-12-16** (regime `effr_brokered_mean_point_target` → `effr_brokered_mean_target_range`): before that day the FOMC set a single POINT target and this column IS that target, with `target_rate_to` null; from 2008-12-16 the FOMC set a target RANGE and this column is only the band's LOWER BOUND. Computing a band midpoint, or differencing the rate against this column, across that date compares two different quantities — group by `regime` first. |
| target_rate_to | double precision | FOMC federal-funds target band UPPER bound, in percent per annum, from the source's `targetRateTo` field. Present on EFFR records only, and only from 2008-12-16, when the FOMC moved from a point target to a range. Its absence before that date is not a gap in coverage — there was no upper bound to publish; pairs with `target_rate_from` to give the funds target band. |
| average_30day | double precision | SOFR 30-day compounded average, in percent per annum, from the source's `average30day` field. Present on the SOFRAI (SOFR Averages & Index) record only. |
| average_90day | double precision | SOFR 90-day compounded average, in percent per annum, from the source's `average90day` field. Present on the SOFRAI record only. |
| average_180day | double precision | SOFR 180-day compounded average, in percent per annum, from the source's `average180day` field. Present on the SOFRAI record only. |
| sofr_index | double precision | Published SOFR Index level, from the source's `index` field — the cumulative-compounding index used directly in loan/floating-rate contracts. Present on the SOFRAI record only. |
| revision_indicator | text | Flag marking a revised observation, from the source's `revisionIndicator` field (normally an empty string, stored as NULL when empty). Relevant to point-in-time correctness / data-quality auditing. |
Access nyfed_rates
Two delivery paths, one identifier. Both require an Obscura account and an active subscription; the catalog entry and the schema above are public.
import obscura
client = obscura.Client("obs_live_…")
df = client.query(
dataset="nyfed_rates",
start="2024-01-01",
)
Create a free account Browse all 95 datasets
Frequently asked questions
What is in the nyfed_rates dataset?
Benchmark rates published by the New York Fed, including SOFR and the other repo and Treasury reference rates. One published value of a single NY Fed overnight reference rate (SOFR, EFFR, OBFR, TGCR, BGCR, or the SOFR Averages & Index) for a single trading/effective day — the headline rate plus whichever dispersion statistics its methodology publishes and the total transaction volume underlying it, as returned by the `/api/rates/all/search.json` endpoint. One row per rate type per day. The rates have been recalculated three times without the back history ever being restated, so every row also carries the `regime` that produced it; see `entities::nyfed_rate::REGIMES`.
How do I avoid look-ahead bias with nyfed_rates?
Filter on nyfed_rates.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — release_calendar, PER RATE TYPE. The five daily reference rates publish ~08:00 ET on the next business day (T+1); the SOFR Averages & Index (SOFRAI) publish ~08:00 ET on the day they are dated (T+0). The business-day calendar also differs by series: EFFR/OBFR are unsecured and settle over Fedwire, which keeps the US FEDERAL calendar; SOFR/TGCR/BGCR/SOFRAI are backed by Treasury repo, which follows SIFMA's US government-securities calendar and CLOSES on Good Friday when the federal one does not. Materialized by the collector (`tasks::nyfed::RateType`). A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.
In what formats can I get nyfed_rates?
As a Parquet bulk export (POST https://api.obscura.trade/v1/download) or as JSON from the typed query API (POST https://api.obscura.trade/v1/query), both with dataset="nyfed_rates". The column schema is public at https://api.obscura.trade/v1/catalog/nyfed_rates.
How often is nyfed_rates updated?
Obscura refreshes nyfed_rates on a every weekday schedule — that is the most frequent scheduled job that re-collects or re-exports the table. It is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when the publisher makes a row available is described by the availability rule above, and is recorded per row in available_date.