Norway 10 Year Bond Yield

Norway 10 Year Bond Yield

You need reliable, machine-readable access to the Norway 10-year government bond yield for dashboards, models, and research. By the end of this guide, you will be able to query the Norway 10Y yield (and the broader NOK yield curve), compute spreads, retrieve historical and intraday values, and handle edge cases like holidays and caching using the Bonds API endpoints.

Why the Norway 10Y matters for fixed-income analytics

Norway’s sovereign curve anchors NOK discount rates, informs macro expectations for Norges Bank policy, and serves as a risk-free benchmark for asset pricing in Norwegian markets. The 10-year tenor is a widely used point for duration analysis, curve trades, and cross-country spread monitoring. Yields in this API are expressed as percentages (e.g., 4.52 means 4.52%). Spreads are returned in basis points (1 bp = 0.01%). Dates are Y-m-d (e.g., 2026-10-13), and intraday timestamps are returned in ISO8601 UTC.

Illustration: Norway 10 Year Bond Yield

All examples below use the authenticated GET endpoints under https://bonds-api.com. To explore interactively, see the MCP and the site homepage at https://bonds-api.com. When you are ready, Register to obtain your API key.

Quick note: Official live sample block

The following official sample block is provided verbatim. It demonstrates a live pattern for the US 10Y. You will find Norway-specific, header-authenticated examples for all endpoints in the sections that follow.

curl -s "https://bonds-api.com/api/v1/latest?countries=US&maturities=10Y&api_key=YOUR_API_KEY"
{
"success": true,
"date": "2026-10-13",
"rates": {
"US_10Y": 5.238
},
"dates": {
"US_10Y": "2026-10-13"
},
"currencies": {
"US_10Y": "USD"
},
"meta": {
"request_id": "985f6a1d-f8a8-4a72-ae5c-d12701eb2d6f",
"timestamp": "2026-10-13T00:05:53+00:00"
}
}

Authentication and request basics

All Bonds API endpoints use GET and require your API key in the X-API-Key header. Base URL:

https://bonds-api.com/api/v1/

  • Authentication header: X-API-Key: YOUR_API_KEY
  • Countries are ISO2 (Norway = NO)
  • Maturities use common shorthand (1M, 3M, 6M, 1Y, 2Y, 5Y, 10Y, 30Y)

Production tips:

  • Yields are percentages; convert to decimals for modeling (e.g., 4.52% → 0.0452) as needed.
  • Market holidays and weekends: latest and curve endpoints return the most recent business-day snapshot.
  • Cache latest/curve for a few minutes intraday; timeseries and historical are static and can be cached longer.
  • Intraday snapshots use UTC timestamps in fetched_at.

Endpoint 1: Latest — current Norway yields

Fetch the latest available yields for Norway. You can request specific maturities to construct a mini-curve centered on the 10Y.

cURL

Python (requests)

import requests

resp = requests.get(
"https://bonds-api.com/api/v1/latest",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"countries": "NO", "maturities": "2Y,10Y"}
)
data = resp.json()
no_10y = data["data"]["NO"]["10Y"]["yield"]
no_10y_date = data["data"]["NO"]["10Y"]["date"]
print("NO 10Y:", no_10y, "on", no_10y_date)

JavaScript (fetch)

async function getLatestNO() {
const url = "https://bonds-api.com/api/v1/latest?countries=NO&maturities=2Y,10Y";
const res = await fetch(url, { headers: { "X-API-Key": "YOUR_API_KEY" } });
const json = await res.json();
const y = json.data.NO["10Y"].yield;
const d = json.data.NO["10Y"].date;
console.log(`NO 10Y ${y}% on ${d}`);
}
getLatestNO();

PHP (Guzzle)

<?php
$client = new \GuzzleHttp\Client();
$res = $client->request('GET', 'https://bonds-api.com/api/v1/latest', [
'headers' => ['X-API-Key' => 'YOUR_API_KEY'],
'query' => ['countries' => 'NO', 'maturities' => '2Y,10Y']
]);
$body = json_decode($res->getBody(), true);
echo $body['data']['NO']['10Y']['yield'];

JSON response (fields)

Field notes:

  • yield: percentage (e.g., 4.52 means 4.52%).
  • date: Y-m-d as the market date for that yield.
  • source: provenance such as “official.”

Endpoint 2: Historical — Norway 10Y on a specific date

