Netherlands 10Y Sovereign Yields: Latest and Curve via API

Netherlands 10Y Sovereign Yields: Latest and Curve via API

Problem: you need the Netherlands 10-year sovereign yield right now, historical context across business days, intraday snapshots, and a full NL yield curve you can chart or feed into risk and pricing models. By the end of this article, you’ll be able to programmatically fetch the NL 10Y via HTTP, compare it to benchmarks, build a Dutch curve across maturities, and integrate the data into dashboards or analytics pipelines using the Bonds API.

What you can build with Netherlands 10Y yields from Bonds API

With the endpoints below, fixed-income teams can:

Illustration: Netherlands 10Y Sovereign Yields: Latest and Curve via API
  • Display the latest NL 10Y alongside 2Y, 5Y, and 30Y to visualize term structure.
  • Compute changes over a research window and flag min/max ranges for risk limits.
  • Track intraday snapshots of the NL 10Y to monitor liquidity and volatility.
  • Compare NL 10Y to a benchmark (e.g., US) in basis points for cross-market views.

All examples use the documented endpoints at bonds-api.com and the base URL https://bonds-api.com/api/v1/. Authentication uses an X-API-Key header. All requests are GET.

Data fundamentals and units

The API returns sovereign bond yields as percentages (e.g., 4.52 means 4.52%). When a field name ends with _bps, the unit is basis points (1 bp = 0.01%). Dates are Y-m-d (e.g., 2026-10-06). Intraday timestamps are ISO 8601 with Z for UTC. The Netherlands is identified by ISO2 code NL.

Market timing matters. Daily endpoints reflect business days; on weekends and Dutch market holidays there will be no new daily values, and the latest date will point to the most recent business day with data. Use the time series and fluctuation endpoints to handle gaps gracefully in analytics. Cache stable daily data at the country/maturity/date level to reduce calls, and prefer cache-busting only when you expect a new fix (e.g., once per business day) or when pulling intraday snapshots.

Latest NL yields for specific maturities

Use /latest to get current yields for Netherlands across selected maturities. Omit maturities to fetch all available tenors.

cURL

curl -s "https://bonds-api.com/api/v1/latest?countries=US&maturities=10Y&api_key=YOUR_API_KEY"

Python (requests)

import requests

resp = requests.get(
"https://bonds-api.com/api/v1/latest",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"countries": "NL", "maturities": "2Y,10Y"}
)
data = resp.json()
# Example: read NL 10Y
nl_10y = data["data"]["NL"]["10Y"]["yield"]
nl_10y_date = data["data"]["NL"]["10Y"]["date"]

JavaScript (fetch)

const url = "https://bonds-api.com/api/v1/latest?countries=NL&maturities=2Y,10Y";
fetch(url, { headers: { "X-API-Key": "YOUR_API_KEY" } })
.then(r => r.json())
.then(json => {
const nl10y = json.data.NL["10Y"].yield;
const nl10yDate = json.data.NL["10Y"].date;
console.log("NL 10Y:", nl10y, "as of", nl10yDate);
});

PHP (file_get_contents)

<?php
$opts = ["http" => ["header" => "X-API-Key: YOUR_API_KEY\r\n"]];
$context = stream_context_create($opts);
$url = "https://bonds-api.com/api/v1/latest?countries=NL&maturities=2Y,10Y";
$json = file_get_contents($url, false, $context);
$data = json_decode($json, true);
$nl10y = $data["data"]["NL"]["10Y"]["yield"];
$nl10yDate = $data["data"]["NL"]["10Y"]["date"];
echo "NL 10Y {$nl10y}% on {$nl10yDate}\n";

JSON response (fields)

{
"success": true,
"date": "2026-10-06",
"rates": {
"US_10Y": 5.309
},
"dates": {
"US_10Y": "2026-10-06"
},
"currencies": {
"US_10Y": "USD"
},
"meta": {
"request_id": "84d8b6e1-a67c-42e8-808b-fbf4200b56e1",
"timestamp": "2026-10-06T00:04:04+00:00"
}
}

Interpretation: yields are percentages; date is the business date for the fixing; source indicates the data origin. The 10Y field is the headline Netherlands 10-year yield.

Point-in-time NL 10Y on a specific date

Use /historical to retrieve the yield on a given calendar date. If the date is a non-business day, expect a 404; query the previous business day or use /timeseries to span a range.

cURL

Python (requests)

import requests

