Browse all documentation

Equity risk premium API reference

The equity risk premium and country risk premium by country

Overview

Narwhal's estimate of the equity risk premium: the extra return investors expect from shares over a risk-free government bond. Every request needs a Bearer key, and REST and MCP share one account quota.

A country is its ISO 3166 alpha-3 code, such as USA or IDN. The total is the mature market premium plus the country risk premium, and the country risk premium is the country default spread times the volatility ratio. Every figure is a percent as a decimal string with four places, except the ratio, which is a plain number.

Each figure carries its basis: observed from market or official data, modelled, or taken from a published country risk table that the method page cites. The method, inputs and limits are on the equity risk premium methodology page, and every answer links to it.

Base URL: https://api.narwhalapi.com. Each route below is an MCP tool of its own, with the same parameters.

Plans and limits

WhatFreeBasicPro
Latest figure for a countryIncludedIncludedIncluded
Latest figure for every countryIncludedIncludedIncluded
HistoryWithin the plan's history windowWithin the plan's history windowFull history

See pricing for plan prices and monthly request limits. Each request counts as one call unless a route says otherwise.

  • A country appears only when we hold a row for it. Without a row the route returns 404 series_not_found; nothing is filled in or carried forward.
  • The mature market has no country premium: for the United States the default spread is 0, the volatility ratio is empty and the total equals the mature premium. Germany, the euro-area reference, also has a country premium of 0.
  • Figures are in US dollar terms. A discount rate in another currency needs the inflation difference between the two currencies added.
  • History is paged by date: send the next_cursor of a page, with the same other parameters, to read the next one.
  • The figures are estimates for analysis, not financial, investment, legal or tax advice.

Endpoints

Every route is a GET and needs your key in the Authorization: Bearer header. The examples show the shape of an answer, not live data.

Get a country's equity risk premium

GET /v1/economics/{country}/equity-risk-premium

The latest equity risk premium of one country, or the latest on or before date: the mature market premium, the country default spread, the volatility ratio, the country risk premium and the total, each with its basis.

Send date to read the latest figure on or before that day.

MCP: tool economics_get_equity_risk_premium.

Parameters

ParameterWhereRequiredTypeMeaning
countrypathYesstring
datequeryNostring

Response fields

FieldTypeSentMeaning
countrystringAlways
as_ofdateAlways
unitalways "percent"Always
mature_erpstringAlways
country_default_spreadstringAlways
volatility_ratiostringAlways
country_risk_premiumstringAlways
total_erpstringAlways
basisobjectAlways
basis.mature_erpone of observed, modelledAlways
basis.country_default_spreadone of observed, modelledAlways
basis.volatility_ratioone of observed, modelledAlways
basis.country_risk_premiumone of observed, modelledAlways
basis.total_erpone of observed, modelledAlways
methodology_urlalways "https://narwhalapi.com/methodology/equity-risk-premium"Optional
Request
curl -H "Authorization: Bearer $NARWHAL_API_KEY" \
  "https://api.narwhalapi.com/v1/economics/ITA/equity-risk-premium"
Example response with illustrative values
{
  "country": "ITA",
  "as_of": "2026-10-28",
  "unit": "percent",
  "mature_erp": "3.2230",
  "country_default_spread": "0.8881",
  "volatility_ratio": "2.0310",
  "country_risk_premium": "1.8037",
  "total_erp": "5.0267",
  "basis": {
    "mature_erp": "observed",
    "country_default_spread": "observed",
    "volatility_ratio": "modelled",
    "country_risk_premium": "modelled",
    "total_erp": "modelled"
  },
  "methodology_url": "https://narwhalapi.com/methodology/equity-risk-premium"
}

Get equity risk premium history

GET /v1/economics/{country}/equity-risk-premium/history

The equity risk premium of one country by date, oldest first, paged with next_cursor.

MCP: tool economics_get_equity_risk_premium_history.

Parameters

ParameterWhereRequiredTypeMeaning
countrypathYesstring
startqueryNostring
endqueryNostring
limitqueryNointeger
cursorqueryNostringnext_cursor of the previous page, with the same other parameters.

Response fields

FieldTypeSentMeaning
countrystringAlways
observationslist of objectAlways
observations[].countrystringAlways
observations[].as_ofdateAlways
observations[].unitalways "percent"Always
observations[].mature_erpstringAlways
observations[].country_default_spreadstringAlways
observations[].volatility_ratiostringAlways
observations[].country_risk_premiumstringAlways
observations[].total_erpstringAlways
observations[].basisobjectAlways
observations[].basis.mature_erpone of observed, modelledAlways
observations[].basis.country_default_spreadone of observed, modelledAlways
observations[].basis.volatility_ratioone of observed, modelledAlways
observations[].basis.country_risk_premiumone of observed, modelledAlways
observations[].basis.total_erpone of observed, modelledAlways
observations[].methodology_urlalways "https://narwhalapi.com/methodology/equity-risk-premium"Optional
next_cursorstringAlwaysPass as cursor to read the next page. Always sent; null on the last page.
Request
curl -H "Authorization: Bearer $NARWHAL_API_KEY" \
  "https://api.narwhalapi.com/v1/economics/ITA/equity-risk-premium/history?start=2026-01-01"