Retrieve the Norway 10Y yield for a target market date (useful for end-of-month reports or backfilling).

cURL

Python (requests)

import requests

resp = requests.get(
"https://bonds-api.com/api/v1/historical",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"country": "NO", "maturity": "10Y", "date": "2025-06-15"}
)
row = resp.json()
print(row["maturity"], row["date"], row["yield"])

JavaScript (fetch)

async function getHistoricalNO10Y(d) {
const url = `https://bonds-api.com/api/v1/historical?country=NO&maturity=10Y&date=${d}`;
const res = await fetch(url, { headers: { "X-API-Key": "YOUR_API_KEY" }});
const json = await res.json();
console.log(`NO 10Y on ${json.date}: ${json.yield}%`);
}
getHistoricalNO10Y("2025-06-15");

PHP (file_get_contents)

<?php
$opts = ['http' => ['method' => 'GET', 'header' => "X-API-Key: YOUR_API_KEY\r\n"]];
$ctx = stream_context_create($opts);
$url = "https://bonds-api.com/api/v1/historical?country=NO&maturity=10Y&date=2025-06-15";
$json = file_get_contents($url, false, $ctx);
$data = json_decode($json, true);
echo $data['yield'];

JSON response (fields)

Notes: Yields remain percentages. If the exact date is a non-business day, ensure you query a valid market date.

Endpoint 3: Timeseries — Norway 10Y between two dates

Pull a daily timeseries for the Norway 10Y to drive charts, regressions, or risk reports.

cURL

Python (requests)

import requests

params = {
"country": "NO",
"maturity": "10Y",
"start": "2025-10-13",
"end": "2026-10-13"
}
resp = requests.get("https://bonds-api.com/api/v1/timeseries",
headers={"X-API-Key": "YOUR_API_KEY"},
params=params)
series = resp.json()["series"]
print("First 3 rows:", series[:3])

JavaScript (fetch)

async function getNO10YSeries(start, end) {
const url = `https://bonds-api.com/api/v1/timeseries?country=NO&maturity=10Y&start=${start}&end=${end}`;
const res = await fetch(url, { headers: { "X-API-Key": "YOUR_API_KEY" } });
const json = await res.json();
return json.series;
}
getNO10YSeries("2025-10-13", "2026-10-13").then(s => console.log(s.length));

PHP (Guzzle)

<?php
$client = new \GuzzleHttp\Client();
$res = $client->request('GET', 'https://bonds-api.com/api/v1/timeseries', [
'headers' => ['X-API-Key' => 'YOUR_API_KEY'],
'query' => [
'country' => 'NO',
'maturity' => '10Y',
'start' => '2025-10-13',
'end' => '2026-10-13'
]
]);
$data = json_decode($res->getBody(), true);
echo count($data['series']);

JSON response (fields)

Interpretation: Each element is a business-day close with the yield in percent. Use this to compute volatility, moving averages, or rolling correlations.

Endpoint 4: Spread — Norway vs. benchmark (10Y)

Compute cross-market spreads. This endpoint returns the spread in basis points, along with the component yields.

cURL

Python (requests)

import requests

resp = requests.get(
"https://bonds-api.com/api/v1/spread",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"country": "NO", "benchmark": "US", "maturity": "10Y"}
)
sp = resp.json()
print(sp["spread_bps"], "bps vs US, NO:", sp["country_yield"], "US:", sp["benchmark_yield"])

JavaScript (fetch)

async function getNOSpread() {
const url = "https://bonds-api.com/api/v1/spread?country=NO&benchmark=US&maturity=10Y";
const res = await fetch(url, { headers: { "X-API-Key": "YOUR_API_KEY" }});
const json = await res.json();
console.log(`Spread: ${json.spread_bps} bps (NO=${json.country_yield}% vs US=${json.benchmark_yield}%)`);
}
getNOSpread();

PHP (file_get_contents)

<?php
$opts = ['http' => ['method' => 'GET', 'header' => "X-API-Key: YOUR_API_KEY\r\n"]];
$ctx = stream_context_create($opts);
$url = "https://bonds-api.com/api/v1/spread?country=NO&benchmark=US&maturity=10Y";
$json = file_get_contents($url, false, $ctx);
$data = json_decode($json, true);
echo $data['spread_bps'];

JSON response (fields)