params = {"country": "NL", "maturity": "10Y", "date": "2025-06-15"}
r = requests.get("https://bonds-api.com/api/v1/historical",
headers={"X-API-Key": "YOUR_API_KEY"}, params=params)
j = r.json()
point = j["yield"] # percentage
asof = j["date"] # "YYYY-MM-DD"

JavaScript (fetch)

const params = new URLSearchParams({ country: "NL", maturity: "10Y", date: "2025-06-15" });
fetch("https://bonds-api.com/api/v1/historical?" + params.toString(), {
headers: { "X-API-Key": "YOUR_API_KEY" }
}).then(r => r.json()).then(j => {
console.log(`NL 10Y on ${j.date}: ${j.yield}%`);
});

PHP (file_get_contents)

<?php
$params = http_build_query(["country" => "NL", "maturity" => "10Y", "date" => "2025-06-15"]);
$context = stream_context_create(["http" => ["header" => "X-API-Key: YOUR_API_KEY\r\n"]]);
$j = file_get_contents("https://bonds-api.com/api/v1/historical?$params", false, $context);
$resp = json_decode($j, true);
echo "As of " . $resp["date"] . " NL 10Y=" . $resp["yield"] . "%\n";

JSON response (fields)

Yield is a percentage for the requested maturity and date, with source indicating origin.

NL 10Y time series between two dates

Use /timeseries to pull a contiguous sequence of business-day yields. This is the fastest way to chart the NL 10Y or compute rolling stats.

cURL

Python (requests)

import requests, statistics

params = {"country": "NL", "maturity": "10Y", "start": "2025-10-06", "end": "2026-10-06"}
r = requests.get("https://bonds-api.com/api/v1/timeseries",
headers={"X-API-Key": "YOUR_API_KEY"}, params=params)
ts = r.json()["series"] # list of {"date": "...", "yield": ...}
yields = [pt["yield"] for pt in ts]
avg = statistics.mean(yields)

JavaScript (fetch)

const p = new URLSearchParams({ country: "NL", maturity: "10Y", start: "2025-10-06", end: "2026-10-06" });
fetch("https://bonds-api.com/api/v1/timeseries?" + p.toString(), {
headers: { "X-API-Key": "YOUR_API_KEY" }
})
.then(r => r.json())
.then(j => console.log("Points:", j.series.length));

PHP (file_get_contents)

<?php
$query = http_build_query(["country" => "NL", "maturity" => "10Y", "start" => "2025-10-06", "end" => "2026-10-06"]);
$ctx = stream_context_create(["http" => ["header" => "X-API-Key: YOUR_API_KEY\r\n"]]);
$raw = file_get_contents("https://bonds-api.com/api/v1/timeseries?$query", false, $ctx);
$data = json_decode($raw, true);
echo "First point: " . $data["series"][0]["date"] . " = " . $data["series"][0]["yield"] . "%\n";

JSON response (fields)

Each element is a business-day observation with Y-m-d and yield in percent. Weekends and holidays are absent by design; fill or forward-fill as needed for models that require daily continuity.

Spread: NL vs benchmark (bps)

Use /spread to compute the Netherlands spread versus a benchmark country. The example shows NL vs US at 10Y.

cURL

Python (requests)

import requests
params = {"country": "NL", "benchmark": "US", "maturity": "10Y"}
r = requests.get("https://bonds-api.com/api/v1/spread",
headers={"X-API-Key": "YOUR_API_KEY"}, params=params)
s = r.json()
bps = s["spread_bps"] # integer bps
nl = s["country_yield"] # %
us = s["benchmark_yield"] # %

JavaScript (fetch)

const p = new URLSearchParams({ country: "NL", benchmark: "US", maturity: "10Y" });
fetch("https://bonds-api.com/api/v1/spread?" + p.toString(), {
headers: { "X-API-Key": "YOUR_API_KEY" }
}).then(r => r.json()).then(s => {
console.log(`Spread: ${s.spread_bps} bps (NL=${s.country_yield}%, US=${s.benchmark_yield}%)`);
});

PHP (file_get_contents)

<?php
$q = http_build_query(["country" => "NL", "benchmark" => "US", "maturity" => "10Y"]);
$ctx = stream_context_create(["http" => ["header" => "X-API-Key: YOUR_API_KEY\r\n"]]);
$raw = file_get_contents("https://bonds-api.com/api/v1/spread?$q", false, $ctx);
$s = json_decode($raw, true);
echo "NL vs US 10Y spread: " . $s["spread_bps"] . " bps\n";

