Philippines 10Y Bond Yield API

Philippines 10Y Bond Yield API

You need reliable, machine-readable access to the Philippines 10-year government bond yield for dashboards, pricing models, and research. By the end of this guide you will be able to query the Philippines (ISO2: PH) 10Y yield, fetch historical and intraday snapshots, compute spreads versus benchmarks, and assemble a full PHP yield curve using the Bonds API over simple GET requests.

What this API delivers for Philippines fixed income

Bonds-API provides sovereign bond yields as JSON over a REST API, including the Philippines across common maturities from bills to long bonds. Yields are returned as percentages (e.g., 4.52 means 4.52%) and spreads as basis points. Responses include dates in YYYY-MM-DD, and intraday timestamps in ISO 8601 UTC.

Illustration: Philippines 10Y Bond Yield API

Core use cases include:

  • Financial dashboards that chart the PH 10Y in real time and compare to peers.
  • Risk tools that monitor curve shifts, drawdowns, and volatility on the PH 10Y.
  • Econometric research using daily time series and intraday snapshots.
  • Relative value strategies via spreads versus US Treasuries or other benchmarks.

Explore the API and documentation at bonds-api.com. To run the examples below, you will need an API key; you can Register or Get started with Bonds API.

Conventions, authentication, and data cadence

Base URL: https://bonds-api.com/api/v1/. All endpoints use HTTP GET. Authenticate with the X-API-Key header: X-API-Key: YOUR_API_KEY.

  • Units: yield fields are percentages; spread_bps is in basis points (1 bp = 0.01%).
  • Dates and time: date fields are YYYY-MM-DD. Intraday fetched_at timestamps are UTC ISO 8601.
  • Market days: daily endpoints return values for business days (Philippine trading calendar). On local holidays or weekends, latest may refer to the most recent trading day.
  • Update frequency: daily endpoints update after market data is published; intraday snapshots capture multiple times through the trading day.
  • Caching: cache immutable historical responses aggressively by URL. Treat latest endpoints as short-lived (minutes to an hour). Intraday endpoints are ephemeral; cache per date and maturity only as needed.

You can manage and observe your integrations via the control panel: MCP and the general portal Bonds API MCP.

Latest Philippines yields (focus: 10Y)

Use /latest for current yields. You can request just the 10Y or multiple maturities to start building a curve snapshot. Below, we request 2Y and 10Y for PH.

cURL

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

JSON response

{
"success": true,
"date": "2026-10-19",
"rates": {
"US_10Y": 5.065
},
"dates": {
"US_10Y": "2026-10-19"
},
"currencies": {
"US_10Y": "USD"
},
"meta": {
"request_id": "3daea057-f8cd-4897-9ee0-e387d240ce4c",
"timestamp": "2026-10-19T00:04:45+00:00"
}
}

How to read this:

  • yield: percentage (e.g., 4.52 means 4.52%).
  • date: YYYY-MM-DD for the observation, based on PH business days.
  • source: provenance of the figure (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": "PH", "maturities": "2Y,10Y"}
)
data = resp.json()
ph10 = data["data"]["PH"]["10Y"]["yield"]
as_of = data["data"]["PH"]["10Y"]["date"]
print(f"PH 10Y = {ph10}% on {as_of}")

JavaScript (fetch)

const url = new URL("https://bonds-api.com/api/v1/latest");
url.search = new URLSearchParams({ countries: "PH", maturities: "2Y,10Y" });

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

PHP (file_get_contents)

<?php
$ctx = stream_context_create([
"http" => [
"method" => "GET",
"header" => "X-API-Key: YOUR_API_KEY\r\n"
]
]);
$q = http_build_query(["countries" => "PH", "maturities" => "2Y,10Y"]);
$json = file_get_contents("https://bonds-api.com/api/v1/latest?$q", false, $ctx);
$data = json_decode($json, true);
echo "PH 10Y = " . $data["data"]["PH"]["10Y"]["yield"] . "%\n";

Yield on a specific date

Use /historical to fetch the Philippines 10Y for a specified date (YYYY-MM-DD). This is useful for point-in-time backtesting and EOD reconciliation.

cURL

JSON response

Fields:

  • yield: percentage for PH 10Y on the requested calendar date (rolling to last business day observed if needed).
  • source: origin of the observation.

Python (requests)

import requests