Notes: spread_bps is country_yield minus benchmark_yield in basis points. Use this for cross-market relative value dashboards.

Endpoint 5: Curve — full Norway yield curve

Get a full curve snapshot for Norway to build interpolated term structures and value cash flows. If you only need 10Y, latest is sufficient; curve is ideal for curve-fitting and scenario analysis.

cURL

Python (requests)

import requests

resp = requests.get(
"https://bonds-api.com/api/v1/curve",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"country": "NO"}
)
curve = resp.json()
tenor_10y = curve["curve"]["10Y"]
print(curve["date"], "NO 10Y:", tenor_10y)

JavaScript (fetch)

async function getNOCurve(date) {
const q = date ? `&date=${date}` : "";
const url = `https://bonds-api.com/api/v1/curve?country=NO${q}`;
const res = await fetch(url, { headers: { "X-API-Key": "YOUR_API_KEY" }});
const json = await res.json();
console.log("Inverted:", json.inverted, "10Y:", json.curve["10Y"]);
}
getNOCurve();

PHP (Guzzle)

<?php
$client = new \GuzzleHttp\Client();
$res = $client->request('GET', 'https://bonds-api.com/api/v1/curve', [
'headers' => ['X-API-Key' => 'YOUR_API_KEY'],
'query' => ['country' => 'NO']
]);
$data = json_decode($res->getBody(), true);
echo $data['curve']['10Y'];

JSON response (fields)

Notes:

  • Each tenor is a percentage yield for the given date.
  • inverted is a boolean flag indicating whether the curve is inverted (e.g., short end above long end).

Norway curve snapshot (tenors)

TenorYield (%)
1M5.31
3M5.27
6M5.18
1Y4.98
2Y4.25
5Y4.39
10Y4.52
30Y4.71

Endpoint 6: Intraday — Norway 10Y snapshots

When you need within-day monitoring of the 10Y, use intraday snapshots. Timestamps are UTC.

cURL

Python (requests)

import requests

resp = requests.get(
"https://bonds-api.com/api/v1/intraday",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"country": "NO", "maturity": "10Y", "date": "2026-10-13"}
)
snap = resp.json()
for row in snap["snapshots"]:
print(row["fetched_at"], row["yield"])

JavaScript (fetch)

async function getNO10YIntraday(date) {
const url = `https://bonds-api.com/api/v1/intraday?country=NO&maturity=10Y&date=${date}`;
const res = await fetch(url, { headers: { "X-API-Key": "YOUR_API_KEY" }});
const json = await res.json();
json.snapshots.forEach(s => console.log(`${s.fetched_at} ${s.yield}%`));
}
getNO10YIntraday("2026-10-13");

PHP (file_get_contents)

<?php
$opts = ['http' => ['method' => 'GET', 'header' => "X-API-Key: YOUR_API_KEY\r\n"]];
$ctx = stream_context_create($opts);
$url = "https://bonds-api.com/api/v1/intraday?country=NO&maturity=10Y&date=2026-10-13";
$json = file_get_contents($url, false, $ctx);
$data = json_decode($json, true);
echo $data['count'];

JSON response (fields)

Interpretation: Use fetched_at to align to your charting timezone. Intraday can be cached for minutes; do not assume every snapshot is present for every minute.

Endpoint 7: Fluctuation — change, min, max over a period

Summarize performance of Norway 10Y over an interval for quick analytics and trend checks.

cURL

Python (requests)

import requests

resp = requests.get(
"https://bonds-api.com/api/v1/fluctuation",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"countries": "NO", "maturity": "10Y", "start": "2025-10-13", "end": "2026-10-13"}
)
fl = resp.json()["data"]["NO"]
print("Δ:", fl["change"], "Start:", fl["start_yield"], "End:", fl["end_yield"], "Min:", fl["min"], "Max:", fl["max"])

JavaScript (fetch)

async function getNO10YFluctuation(start, end) {
const url = `https://bonds-api.com/api/v1/fluctuation?countries=NO&maturity=10Y&start=${start}&end=${end}`;
const res = await fetch(url, { headers: { "X-API-Key": "YOUR_API_KEY" }});
const json = await res.json();
console.log(json.data.NO);
}
getNO10YFluctuation("2025-10-13", "2026-10-13");

PHP (Guzzle)