JSON response (fields)

spread_bps is basis points (percentage difference times 100). Use this for dashboards and cross-country comparisons.

Full Netherlands yield curve

Use /curve to get the entire Dutch yield curve on a single date, which you can plot or use to bootstrap term structures. If you omit date, you get the latest available business day.

cURL

Python (requests)

import requests
r = requests.get("https://bonds-api.com/api/v1/curve",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"country": "NL"})
curve = r.json()
tenors = curve["curve"].keys()
is_inverted = curve["inverted"]

JavaScript (fetch)

fetch("https://bonds-api.com/api/v1/curve?country=NL", {
headers: { "X-API-Key": "YOUR_API_KEY" }
}).then(r => r.json()).then(c => {
console.log("Date:", c.date, "Inverted:", c.inverted);
console.log("10Y:", c.curve["10Y"], "%");
});

PHP (file_get_contents)

<?php
$ctx = stream_context_create(["http" => ["header" => "X-API-Key: YOUR_API_KEY\r\n"]]);
$raw = file_get_contents("https://bonds-api.com/api/v1/curve?country=NL", false, $ctx);
$c = json_decode($raw, true);
echo "Curve date: " . $c["date"] . ", inverted=" . ($c["inverted"] ? "yes" : "no") . "\n";
echo "NL 10Y: " . $c["curve"]["10Y"] . "%\n";

JSON response (fields)

curve is a tenor-to-yield map in percent. inverted is a Boolean flag indicating whether short rates exceed long rates across the structure. To compute spreads or fit splines, read values by tenor keys.

Curve maturities at a glance

MaturityValue typeUnit
1M, 3M, 6MYieldPercent
1Y, 2Y, 5YYieldPercent
10Y, 30YYieldPercent

Intraday snapshots for NL 10Y

Use /intraday for time-stamped snapshots within a single date, useful for trading monitors or high-frequency alerts. Timestamps are UTC.

cURL

Python (requests)

import requests
p = {"country": "NL", "maturity": "10Y", "date": "2026-10-06"}
r = requests.get("https://bonds-api.com/api/v1/intraday",
headers={"X-API-Key": "YOUR_API_KEY"}, params=p)
snapshots = r.json()["snapshots"] # each has "yield", "fetched_at", "source"

JavaScript (fetch)

const p = new URLSearchParams({ country: "NL", maturity: "10Y", date: "2026-10-06" });
fetch("https://bonds-api.com/api/v1/intraday?" + p.toString(), {
headers: { "X-API-Key": "YOUR_API_KEY" }
}).then(r => r.json()).then(j => {
j.snapshots.forEach(s => console.log(s.fetched_at, s.yield));
});

PHP (file_get_contents)

<?php
$q = http_build_query(["country" => "NL", "maturity" => "10Y", "date" => "2026-10-06"]);
$ctx = stream_context_create(["http" => ["header" => "X-API-Key: YOUR_API_KEY\r\n"]]);
$raw = file_get_contents("https://bonds-api.com/api/v1/intraday?$q", false, $ctx);
$j = json_decode($raw, true);
echo "Count: " . $j["count"] . ", first timestamp: " . $j["snapshots"][0]["fetched_at"] . "\n";

JSON response (fields)

Use fetched_at (UTC) to sequence intraday points. For caching, treat intraday data as volatile; avoid long-lived caches on trading days.

Fluctuation: NL 10Y change, min, and max

Use /fluctuation to summarize changes over a time window. This is ideal for risk reports, alert thresholds, or weekly notes.

cURL

Python (requests)

import requests
p = {"countries": "NL", "maturity": "10Y", "start": "2025-10-06", "end": "2026-10-06"}
r = requests.get("https://bonds-api.com/api/v1/fluctuation",
headers={"X-API-Key": "YOUR_API_KEY"}, params=p)
f = r.json()["data"]["NL"]
delta = f["change"]; low = f["min"]; high = f["max"]

JavaScript (fetch)

const params = new URLSearchParams({ countries: "NL", maturity: "10Y", start: "2025-10-06", end: "2026-10-06" });
fetch("https://bonds-api.com/api/v1/fluctuation?" + params.toString(), {
headers: { "X-API-Key": "YOUR_API_KEY" }
}).then(r => r.json()).then(j => {
const s = j.data.NL;
console.log(`Δ: ${s.change}%, min: ${s.min}%, max: ${s.max}%`);
});

