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 two endpoints: reference rates (the market-determined risk-free benchmarks that replaced LIBOR, such as SOFR, SONIA, and the euro short-term rate) and policy rates (the rates central banks set directly, such as the Fed funds target range and the ECB deposit facility rate). Both share the same request shape, authentication, and JSON response envelope.
Quick jump:
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 |
Response Codes
Both 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 the rates 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. Use page[offset] and page[limit] to page through results, or follow the links.next URL. meta.total reports the full row count for the current filter. The maximum page size is 100 rows.
- 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.
- 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.