Czech Republic 10Y Sovereign Yields: Latest and Curve via API

Czech Republic 10Y Sovereign Yields: Latest and Curve via API

You're building fixed-income screens and need accurate, machine-readable Czech Republic (CZ) 10-year sovereign yields—both the latest print and the whole curve—inside your own tools. By the end of this article, you’ll query current CZ 10Y yields, pull historical and intraday data, compute spreads, and materialize a Czech yield curve from Bonds API into Python, JavaScript, or PHP with production-ready GET requests.

What you get from Bonds API for CZ sovereign yields

Bonds API provides sovereign bond yields as JSON over REST, covering 60+ countries, with maturities from 1M to 50Y. All endpoints use GET at the base URL https://bonds-api.com/api/v1/, authenticated via the X-API-Key header. Yields are expressed as percentages (for example, 5.36 means 5.36%). Spreads are returned in basis points (bps), where 1 bps = 0.01%.

Dates are provided as Y-m-d (for example, 2026-09-28). Timestamps in metadata and intraday snapshots are ISO 8601 and UTC (Z or +00:00). Where applicable, the “source” field indicates whether the value is “official” or “market”.

We focus on the Czech Republic (ISO2: CZ). The examples below are ready to paste, with fields you can map directly into your applications and analytics stacks. If you need an API key, visit Register for Bonds API or Get started with Bonds API.

Latest CZ 10Y yield (GET /latest)

Use /latest to fetch the most recent end-of-day or latest available yields. You can request one or more maturities. The example below queries the Czech 10Y, and demonstrates the fields you’ll parse in dashboards and risk engines.

cURL

curl -H "X-API-Key: YOUR_API_KEY" \
"https://bonds-api.com/api/v1/latest?countries=CZ&maturities=10Y"

Python (requests)

import requests

url = "https://bonds-api.com/api/v1/latest"
headers = {"X-API-Key": "YOUR_API_KEY"}
params = {"countries": "CZ", "maturities": "10Y"}

r = requests.get(url, headers=headers, params=params)
r.raise_for_status()
data = r.json()

cz_10y = data["data"]["CZ"]["10Y"]["yield"] # percent (e.g., 5.36)
cz_10y_date = data["data"]["CZ"]["10Y"]["date"] # Y-m-d
cz_10y_source = data["data"]["CZ"]["10Y"]["source"] # "official" or "market"

print(cz_10y, cz_10y_date, cz_10y_source)

JavaScript (fetch)

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

fetch(url.toString(), {
method: "GET",
headers: { "X-API-Key": "YOUR_API_KEY" }
})
.then(res => {
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return res.json();
})
.then(json => {
const node = json.data.CZ["10Y"];
console.log(node.yield, node.date, node.source);
});

PHP (file_get_contents)

<?php
$url = "https://bonds-api.com/api/v1/latest?countries=CZ&maturities=10Y";
$opts = ["http" => ["method" => "GET", "header" => "X-API-Key: YOUR_API_KEY\r\n"]];
$context = stream_context_create($opts);
$json = file_get_contents($url, false, $context);
$data = json_decode($json, true);

$cz10 = $data["data"]["CZ"]["10Y"];
echo $cz10["yield"] . " " . $cz10["date"] . " " . $cz10["source"];
?

JSON response (illustrative, using the documented fields and real values)

{
"success": true,
"data": {
"CZ": {
"10Y": { "yield": 5.36, "date": "2026-09-28", "source": "official" }
}
}
}

How to read it:

  • yield: percentage, not bps (5.36 means 5.36%).
  • date: Y-m-d for the effective yield date.
  • source: “official” or “market”.

Tip: If you need more points for the curve, pass multiple maturities in maturities=1Y,2Y,5Y,10Y to hydrate your tenor grid in a single request.

Yield on a specific day (GET /historical)

Fetch a specific CZ maturity on a given calendar date. Useful for valuation dates, backfilling, and reproducible research workflows.

cURL

curl -H "X-API-Key: YOUR_API_KEY" \
"https://bonds-api.com/api/v1/historical?country=CZ&maturity=10Y&date=2025-06-15"

Python (requests)

import requests

