New Zealand 10 Year Bond Yield

New Zealand 10 Year Bond Yield

You need reliable, machine-readable access to the New Zealand 10-year government bond yield (NZ 10Y) for research, dashboards, or trading models. By the end of this article you will be able to fetch the latest NZ 10Y yield, query historical and intraday data, compute spreads against benchmarks, and assemble a full New Zealand yield curve using the Bonds API over simple GET requests.

Scope and what you can build

This guide focuses on the New Zealand 10-year sovereign bond yield. You will learn how to query:

Illustration: New Zealand 10 Year Bond Yield
  • Latest NZ 10Y yield for today’s business day
  • Historical daily yields and longer time series
  • Intraday snapshots for research and monitoring
  • Spreads vs. a benchmark (e.g., US 10Y)
  • The full New Zealand yield curve and how to use it

All endpoints come from bonds-api.com and return JSON, suitable for fixed-income analytics, portfolio risk tooling, and fintech integrations.

Data model: yields, dates, and time

Unless otherwise noted, yields are expressed as percentages (e.g., 4.52 means 4.52% per annum). Spread fields ending in “_bps” are basis points (1 bp = 0.01%). Daily dates use the YYYY-MM-DD format (ISO 8601 calendar date). Timestamps use ISO 8601 with timezone, typically in UTC (e.g., 2026-10-16T12:00:00Z). Currency fields indicate the sovereign’s local currency; for New Zealand, that is NZD.

Authentication and base URL

All endpoints are HTTP GET and served from:

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

Authentication is required for every request. Use your API key as an HTTP header:

  • X-API-Key: YOUR_API_KEY

To obtain your key, visit Register or Register for Bonds API. You can also explore developer tools at the MCP and the plain link Bonds API MCP.

Official live sample for NZ 10Y

The following live sample shows a direct call for the New Zealand 10Y via the latest endpoint. Copy it to verify connectivity and data shape on your system.

curl -s "https://bonds-api.com/api/v1/latest?countries=NZ&maturities=10Y&api_key=YOUR_API_KEY"
{
"success": true,
"date": "2026-10-16",
"rates": {
"NZ_10Y": 4.985
},
"dates": {
"NZ_10Y": "2026-10-16"
},
"currencies": {
"NZ_10Y": "NZD"
},
"meta": {
"request_id": "8905b02d-f697-4078-9673-3381511243b3",
"timestamp": "2026-10-16T00:04:45+00:00"
}
}

How to read this:

  • rates.NZ_10Y is the 10-year New Zealand sovereign yield in percent.
  • date and dates.NZ_10Y provide the effective market date (YYYY-MM-DD).
  • currencies.NZ_10Y shows NZD.
  • meta.timestamp is an ISO 8601 timestamp, typically in UTC.

Current yields: /latest

Use this endpoint to fetch the latest available NZ yields. You can request multiple maturities to build a curve or a dashboard table.

cURL

JSON response

Interpretation:

  • data.NZ.10Y.yield is the 10-year yield in percent.
  • data.NZ.10Y.date is the market date (YYYY-MM-DD) for that quote.
  • source indicates the data provenance (e.g., official).

Python (requests)

import requests

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

JavaScript (fetch)

const url = new URL("https://bonds-api.com/api/v1/latest");
url.searchParams.set("countries", "NZ");
url.searchParams.set("maturities", "2Y,10Y");

fetch(url.toString(), {
method: "GET",
headers: { "X-API-Key": "YOUR_API_KEY" }
})
.then(r => r.json())
.then(json => {
const y = json.data.NZ["10Y"].yield;
const d = json.data.NZ["10Y"].date;
console.log(`NZ 10Y: ${y}% on ${d}`);
});

PHP (file_get_contents)

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

Historical daily yield: /historical

Retrieve the NZ 10Y yield for a specific calendar date. If the date is a non-trading day, the dataset returns an error; use the nearest business day or switch to /timeseries.

cURL

JSON response

Fields:

  • yield: percent
  • date: YYYY-MM-DD for the requested observation
  • source: provenance label

Python

import requests

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

JavaScript