PHP (file_get_contents)

<?php
$q = http_build_query(["countries" => "NL", "maturity" => "10Y", "start" => "2025-10-06", "end" => "2026-10-06"]);
$ctx = stream_context_create(["http" => ["header" => "X-API-Key: YOUR_API_KEY\r\n"]]);
$raw = file_get_contents("https://bonds-api.com/api/v1/fluctuation?$q", false, $ctx);
$j = json_decode($raw, true);
$nl = $j["data"]["NL"];
echo "Start: " . $nl["start_yield"] . "%, End: " . $nl["end_yield"] . "%, Δ: " . $nl["change"] . "%\n";

JSON response (fields)

All values are percentages; change is end_yield − start_yield. For multi-country reports, pass ISO2 codes comma-separated in countries.

Error handling and reliability

All endpoints return success=false with an error message for common errors. Build robust clients by checking HTTP status and the success flag.

  • 401: Missing or invalid X-API-Key.
  • 403: Quota exceeded.
  • 404: No data for the requested combination (e.g., non-business day exact fetch).
  • 422: Invalid parameters (date format, unknown ISO2, etc.).
  • 429: Rate limit exceeded — back off and retry later.
  • 500: Server error — retry with jitter and monitor.

For resilient integrations, cache daily results by country+maturity+date, retry idempotent GETs with exponential backoff on transient errors, and precompute analytics (spreads, deltas) downstream to minimize repeated calls.

Building an NL yield curve programmatically

When you need the Netherlands curve for pricing or analytics, prefer /curve to fetch all tenors consistently stamped to one date. If you need only a subset or want to mix tenors across countries (e.g., for curve spreads), /latest supports multiple maturities in one request and multiple countries with comma-separated ISO2 codes. For example, you could call /latest with countries=NL and maturities=2Y,5Y,10Y,30Y and assemble the array grouped by tenor.

On business days, update once after the official fix is available; during holidays, your previous business-day curve remains valid for daily dashboards. For intraday sensitivity analysis, use /intraday for 10Y and key tenors where provided, but do not mix intraday points with prior-day tenors to avoid inconsistent curves.

Where this fits in your stack

Common use cases include:

  • Financial dashboards: show NL 10Y, 2s10s spread, and curve slope with color alerts.
  • Portfolio risk: shock scenarios using min/max from /fluctuation over configurable windows.
  • Economic research: compute rolling averages from /timeseries and benchmark spreads from /spread.

Explore more at bonds-api.com, test endpoints in the MCP, and Register for an API key.

Authentication, performance, and practical notes

  • Authentication: include X-API-Key: YOUR_API_KEY in the request headers for all endpoints.
  • Method: all endpoints are HTTP GET. Do not send POST, PUT, or DELETE.
  • Timezones: daily dates are Y-m-d without time; intraday fetched_at values are UTC ISO 8601.
  • Caching: cache daily responses keyed by country, maturity, and date; set shorter TTL for intraday.
  • Holidays: the Netherlands trading calendar will skip certain dates; expect gaps in /timeseries and reuse the last business day in /latest or /curve when no new data is available.

Alternate sample response block (verbatim)

The following example block is provided verbatim for reference.

FAQ

How are Netherlands yields expressed?
All yield fields are percentages (e.g., 4.52 means 4.52%). Spread fields ending with _bps are basis points.

What date format and timezone should I expect?
Daily dates use Y-m-d (e.g., 2026-10-06). Intraday timestamps use ISO 8601 with Z (UTC). Treat all intraday times as UTC.

How often are daily Netherlands yields updated?
Daily endpoints reflect the most recent business day with data. On Dutch market holidays and weekends, the latest date remains the prior business day.

How do I build the NL curve?
Call /api/v1/curve?country=NL to get all tenors on one date. If you need a subset or cross-country comparisons, call /api/v1/latest with multiple maturities and assemble the curve client-side.

What errors should I handle?
Handle 401 (missing/invalid key), 403 (quota), 404 (no data for that combination), 422 (invalid params), 429 (rate limit), and 500 (server error). Always check success in the JSON body.

Ready to integrate Netherlands sovereign yields into your application? Get started with Bonds API or Register for Bonds API, explore endpoints in the Bonds API MCP, then build and deploy. For production onboarding, also see the Bonds API documentation and the MCP console.

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.