DNB (DNB_RATE) Rate History

DNB (DNB_RATE) Rate History

You need reliable, machine-readable access to Danmarks Nationalbank’s policy rate for models, dashboards, and risk systems. By the end of this guide, you will know exactly how to fetch the DNB_RATE (Danish central bank policy rate), read its metadata and dates, compute spreads and loan payments from it, and integrate full history into your application using the Interest Rates API.

What the DNB_RATE Represents and How It’s Expressed

DNB_RATE is the Danmarks Nationalbank policy rate delivered by the Interest Rates API under the central_bank category. It is denominated in DKK and provided at a monthly frequency. In responses, values are returned as annualized percentage rates (numeric). For example, a value of 2.1 means 2.1% per annum.

Illustration: DNB (DNB_RATE) Rate History

Monthly frequency means the effective rate for a month is captured on the last calendar day with data for that month. If you query a mid-month date via the historical endpoint, the API will resolve to the latest available day within that month.

Use DNB_RATE to drive DKK-linked pricing models, risk and liquidity dashboards, and lending or treasury applications that need a consistent policy rate series updated on a monthly schedule.

Reading Dates, Currencies, and Frequencies

Across endpoints you will encounter these key fields:

  • rates: A map from symbol to numeric rate value (e.g., "DNB_RATE": 2.1).
  • dates: A map from symbol to the effective date for that value (ISO Y-m-d). For monthly symbols, this is the last date in the month with data.
  • currencies: A map from symbol to the currency code. For DNB_RATE this is DKK.
  • frequencies: A map from symbol to the data frequency (e.g., daily, monthly). DNB_RATE is monthly.
  • For fluctuation: start_date, end_date, start_value, end_value, change, change_pct, high, low.
  • For OHLC: open, high, low, close, data_points aggregated for each period.

All endpoints are at https://interestratesapi.com/api/v1/ and use GET with an api_key query parameter for authentication. Learn more at interestratesapi.com and the MCP.

Endpoint: /symbols — Find DNB_RATE in the Catalogue

Use /symbols to programmatically discover the availability and metadata for DNB_RATE. You can filter by category and base currency. DNB_RATE is a central bank symbol in DKK with monthly frequency.

cURL

curl -s "https://interestratesapi.com/api/v1/latest?api_key=YOUR_API_KEY&symbols=DNB_RATE"

Python

import requests

resp = requests.get(
'https://interestratesapi.com/api/v1/symbols',
params=dict(category='central_bank', base='DKK', api_key='YOUR_API_KEY')
)
data = resp.json()
print(data.get('symbols', []))

JavaScript

const url = 'https://interestratesapi.com/api/v1/symbols?category=central_bank&base=DKK&api_key=YOUR_API_KEY';
const response = await fetch(url);
const data = await response.json();
console.log(data.symbols);

PHP

<?php
$url = 'https://interestratesapi.com/api/v1/symbols?category=central_bank&base=DKK&api_key=YOUR_API_KEY';
$json = file_get_contents($url);
$data = json_decode($json, true);
print_r($data['symbols'] ?? []);
?>

Sample JSON

{
    "success": true,
    "date": "2026-09-30",
    "base": "DKK",
    "rates": {
        "DNB_RATE": 2.1
    },
    "dates": {
        "DNB_RATE": "2026-09-30"
    },
    "currencies": {
        "DNB_RATE": "DKK"
    },
    "base_filter_note": null
}

In your implementation, filter for symbol == "DNB_RATE" and check currency_code == "DKK" and frequency == "monthly" to confirm you have the correct benchmark.

Endpoint: /latest — Get the Most Recent DNB_RATE

Use /latest to retrieve the most recent DNB_RATE and its effective date. This is the canonical way to keep dashboards and pricing engines in sync with the current policy rate.

cURL (official sample; copy as-is)

Python

import requests

response = requests.get(
'https://interestratesapi.com/api/v1/latest',
params=dict(symbols='DNB_RATE', api_key='YOUR_API_KEY')
)
data = response.json()
dnb_rate = data['rates']['DNB_RATE']
dnb_date = data['dates']['DNB_RATE']
dnb_ccy = data['currencies']['DNB_RATE']
print(dnb_rate, dnb_date, dnb_ccy)

JavaScript

const response = await fetch(
'https://interestratesapi.com/api/v1/latest?symbols=DNB_RATE&api_key=YOUR_API_KEY'
);
const data = await response.json();
const rate = data.rates.DNB_RATE;
const date = data.dates.DNB_RATE;
const ccy = data.currencies.DNB_RATE;
console.log(rate, date, ccy);