const u = new URL("https://bonds-api.com/api/v1/historical");
u.searchParams.set("country", "NZ");
u.searchParams.set("maturity", "10Y");
u.searchParams.set("date", "2025-06-15");

fetch(u.toString(), { headers: { "X-API-Key": "YOUR_API_KEY" } })
.then(r => r.json())
.then(j => console.log(j.maturity, j.yield, j.date));

PHP

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

Time series: /timeseries

Fetch an NZ 10Y daily series between two dates inclusive. This is the basis for backtests, trend analysis, and volatility estimates. If the date range spans weekends or New Zealand market holidays, those days simply do not appear in the series.

cURL

JSON response

Interpretation:

  • series is an array of daily observations with date in YYYY-MM-DD and yield in percent.

Python

import requests

q = {
"country": "NZ",
"maturity": "10Y",
"start": "2025-10-16",
"end": "2026-10-16"
}
r = requests.get("https://bonds-api.com/api/v1/timeseries",
headers={"X-API-Key": "YOUR_API_KEY"},
params=q)
r.raise_for_status()
ts = r.json()["series"]
print("Observations:", len(ts), "First:", ts[0])

JavaScript

const tsUrl = new URL("https://bonds-api.com/api/v1/timeseries");
Object.entries({
country: "NZ",
maturity: "10Y",
start: "2025-10-16",
end: "2026-10-16"
}).forEach(([k, v]) => tsUrl.searchParams.set(k, v));

fetch(tsUrl.toString(), { headers: { "X-API-Key": "YOUR_API_KEY" } })
.then(r => r.json())
.then(j => console.log("Count:", j.series.length));

PHP

<?php
$u = "https://bonds-api.com/api/v1/timeseries?country=NZ&maturity=10Y&start=2025-10-16&end=2026-10-16";
$ctx = stream_context_create(["http" => ["method" => "GET", "header" => "X-API-Key: YOUR_API_KEY\r\n"]]);
$raw = file_get_contents($u, false, $ctx);
$j = json_decode($raw, true);
echo "Count: " . count($j["series"]) . PHP_EOL;

Spread vs benchmark: /spread

Compute the NZ 10Y spread vs a benchmark (e.g., US 10Y). Spreads are returned in basis points (bps). You can omit the maturity to default to 10Y.

cURL

JSON response

Interpretation:

  • spread_bps: NZ 10Y minus benchmark 10Y in basis points.
  • country_yield and benchmark_yield: both in percent.

Python

import requests

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

JavaScript

const sp = new URL("https://bonds-api.com/api/v1/spread");
sp.searchParams.set("country", "NZ");
sp.searchParams.set("benchmark", "US");
sp.searchParams.set("maturity", "10Y");

fetch(sp.toString(), { headers: { "X-API-Key": "YOUR_API_KEY" } })
.then(r => r.json())
.then(j => console.log(`Spread: ${j.spread_bps} bps`));

PHP

<?php
$u = "https://bonds-api.com/api/v1/spread?country=NZ&benchmark=US&maturity=10Y";
$ctx = stream_context_create(["http" => ["method" => "GET", "header" => "X-API-Key: YOUR_API_KEY\r\n"]]);
$raw = file_get_contents($u, false, $ctx);
$j = json_decode($raw, true);
echo "Spread (bps): " . $j["spread_bps"] . PHP_EOL;

Full New Zealand yield curve: /curve

Get a snapshot of NZ yields across maturities to build the curve. You can query the latest or specify a date.

cURL

JSON response

Interpretation:

  • curve: key-value map of maturity to yield in percent.
  • inverted: boolean flag if shorter maturities exceed longer ones overall.
  • date: market date of the curve snapshot.

Python

import requests

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

JavaScript

const cv = new URL("https://bonds-api.com/api/v1/curve");
cv.searchParams.set("country", "NZ");

fetch(cv.toString(), { headers: { "X-API-Key": "YOUR_API_KEY" } })
.then(r => r.json())
.then(j => console.log("10Y:", j.curve["10Y"], "Inverted:", j.inverted));

PHP