r = requests.get(
"https://bonds-api.com/api/v1/historical",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"country": "CZ", "maturity": "10Y", "date": "2025-06-15"}
)
r.raise_for_status()
h = r.json()

print(h["country"], h["maturity"], h["date"], h["yield"], h["source"])

JavaScript (fetch)

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

fetch(url.toString(), {
method: "GET",
headers: { "X-API-Key": "YOUR_API_KEY" }
})
.then(res => res.json())
.then(json => {
console.log(json.country, json.maturity, json.date, json.yield, json.source);
});

PHP (file_get_contents)

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

JSON response

{
"success": true,
"country": "CZ",
"maturity": "10Y",
"date": "2025-06-15",
"yield": 4.38,
"source": "official"
}

Note: If you query a non-business day and that date has no fixing, the API may return a 404 with an error message. You can handle that by falling back to the previous business day in your client code.

Time series for CZ 10Y (GET /timeseries)

Pull a continuous series for the 10Y over a window. Ideal for charting, regressions, stress testing, and curve calibrations. The series includes business days; weekends and holidays are omitted.

cURL

curl -H "X-API-Key: YOUR_API_KEY" \
"https://bonds-api.com/api/v1/timeseries?country=CZ&maturity=10Y&start=2025-09-28&end=2026-09-28"

Python (requests)

import requests

r = requests.get(
"https://bonds-api.com/api/v1/timeseries",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"country": "CZ", "maturity": "10Y", "start": "2025-09-28", "end": "2026-09-28"}
)
r.raise_for_status()
ts = r.json()

for point in ts["series"]:
# point["date"] is Y-m-d, point["yield"] is percent
pass

JavaScript (fetch)

const url = new URL("https://bonds-api.com/api/v1/timeseries");
url.searchParams.set("country", "CZ");
url.searchParams.set("maturity", "10Y");
url.searchParams.set("start", "2025-09-28");
url.searchParams.set("end", "2026-09-28");

const res = await fetch(url.toString(), {
method: "GET",
headers: { "X-API-Key": "YOUR_API_KEY" }
});
const json = await res.json();
console.log(json.series.length, "points");

PHP (file_get_contents)

<?php
$params = ["country" => "CZ", "maturity" => "10Y", "start" => "2025-09-28", "end" => "2026-09-28"];
$url = "https://bonds-api.com/api/v1/timeseries?" . http_build_query($params);
$ctx = stream_context_create(["http" => ["method" => "GET", "header" => "X-API-Key: YOUR_API_KEY\r\n"]]);
echo file_get_contents($url, false, $ctx);
?

JSON response

{
"success": true,
"country": "CZ",
"maturity": "10Y",
"series": [
{ "date": "2025-01-02", "yield": 4.21 },
{ "date": "2025-01-03", "yield": 4.19 },
{ "date": "2025-01-06", "yield": 4.23 }
]
}

Ingest pattern: array of {date, yield}. Sort by date if you need explicit ordering, and be ready for skipped non-business days.

Intraday snapshots for CZ 10Y (GET /intraday)

For trading dashboards and monitoring, fetch intraday snapshots for a specific date. Timestamps are in UTC. Use these to compute session highs/lows or build minute/hour bars downstream.

cURL

curl -H "X-API-Key: YOUR_API_KEY" \
"https://bonds-api.com/api/v1/intraday?country=CZ&maturity=10Y&date=2026-09-28"

Python (requests)

import requests

r = requests.get(
"https://bonds-api.com/api/v1/intraday",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"country": "CZ", "maturity": "10Y", "date": "2026-09-28"}
)
r.raise_for_status()
snap = r.json()

for s in snap["snapshots"]:
# s["yield"] is percent
# s["fetched_at"] is ISO 8601 UTC (e.g., 2026-09-28T12:00:00Z)
pass

JavaScript (fetch)

const url = new URL("https://bonds-api.com/api/v1/intraday");
url.searchParams.set("country", "CZ");
url.searchParams.set("maturity", "10Y");
url.searchParams.set("date", "2026-09-28");

const res = await fetch(url.toString(), {
method: "GET",
headers: { "X-API-Key": "YOUR_API_KEY" }
});
const json = await res.json();
console.log(json.count, "snapshots in", json.meta.timezone);