PHP

<?php
$params = http_build_query([
'symbols' => 'DNB_RATE',
'api_key' => 'YOUR_API_KEY'
]);
$json = file_get_contents("https://interestratesapi.com/api/v1/latest?$params");
$data = json_decode($json, true);
$rate = $data['rates']['DNB_RATE'] ?? null;
$date = $data['dates']['DNB_RATE'] ?? null;
$ccy = $data['currencies']['DNB_RATE'] ?? null;
echo "$rate $date $ccy\n";
?>

Sample JSON (official sample; copy as-is)

The key fields you will use are rates.DNB_RATE (numeric annual rate), dates.DNB_RATE (effective date, Y-m-d), and currencies.DNB_RATE (DKK). For monthly symbols, the date typically corresponds to the end-of-month observation.

Tip: Cache this response on your side and refresh on a business-day schedule aligned with DNB publications. For monthly series, a once-per-day refresh is typically sufficient unless you are monitoring intramonth revisions.

Endpoint: /historical — Value on a Specific Date

Use /historical with a date parameter to resolve the DNB_RATE on a given day. For monthly series, the API returns the value for the last available business day in that month if you query a mid-month date.

cURL

Python

import requests

params = dict(date='2025-06-15', symbols='DNB_RATE', api_key='YOUR_API_KEY')
resp = requests.get('https://interestratesapi.com/api/v1/historical', params=params)
data = resp.json()
val = data['rates']['DNB_RATE']
ccy = data['currencies']['DNB_RATE']
print(val, ccy)

JavaScript

const params = new URLSearchParams({
date: '2025-06-15',
symbols: 'DNB_RATE',
api_key: 'YOUR_API_KEY'
});
const res = await fetch('https://interestratesapi.com/api/v1/historical?' + params.toString());
const data = await res.json();
console.log(data.rates.DNB_RATE, data.currencies.DNB_RATE);

PHP

<?php
$params = http_build_query([
'date' => '2025-06-15',
'symbols' => 'DNB_RATE',
'api_key' => 'YOUR_API_KEY'
]);
$json = file_get_contents("https://interestratesapi.com/api/v1/historical?$params");
$data = json_decode($json, true);
echo $data['rates']['DNB_RATE'] . " " . $data['currencies']['DNB_RATE'] . PHP_EOL;
?>

Sample JSON

For monthly series like DNB_RATE, interpret the returned value as the month’s effective policy rate on the provided date’s month. Your application should treat the value as an annualized percentage.

Endpoint: /timeseries — Build a DNB_RATE History

Fetch continuous history for DNB_RATE by providing start, end, and symbols. Use this for charts, backtesting, and econometric models that require a monthly time series.

cURL

Python

import requests

params = dict(
start='2025-10-30',
end='2026-10-30',
symbols='DNB_RATE',
api_key='YOUR_API_KEY'
)
resp = requests.get('https://interestratesapi.com/api/v1/timeseries', params=params)
data = resp.json()
series = data['rates']['DNB_RATE'] # dict of date -> value
for dt, val in series.items():
print(dt, val)

JavaScript

const url = 'https://interestratesapi.com/api/v1/timeseries?start=2025-10-30&end=2026-10-30&symbols=DNB_RATE&api_key=YOUR_API_KEY';
const res = await fetch(url);
const data = await res.json();
const series = data.rates.DNB_RATE; // object mapping dates to values
console.log(Object.entries(series));

PHP

<?php
$params = http_build_query([
'start' => '2025-10-30',
'end' => '2026-10-30',
'symbols' => 'DNB_RATE',
'api_key' => 'YOUR_API_KEY'
]);
$json = file_get_contents("https://interestratesapi.com/api/v1/timeseries?$params");
$data = json_decode($json, true);
$series = $data['rates']['DNB_RATE'] ?? [];
foreach ($series as $date => $value) {
echo "$date,$value\n";
}
?>

Sample JSON

Interpretation notes:

  • rates.DNB_RATE is a map of date to value. For monthly series you will typically see values aligned to month-end observations.
  • frequencies.DNB_RATE indicates the series frequency for reference.

Endpoint: /fluctuation — Changes Over a Range

/fluctuation produces start-to-end changes, percent change, and observed high/low for the requested period. This is useful for dashboards, risk alerts, and performance summaries.

cURL

Python

import requests

params = dict(start='2025-10-30', end='2026-10-30', symbols='DNB_RATE', api_key='YOUR_API_KEY')
r = requests.get('https://interestratesapi.com/api/v1/fluctuation', params=params)
fx = r.json()['rates']['DNB_RATE']
print(fx['start_value'], fx['end_value'], fx['change'], fx['change_pct'])

