The EODHD Interest Rates API provides post-LIBOR risk-free reference rates and central-bank policy rates for the US dollar, sterling, and euro markets. Seventeen series are drawn directly from official sources — the New York Fed, FRED, the Bank of England, and the European Central Bank — and refreshed every working day on a T+1 basis.
The API is split into three endpoints: reference rates (the market-determined risk-free benchmarks that replaced LIBOR, such as SOFR, SONIA, and the euro short-term rate), policy rates (the rates central banks set directly, such as the Fed funds target range and the ECB deposit facility rate), and funding-stress spreads (six daily money-market spreads in basis points, derived from the first two). All share the same authentication and JSON response envelope.
Risk-Free Reference Rates
The Risk-Free Reference Rates endpoint serves the post-LIBOR benchmark family — overnight risk-free rates and their official compounded derivatives across USD, GBP, and EUR markets. These are the rates adopted by central banks and trade associations to replace LIBOR. Eleven series are exposed, sourced from the New York Fed, FRED, the Bank of England, and the European Central Bank.
API Endpoint
https://eodhd.com/api/rates/reference-rates?api_token=YOUR_TOKEN
Method: GET Auth: api_token query parameter Cost: 1 API call per request Pagination: offset / limit (default 20, max 100) Response format: JSON envelope with data, meta, and links
Query Parameters
| Parameter | Required | Description |
|---|---|---|
| api_token | Yes | Your EODHD API token |
| filter[code] | No | Restrict to one or more series codes (see Reference Rate Codes below) |
| filter[currency] | No | Restrict to a single currency: USD, GBP, or EUR |
| filter[from] | No | Start date, YYYY-MM-DD. Inclusive |
| filter[to] | No | End date, YYYY-MM-DD. Inclusive. Must be on or after filter[from] |
| page[limit] | No | Rows per page, 1 to 100. Default 20 |
| page[offset] | No | Number of rows to skip. Default 0 |
Reference Rate Codes
| Code | Description | Currency | Source |
|---|---|---|---|
| SOFR | Secured Overnight Financing Rate, overnight | USD | NY Fed |
| EFFR | Effective Federal Funds Rate, overnight | USD | NY Fed |
| OBFR | Overnight Bank Funding Rate, overnight | USD | NY Fed |
| TGCR | Tri-Party General Collateral Rate, overnight repo | USD | NY Fed |
| BGCR | Broad General Collateral Rate, overnight repo | USD | NY Fed |
| SOFR30D | 30-day compounded SOFR average | USD | FRED |
| SOFR90D | 90-day compounded SOFR average | USD | FRED |
| SOFR180D | 180-day compounded SOFR average | USD | FRED |
| SOFRINDEX | SOFR compounded index from inception | USD | FRED |
| SONIA | Sterling Overnight Index Average, overnight | GBP | Bank of England |
| ESTR | Euro Short-Term Rate, overnight | EUR | European Central Bank |
Request Example
https://eodhd.com/api/rates/reference-rates?api_token=YOUR_TOKEN&filter[code]=SOFR&filter[from]=2025-01-01&filter[to]=2025-06-01
curl --location "https://eodhd.com/api/rates/reference-rates?api_token=YOUR_TOKEN&filter[code]=SOFR&filter[from]=2025-01-01&filter[to]=2025-06-01&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/rates/reference-rates?api_token=YOUR_TOKEN&filter[code]=SOFR&filter[from]=2025-01-01&filter[to]=2025-06-01&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/rates/reference-rates?api_token=YOUR_TOKEN&filter[code]=SOFR&filter[from]=2025-01-01&filter[to]=2025-06-01&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/rates/reference-rates?api_token=YOUR_TOKEN&filter[code]=SOFR&filter[from]=2025-01-01&filter[to]=2025-06-01&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)
Response Format
The response is a JSON object with three top-level keys: data (the array of observations), meta (total row count and the active page window), and links (pagination links). Each observation carries the fields below. Rows sourced from the NY Fed additionally include intraday distribution detail.
{
"data": [
{
"date": "2026-06-08",
"code": "SOFR",
"currency": "USD",
"rate_type": "overnight",
"rate": 3.63,
"source": "NY_FED",
"source_series_id": "secured/sofr",
"percentiles": { "p1": 3.57, "p25": 3.61, "p75": 3.68, "p99": 3.71 },
"volume_billion_usd": 3115
}
],
"meta": { "total": 226, "page": { "offset": 0, "limit": 20 } },
"links": { "next": "https://eodhd.com/api/rates/reference-rates?page[offset]=20&page[limit]=20" }
}
| Field | Type | Description |
|---|---|---|
| date | string (date) | Observation date, YYYY-MM-DD |
| code | string | Series code (see Reference Rate Codes) |
| currency | string | Currency of the rate: USD, GBP, or EUR |
| rate_type | string | One of overnight, average, or index |
| rate | number | Rate value in percent |
| source | string | Upstream provider: NY_FED, FRED, ECB, or BOE |
| source_series_id | string | Identifier of the series at the upstream source |
| percentiles | object | NY Fed rows only. Intraday rate distribution: p1, p25, p75, p99 |
| volume_billion_usd | number | NY Fed rows only. Transaction volume underpinning the rate, in USD billions |
Central Bank Policy Rates
The Central Bank Policy Rates endpoint serves the official rates set by major central banks — the rates the monetary authority controls directly, as distinct from the market-determined reference rates above. Six series are exposed across the Federal Reserve, the European Central Bank, and the Bank of England. It shares the same request shape, authentication, and response envelope as the reference rates endpoint.
API Endpoint
https://eodhd.com/api/rates/policy-rates?api_token=YOUR_TOKEN
Method: GET Auth: api_token query parameter Cost: 1 API call per request Pagination: offset / limit (default 20, max 100) Response format: JSON envelope with data, meta, and links
Query Parameters
| Parameter | Required | Description |
|---|---|---|
| api_token | Yes | Your EODHD API token |
| filter[code] | No | Restrict to one or more policy rate codes (see Policy Rate Codes below) |
| filter[country] | No | Restrict to a single jurisdiction: US, EU, or GB |
| filter[central_bank] | No | Restrict to a single central bank: FED, ECB, or BOE |
| filter[from] | No | Start date, YYYY-MM-DD. Inclusive |
| filter[to] | No | End date, YYYY-MM-DD. Inclusive. Must be on or after filter[from] |
| page[limit] | No | Rows per page, 1 to 100. Default 20 |
| page[offset] | No | Number of rows to skip. Default 0 |
Policy Rate Codes
| Code | Description | Central Bank | Source |
|---|---|---|---|
| FED_TARGET_LOWER | Federal funds target range, lower bound | FED | FRED |
| FED_TARGET_UPPER | Federal funds target range, upper bound | FED | FRED |
| ECB_DFR | ECB Deposit Facility Rate | ECB | European Central Bank |
| ECB_MRO | ECB Main Refinancing Operations rate | ECB | European Central Bank |
| ECB_MLF | ECB Marginal Lending Facility rate | ECB | European Central Bank |
| BOE_BANK_RATE | Bank of England official Bank Rate | BOE | Bank of England |
Request Example
https://eodhd.com/api/rates/policy-rates?api_token=YOUR_TOKEN&filter[central_bank]=ECB&filter[from]=2025-01-01
curl --location "https://eodhd.com/api/rates/policy-rates?api_token=YOUR_TOKEN&filter[central_bank]=ECB&filter[from]=2025-01-01&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/rates/policy-rates?api_token=YOUR_TOKEN&filter[central_bank]=ECB&filter[from]=2025-01-01&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/rates/policy-rates?api_token=YOUR_TOKEN&filter[central_bank]=ECB&filter[from]=2025-01-01&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/rates/policy-rates?api_token=YOUR_TOKEN&filter[central_bank]=ECB&filter[from]=2025-01-01&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)
Response Format
The response uses the same data / meta / links envelope as the reference rates endpoint. Each observation carries the fields below.
{
"data": [
{
"date": "2026-06-10",
"code": "ECB_DFR",
"country": "EU",
"central_bank": "ECB",
"rate": 2.0,
"source": "ECB",
"source_series_id": "FM/D.U2.EUR.4F.KR.DFR.LEV"
}
],
"meta": { "total": 226, "page": { "offset": 0, "limit": 20 } },
"links": { "next": "https://eodhd.com/api/rates/policy-rates?page[offset]=20&page[limit]=20" }
}
| Field | Type | Description |
|---|---|---|
| date | string (date) | Observation date, YYYY-MM-DD |
| code | string | Policy rate code (see Policy Rate Codes) |
| country | string | Jurisdiction: US, EU, or GB |
| central_bank | string | Central bank: FED, ECB, or BOE |
| rate | number | Policy rate value in percent |
| source | string | Upstream provider: FRED, ECB, or BOE |
| source_series_id | string | Identifier of the series at the upstream source |
Funding Stress Spreads
The Funding Stress Spreads endpoint tracks dislocations in the US dollar money market. The six spreads are derived on the fly from the reference and policy rates above and returned in basis points — a compact read on how overnight funding benchmarks sit relative to each other and to the Federal Reserve target range. It shares the same authentication and JSON response envelope as the rates endpoints.
API Endpoint
https://eodhd.com/api/spreads/funding-stress?api_token=YOUR_TOKEN
Method: GET Auth: api_token query parameter Cost: 1 API call per request Pagination: not supported Response format: JSON envelope with data, meta, and links
Query Parameters
| Parameter | Required | Description |
|---|---|---|
| api_token | Yes | Your EODHD API token |
| filter[code] | No | Restrict to one or more spread codes (see Funding Stress Spread Codes below) |
| filter[from] | No | Start date, YYYY-MM-DD. Inclusive. Defaults to 30 days before the latest available date |
| filter[to] | No | End date, YYYY-MM-DD. Inclusive. Defaults to the latest available date |
Funding Stress Spread Codes
| Code | Description | Formula |
|---|---|---|
| EFFR_SOFR | Effective Federal Funds Rate minus SOFR | EFFR – SOFR |
| OBFR_EFFR | Overnight Bank Funding Rate minus Effective Federal Funds Rate | OBFR – EFFR |
| TGCR_BGCR | Tri-Party General Collateral Rate minus Broad General Collateral Rate | TGCR – BGCR |
| SOFR_TARGET_LOWER | SOFR minus the lower bound of the Federal Reserve target range | SOFR – FED_TARGET_LOWER |
| EFFR_TARGET_MID | Effective Federal Funds Rate minus the midpoint of the Federal Reserve target range | EFFR – (FED_TARGET_LOWER + FED_TARGET_UPPER) / 2 |
| TARGET_UPPER_SOFR | Upper bound of the Federal Reserve target range minus SOFR | FED_TARGET_UPPER – SOFR |
Request Example
https://eodhd.com/api/spreads/funding-stress?api_token=YOUR_TOKEN&filter[code]=EFFR_SOFR,OBFR_EFFR&filter[from]=2026-05-01&filter[to]=2026-05-31
curl --location "https://eodhd.com/api/spreads/funding-stress?api_token=YOUR_TOKEN&filter[code]=EFFR_SOFR,OBFR_EFFR&filter[from]=2026-05-01&filter[to]=2026-05-31&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/spreads/funding-stress?api_token=YOUR_TOKEN&filter[code]=EFFR_SOFR,OBFR_EFFR&filter[from]=2026-05-01&filter[to]=2026-05-31&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/spreads/funding-stress?api_token=YOUR_TOKEN&filter[code]=EFFR_SOFR,OBFR_EFFR&filter[from]=2026-05-01&filter[to]=2026-05-31&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/spreads/funding-stress?api_token=YOUR_TOKEN&filter[code]=EFFR_SOFR,OBFR_EFFR&filter[from]=2026-05-01&filter[to]=2026-05-31&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)
Response Format
The response uses the same data / meta / links envelope. Each observation carries the fields below. This endpoint does not paginate, so links is an empty array.
{
"data": [
{
"date": "2026-06-22",
"code": "EFFR_SOFR",
"value_bps": 2,
"formula": "EFFR - SOFR",
"leg_a": "EFFR",
"leg_b": "SOFR",
"leg_a_rate": 3.63,
"leg_b_rate": 3.61
},
{
"date": "2026-06-22",
"code": "SOFR_TARGET_LOWER",
"value_bps": 11,
"formula": "SOFR - FED_TARGET_LOWER",
"leg_a": "SOFR",
"leg_b": "FED_TARGET_LOWER",
"leg_a_rate": 3.61,
"leg_b_rate": 3.5
}
],
"meta": { "total": 6 },
"links": []
}
| Field | Type | Description |
|---|---|---|
| date | string (date) | Observation date, YYYY-MM-DD |
| code | string | Spread code (see Funding Stress Spread Codes) |
| value_bps | number | Spread value in basis points |
| formula | string | Formula used to compute the spread |
| leg_a | string | First rate in the spread |
| leg_b | string | Second rate, subtracted from the first |
| leg_a_rate | number | Rate of the first leg on that date, in percent |
| leg_b_rate | number | Rate of the second leg on that date, in percent |
Response Codes
All three endpoints return the same set of HTTP status codes.
| Code | Meaning |
|---|---|
| 200 | Success. Response body carries data, meta, and links |
| 401 | Missing or invalid api_token |
| 403 | Token is valid but the plan does not include access to these endpoints |
| 422 | Invalid parameter — malformed date, page[limit] above 100, end date before start date, or a filter key that does not belong to the endpoint |
Notes and Limitations
- Dedicated endpoints, not EOD tickers. These rates are served through filter and page query parameters and return a data / meta / links envelope. They are not part of the End-of-Day ticker universe and have no .MONEY or .GBOND ticker.
- Pagination. The reference and policy rate endpoints use page[offset] and page[limit], or you can follow the links.next URL; meta.total reports the full row count for the current filter, and the maximum page size is 100 rows. The funding-stress endpoint does not paginate.
- NY Fed distribution fields. The percentiles and volume_billion_usd fields are present only on rows sourced from the New York Fed (SOFR, EFFR, OBFR, TGCR, BGCR). Rows from FRED, the ECB, and the Bank of England omit these fields rather than returning null.
- Funding stress spreads are derived. The six spreads are computed from the reference and policy rates above, not sourced as standalone series, and are expressed in basis points. An unknown spread code or a malformed date returns 422.
- Filter keys are endpoint-specific. currency applies to reference rates only; country and central_bank apply to policy rates only. Passing a filter key that does not belong to the endpoint returns 422.
- Daily refresh, T+1. New observations land one business day after the source publishes. Publication windows differ by source (Bank of England and ECB in the European morning, NY Fed and FRED after the New York Fed release).
Related APIs
For EURIBOR, historical LIBOR, government bond yields, and central-bank FX reference rates, see the Macroeconomic Data API. For the US Treasury constant-maturity, bill, and yield curve series, see the US Treasury Interest Rates API.