PHP (file_get_contents)

<?php
$qs = http_build_query(["country" => "CZ", "maturity" => "10Y", "date" => "2026-09-28"]);
$url = "https://bonds-api.com/api/v1/intraday?$qs";
$ctx = stream_context_create(["http" => ["method" => "GET", "header" => "X-API-Key: YOUR_API_KEY\r\n"]]);
echo file_get_contents($url, false, $ctx);
?

JSON response

{
"success": true,
"country": "CZ",
"maturity": "10Y",
"date": "2026-09-28",
"snapshots": [
{ "yield": 4.51, "fetched_at": "2026-09-28T09:30:00Z", "source": "market" },
{ "yield": 4.53, "fetched_at": "2026-09-28T12:00:00Z", "source": "market" },
{ "yield": 4.52, "fetched_at": "2026-09-28T15:30:00Z", "source": "market" }
],
"count": 3,
"meta": { "timezone": "UTC" }
}

Fields:

  • yield: percentage (session snapshot).
  • fetched_at: ISO 8601 UTC timestamp (Z).
  • source: “market” for intraday ticks.

Full Czech yield curve (GET /curve)

Pull the entire Czech curve in one call. Use this to price interest-rate-sensitive portfolios, compute forward rates, or run curve shape diagnostics (including inverted detection).

cURL

curl -H "X-API-Key: YOUR_API_KEY" \
"https://bonds-api.com/api/v1/curve?country=CZ"

Python (requests)

import requests

r = requests.get(
"https://bonds-api.com/api/v1/curve",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"country": "CZ"} # optionally add 'date': 'Y-m-d'
)
r.raise_for_status()
curve = r.json()

tenors = sorted(curve["curve"].keys(), key=lambda t: t) # e.g., ['1M','3M',...,'10Y','30Y']
points = [(t, curve["curve"][t]) for t in tenors] # yields are in percent
is_inverted = curve["inverted"]
curve_date = curve["date"]

JavaScript (fetch)

const res = await fetch("https://bonds-api.com/api/v1/curve?country=CZ", {
method: "GET",
headers: { "X-API-Key": "YOUR_API_KEY" }
});
const json = await res.json();
console.log(json.date, json.inverted, Object.keys(json.curve).length, "tenors");

PHP (file_get_contents)

<?php
$url = "https://bonds-api.com/api/v1/curve?country=CZ";
$ctx = stream_context_create(["http" => ["method" => "GET", "header" => "X-API-Key: YOUR_API_KEY\r\n"]]);
$payload = file_get_contents($url, false, $ctx);
echo $payload;
?

JSON response

{
"success": true,
"country": "CZ",
"date": "2026-09-28",
"inverted": false,
"curve": {
"1M": 5.31, "3M": 5.27, "6M": 5.18,
"1Y": 4.98, "2Y": 4.25, "5Y": 4.39,
"10Y": 4.52, "30Y": 4.71
}
}

Fields:

  • curve: tenor-to-yield map in percent; order is not guaranteed, so sort client-side if needed.
  • date: Y-m-d, latest day with available data unless you pass a date.
  • inverted: boolean heuristic indicating whether short tenors exceed long tenors.

Comparing tenors returned by /curve

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

Spread vs benchmark (GET /spread)

Compute the CZ 10Y spread vs a benchmark country in one request. The result includes spread in basis points and both country and benchmark yields for clarity.

cURL

curl -H "X-API-Key: YOUR_API_KEY" \
"https://bonds-api.com/api/v1/spread?country=CZ&benchmark=US&maturity=10Y"

Python (requests)

import requests

r = requests.get(
"https://bonds-api.com/api/v1/spread",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"country": "CZ", "benchmark": "US", "maturity": "10Y"}
)
r.raise_for_status()
s = r.json()

bps = s["spread_bps"] # integer/number, basis points
cz = s["country_yield"] # percent
us = s["benchmark_yield"] # percent

JavaScript (fetch)

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

const res = await fetch(url.toString(), {
method: "GET",
headers: { "X-API-Key": "YOUR_API_KEY" }
});
const json = await res.json();
console.log(json.spread_bps, "bps spread at", json.maturity);

