Zero-Coupon Curve
Calculates the zero-coupon (spot) yield curve of a country by bootstrapping its government bond par yields. A par yield is the coupon at which a bond trades at par, so it mixes the discount rates of every coupon date; the zero-coupon rate of a maturity is the single rate that discounts a payment at that date. Zero-coupon rates are what bonds and other cash flows are discounted with, and what forward rates and the curve models (Nelson-Siegel, Vasicek) are built on.
Maturities up to one year are treasury bills, which pay no coupon, so their yield only needs converting to annual compounding: US bill yields are bond-equivalent yields (simple interest up to half a year), Canadian bill yields simple interest on a 365-day year and Swedish bill yields simple interest on a 360-day year. Beyond that the par yields are interpolated linearly to every coupon date and each discount factor follows from the earlier ones:
P(t_n) = (1 - c/f Σ_{i<n} P(t_i)) / (1 + c/f)
with c the par yield of maturity t_n and f the coupons per year (two, and one for Sweden and Norway). The curves of the Euro Area and Germany are estimated as zero-coupon curves by the ECB and the Bundesbank, which publish them continuously compounded; they are converted to annual compounding like the others. A curve needs a maturity of a year or less to start from, so the United Kingdom, Norway and Australia (and Canada before its bill yields start) are not covered.
Also known as: spot curve, zero curve, bootstrapped curve, discount curve.
Zero-Coupon Curve in Python or via the MCP
Install the Finance Toolkit with:
pip install financetoolkit -U
Then call get_zero_coupon_curve as shown below.
from financetoolkit import FixedIncome
fixedincome = FixedIncome(start_date='2026-10-19', end_date='2026-10-23')
zero_curve = fixedincome.get_zero_coupon_curve()
zero_curve['United States'][['1Y', '2Y', '5Y', '10Y', '20Y', '30Y']]
Or, after setting up the Finance Toolkit MCP, ask:
What were the US zero-coupon rates at 1, 2, 5, 10, 20 and 30 years on each day from 19 to 23 October 2026?
Which returns:
| 1Y | 2Y | 5Y | 10Y | 20Y | 30Y | |
|---|---|---|---|---|---|---|
| 2026-10-19 | 0.0455 | 0.0484 | 0.0501 | 0.0526 | 0.0581 | 0.0564 |
| 2026-10-20 | 0.0456 | 0.0486 | 0.0501 | 0.0522 | 0.0573 | 0.0556 |
| 2026-10-21 | 0.0457 | 0.0488 | 0.0502 | 0.0523 | 0.0572 | 0.0556 |
| 2026-10-22 | 0.0446 | 0.0471 | 0.0485 | 0.0506 | 0.0557 | 0.0545 |
| 2026-10-23 | 0.0449 | 0.0475 | 0.0489 | 0.051 | 0.0563 | 0.0548 |
Parameters
get_zero_coupon_curve accepts the following parameters.
| Parameter | Type | Description | Example |
|---|---|---|---|
countries | list[str] | str | The countries, see get_government_bond_yield_curve. Defaults to “United States”. | ["United States", "Germany"] |
period | str | Whether to use the daily, weekly or monthly curves. Defaults to “daily”. | "weekly" |
rounding | int | None | The number of decimals to round the results to. Defaults to None. | 2 |