JavaScript

const res = await fetch(
'https://interestratesapi.com/api/v1/fluctuation?start=2025-10-30&end=2026-10-30&symbols=DNB_RATE&api_key=YOUR_API_KEY'
);
const data = await res.json();
const f = data.rates.DNB_RATE;
console.log(f.start_date, f.end_date, f.high, f.low, f.change_pct);

PHP

<?php
$query = http_build_query([
'start' => '2025-10-30',
'end' => '2026-10-30',
'symbols' => 'DNB_RATE',
'api_key' => 'YOUR_API_KEY'
]);
$json = file_get_contents("https://interestratesapi.com/api/v1/fluctuation?$query");
$data = json_decode($json, true);
$fx = $data['rates']['DNB_RATE'] ?? [];
print_r($fx);
?>

Sample JSON

Key fields: change is the arithmetic difference end_value − start_value; change_pct is (change / start_value) × 100, null if start_value is 0. high and low reflect the extremes observed in the period.

Endpoint: /ohlc — Monthly Candles for DNB_RATE

/ohlc builds candlesticks from daily data over a chosen period. For policy rates that change infrequently, candles are still useful to visualize regimes and step changes month-by-month.

cURL

Python

import requests

params = dict(symbols='DNB_RATE', period='monthly', start='2025-10-30', end='2026-10-30', api_key='YOUR_API_KEY')
resp = requests.get('https://interestratesapi.com/api/v1/ohlc', params=params)
data = resp.json()
candles = data['rates']['DNB_RATE']
for c in candles:
print(c['period'], c['open'], c['high'], c['low'], c['close'], c['data_points'])

JavaScript

const res = await fetch(
'https://interestratesapi.com/api/v1/ohlc?symbols=DNB_RATE&period=monthly&start=2025-10-30&end=2026-10-30&api_key=YOUR_API_KEY'
);
const data = await res.json();
console.log(data.rates.DNB_RATE);

PHP

<?php
$params = http_build_query([
'symbols' => 'DNB_RATE',
'period' => 'monthly',
'start' => '2025-10-30',
'end' => '2026-10-30',
'api_key' => 'YOUR_API_KEY'
]);
$json = file_get_contents("https://interestratesapi.com/api/v1/ohlc?$params");
$data = json_decode($json, true);
print_r($data['rates']['DNB_RATE'] ?? []);
?>

Sample JSON

data_points indicates the number of underlying daily observations used to compute the candle for that period. For policy rates, candles often show step changes where open equals low or high until a decision date.

Endpoint: /convert — Compare Costs vs Another Rate

/convert computes and compares the total interest cost of a simple loan using the latest DNB_RATE against another symbol over a given term and principal amount. This is useful to visualize rate spreads in monetary terms.

cURL

Python

import requests

params = dict(from='DNB_RATE', to='ECB_MRO', amount=100000, term_months=12, api_key='YOUR_API_KEY')
r = requests.get('https://interestratesapi.com/api/v1/convert', params=params)
cmp = r.json()
print(cmp['from']['rate'], cmp['to']['rate'], cmp['difference']['rate_spread'])

JavaScript

const res = await fetch(
'https://interestratesapi.com/api/v1/convert?from=DNB_RATE&to=ECB_MRO&amount=100000&term_months=12&api_key=YOUR_API_KEY'
);
const data = await res.json();
console.log(data.from.rate, data.to.rate, data.difference.rate_spread);

PHP

<?php
$params = http_build_query([
'from' => 'DNB_RATE',
'to' => 'ECB_MRO',
'amount' => 100000,
'term_months' => 12,
'api_key' => 'YOUR_API_KEY'
]);
$json = file_get_contents("https://interestratesapi.com/api/v1/convert?$params");
$data = json_decode($json, true);
echo "Spread: " . $data['difference']['rate_spread'] . PHP_EOL;
?>

Sample JSON

difference.rate_spread equals from.rate − to.rate. The total_interest is computed over term_months on a simple basis using the latest available rate for each symbol at query time.

How to Compute Spreads and Loan Payments from DNB_RATE

In your own code, you can derive:

  • Rate spread: spread = dnb_rate − other_rate. For example, spread to ECB_MRO if you fetch both via /latest.
  • Monthly simple interest: interest = principal × (dnb_rate / 100) × (months / 12). Use this for quick comparisons or summary estimates.
  • Amortizing payment (annuity formula): If you need a fixed monthly payment from an annual nominal rate r (percent), monthly rate m = (r / 100) / 12, payment = P × m / (1 − (1 + m)^(−N)), where P is principal and N is number of months. Apply DNB_RATE as r.