params = {"country": "PH", "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)
h = r.json()
print(h["country"], h["maturity"], h["date"], h["yield"])

JavaScript (fetch)

const params = new URLSearchParams({ country: "PH", 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(`${j.country} ${j.maturity} on ${j.date} = ${j.yield}%`));

PHP (file_get_contents)

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

Daily time series (PH 10Y)

Use /timeseries for a continuous daily series between two dates. Great for charting, regressions, and volatility estimates. Dates are inclusive, and values align to business days.

cURL

JSON response

Fields:

  • series: array of daily observations with date (YYYY-MM-DD) and yield (%).

Python (requests)

import requests

p = {"country": "PH", "maturity": "10Y", "start": "2025-10-19", "end": "2026-10-19"}
ts = requests.get("https://bonds-api.com/api/v1/timeseries",
headers={"X-API-Key": "YOUR_API_KEY"}, params=p).json()
dates = [pt["date"] for pt in ts["series"]]
yields = [pt["yield"] for pt in ts["series"]]
print("Observations:", len(ts["series"]))

JavaScript (fetch)

const paramsTS = new URLSearchParams({ country: "PH", maturity: "10Y", start: "2025-10-19", end: "2026-10-19" });
fetch("https://bonds-api.com/api/v1/timeseries?" + paramsTS.toString(), {
headers: { "X-API-Key": "YOUR_API_KEY" }
})
.then(r => r.json())
.then(j => console.log(`First: ${j.series[0].date} = ${j.series[0].yield}%`));

PHP (file_get_contents)

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

Spread versus a benchmark (PH vs US 10Y)

Use /spread to compute the PH 10Y spread versus a benchmark country (e.g., US for Treasuries). Spreads are in basis points; yields are percentages.

cURL

JSON response

Fields:

  • spread_bps: PH 10Y minus US 10Y in basis points (e.g., 215 bp = 2.15%).
  • country_yield, benchmark_yield: percentages.

Python (requests)

import requests

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

JavaScript (fetch)

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

PHP (file_get_contents)

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

Full Philippines yield curve

Use /curve to fetch a full PH sovereign curve on the latest available date (or a specified date). This endpoint returns multiple maturities so you can compute slope, curvature, and bootstrapped discount factors.

cURL

JSON response

Fields:

  • curve: mapping of maturity buckets to yields in percent.
  • inverted: boolean indicating whether short-term yields exceed longer-term (inversion detection).
MaturityYield (%)
1M5.31
3M5.27
6M5.18
1Y4.98
2Y4.25
5Y4.39
10Y4.52
30Y4.71

Python (requests)

import requests

r = requests.get("https://bonds-api.com/api/v1/curve",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"country": "PH"})
c = r.json()
ten = c["curve"]["10Y"]
print(f"Curve date {c['date']}, PH 10Y = {ten}% (inverted={c['inverted']})")

JavaScript (fetch)

const cu = new URLSearchParams({ country: "PH" });
fetch("https://bonds-api.com/api/v1/curve?" + cu.toString(), {
headers: { "X-API-Key": "YOUR_API_KEY" }
})
.then(r => r.json())
.then(j => console.log(`PH curve on ${j.date} — 10Y = ${j.curve["10Y"]}%`));

PHP (file_get_contents)

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

Intraday snapshots for PH 10Y

Use /intraday to retrieve multiple yield snapshots throughout a given date. This helps with intraday monitoring, quote normalization, and same-day analytics. Timestamps are UTC in ISO 8601.

cURL

JSON response

Fields:

  • snapshots[].yield: percentage.
  • snapshots[].fetched_at: UTC timestamp (ISO 8601).
  • count: number of snapshots returned.

Python (requests)

import requests
p = {"country": "PH", "maturity": "10Y", "date": "2026-10-19"}
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 (fetch)

const pi = new URLSearchParams({ country: "PH", maturity: "10Y", date: "2026-10-19" });
fetch("https://bonds-api.com/api/v1/intraday?" + pi.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"=>"PH","maturity"=>"10Y","date"=>"2026-10-19"]);
$ctx = stream_context_create(["http"=>["method"=>"GET","header"=>"X-API-Key: YOUR_API_KEY\r\n"]]);
echo file_get_contents("https://bonds-api.com/api/v1/intraday?$q", false, $ctx);

Fluctuation summary (change, min, max) for PH 10Y

Use /fluctuation to get the start, end, absolute change, and range over a period, which is ideal for monitoring drawdowns and weekly/monthly summary cards.

cURL

JSON response

Fields:

  • start_yield, end_yield: percentages at the period boundaries.
  • change: end minus start in percentage points.
  • min, max: extremes within the window.

Python (requests)

import requests

p = {"countries":"PH","maturity":"10Y","start":"2025-10-19","end":"2026-10-19"}
fx = requests.get("https://bonds-api.com/api/v1/fluctuation",
headers={"X-API-Key": "YOUR_API_KEY"}, params=p).json()
row = fx["data"]["PH"]
print(f"Δ={row['change']} pp; range [{row['min']}, {row['max']}] %")

JavaScript (fetch)

const pf = new URLSearchParams({ countries: "PH", maturity: "10Y", start: "2025-10-19", end: "2026-10-19" });
fetch("https://bonds-api.com/api/v1/fluctuation?" + pf.toString(), {
headers: { "X-API-Key": "YOUR_API_KEY" }
})
.then(r => r.json())
.then(j => {
const ph = j.data.PH;
console.log(`Start ${ph.start_yield}% → End ${ph.end_yield}% (Δ ${ph.change} pp)`);
});

PHP (file_get_contents)

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

Error handling and common responses

All endpoints share a consistent error shape with success=false and an error message. Typical HTTP statuses include:

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

Recommended approach: check HTTP status, parse JSON, and gate your downstream logic on success=true. For historical endpoints, treat 404 as an absent observation on that date and consider retrying with the previous PH business day.

Note on catalog sample (verbatim)

The following sample block is provided as-is and demonstrates a latest-10Y request for the US. It is included here verbatim.

Sovereign bond fundamentals (context for PH 10Y)

The Philippines 10-year bond yield reflects medium-term nominal funding costs and expectations about inflation, growth, and monetary policy. Analysts track:

  • Level: absolute yield for pricing, discounting, and term premium analysis.
  • Slope: difference between short bills and the 10Y (e.g., 2Y–10Y) as a cycle indicator.
  • Curvature: 2s–5s–10s profiles and their changes.
  • Relative value: spread to US 10Y, which you can compute via /spread.

With /curve you can extract multiple nodes; /timeseries and /intraday let you backtest or monitor shifts through the day. Explore these endpoints at bonds-api.com and manage keys via Register for Bonds API.

Implementation tips that save time

  • Cache keys by URL: e.g., /historical?country=PH&maturity=10Y&date=YYYY-MM-DD is immutable.
  • Normalize dates to YYYY-MM-DD and keep your app’s timezone conversions separate from the API’s UTC timestamps.
  • Use /curve when you need many maturities at once; it is cheaper than fanning out multiple /latest calls.
  • Store both yield and date fields; don’t assume “today” equals the observation date on holidays or weekends.
  • Guard against empty intraday snapshots early in the day: check count and handle gracefully.

Putting it together: building a PH 10Y curve view

For a dashboard tile, you might:

  1. Call /curve?country=PH to get 1M–30Y in a single payload. Plot the curve; highlight 10Y.
  2. Call /spread?country=PH&benchmark=US&maturity=10Y to annotate the chart with relative value.
  3. Call /timeseries?country=PH&maturity=10Y for trailing 1Y to render the historical panel beneath the curve.
  4. Optionally, call /intraday for the 10Y on the current date to add a mini tape or sparkline.

This sequence keeps calls minimal while presenting rich context. For research notebooks, batch /historical across key dates to reproduce event studies, and use /fluctuation for summary tables.

FAQ

How are yields expressed?
All yield fields are percentages (e.g., 4.52 means 4.52%). Spreads from /spread are in basis points.

What timezone should I assume?
date fields are calendar dates (YYYY-MM-DD) tied to PH business days; intraday fetched_at timestamps are in UTC (ISO 8601). If you display local Manila time, convert from UTC in your client.

How often does /latest update?
After new official or market data is available for the Philippines trading day. Cache conservatively and always read the returned date to confirm the observation day.

What happens on weekends and PH market holidays?
/latest returns the most recent available trading day. Historical and time series endpoints return data for business days within the requested range.

What are common errors to handle?
401 for missing/invalid key, 422 for bad parameters (e.g., malformed date), 404 for unavailable country/maturity/date combinations, and 429 for rate limits. Always check success in the JSON body.

Ready to integrate the Philippines 10Y yield into your stack? Obtain an API key and start building in minutes: Register. You can also review endpoints and manage usage in the MCP. For more details, visit bonds-api.com and Get started with Bonds API.

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 →