The EODHD Credit and Sovereign Risk Data API brings credit-market and sovereign-risk indicators into one API, drawn entirely from official public sources — the New York Fed, the US Treasury via FRED, the CFTC, and the Damodaran dataset at NYU Stern. It closes a long-standing gap in EODHD coverage for credit analysts, sovereign-risk and EM macro desks, quant researchers, corporate treasury, and academic users.
Seven endpoints are grouped into three themes: corporate credit conditions (the NY Fed corporate bond distress index and the HQM corporate yield curve), CDS market aggregates (weekly CFTC swaps data), and sovereign risk (risk premiums, credit ratings, CDS spreads, and rating-based default spreads). All seven share the same authentication, the same JSON response envelope, and a cost of one API call per request.
Overview
Every endpoint is reached over HTTPS with a GET request and authenticated by an api_token query parameter, the same token used across the EODHD API. Each request costs one API call and is available on the Fundamentals plan and above. Requests return a JSON object with three top-level keys: data (the array of records), meta (total row count, the active page window, and dataset provenance), and links (pagination links). Results are filtered with filter[…] parameters and paged with page[offset] and page[limit], where the default page size is 20 rows and the maximum is 100.
All endpoints live under a common base path.
https://eodhd.com/api/credit-risk/{group}/{dataset}?api_token=YOUR_TOKEN
Corporate Credit Conditions
This theme measures the health of the US corporate bond market from two angles: a market-distress index published by the New York Fed, and the high-quality corporate yield curve published by the US Treasury through FRED. Together they show whether corporate credit is functioning normally and what investment-grade issuers are paying to borrow across maturities.
Corporate Bond Market Distress Index (CMDI)
The Corporate Bond Market Distress Index from the New York Fed summarises stress in the US corporate bond market on a scale from 0 to 1, where higher values indicate greater distress. Three series are returned per week: the whole-market index, the investment-grade sub-index, and the high-yield sub-index. The series is published weekly.
https://eodhd.com/api/credit-risk/corporate/cmdi?api_token=YOUR_TOKEN
Method GET. Authentication by api_token. Cost one API call per request. Pagination by page[offset] and page[limit]. Response is a JSON envelope with data, meta, and links.
Parameters
api_token
string
required
filter[from]
date
optional
filter[to]
date
optional
page[limit]
integer
optional
page[offset]
integer
optional
Request Example
https://eodhd.com/api/credit-risk/corporate/cmdi?api_token=YOUR_TOKEN&filter[from]=2026-01-01&filter[to]=2026-06-01
curl --location "https://eodhd.com/api/credit-risk/corporate/cmdi?api_token=YOUR_TOKEN&filter[from]=2026-01-01&filter[to]=2026-06-01&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/credit-risk/corporate/cmdi?api_token=YOUR_TOKEN&filter[from]=2026-01-01&filter[to]=2026-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/credit-risk/corporate/cmdi?api_token=YOUR_TOKEN&filter[from]=2026-01-01&filter[to]=2026-06-01&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/credit-risk/corporate/cmdi?api_token=YOUR_TOKEN&filter[from]=2026-01-01&filter[to]=2026-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 Example
{
"data": [
{
"as_of_date": "2026-06-19T00:00:00+00:00",
"market_cmdi": 0.13,
"ig_cmdi": 0.23,
"hy_cmdi": 0.06,
"source": "ny_fed"
}
],
"meta": {
"total": 1120,
"page": { "offset": 0, "limit": 20 },
"dataset": "corporate_bond_market_distress_index",
"source": "ny_fed",
"frequency": "weekly",
"attribution": "© Federal Reserve Bank of New York. Content from the New York Fed subject to the Terms of Use at newyorkfed.org."
},
"links": { "next": "https://eodhd.com/api/credit-risk/corporate/cmdi?page[offset]=20&page[limit]=20" }
}
Response Fields
| Field | Type | Description |
|---|---|---|
| as_of_date | string (date-time) | Observation week |
| market_cmdi | number | Whole-market distress index, 0 to 1 |
| ig_cmdi | number | Investment-grade sub-index, 0 to 1 |
| hy_cmdi | number | High-yield sub-index, 0 to 1 |
| source | string | Upstream provider, ny_fed |
HQM Corporate Yield Curve
The High Quality Market corporate bond yield curve, published by the US Treasury and distributed through FRED, gives par yields and spot rates for AAA-to-A rated US corporate bonds across the maturity spectrum. Yields are in percent and the series is published monthly. Available maturities are 1, 2, 3, 5, 7, 10, 15, 20, 25, and 30 years, each in a par and a spot variant.
https://eodhd.com/api/credit-risk/corporate/hqm-yields?api_token=YOUR_TOKEN
Method GET. Authentication by api_token. Cost one API call per request. Pagination by page[offset] and page[limit]. Response is a JSON envelope with data, meta, and links.
Parameters
api_token
string
required
filter[tenor]
enum
optional
filter[type]
enum
optional
filter[from]
date
optional
filter[to]
date
optional
page[limit]
integer
optional
page[offset]
integer
optional
Request Example
https://eodhd.com/api/credit-risk/corporate/hqm-yields?api_token=YOUR_TOKEN&filter[tenor]=2,5,10&filter[type]=par&filter[from]=2026-01-01&filter[to]=2026-06-01
curl --location "https://eodhd.com/api/credit-risk/corporate/hqm-yields?api_token=YOUR_TOKEN&filter[tenor]=2,5,10&filter[type]=par&filter[from]=2026-01-01&filter[to]=2026-06-01&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/credit-risk/corporate/hqm-yields?api_token=YOUR_TOKEN&filter[tenor]=2,5,10&filter[type]=par&filter[from]=2026-01-01&filter[to]=2026-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/credit-risk/corporate/hqm-yields?api_token=YOUR_TOKEN&filter[tenor]=2,5,10&filter[type]=par&filter[from]=2026-01-01&filter[to]=2026-06-01&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/credit-risk/corporate/hqm-yields?api_token=YOUR_TOKEN&filter[tenor]=2,5,10&filter[type]=par&filter[from]=2026-01-01&filter[to]=2026-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 Example
{
"data": [
{
"series_id": "HQMCB2YRP",
"tenor_years": 2,
"yield_type": "par",
"as_of_date": "2026-05-01T00:00:00+00:00",
"yield_value": 4.37,
"source": "fred"
}
],
"meta": {
"total": 7126,
"page": { "offset": 0, "limit": 20 },
"dataset": "hqm_corporate_yield_curve",
"source": "fred",
"frequency": "monthly",
"attribution": "U.S. Department of the Treasury, HQM Corporate Bond Yield Curve, retrieved from FRED, Federal Reserve Bank of St. Louis (public domain)."
},
"links": { "next": "https://eodhd.com/api/credit-risk/corporate/hqm-yields?page[offset]=20&page[limit]=20" }
}
Response Fields
| Field | Type | Description |
|---|---|---|
| series_id | string | FRED series identifier |
| tenor_years | number | Maturity in years |
| yield_type | string | par or spot |
| as_of_date | string (date-time) | Observation month |
| yield_value | number | Yield in percent |
| source | string | Upstream provider, fred |
CDS Market Aggregates
This endpoint exposes aggregate credit-default-swap market activity from the CFTC Weekly Swaps Report. Notional volumes are reported in millions of US dollars and broken down by credit grade or by cleared status, across geographic regions. The data is published weekly with a lag of about seventeen days after the reference week.
https://eodhd.com/api/credit-risk/cds-market/aggregates?api_token=YOUR_TOKEN
Method GET. Authentication by api_token. Cost one API call per request. Pagination by page[offset] and page[limit]. Response is a JSON envelope with data, meta, and links.
Parameters
api_token
string
required
filter[metric]
enum
optional
filter[dimension]
enum
optional
filter[from]
date
optional
filter[to]
date
optional
page[limit]
integer
optional
page[offset]
integer
optional
Request Example
https://eodhd.com/api/credit-risk/cds-market/aggregates?api_token=YOUR_TOKEN&filter[metric]=gross_notional&filter[dimension]=grade&filter[from]=2026-01-01&filter[to]=2026-06-01
curl --location "https://eodhd.com/api/credit-risk/cds-market/aggregates?api_token=YOUR_TOKEN&filter[metric]=gross_notional&filter[dimension]=grade&filter[from]=2026-01-01&filter[to]=2026-06-01&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/credit-risk/cds-market/aggregates?api_token=YOUR_TOKEN&filter[metric]=gross_notional&filter[dimension]=grade&filter[from]=2026-01-01&filter[to]=2026-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/credit-risk/cds-market/aggregates?api_token=YOUR_TOKEN&filter[metric]=gross_notional&filter[dimension]=grade&filter[from]=2026-01-01&filter[to]=2026-06-01&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/credit-risk/cds-market/aggregates?api_token=YOUR_TOKEN&filter[metric]=gross_notional&filter[dimension]=grade&filter[from]=2026-01-01&filter[to]=2026-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 Example
{
"data": [
{
"as_of_date": "2026-06-12T00:00:00+00:00",
"release_date": "2026-06-29T00:00:00+00:00",
"metric": "gross_notional",
"breakdown_dimension": "cleared_status",
"breakdown_value": "Cleared",
"region": "North America",
"usd_notional_mn": 1986548,
"source": "cftc"
}
],
"meta": {
"total": 75,
"page": { "offset": 0, "limit": 20 },
"dataset": "cds_market_aggregates",
"source": "cftc",
"frequency": "weekly",
"units": "millions USD",
"attribution": "Source: CFTC Weekly Swaps Report (public domain). Values in millions USD. Lag: T+17 days."
},
"links": { "next": "https://eodhd.com/api/credit-risk/cds-market/aggregates?page[offset]=20&page[limit]=20" }
}
Response Fields
| Field | Type | Description |
|---|---|---|
| as_of_date | string (date-time) | Reference week |
| release_date | string (date-time) | Date the CFTC published the figure |
| metric | string | Volume metric, gross_notional |
| breakdown_dimension | string | grade or cleared_status |
| breakdown_value | string | The value within the breakdown dimension |
| region | string | Asia, Europe, North America, Other Regions, or TOTAL |
| usd_notional_mn | number | Notional volume in millions of USD |
| source | string | Upstream provider, cftc |
Sovereign Risk
The sovereign theme covers country-level credit risk, built on the annually updated Damodaran dataset at NYU Stern. Four endpoints cover 157 countries: risk premiums, credit ratings, CDS spreads, and a rating-to-default-spread lookup table. These are annual snapshots. Use filter[as_of] to pick a specific yearly snapshot; the latest is returned by default.
Sovereign Risk Premium
Country risk premium, equity risk premium, adjusted default spread, the corporate tax rate, and the sovereign CDS level where available, per country. All spread and premium values are decimal fractions, so 0.028 means 2.8 percent.
https://eodhd.com/api/credit-risk/sovereign/risk-premium?api_token=YOUR_TOKEN
Method GET. Authentication by api_token. Cost one API call per request. Pagination by page[offset] and page[limit]. Response is a JSON envelope with data, meta, and links.
Parameters
api_token
string
required
filter[country]
string
optional
filter[region]
string
optional
filter[as_of]
date
optional
page[limit]
integer
optional
page[offset]
integer
optional
Request Example
https://eodhd.com/api/credit-risk/sovereign/risk-premium?api_token=YOUR_TOKEN&filter[country]=USA
curl --location "https://eodhd.com/api/credit-risk/sovereign/risk-premium?api_token=YOUR_TOKEN&filter[country]=USA&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/credit-risk/sovereign/risk-premium?api_token=YOUR_TOKEN&filter[country]=USA&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/credit-risk/sovereign/risk-premium?api_token=YOUR_TOKEN&filter[country]=USA&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/credit-risk/sovereign/risk-premium?api_token=YOUR_TOKEN&filter[country]=USA&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 Example
{
"data": [
{
"country_iso3": "USA",
"country_name": "United States",
"as_of_date": "2026-01-01T00:00:00+00:00",
"moodys_rating": "Aa1",
"adj_default_spread": 0.002334,
"country_risk_premium": 0.002334,
"equity_risk_premium": 0.0446,
"corporate_tax_rate": 0.25,
"sovereign_cds": 0.004,
"region": "North America",
"source": "damodaran"
}
],
"meta": {
"total": 157,
"page": { "offset": 0, "limit": 20 },
"dataset": "sovereign_risk_premium",
"source": "damodaran",
"frequency": "annual",
"attribution": "Damodaran, NYU Stern (annual). Source: https://pages.stern.nyu.edu/~adamodar/"
},
"links": { "next": "https://eodhd.com/api/credit-risk/sovereign/risk-premium?page[offset]=20&page[limit]=20" }
}
Response Fields
| Field | Type | Description |
|---|---|---|
| country_iso3 | string | ISO 3166 alpha-3 country code |
| country_name | string | Country name |
| as_of_date | string (date-time) | Snapshot date of the annual dataset |
| moodys_rating | string | Moody’s local-currency rating |
| adj_default_spread | number | Adjusted default spread, decimal fraction |
| country_risk_premium | number | Country risk premium, decimal fraction |
| equity_risk_premium | number | Total equity risk premium, decimal fraction |
| corporate_tax_rate | number | Marginal corporate tax rate, decimal fraction |
| sovereign_cds | number or null | Sovereign CDS level, decimal fraction, null where no liquid market |
| region | string | Damodaran region: Africa, Asia, Australia & New Zealand, Caribbean, Central and South America, Eastern Europe & Russia, Middle East, North America, Western Europe |
| source | string | Upstream provider, damodaran |
Sovereign Credit Ratings
Moody’s, S&P, and Fitch local-currency ratings per country, as compiled in the annual Damodaran dataset.
https://eodhd.com/api/credit-risk/sovereign/credit-ratings?api_token=YOUR_TOKEN
Method GET. Authentication by api_token. Cost one API call per request. Filters filter[country] and filter[as_of]. Response is a JSON envelope with data, meta, and links.
Request Example
https://eodhd.com/api/credit-risk/sovereign/credit-ratings?api_token=YOUR_TOKEN&filter[country]=Germany
curl --location "https://eodhd.com/api/credit-risk/sovereign/credit-ratings?api_token=YOUR_TOKEN&filter[country]=Germany&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/credit-risk/sovereign/credit-ratings?api_token=YOUR_TOKEN&filter[country]=Germany&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/credit-risk/sovereign/credit-ratings?api_token=YOUR_TOKEN&filter[country]=Germany&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/credit-risk/sovereign/credit-ratings?api_token=YOUR_TOKEN&filter[country]=Germany&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 Example
{
"data": [
{
"country_iso3": "DEU",
"country_name": "Germany",
"as_of_date": "2026-01-01T00:00:00+00:00",
"moodys_rating": "Aaa",
"sp_rating": "AAA",
"fitch_rating": "AAA",
"source": "damodaran"
}
],
"meta": {
"total": 157,
"page": { "offset": 0, "limit": 20 },
"dataset": "sovereign_credit_rating",
"source": "damodaran",
"frequency": "annual",
"attribution": "Damodaran, NYU Stern (annual, sourced from Moody's, S&P, Fitch)."
},
"links": { "next": "https://eodhd.com/api/credit-risk/sovereign/credit-ratings?page[offset]=20&page[limit]=20" }
}
Response Fields
| Field | Type | Description |
|---|---|---|
| country_iso3 | string | ISO 3166 alpha-3 country code |
| country_name | string | Country name |
| as_of_date | string (date-time) | Snapshot date of the annual dataset |
| moodys_rating | string | Moody’s rating |
| sp_rating | string | S&P rating |
| fitch_rating | string | Fitch rating |
| source | string | Upstream provider, damodaran |
Sovereign CDS Spreads
Sovereign 10-year CDS spreads per country, plus a variant net of Switzerland, as decimal fractions. The value is null where there is no liquid sovereign CDS market for that country.
https://eodhd.com/api/credit-risk/sovereign/cds-spreads?api_token=YOUR_TOKEN
Method GET. Authentication by api_token. Cost one API call per request. Filters filter[country] and filter[as_of]. Response is a JSON envelope with data, meta, and links.
Request Example
https://eodhd.com/api/credit-risk/sovereign/cds-spreads?api_token=YOUR_TOKEN&filter[country]=France
curl --location "https://eodhd.com/api/credit-risk/sovereign/cds-spreads?api_token=YOUR_TOKEN&filter[country]=France&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/credit-risk/sovereign/cds-spreads?api_token=YOUR_TOKEN&filter[country]=France&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/credit-risk/sovereign/cds-spreads?api_token=YOUR_TOKEN&filter[country]=France&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/credit-risk/sovereign/cds-spreads?api_token=YOUR_TOKEN&filter[country]=France&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 Example
{
"data": [
{
"country_iso3": "FRA",
"country_name": "France",
"as_of_date": "2026-01-01T00:00:00+00:00",
"moodys_rating": "Aa3",
"cds_spread": 0.0035,
"cds_spread_net_of_switzerland": 0.0028,
"source": "damodaran"
}
],
"meta": {
"total": 157,
"page": { "offset": 0, "limit": 20 },
"dataset": "sovereign_cds_spread",
"source": "damodaran",
"frequency": "annual",
"attribution": "Damodaran, NYU Stern (annual). Sovereign 10Y CDS spreads where the market is liquid; NULL where no liquid market."
},
"links": { "next": "https://eodhd.com/api/credit-risk/sovereign/cds-spreads?page[offset]=20&page[limit]=20" }
}
Response Fields
| Field | Type | Description |
|---|---|---|
| country_iso3 | string | ISO 3166 alpha-3 country code |
| country_name | string | Country name |
| as_of_date | string (date-time) | Snapshot date of the annual dataset |
| moodys_rating | string | Moody’s rating |
| cds_spread | number or null | Sovereign 10Y CDS spread, decimal fraction, null where illiquid |
| cds_spread_net_of_switzerland | number or null | CDS spread net of Switzerland, decimal fraction |
| source | string | Upstream provider, damodaran |
Rating Default Spreads
A lookup table mapping each Moody’s rating notch to a default spread, as a decimal fraction. Values are normalised from basis points, so 60 basis points is returned as 0.006. Twenty rating buckets are covered, from Aaa to Ca.
https://eodhd.com/api/credit-risk/sovereign/default-spreads?api_token=YOUR_TOKEN
Method GET. Authentication by api_token. Cost one API call per request. Filters filter[rating] and filter[as_of]. Response is a JSON envelope with data, meta, and links.
Request Example
https://eodhd.com/api/credit-risk/sovereign/default-spreads?api_token=YOUR_TOKEN&filter[rating]=
curl --location "https://eodhd.com/api/credit-risk/sovereign/default-spreads?api_token=YOUR_TOKEN&filter[rating]=&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/credit-risk/sovereign/default-spreads?api_token=YOUR_TOKEN&filter[rating]=&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/credit-risk/sovereign/default-spreads?api_token=YOUR_TOKEN&filter[rating]=&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/credit-risk/sovereign/default-spreads?api_token=YOUR_TOKEN&filter[rating]=&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 Example
{
"data": [
{
"rating": "A1",
"as_of_date": "2026-01-01T00:00:00+00:00",
"default_spread": 0.005993,
"source": "damodaran"
}
],
"meta": {
"total": 20,
"page": { "offset": 0, "limit": 20 },
"dataset": "rating_default_spread",
"source": "damodaran",
"frequency": "annual",
"attribution": "Damodaran, NYU Stern (annual). Rating-to-default-spread lookup table; values normalised from basis points to fractions (e.g. 60bp -> 0.006)."
},
"links": []
}
Response Fields
| Field | Type | Description |
|---|---|---|
| rating | string | Moody’s rating notch, Aaa to Ca |
| as_of_date | string (date-time) | Snapshot date of the annual dataset |
| default_spread | number | Default spread for the rating, decimal fraction |
| source | string | Upstream provider, damodaran |
Funding Stress
Credit-market funding-stress indicators are planned as a second wave of this API, coming Q3 2026. In the meantime, US money-market funding-stress spreads — such as EFFR minus SOFR and SOFR relative to the Federal Reserve target range — are already available today through the EODHD Interest Rates API at https://eodhd.com/financial-apis/us-treasury-ust-interest-rates-api-beta.
Coverage, Frequency, and Lag
| Dataset | Endpoint | Source | Frequency | Coverage |
|---|---|---|---|---|
| Corporate bond market distress index | corporate/cmdi | NY Fed | Weekly | Market, investment-grade, high-yield |
| HQM corporate yield curve | corporate/hqm-yields | US Treasury via FRED | Monthly | Tenors 1 to 30 years, par and spot |
| CDS market aggregates | cds-market/aggregates | CFTC Weekly Swaps Report | Weekly, T+17 days | By grade and cleared status, five regions |
| Sovereign risk premium | sovereign/risk-premium | Damodaran, NYU Stern | Annual | 157 countries |
| Sovereign credit ratings | sovereign/credit-ratings | Damodaran, NYU Stern | Annual | 157 countries |
| Sovereign CDS spreads | sovereign/cds-spreads | Damodaran, NYU Stern | Annual | 157 countries, liquid markets |
| Rating default spreads | sovereign/default-spreads | Damodaran, NYU Stern | Annual | 20 rating buckets |
Endpoint Reference
| Endpoint | Description |
|---|---|
| /api/credit-risk/corporate/cmdi | NY Fed corporate bond market distress index, weekly |
| /api/credit-risk/corporate/hqm-yields | HQM corporate yield curve, par and spot, monthly |
| /api/credit-risk/cds-market/aggregates | CFTC CDS market notional aggregates, weekly |
| /api/credit-risk/sovereign/risk-premium | Country and equity risk premiums, tax rate, sovereign CDS |
| /api/credit-risk/sovereign/credit-ratings | Moody’s, S&P, and Fitch sovereign ratings |
| /api/credit-risk/sovereign/cds-spreads | Sovereign 10Y CDS spreads |
| /api/credit-risk/sovereign/default-spreads | Rating-to-default-spread lookup table |
Response 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, an out-of-range filter value, or a filter key that does not belong to the endpoint |
Attribution and Licensing
Every response carries the required attribution string for its source in the meta.attribution field. When redistributing or displaying this data, reproduce the attribution for the relevant source as shown below.
| Source | Required attribution |
|---|---|
| NY Fed CMDI | © Federal Reserve Bank of New York. Content from the New York Fed subject to the Terms of Use at newyorkfed.org. |
| HQM via FRED | U.S. Department of the Treasury, HQM Corporate Bond Yield Curve, retrieved from FRED, Federal Reserve Bank of St. Louis |
| CFTC | Source: CFTC Weekly Swaps Report |
| Damodaran | Damodaran, NYU Stern (annual). Source: https://pages.stern.nyu.edu/~adamodar/ |
Methodology and Limitations
- Units differ by dataset. Sovereign risk premiums, default spreads, CDS spreads, and tax rates are decimal fractions, so 0.006 means 60 basis points or 0.6 percent. The CMDI is an index between 0 and 1. HQM yields are in percent. CDS market aggregates are notional volumes in millions of US dollars in the usd_notional_mn field.
- The four sovereign datasets are annual snapshots from the Damodaran dataset. Use filter[as_of] with a date to select a specific yearly snapshot; the most recent snapshot is returned by default.
- Sovereign CDS values are null for countries without a liquid sovereign CDS market, rather than zero.
- CDS market aggregates currently expose the gross_notional metric, broken down by grade or by cleared_status across five regions, and are published weekly by the CFTC with a lag of about seventeen days after the reference week.
- The HQM corporate yield curve is monthly. Available maturities are 1, 2, 3, 5, 7, 10, 15, 20, 25, and 30 years, each in a par and a spot variant.
- Filter keys are endpoint-specific. Passing a filter key that does not belong to an endpoint, an out-of-range value, or a malformed date returns 422.