<?php
$u = "https://bonds-api.com/api/v1/curve?country=NZ";
$ctx = stream_context_create(["http" => ["method" => "GET", "header" => "X-API-Key: YOUR_API_KEY\r\n"]]);
$raw = file_get_contents($u, false, $ctx);
$j = json_decode($raw, true);
echo "10Y: " . $j["curve"]["10Y"] . " Inverted: " . ($j["inverted"] ? "yes" : "no") . PHP_EOL;

Intraday snapshots: /intraday

Use this for sub-daily NZ 10Y monitoring. Timestamps are returned in UTC; align them to your display timezone as needed. The date parameter identifies the market day whose intraday snapshots you want.

cURL

JSON response

Interpretation:

  • snapshots[].yield: percent
  • snapshots[].fetched_at: ISO 8601 timestamp (UTC)
  • count: number of snapshots for the date

Python

import requests
p = {"country": "NZ", "maturity": "10Y", "date": "2026-10-16"}
j = requests.get("https://bonds-api.com/api/v1/intraday",
headers={"X-API-Key": "YOUR_API_KEY"},
params=p).json()
for s in j["snapshots"]:
print(s["fetched_at"], s["yield"])

JavaScript

const intr = new URL("https://bonds-api.com/api/v1/intraday");
Object.entries({ country: "NZ", maturity: "10Y", date: "2026-10-16" })
.forEach(([k, v]) => intr.searchParams.set(k, v));

