Teams building lending, treasury, and analytics software often need a clean, reliable history of a benchmark to power pricing, risk, dashboards, and backtests. In this guide you will learn how to retrieve, analyze, and operationalize Historical Norges Bank (NORGES_SIGHT_DEPOSIT) rates using the Interest Rates API: you will fetch multi-year time series, handle monthly-effective dates, build OHLC candlesticks for charting, compute changes/spreads, and export datasets for downstream pipelines.
What the NORGES_SIGHT_DEPOSIT symbol represents and how to read it
NORGES_SIGHT_DEPOSIT is the Norges Bank Sight Deposit Rate — a central bank policy rate for Norway, expressed in percent per annum and denominated in NOK. In the Interest Rates API, values are returned as numeric percentages (for example 4.50) that you can use directly in analytics or convert to a rate per period for accruals or amortization formulas.
Frequency: monthly. The API normalizes monthly symbols so that a date within a month maps to the last day that had data within that month. This is important when you request a single historical date or daily time series spanning weekends/holidays: a monthly series will repeat the same effective value across business days within that month.
Effective date handling: for monthly symbols, use the date in the dates object (when available) to understand the last update date within the month. If you are aligning this rate to other daily series, expect “step” behavior — the rate stays constant for the month until it changes.
For production integrations, see the docs and quickstarts at Explore Interest Rates API features and Try Interest Rates API.
Fetching multi-year history with /timeseries
Start with /timeseries to assemble a continuous panel of NORGES_SIGHT_DEPOSIT values across years. Because the symbol’s frequency is monthly, the API may still provide daily-indexed output where each business day within a month repeats the month’s effective rate. Your downstream code should understand this and, if needed, downsample or de-duplicate to month-end.
cURL: pull a one-year slice for NORGES_SIGHT_DEPOSIT
curl -s "https://interestratesapi.com/api/v1/latest?api_key=YOUR_API_KEY&symbols=NORGES_SIGHT_DEPOSIT"
{
"success": true,
"date": "2026-09-30",
"base": "NOK",
"rates": {
"NORGES_SIGHT_DEPOSIT": 4.5
},
"dates": {
"NORGES_SIGHT_DEPOSIT": "2026-09-30"
},
"currencies": {
"NORGES_SIGHT_DEPOSIT": "NOK"
},
"base_filter_note": null
}
Notes on interpreting this response:
- rates.NORGES_SIGHT_DEPOSIT is a date-to-value map. For monthly symbols, you may see repeated values across many dates within a month. Treat these as the month’s effective policy rate.
- frequencies lists the output cadence. Even for a monthly series, the API can expose daily-indexed points when helpful for alignment.
- currencies specifies the rate’s currency context; NORGES_SIGHT_DEPOSIT is NOK. Examples above may be illustrative; always check currencies for your symbol.
Python: load a time series to pandas and export CSV/Parquet
import requests
import pandas as pd
from pathlib import Path
API_URL = "https://interestratesapi.com/api/v1/timeseries"
params = dict(
start="2015-01-01",
end="2026-10-29",
symbols="NORGES_SIGHT_DEPOSIT",
api_key="YOUR_KEY"
)
r = requests.get(API_URL, params=params)
r.raise_for_status()
payload = r.json()
series = payload["rates"]["NORGES_SIGHT_DEPOSIT"] # dict: date -> value
df = pd.DataFrame(
[(d, v) for d, v in series.items()],
columns=["date", "rate_pct"]
).sort_values("date")
df["date"] = pd.to_datetime(df["date"])
df = df.set_index("date")
# Optional: downsample to month-end (last valid rate of each month)
df_m = df.resample("M").last()
# Save outputs
outdir = Path("data/norges_sight_deposit")
outdir.mkdir(parents=True, exist_ok=True)
df.to_csv(outdir / "norges_sight_deposit_daily.csv", index=True)
df.to_parquet(outdir / "norges_sight_deposit_daily.parquet", index=True)
df_m.to_csv(outdir / "norges_sight_deposit_monthly.csv", index=True)
df_m.to_parquet(outdir / "norges_sight_deposit_monthly.parquet", index=True)
print("Saved daily rows:", len(df), "monthly rows:", len(df_m))
This pipeline illustrates a robust pattern: request, validate, normalize to a DataFrame, resample to your desired frequency, and persist. Because NORGES_SIGHT_DEPOSIT is monthly, many daily rows in a month will carry the same value; resample to “M” if you want only the month-end cut.
JavaScript (fetch): get and parse the series for UI charts
async function loadNorgesSeries() {
const url = "https://interestratesapi.com/api/v1/timeseries?start=2020-01-01&end=2026-10-29&symbols=NORGES_SIGHT_DEPOSIT&api_key=YOUR_KEY";
const res = await fetch(url);
if (!res.ok) throw new Error("Request failed: " + res.status);
const data = await res.json();
const points = data.rates["NORGES_SIGHT_DEPOSIT"];
// Transform to array sorted by date for chart libs
return Object.keys(points).sort().map(d => ({ date: d, value: points[d] }));
}
PHP: timeseries request and parsing
<?php
$endpoint = "https://interestratesapi.com/api/v1/timeseries";
$params = http_build_query([
"start" => "2020-01-01",
"end" => "2026-10-29",
"symbols" => "NORGES_SIGHT_DEPOSIT",
"api_key" => "YOUR_KEY"
]);
$url = $endpoint . "?" . $params;
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30
]);
$body = curl_exec($ch);
if ($body === false) { throw new Exception(curl_error($ch)); }
curl_close($ch);
$json = json_decode($body, true);
$series = $json["rates"]["NORGES_SIGHT_DEPOSIT"] ?? [];
ksort($series); // date ascending
foreach ($series as $date => $value) {
// $value is the percent per annum; store or display
// echo "$date,$value\n";
}
?>
Point-in-time lookups with /historical (monthly edge cases)
Use /historical to snapshot the value effective within a specific month. For monthly symbols, the API resolves your date to the last day in that month with data. If you query a weekend or a holiday, you still receive the month’s effective rate.
cURL
Interpretation: the response reports the value effective within June 2025. Because this symbol is monthly, the value applies to the whole month; use it as a point-in-time snapshot for compliance or backfilled calculations.
Get the latest policy rate (official sample)
For dashboards and quick checks, call /latest. The following official sample shows an example where the base and currency are NOK and the September 2026 date is the latest.
Fields to note:
- rates.NORGES_SIGHT_DEPOSIT is the annual percentage rate.
- dates.NORGES_SIGHT_DEPOSIT indicates the effective or last available date for this symbol.
- currencies.NORGES_SIGHT_DEPOSIT confirms the rate’s currency context (NOK for this symbol).
Build and test quickly with Get started with Interest Rates API.
Compute change statistics with /fluctuation
To measure how NORGES_SIGHT_DEPOSIT moved over a window, use /fluctuation. It returns start/end values plus absolute and percent change, and intra-window high/low.
cURL
Use this to annotate dashboards with drawdowns or to trigger workflows when change or change_pct crosses thresholds. All values are in percent per annum; change and high/low are in the same unit as the rate.
Build candlestick charts with /ohlc
Candlestick OHLC aggregates are helpful to visualize regime shifts without plotting every point. The API computes OHLC on-the-fly from daily-indexed data.
cURL
How to read this:
- period identifies the month (YYYY-MM) when period=monthly.
- open/high/low/close are the first, max, min, and last observed values within the period.
- data_points counts how many daily-indexed observations contributed to the aggregate.
JavaScript: plot OHLC with Plotly
<!-- Include Plotly via your bundler or script tag -->
<div id="chart"></div>
<script>
(async function() {
const url = "https://interestratesapi.com/api/v1/ohlc?symbols=NORGES_SIGHT_DEPOSIT&period=monthly&start=2020-01-01&end=2026-10-29&api_key=YOUR_KEY";
const res = await fetch(url);
const json = await res.json();
const rows = json.rates["NORGES_SIGHT_DEPOSIT"];
const x = rows.map(r => r.period + "-01"); // Plotly expects a date; append day 1
const open = rows.map(r => r.open);
const high = rows.map(r => r.high);
const low = rows.map(r => r.low);
const close= rows.map(r => r.close);
const trace = {
x, open, high, low, close, type: "candlestick",
increasing: {color: "#0a7"},
decreasing: {color: "#b33"},
name: "NORGES_SIGHT_DEPOSIT"
};
const layout = { title: "Norges Bank Sight Deposit Rate — Monthly OHLC", dragmode: "pan" };
Plotly.newPlot("chart", [trace], layout);
})();
</script>
Compute spreads and payments from the returned value
You can compute spreads between NORGES_SIGHT_DEPOSIT and another benchmark by subtracting one series from the other on aligned dates. For a single date, use two /historical calls (or /latest) and compute spread = rate_A − rate_B.
To convert the returned annual percentage (r_annual) to a monthly rate for interest computations, use r_monthly = r_annual / 12 / 100 for simple proportional accruals. For amortizing loans with fixed monthly payments, you can use the standard annuity formula with r = r_annual / 12 / 100 and n = number of months:
- Payment = Principal × [ r × (1 + r)^n ] / [ (1 + r)^n − 1 ]
Use the rate values exactly as returned by the API; do not assume compounding conventions beyond your product’s requirements. If r is zero, handle the division-by-zero case by using Payment = Principal / n.
Loan-cost comparison with /convert
For quick what-if comparisons between two symbols’ latest rates on a simple loan, use /convert. This can illustrate the spread’s effect on total interest over a term.
cURL
This endpoint returns a straightforward comparison on the latest values: rate, total interest, and total payment for each symbol, plus the spread and the difference in interest cost.
Production-grade practices: dates, caching, and reliability
Publication frequency: NORGES_SIGHT_DEPOSIT is monthly. Values typically change on policy decision cycles, but you should code to the API’s effective-date semantics rather than assuming meeting dates.
Business days and missing dates: daily-indexed outputs for monthly series repeat the month’s value across business days. Non-business days will generally be absent (you may not see weekends), so avoid naively counting days from the time series length. Instead, resample or deduplicate to month-end, or use the OHLC’s data_points to understand how many observations contributed in a period.
Effective-date alignment: when joining to other daily series, forward-fill within the month or merge on month keys (YYYY-MM) if your analysis is monthly.
Caching: cache responses keyed by endpoint+params and the latest effective date. For example, cache /latest until the dates.NORGES_SIGHT_DEPOSIT changes. For /timeseries segments, cache immutable historical ranges and roll forward with a small recent window.
Rate limits: respect the headers X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. On 429, back off using the Retry-After header. Errors follow a standard shape with success=false and a descriptive error field; check for 401/403/404/422 and show actionable messages in your tooling.
Only GET is supported. Authentication always uses the api_key query parameter. The base URL is always https://interestratesapi.com/api/v1/.
Discover symbols and metadata with /symbols
Before building, confirm that NORGES_SIGHT_DEPOSIT is available under the central_bank category and review its frequency field.
Filter by category=central_bank and base=NOK to narrow the list to Norwegian policy benchmarks; parse the frequency field to programmatically set resampling rules (e.g., monthly vs daily).
PHP and JavaScript examples for point lookups
PHP: /historical
<?php
$endpoint = "https://interestratesapi.com/api/v1/historical";
$params = http_build_query([
"date" => "2026-09-30",
"symbols" => "NORGES_SIGHT_DEPOSIT",
"api_key" => "YOUR_KEY"
]);
$url = $endpoint . "?" . $params;
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15
]);
$resp = curl_exec($ch);
if ($resp === false) die(curl_error($ch));
curl_close($ch);
$data = json_decode($resp, true);
$value = $data["rates"]["NORGES_SIGHT_DEPOSIT"] ?? null;
// Use $value (percent per annum) safely in your application.
?>
JavaScript: /latest
const response = await fetch(
'https://interestratesapi.com/api/v1/latest?symbols=NORGES_SIGHT_DEPOSIT&api_key=YOUR_KEY'
);
const data = await response.json();
const latest = data.rates["NORGES_SIGHT_DEPOSIT"];
const effectiveDate = data.dates["NORGES_SIGHT_DEPOSIT"];
// Display latest and effectiveDate in your UI
Troubleshooting and common errors
- 401 Unauthorized: ensure you passed api_key in the query string (?api_key=YOUR_KEY). Keys in headers are not accepted.
- 403 Forbidden: your account may lack an active plan; handle gracefully and guide the user to update access.
- 404 Not Found: no data for the symbol or date range; the response may include details with available ranges — inspect and adjust start/end.
- 422 Validation error: check date formats (YYYY-MM-DD) and symbol spelling (must be NORGES_SIGHT_DEPOSIT).
- 429 Too Many Requests: read Retry-After and respect X-RateLimit-* headers to implement backoff.
End-to-end example: ingest, analyze, visualize, export
Combine the components above into an end-to-end job that 1) fetches a multi-year /timeseries for NORGES_SIGHT_DEPOSIT, 2) computes monthly snapshots and month-over-month changes, 3) writes CSV/Parquet, and 4) renders a lightweight OHLC view in a dashboard. The pandas pipeline earlier provides a reproducible backbone; you can schedule it via your orchestrator and publish artifacts to your BI layer. For web UIs, bind the OHLC endpoint directly to a client-side chart as shown with Plotly. For batch reporting, compute change statistics with /fluctuation to summarize movement.
For more on message formats, see MCP. When you’re ready to wire this into your platform, Register and start calling the endpoints shown above.
Official latest sample (verbatim) for quick testing
Use this exact request/response to verify your client-side parsing and logging around the fields rates, dates, and currencies.
FAQ
What unit is NORGES_SIGHT_DEPOSIT returned in?
A numeric percent per annum (for example 4.5). Convert to a per-period rate as needed (e.g., divide by 12 and by 100 for monthly proportional interest).
How does /historical behave on weekends or for monthly symbols?
For monthly symbols, the API resolves your date to the last day in that month with data. If you query a weekend or holiday, you still get the month’s effective rate.
Why do I see the same value on many consecutive dates in /timeseries?
NORGES_SIGHT_DEPOSIT is monthly. Daily-indexed outputs will repeat the value across business days in the month. Downsample to month-end if you need one row per month.
How should I cache /latest?
Cache until dates.NORGES_SIGHT_DEPOSIT changes. Also respect X-RateLimit-* headers and Retry-After on 429 responses.
Can I compute spreads versus another central bank rate?
Yes. Fetch aligned dates for both symbols (e.g., via /historical or /timeseries) and subtract. For a quick comparison on a simple loan, use /convert.
Start integrating historical Norges Bank rates into your pricing, risk, and analytics today. Read the feature overview at Explore Interest Rates API features, test endpoints with Try Interest Rates API, and Register to get your API key. For messaging and schema details, see MCP.