Always treat DNB_RATE as an annualized rate expressed in percent. Convert to a decimal (divide by 100) before formulas, and derive period rates as needed (e.g., monthly = annual / 12 for simple approximations).

Publication Frequency, Business Days, and Caching

DNB_RATE is monthly. The API reflects the last available observation within each month. If you query for a past or mid-month date, the /historical endpoint returns the rate associated with that month’s last business day with data.

Best practices for caching and polling:

  • Polling cadence: For monthly benchmarks, refresh daily on business days or on a schedule that aligns with your internal batch jobs.
  • Cache invalidation: Invalidate your cache after month-end or when your system detects a policy decision window.
  • Time zones: Dates are returned in ISO Y-m-d. Treat them as calendar dates; for APIs that integrate multiple markets, store and compare as UTC-normalized dates.
  • Fallbacks: Use /symbols to confirm symbol availability and frequency; use /latest as your first call, and fall back to /historical if you need a specific month.

To start integrating, visit interestratesapi.com and obtain your API key. All endpoints use GET with api_key in the query string.

Error Handling and Rate Limits

Common error responses share the shape success=false and an error message. Notable cases:

  • 401: Missing or invalid api_key.
  • 403: Account without active plan.
  • 404: No symbols matched or no data for requested date/range (may include details on available ranges).
  • 422: Validation error, such as an invalid date or symbol.
  • 429: Request quota exhausted. Check Retry-After and X-RateLimit-* headers (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset) to implement backoff.

Implement retries with exponential backoff for transient 429s and network errors, and fail fast for validation errors to surface issues to upstream services promptly.

Real-World Use Cases for DNB_RATE

  • Interest rate dashboards: Chart monthly changes, calculate month-over-month deltas via /fluctuation, and render candles with /ohlc.
  • Lending and mortgage tools: Price DKK-linked loans off DNB_RATE using amortization formulas, and compare against alternative references via /convert.
  • Macro research: Pull multi-year time series and align with inflation or growth indicators; compute regime shifts using OHLC and rolling fluctuation windows.
  • Treasury and ALM: Monitor policy rate regimes, compute spreads to interbank benchmarks, and simulate balance sheet sensitivity to policy moves.
  • Risk models: Parameterize PD/LGD or scenario stress paths using the monthly policy rate as an exogenous driver fetched via /timeseries.

Putting It All Together: Minimal Integration Path

  1. Discover the symbol via /symbols to confirm frequency and currency (DNB_RATE, DKK, monthly).
  2. Fetch current value using /latest and cache it for downstream services.
  3. For analytics: pull /timeseries for historical modeling and /ohlc for visual summaries.
  4. For monitoring: compute deltas via /fluctuation and alert when change_pct exceeds thresholds.
  5. For pricing: compute spreads against alternative anchors (e.g., ECB_MRO) and estimate payments using the formulas above or via /convert for quick comparisons.

If you are ready to integrate, use this call to action to obtain an API key: Register. Also see the MCP for endpoint behavior and field definitions.

FAQ

Is DNB_RATE the same as interbank rates like CIBOR_3M?
No. DNB_RATE is a central bank policy rate. Interbank rates such as CIBOR_3M represent unsecured lending between banks and reflect market dynamics, credit, and liquidity conditions. Use /symbols to confirm the category and frequency for each symbol.

How should I handle monthly frequency when requesting a specific date?
For monthly symbols, /historical returns the last available day with data in that month. If your app displays a mid-month date, annotate it as the month’s effective policy rate and show the provided effective date from the dates map where applicable.

Can I compute a fixed monthly payment directly from DNB_RATE?
Yes. Convert the annual percent rate to a monthly decimal (r/100/12) and apply the standard annuity formula payment = P × m / (1 − (1 + m)^(−N)). Ensure you convert percentages to decimals before arithmetic.

What is the best way to detect significant moves?
Call /fluctuation with a relevant window (e.g., the last 12 months) and check change and change_pct. For visualization, /ohlc helps you see month-over-month step changes.

How do I authenticate?
Append api_key=YOUR_API_KEY as a query parameter to every GET request. Do not use headers for authentication with this API.

Ready to integrate DNB_RATE across your pricing, risk, and analytics workflows? Get started with Interest Rates API and explore more details at interestratesapi.com.

Ready to get started?

Get your API key and start validating bank data in minutes.

Get API Key