PHP (file_get_contents)

<?php
$qs = http_build_query(["country" => "CZ", "benchmark" => "US", "maturity" => "10Y"]);
$url = "https://bonds-api.com/api/v1/spread?$qs";
$ctx = stream_context_create(["http" => ["method" => "GET", "header" => "X-API-Key: YOUR_API_KEY\r\n"]]);
echo file_get_contents($url, false, $ctx);
?

JSON response

{
"success": true,
"country": "CZ",
"benchmark": "US",
"maturity": "10Y",
"spread_bps": 215,
"country_yield": 4.52,
"benchmark_yield": 2.37
}

Interpretation: spread_bps is CZ yield minus benchmark yield, scaled to basis points. For example, 215 bps equals 2.15%.

Fluctuation over a period (GET /fluctuation)

Summarize change, min, and max for CZ over a window. Helpful for risk digests and performance summaries without transporting a full time series.

cURL

curl -H "X-API-Key: YOUR_API_KEY" \
"https://bonds-api.com/api/v1/fluctuation?countries=CZ&maturity=10Y&start=2025-09-28&end=2026-09-28"

Python (requests)

import requests

r = requests.get(
"https://bonds-api.com/api/v1/fluctuation",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"countries": "CZ", "maturity": "10Y", "start": "2025-09-28", "end": "2026-09-28"}
)
r.raise_for_status()
fx = r.json()

cz = fx["data"]["CZ"]
delta = cz["change"] # end_yield - start_yield, percent
rng = (cz["min"], cz["max"]) # percent range

JavaScript (fetch)

const url = new URL("https://bonds-api.com/api/v1/fluctuation");
url.searchParams.set("countries", "CZ");
url.searchParams.set("maturity", "10Y");
url.searchParams.set("start", "2025-09-28");
url.searchParams.set("end", "2026-09-28");

const res = await fetch(url.toString(), {
method: "GET",
headers: { "X-API-Key": "YOUR_API_KEY" }
});
const json = await res.json();
console.log(json.data.CZ.start_yield, "→", json.data.CZ.end_yield);

PHP (file_get_contents)

<?php
$params = ["countries" => "CZ", "maturity" => "10Y", "start" => "2025-09-28", "end" => "2026-09-28"];
$url = "https://bonds-api.com/api/v1/fluctuation?" . http_build_query($params);
$ctx = stream_context_create(["http" => ["method" => "GET", "header" => "X-API-Key: YOUR_API_KEY\r\n"]]);
echo file_get_contents($url, false, $ctx);
?

JSON response

{
"success": true,
"maturity": "10Y",
"start": "2025-09-28",
"end": "2026-09-28",
"data": {
"CZ": {
"start_yield": 4.21,
"end_yield": 4.52,
"change": 0.31,
"min": 3.87,
"max": 4.76
}
}
}

Use this for quick KPIs in dashboards: delta (percent), and the in-window extremums for alerts or VaR parameterization.

Practical implementation details that save time

  • Authentication: Always send your key in the X-API-Key header. Do not put it in query parameters.
  • HTTP method: All endpoints are GET. There is no POST/PUT/DELETE.
  • Units: Yields are percentages. Spreads are in basis points. Never assume bps unless the field explicitly says spread_bps.
  • Dates and timestamps:
    • Fields named date are Y-m-d (e.g., 2026-09-28).
    • Intraday fetched_at and any meta timestamps are ISO 8601 UTC (Z or +00:00).
  • Business days and holidays: Time series omit weekends and local market holidays. If a specific date lacks a fixing, expect a 404; your client should fallback to the last available business day when appropriate.
  • Update frequency:
    • /latest reflects the latest available daily yield; “source” indicates “official” or “market”.
    • /intraday adds snapshots throughout the session with UTC timestamps.
  • Caching:
    • Cache daily endpoints (/latest, /historical, /timeseries, /curve, /fluctuation, /spread) per country/maturity/date for 15–60 minutes during market hours and for 24 hours for past dates.
    • Cache /intraday for a few minutes and refresh as needed for trading UIs.
  • Error handling: Standard JSON error shape uses success=false and error=message, with HTTP codes like 401 (missing/invalid key), 403 (quota exceeded), 404 (no data for the combination), 422 (invalid parameter), 429 (rate limit), 500 (server error). Implement retries for 429/500 with jitter, and immediately fix parameters for 422/404.
  • Yield curves:
    • Prefer /curve for a country-wide snapshot on a single day—it includes inverted detection.
    • Alternatively, call /latest with maturities=1Y,2Y,5Y,10Y,30Y to build the curve across specific tenors.