Example response with illustrative values
{
  "country": "ITA",
  "observations": [
    {
      "country": "ITA",
      "as_of": "2026-09-01",
      "unit": "percent",
      "mature_erp": "3.2230",
      "country_default_spread": "0.8881",
      "volatility_ratio": "2.0310",
      "country_risk_premium": "1.8037",
      "total_erp": "5.0267",
      "basis": {
        "mature_erp": "observed",
        "country_default_spread": "observed",
        "volatility_ratio": "modelled",
        "country_risk_premium": "modelled",
        "total_erp": "modelled"
      },
      "methodology_url": "https://narwhalapi.com/methodology/equity-risk-premium"
    },
    {
      "country": "ITA",
      "as_of": "2026-10-28",
      "unit": "percent",
      "mature_erp": "3.2230",
      "country_default_spread": "0.8881",
      "volatility_ratio": "2.0310",
      "country_risk_premium": "1.8037",
      "total_erp": "5.0267",
      "basis": {
        "mature_erp": "observed",
        "country_default_spread": "observed",
        "volatility_ratio": "modelled",
        "country_risk_premium": "modelled",
        "total_erp": "modelled"
      },
      "methodology_url": "https://narwhalapi.com/methodology/equity-risk-premium"
    }
  ],
  "next_cursor": null
}

List equity risk premiums for all countries

GET /v1/economics/equity-risk-premium

The latest equity risk premium of every country that has one, sorted by country.

MCP: tool economics_list_equity_risk_premium.

Parameters

This route takes no parameters.

Response fields

FieldTypeSentMeaning
countrieslist of objectAlways
countries[].countrystringAlways
countries[].as_ofdateAlways
countries[].unitalways "percent"Always
countries[].mature_erpstringAlways
countries[].country_default_spreadstringAlways
countries[].volatility_ratiostringAlways
countries[].country_risk_premiumstringAlways
countries[].total_erpstringAlways
countries[].basisobjectAlways
countries[].basis.mature_erpone of observed, modelledAlways
countries[].basis.country_default_spreadone of observed, modelledAlways
countries[].basis.volatility_ratioone of observed, modelledAlways
countries[].basis.country_risk_premiumone of observed, modelledAlways
countries[].basis.total_erpone of observed, modelledAlways
countries[].methodology_urlalways "https://narwhalapi.com/methodology/equity-risk-premium"Optional
Request
curl -H "Authorization: Bearer $NARWHAL_API_KEY" \
  "https://api.narwhalapi.com/v1/economics/equity-risk-premium"
Example response with illustrative values
{
  "countries": [
    {
      "country": "DEU",
      "as_of": "2026-10-28",
      "unit": "percent",
      "mature_erp": "3.2230",
      "country_default_spread": "0.0000",
      "volatility_ratio": "2.5462",
      "country_risk_premium": "0.0000",
      "total_erp": "3.2230",
      "basis": {
        "mature_erp": "observed",
        "country_default_spread": "observed",
        "volatility_ratio": "observed",
        "country_risk_premium": "observed",
        "total_erp": "observed"
      },
      "methodology_url": "https://narwhalapi.com/methodology/equity-risk-premium"
    },
    {
      "country": "ITA",
      "as_of": "2026-10-28",
      "unit": "percent",
      "mature_erp": "3.2230",
      "country_default_spread": "0.8881",
      "volatility_ratio": "2.0310",
      "country_risk_premium": "1.8037",
      "total_erp": "5.0267",
      "basis": {
        "mature_erp": "observed",
        "country_default_spread": "observed",
        "volatility_ratio": "modelled",
        "country_risk_premium": "modelled",
        "total_erp": "modelled"
      },
      "methodology_url": "https://narwhalapi.com/methodology/equity-risk-premium"
    }
  ]
}

Errors

Errors use the shared problem shape with a request_id. See Errors and quota for the shape and the quota headers. Failed requests are not charged.

CodeStatusMeaning
invalid_query400A parameter is missing, unknown, repeated or outside its range.
series_not_found404We hold no equity risk premium for this country.
invalid_cursor400The cursor is not one this request returned, or it comes from a different request.
quota_exceeded429Your plan has fewer calls left than the request needs.
economics_unavailable503The economics data cannot answer right now. Try again shortly.