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.

ParameterTypeDescriptionExample
countrieslist[str] | strThe countries, see get_government_bond_yield_curve. Defaults to “United States”.["United States", "Germany"]
periodstrWhether to use the daily, weekly or monthly curves. Defaults to “daily”."weekly"
roundingint | NoneThe number of decimals to round the results to. Defaults to None.2
Share