For documentation and platform tools, visit bonds-api.com and the Bonds API MCP. To explore more, open MCP.

Why the CZ 10Y matters and where to use it

The Czech Republic 10-year sovereign yield is a core reference rate for pricing CZK-denominated debt, benchmarking corporate spreads, and calibrating term structure models for the Czech market. It’s also a common anchor for macro research on inflation expectations and monetary policy transmission.

  • Financial dashboards: Show latest 10Y, day change, and a sparkline from /timeseries.
  • Portfolio risk: Stress test CZK duration exposures using historical windows and /fluctuation extremes.
  • Relative value: Compare CZ vs DE or US using /spread and visualize the basis in bps.
  • Curve analytics: Source the full curve from /curve to compute forwards, butterfly trades, and curvature metrics.

Putting it all together: build a CZ yield curve and persist it

Here’s a minimal workflow you can productionize:

  • Step 1: Call /curve?country=CZ and store the tenor-to-yield map along with date and inverted.
  • Step 2: If your app needs higher frequency, augment the 10Y node intraday with /intraday for the current date.
  • Step 3: For trend analysis, call /timeseries on 10Y for your lookback window and compute rolling metrics.
  • Step 4: For relative moves, call /spread vs benchmark=US or DE and chart spread_bps against the last 3–12 months.
  • Step 5: Cache daily responses and backfill gaps via /historical on explicit dates.

All calls are GET with the same authentication header. Keep your pipeline stateless and idempotent by passing dates and maturities explicitly so you can replay any run.

Error handling patterns with examples

When you encounter errors, the API returns JSON with success=false and error. Recommended patterns:

  • 401/403: Verify X-API-Key and check usage caps. Avoid retry loops until you fix credentials or capacity.
  • 404: No data for a date or tenor—fallback to nearest previous business day if that fits your logic.
  • 422: Validate inputs (ISO2 codes like CZ, Y-m-d date format, recognized tenors like 10Y).
  • 429/500: Backoff with exponential jitter and retry a limited number of times.

Reference cURL you can paste now

Use this to fetch the latest Czech 10Y (returns the 5.36% example above) and integrate it into your system:

curl -H "X-API-Key: YOUR_API_KEY" \
"https://bonds-api.com/api/v1/latest?countries=CZ&maturities=10Y"

Then parse the JSON fields as shown in the Python/JS/PHP snippets. For more country curves or maturities, expand the query parameters in the same call pattern.

Where to go next

To explore endpoints, consult bonds-api.com and open the Bonds API MCP to experiment. If you need an API key, use the quick links below.

FAQ

Q: Are yields returned as percentages or decimals?
A: Percentages. For example, 5.36 means 5.36%, not 0.0536. Spreads are returned as spread_bps (basis points).

Q: What timezone are intraday timestamps in?
A: UTC. The field fetched_at uses ISO 8601 (e.g., 2026-09-28T12:00:00Z). A meta.timezone of "UTC" may also appear.

Q: How do I get a full Czech curve on a specific date?
A: Call /api/v1/curve with country=CZ and add date=Y-m-d if you need a past day; otherwise it returns the latest day with data.

Q: How should I handle weekends and market holidays?
A: /timeseries omits non-business days, and /historical on a non-business day can return 404 if no fixing exists. Implement a fallback to the previous business day if your workflow requires a value.

Q: Can I request multiple maturities in one call?
A: Yes. Use /latest with maturities=1Y,2Y,5Y,10Y,30Y (comma-separated) to hydrate several tenors at once.

If you’re ready to bring Czech sovereign yields into your stack, get an API key now: Register. To interactively explore endpoints and schemas, open the MCP.

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.

Related posts

All posts →