<?php
$client = new \GuzzleHttp\Client();
$res = $client->request('GET', 'https://bonds-api.com/api/v1/fluctuation', [
'headers' => ['X-API-Key' => 'YOUR_API_KEY'],
'query' => [
'countries' => 'NO',
'maturity' => '10Y',
'start' => '2025-10-13',
'end' => '2026-10-13'
]
]);
$data = json_decode($res->getBody(), true);
print_r($data['data']['NO']);

JSON response (fields)

Notes: All values are in percent. change is end_yield minus start_yield (percentage points). Use this for period summaries and risk commentary.

Building and using the Norway 10Y yield and curve

Common workflows for NO 10Y and the broader curve include:

  • Dashboards: Combine /latest for 10Y with /spread against US or DE for relative value tiles.
  • Risk tools: Use /timeseries to estimate DV01 scaling through historical 10Y volatility.
  • Macro research: Evaluate curve shape via /curve and check inversion flags and tenor differentials.
  • Intraday monitoring: Trigger alerts from /intraday snapshots when the NO 10Y crosses thresholds.

Update timing: Yields reflect business-day closes or authoritative intraday sources depending on endpoint. For production, treat weekends and Norway market holidays as non-updating days; latest and curve will return the most recent valid market date. Cache curve and latest for a small interval (e.g., a few minutes) to avoid hitting rate limits. Historical/timeseries/fluctuation results are stable and can be cached for longer.

Developer ergonomics: test endpoints quickly in the Bonds API MCP and consult the homepage https://bonds-api.com for coverage notes.

Error handling and operational tips

Standard error responses have success=false with an error message. Typical HTTP statuses you may encounter:

  • 401: Missing or invalid X-API-Key (ensure header is set correctly).
  • 403: Account quota exceeded (reduce request frequency or add caching).
  • 404: No data for requested country/maturity/date (check ISO2, maturity code, and market date).
  • 422: Invalid parameter (e.g., date format, unknown ISO2).
  • 429: Rate limit exceeded (backoff and retry with jitter; increase cache duration).
  • 500: Server error (implement retries with exponential backoff).

Timestamp formats: business-day dates are Y-m-d; intraday fetched_at is ISO8601 UTC (for example, 2026-10-13T12:00:00Z). Treat yields as numeric percentages; convert to bp or decimals as needed. When combining endpoints to assemble your own curve, request multiple maturities via /latest or use /curve for a coherent snapshot dated to the same market day.

Putting it together: minimal 10Y workflow

For a Norway 10Y tile in your app:

  1. Call /api/v1/latest with countries=NO&maturities=10Y.
  2. Parse data.NO["10Y"].yield and data.NO["10Y"].date.
  3. Optionally call /api/v1/spread with benchmark=US for a bps spread label.
  4. Cache results for a short interval; refresh on market reopen.

For curve analytics, use /api/v1/curve to get coherent tenors for interpolation and bootstrapping. For volatility estimates, use /api/v1/timeseries over your modeling window. For performance headlines, use /api/v1/fluctuation with start and end dates aligned to your reporting period.

Additional references and getting access

Explore more at bonds-api.com. If you want to try requests interactively, open the MCP. When you’re ready to integrate, Register to get your API key. You can also use these direct links: Register for Bonds API, Bonds API MCP, and Get started with Bonds API.

FAQ

How are yields expressed in the API?
All yields are percentages (e.g., 4.52). When computing spreads or analytics, convert to basis points by multiplying by 100, or to decimals by dividing by 100.

Which timezone do timestamps use?
Business-day dates use Y-m-d without a timezone (market date). Intraday fetched_at values are ISO8601 UTC (Z). Align these to your local display timezone as needed.

What happens on Norwegian market holidays or weekends?
/latest and /curve return the most recent available business-day data. /historical requires a valid market date. /timeseries will omit non-business days.

How often should I refresh data?
For static endpoints (historical, timeseries, fluctuation), cache for hours or days. For /latest and /curve, refresh intraday with modest caching (minutes). For /intraday, poll judiciously and cache recent snapshots.

How do I compute a NO–US 10Y spread?
Use /api/v1/spread with country=NO, benchmark=US, maturity=10Y. The response includes spread_bps plus both component yields for validation.

If you need to embed the Norway 10-year bond yield and curve into production systems, the endpoints above are all you need. Start building now and get your key here: Register.

Start building with bond data today

Get your API key and access sovereign bond yields across 60+ countries. 7-day free trial, no credit card required.