fetch(intr.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

<?php
$u = "https://bonds-api.com/api/v1/intraday?country=NZ&maturity=10Y&date=2026-10-16";
$ctx = stream_context_create(["http" => ["method" => "GET", "header" => "X-API-Key: YOUR_API_KEY\r\n"]]);
$raw = file_get_contents($u, false, $ctx);
$j = json_decode($raw, true);
foreach ($j["snapshots"] as $s) {
echo $s["fetched_at"] . " " . $s["yield"] . PHP_EOL;
}

Fluctuation summary: /fluctuation

Summarize NZ 10Y change between two dates, plus min/max in the period. Useful for reporting, alerts, and chart annotations.

cURL

JSON response

Interpretation:

  • change: end_yield − start_yield, in percent.
  • min and max: period extremes, in percent.

Python

import requests
q = {"countries": "NZ", "maturity": "10Y", "start": "2025-10-16", "end": "2026-10-16"}
j = requests.get("https://bonds-api.com/api/v1/fluctuation",
headers={"X-API-Key": "YOUR_API_KEY"},
params=q).json()
nz = j["data"]["NZ"]
print("Δ:", nz["change"], "Min:", nz["min"], "Max:", nz["max"])

JavaScript

const fl = new URL("https://bonds-api.com/api/v1/fluctuation");
Object.entries({ countries: "NZ", maturity: "10Y", start: "2025-10-16", end: "2026-10-16" })
.forEach(([k, v]) => fl.searchParams.set(k, v));

fetch(fl.toString(), { headers: { "X-API-Key": "YOUR_API_KEY" } })
.then(r => r.json())
.then(j => {
const x = j.data.NZ;
console.log("Change:", x.change, "Min:", x.min, "Max:", x.max);
});

PHP

<?php
$u = "https://bonds-api.com/api/v1/fluctuation?countries=NZ&maturity=10Y&start=2025-10-16&end=2026-10-16";
$ctx = stream_context_create(["http" => ["method" => "GET", "header" => "X-API-Key: YOUR_API_KEY\r\n"]]);
$raw = file_get_contents($u, false, $ctx);
$j = json_decode($raw, true);
$nz = $j["data"]["NZ"];
echo "Change: {$nz['change']} Min: {$nz['min']} Max: {$nz['max']}" . PHP_EOL;

Working with maturities and building a curve from symbols

To build a NZ yield curve programmatically, you have two options:

  • Call /api/v1/curve?country=NZ to receive a ready-to-use curve map across standard maturities in one response.
  • Call /api/v1/latest with multiple maturities (e.g., 1M,3M,6M,1Y,2Y,5Y,10Y,30Y) if you need a specific subset or to align with your analytics model.

When requesting multiple maturities on /latest, the response nests yields per maturity under data.NZ.<tenor>. All yields remain in percent. On non-trading days or during New Zealand public holidays, expect the latest available business-day date to be returned (depending on data availability); your application should display the date alongside the yield to avoid confusion.

Update frequency, business days, and caching

  • Market days: Daily yields reflect New Zealand sovereign trading calendars. Weekends and public holidays do not produce new observations; use the date field to verify the effective market day.
  • Intraday: /intraday returns timestamped snapshots with fetched_at in UTC. For real-time dashboards, poll at a cadence that respects rate limits and your latency requirements.
  • Caching: Cache static historical data aggressively. For /latest and /curve, consider short-lived caches tied to market sessions. Always key caches by both country and maturity set.
  • Clock and timezone: Normalize all times to UTC in backends. Convert to local time only for display.

Error handling and resiliency

Standardized error responses include success=false and a human-readable error field. Handle these HTTP statuses:

  • 401: Missing or invalid X-API-Key
  • 403: Account quota exceeded
  • 404: No data for requested country/maturity/date combination
  • 422: Invalid parameter (e.g., malformed date or unknown ISO2 code)
  • 429: Rate limit exceeded
  • 500: Server error

For batch workloads: retry with exponential backoff on 429 and 500. For user-facing apps: surface the error message and suggest changing the date or maturity if 404/422 occur.

Use cases for NZ 10Y in fixed-income tooling

  • Risk and duration: Pair NZ 10Y time series with your portfolio holdings to estimate DV01 sensitivity under yield shocks.
  • Macro dashboards: Display NZ 10Y and its spread to US 10Y using /spread, updating intraday as snapshots arrive.
  • Curve analytics: Pull the /curve each day, compute slope metrics (e.g., 2s10s, 5s30s) and flag inversion via the inverted field.
  • Event studies: Combine /historical and /timeseries to measure pre/post changes around RBNZ announcements or macro releases.

If you are starting an integration, see bonds-api.com and Get started with Bonds API.

Quick comparison: key NZ maturities often used

Maturity What it signals Typical use
2Y Near-term policy expectations Rates strategy, front-end hedges
5Y Intermediate inflation/policy view Curve trades, swap overlays
10Y Benchmark long-end rate for NZD Valuation, discount rates, macro dashboards
30Y Long-run growth and term premium ALM, pension duration hedging

Sovereign context: what the NZ 10Y represents

The New Zealand 10-year government bond yield is the reference long-dated risk-free rate in NZD. Analysts use it to benchmark corporate issuance, price cash flows, and infer the market’s stance on growth and inflation over the next decade. In spreads and cross-market analysis, comparing NZ 10Y to US 10Y or other benchmarks reveals relative value and capital-flow dynamics.

Production checklist

  • Always display the yield’s effective date next to the value.
  • Normalize times to UTC in storage; convert only at the edge for UI.
  • Cache historical endpoints strongly; keep /latest and /curve caches short.
  • Use /fluctuation for lightweight summaries in widgets and emails.
  • Detect missing days (holidays/weekends) rather than assuming continuity.

FAQ

Q: Are yields returned in percent or decimals?
A: Percent. For example, 4.52 means 4.52% per annum. Spreads with the _bps suffix are basis points.

Q: How do I handle New Zealand public holidays?
A: On holidays and weekends there are no new daily observations. Use /timeseries and rely on the presence or absence of a date to infer business days, or fall back to the latest available business day for displays.

Q: Can I get both NZ 2Y and 10Y in one request?
A: Yes. Use /latest with countries=NZ and maturities=2Y,10Y to compose curve points for a dashboard or spread calculation.

Q: What timezone do intraday timestamps use?
A: Intraday snapshots return ISO 8601 timestamps in UTC. Convert to your preferred timezone for display.

Q: How do I compute the NZ–US 10Y spread?
A: Call /spread with country=NZ, benchmark=US, maturity=10Y. The spread_bps field is the NZ minus US yield in basis points.

Ready to integrate the New Zealand 10-year yield into your tools? Use the Register link to get your API key and start building. For discovery and developer utilities, visit the MCP. You can also Get started with Bonds API or learn more on bonds-api.com.

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.