You need to programmatically track the one-year PBoC Loan Prime Rate (PBOC_LPR_1Y) and embed it into pricing, risk, and reporting systems. By the end of this article, you will query, interpret, and cache PBOC_LPR_1Y from the Interest Rates API, compute spreads and loan payments off its value, and build time series, fluctuation, and OHLC analytics that are production-ready.
What the PBOC_LPR_1Y Symbol Represents
PBOC_LPR_1Y is the one-year Loan Prime Rate published under the People’s Bank of China framework. In the Interest Rates API, it is a central bank benchmark symbol with monthly frequency and currency code CNY. The returned value is an annualized percentage rate (numeric) representing the policy-linked LPR level for one-year tenors.
Key points for developers:
- Unit: percentage rate (e.g., 3.00 means 3.00% per annum).
- Frequency: monthly. The data set behaves as monthly in scheduling and publication cadence.
- Effective date: provided in the response as a YYYY-MM-DD string. For monthly symbols, when you query a specific date, the API uses the last day with data within that month.
- Currency code: CNY (informational; rates are dimensionless but tagged with currency for cataloging).
For documentation, SDKs, and service status, visit interestratesapi.com. To integrate immediately, use the links in this post to obtain an API key.
Get the Latest PBOC_LPR_1Y
Use GET /api/v1/latest with the symbols parameter and your api_key. Authentication always uses an api_key query parameter; there are no auth headers.
cURL (official sample)
curl -s "https://interestratesapi.com/api/v1/latest?api_key=YOUR_API_KEY&symbols=PBOC_LPR_1Y"
JSON (official sample)
{
"success": true,
"date": "2026-09-30",
"base": "CNY",
"rates": {
"PBOC_LPR_1Y": 3
},
"dates": {
"PBOC_LPR_1Y": "2026-09-30"
},
"currencies": {
"PBOC_LPR_1Y": "CNY"
},
"base_filter_note": null
}
Field notes you will use:
- success: boolean status of the call.
- date: the API-level data date (may represent the latest business date with available data).
- rates: a map from symbol to numeric rate value. PBOC_LPR_1Y is expressed as a percentage number (3 means 3%).
- dates: per-symbol effective date string (YYYY-MM-DD). For monthly schedules, interpret this as the effective date within that month.
- currencies: per-symbol currency tag (CNY here).
Python (requests)
import requests
resp = requests.get(
'https://interestratesapi.com/api/v1/latest',
params={'symbols': 'PBOC_LPR_1Y', 'api_key': 'YOUR_API_KEY'}
)
data = resp.json()
rate = data['rates']['PBOC_LPR_1Y'] # numeric percentage, e.g., 3 -> 3%
effective_date = data['dates']['PBOC_LPR_1Y'] # 'YYYY-MM-DD'
currency = data['currencies']['PBOC_LPR_1Y'] # 'CNY'
print(rate, effective_date, currency)
JavaScript (fetch)
const response = await fetch(
'https://interestratesapi.com/api/v1/latest?symbols=PBOC_LPR_1Y&api_key=YOUR_API_KEY'
);
const data = await response.json();
const rate = data.rates.PBOC_LPR_1Y; // percentage number
const effectiveDate = data.dates.PBOC_LPR_1Y; // 'YYYY-MM-DD'
const currency = data.currencies.PBOC_LPR_1Y; // 'CNY'
console.log(rate, effectiveDate, currency);
PHP
<?php
$url = 'https://interestratesapi.com/api/v1/latest?symbols=PBOC_LPR_1Y&api_key=YOUR_API_KEY';
$json = file_get_contents($url);
$data = json_decode($json, true);
$rate = $data['rates']['PBOC_LPR_1Y'];
$effectiveDate = $data['dates']['PBOC_LPR_1Y'];
$currency = $data['currencies']['PBOC_LPR_1Y'];
echo $rate . " " . $effectiveDate . " " . $currency;
?>
Explore the Catalogue of Symbols (/symbols)
List available rate symbols and filter by category or base currency. This is useful to verify that PBOC_LPR_1Y is present and inspect its metadata (category, frequency, currency).
cURL
JSON
Tip for PBOC_LPR_1Y: use base=CNY and category=central_bank to focus the results on CNY central bank benchmarks. The frequency field will show monthly for PBOC_LPR_1Y.
Python (requests)
import requests
resp = requests.get(
'https://interestratesapi.com/api/v1/symbols',
params={'category': 'central_bank', 'base': 'CNY', 'api_key': 'YOUR_API_KEY'}
)
symbols = resp.json()
print(symbols['success'], symbols.get('count'))
JavaScript (fetch)
const res = await fetch(
'https://interestratesapi.com/api/v1/symbols?category=central_bank&base=CNY&api_key=YOUR_API_KEY'
);
const symbols = await res.json();
console.log(symbols.success, symbols.count);
PHP
<?php
$url = 'https://interestratesapi.com/api/v1/symbols?category=central_bank&base=CNY&api_key=YOUR_API_KEY';
$data = json_decode(file_get_contents($url), true);
echo $data['success'] ? "OK\n" : "Error\n";
?>
Point-in-Time Lookup (/historical)
Fetch the PBOC_LPR_1Y value as of a given date. For monthly symbols, the API uses the last day with data within that month.
cURL
JSON
For developers:
- date: your requested date.
- rates.PBOC_LPR_1Y: the rate, expressed as a percentage.
- For monthly symbols, interpret the returned figure as the value applicable to the month containing the requested date.
Python (requests)
import requests
resp = requests.get(
'https://interestratesapi.com/api/v1/historical',
params={'date': '2025-06-15', 'symbols': 'PBOC_LPR_1Y', 'api_key': 'YOUR_API_KEY'}
)
data = resp.json()
print(data['rates']['PBOC_LPR_1Y'])
JavaScript (fetch)
const res = await fetch(
'https://interestratesapi.com/api/v1/historical?date=2025-06-15&symbols=PBOC_LPR_1Y&api_key=YOUR_API_KEY'
);
const hist = await res.json();
console.log(hist.rates.PBOC_LPR_1Y);
PHP
<?php
$url = 'https://interestratesapi.com/api/v1/historical?date=2025-06-15&symbols=PBOC_LPR_1Y&api_key=YOUR_API_KEY';
$data = json_decode(file_get_contents($url), true);
echo $data['rates']['PBOC_LPR_1Y'];
?>
Build a Time Series (/timeseries)
Pull a contiguous series between start and end dates. This powers charts, regressions, and backtests. For monthly rates, the series repeats the latest known monthly value across business days, with the frequency returned in the response metadata.
cURL
JSON
Field notes:
- rates.PBOC_LPR_1Y: map of date → value. Dates are business days.
- frequencies.PBOC_LPR_1Y: the delivered time step. Even for monthly-origin symbols, downstream delivery can be daily with the same value across days in a month until a new monthly value is effective.
Python (requests)
import requests
params = {
'start': '2025-10-31',
'end': '2026-10-31',
'symbols': 'PBOC_LPR_1Y',
'api_key': 'YOUR_API_KEY'
}
resp = requests.get('https://interestratesapi.com/api/v1/timeseries', params=params)
ts = resp.json()['rates']['PBOC_LPR_1Y']
ordered = sorted(ts.items())[:5]
print(ordered)
JavaScript (fetch)
const url = 'https://interestratesapi.com/api/v1/timeseries?start=2025-10-31&end=2026-10-31&symbols=PBOC_LPR_1Y&api_key=YOUR_API_KEY';
const r = await fetch(url);
const data = await r.json();
const series = data.rates.PBOC_LPR_1Y;
console.log(Object.keys(series).slice(0, 3));
PHP
<?php
$url = 'https://interestratesapi.com/api/v1/timeseries?start=2025-10-31&end=2026-10-31&symbols=PBOC_LPR_1Y&api_key=YOUR_API_KEY';
$data = json_decode(file_get_contents($url), true);
$series = $data['rates']['PBOC_LPR_1Y'];
print_r(array_slice($series, 0, 3, true));
?>
Measure Changes Over a Range (/fluctuation)
Get summary change statistics (start, end, absolute change, percentage change, high, low) for PBOC_LPR_1Y over a date window.
cURL
JSON
Use change and change_pct directly for dashboards and alerts. change_pct is null if the start_value is zero.
Python (requests)
import requests
resp = requests.get(
'https://interestratesapi.com/api/v1/fluctuation',
params={'start': '2025-10-31', 'end': '2026-10-31', 'symbols': 'PBOC_LPR_1Y', 'api_key': 'YOUR_API_KEY'}
)
fx = resp.json()['rates']['PBOC_LPR_1Y']
print(fx['change'], fx['change_pct'])
JavaScript (fetch)
const r = await fetch(
'https://interestratesapi.com/api/v1/fluctuation?start=2025-10-31&end=2026-10-31&symbols=PBOC_LPR_1Y&api_key=YOUR_API_KEY'
);
const fx = (await r.json()).rates.PBOC_LPR_1Y;
console.log(fx.change, fx.change_pct);
PHP
<?php
$url = 'https://interestratesapi.com/api/v1/fluctuation?start=2025-10-31&end=2026-10-31&symbols=PBOC_LPR_1Y&api_key=YOUR_API_KEY';
$data = json_decode(file_get_contents($url), true);
$stats = $data['rates']['PBOC_LPR_1Y'];
echo $stats['change'] . " " . $stats['change_pct'];
?>
Generate OHLC Candles (/ohlc)
Compute OHLC candles on-the-fly for PBOC_LPR_1Y over weekly, monthly, or quarterly periods. This is ideal for chart components or backtesting rules that rely on open/close transitions.
cURL
JSON
Field notes:
- period: the aggregation interval used to compute OHLC.
- open/high/low/close: derived from the underlying daily series.
- data_points: number of source data points within the aggregated period window.
Python (requests)
import requests
params = {
'symbols': 'PBOC_LPR_1Y',
'period': 'monthly',
'start': '2025-10-31',
'end': '2026-10-31',
'api_key': 'YOUR_API_KEY'
}
resp = requests.get('https://interestratesapi.com/api/v1/ohlc', params=params)
ohlc = resp.json()['rates']['PBOC_LPR_1Y']
print(ohlc[0]['period'], ohlc[0]['open'], ohlc[0]['close'])
JavaScript (fetch)
const r = await fetch(
'https://interestratesapi.com/api/v1/ohlc?symbols=PBOC_LPR_1Y&period=monthly&start=2025-10-31&end=2026-10-31&api_key=YOUR_API_KEY'
);
const ohlc = (await r.json()).rates.PBOC_LPR_1Y;
console.log(ohlc[0].period, ohlc[0].open, ohlc[0].close);
PHP
<?php
$url = 'https://interestratesapi.com/api/v1/ohlc?symbols=PBOC_LPR_1Y&period=monthly&start=2025-10-31&end=2026-10-31&api_key=YOUR_API_KEY';
$data = json_decode(file_get_contents($url), true);
$item = $data['rates']['PBOC_LPR_1Y'][0];
echo $item['period'] . " O:" . $item['open'] . " C:" . $item['close'];
?>
Compare Loan Interest Costs (/convert)
Convert compares the total interest cost of a simple loan at the latest rate of two symbols. Use this to estimate the cost difference between a PBOC_LPR_1Y-linked loan and another policy or interbank benchmark.
cURL
JSON
Field notes:
- amount: principal you provided in the query.
- term_months: simple term used for interest comparison.
- from / to: latest rate snapshots and simple interest totals at each rate.
- difference.rate_spread: arithmetic difference between the two latest rates (percentage points).
Python (requests)
import requests
params = {
'from': 'PBOC_LPR_1Y',
'to': 'ECB_MRO',
'amount': 100000,
'term_months': 12,
'api_key': 'YOUR_API_KEY'
}
r = requests.get('https://interestratesapi.com/api/v1/convert', params=params).json()
print(r['difference']['rate_spread'], r['difference']['interest_saved'])
JavaScript (fetch)
const url = 'https://interestratesapi.com/api/v1/convert?from=PBOC_LPR_1Y&to=ECB_MRO&amount=100000&term_months=12&api_key=YOUR_API_KEY';
const res = await fetch(url);
const cmp = await res.json();
console.log(cmp.difference.rate_spread, cmp.difference.interest_saved);
PHP
<?php
$url = 'https://interestratesapi.com/api/v1/convert?from=PBOC_LPR_1Y&to=ECB_MRO&amount=100000&term_months=12&api_key=YOUR_API_KEY';
$data = json_decode(file_get_contents($url), true);
echo $data['difference']['rate_spread'] . " " . $data['difference']['interest_saved'];
?>
How to Read Effective Dates, Units, and Business Days
Always treat PBOC_LPR_1Y values as annualized percentages. Use the per-symbol dates map to determine the effective date of the rate you received. For monthly symbols, when you specify a date within a month, the API returns the last day with data in that month for historical lookups.
The time series endpoints return business-day keys and may repeat the monthly rate across days until a new effective monthly value becomes available. This model supports charting libraries and analytics that expect daily continuity even when the source series is monthly.
Caching, Idempotency, and Rate-Limited Clients
Cache GET responses keyed by the full URL, including query params. For /latest, consider short-lived caches that refresh when your application session initializes or on schedule; for /historical and /timeseries, cache aggressively since past values do not change.
All endpoints return standard HTTP codes. When you hit limits, the API includes X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers; you should back off and retry after the server-provided window. Handle 401 (missing/invalid api_key), 403 (inactive account), 404 (no data for the date/range), 422 (validation errors such as date format), and 429 (quota exhausted) gracefully with user-visible guidance.
Computing Spreads and Monthly Payments
Spread to another symbol: let r1 be the PBOC_LPR_1Y value and r2 another benchmark (e.g., ECB_MRO). The spread in percentage points is spread = r1 − r2. For basis points, multiply by 100.
Monthly payment for an amortizing loan using PBOC_LPR_1Y as the annual nominal rate (no compounding conventions assumed by the API; apply the convention your product uses):
- Let A be the principal, r be the annual rate as a decimal (e.g., 3% → 0.03), m be months per year (12), and n be the term in months.
- Monthly rate i = r / m.
- Payment P = A × i / (1 − (1 + i)^(−n)).
If your product uses interest-only, balloon, or simple interest models, adapt formulas accordingly. The API provides the benchmark; your contract math determines the amortization path.
Production Use Cases for PBOC_LPR_1Y
- Interest rate dashboards: plot PBOC_LPR_1Y via /timeseries and annotate OHLC moves via /ohlc for month-over-month changes.
- Loan pricing engines: pull /latest and apply policy spreads to set offer rates tied to PBOC_LPR_1Y.
- Risk and ALM: backtest sensitivity of portfolio cashflows to monthly LPR shocks using /fluctuation and /timeseries windows.
- Macro research: align publication dates from dates maps, and build regime charts with OHLC candles for structural breaks.
- Fintech apps: compare PBOC_LPR_1Y-based costs to alternative benchmarks using /convert for user-facing savings illustrations.
For developer-first docs and examples across endpoints, see the MCP. To start integrating now, Register for an API key.
End-to-End Error Handling and Validation
Validate inputs before sending:
- Dates: strict YYYY-MM-DD.
- Symbols: must be in the available symbols list (e.g., PBOC_LPR_1Y).
- Ranges: end ≥ start in /timeseries, /fluctuation, /ohlc.
- /convert: amount ≥ 0; term_months in [1, 360].
On failure, the API returns success=false with error strings; some 404s include details about available ranges. For 429, honor Retry-After and the X-RateLimit-* headers to pace calls.
Health-check your integration by calling /symbols on startup and logging the resulting count and metadata for PBOC_LPR_1Y. For observability, capture response times and error rates per endpoint and isolate network timeouts from validation failures.
Security, Deployment, and Environments
Store the api_key in environment variables or your secret manager. Never embed secrets in client-side code for public distribution; route requests via your backend service where appropriate. All calls are GET over HTTPS to the base URL https://interestratesapi.com/api/v1/ with api_key appended as a query parameter.
Consider a staging environment with fixtures built from the JSON examples in this article. This enables deterministic tests for parsing rates maps, dates maps, and OHLC arrays before hitting live endpoints. For caching, standard HTTP caches or an application cache keyed by full URLs are sufficient given all endpoints are idempotent GETs.
Reference: Endpoint Matrix for PBOC_LPR_1Y
- /symbols: discover PBOC_LPR_1Y metadata (category=central_bank, base=CNY, frequency=monthly).
- /latest: fetch the most recent PBOC_LPR_1Y with effective date and currency tags.
- /historical: query by a specific date; monthly symbols map to the last available day within that month.
- /timeseries: build historical panels by date range for charting and analytics.
- /fluctuation: compute change, change_pct, high, low over a period for monitoring.
- /ohlc: generate derived OHLC candles for visual components and rule engines.
- /convert: compare simple interest costs using latest rate snapshots.
Explore more at interestratesapi.com and get an API key to implement your first call: Get started with Interest Rates API.
FAQ
Q: How often does PBOC_LPR_1Y update in the API?
A: Its frequency is monthly. Use /latest for the most recent value and the per-symbol dates map to read the effective date. For historical queries, the API uses the last day with data within that month.
Q: What units should I assume for PBOC_LPR_1Y?
A: The rate is an annualized percentage. For example, 3 represents 3% per annum. Convert to decimals in your math where needed (e.g., 0.03).
Q: How do I handle non-trading days?
A: Time series are keyed by business days. For monthly-origin symbols like PBOC_LPR_1Y, the monthly value is repeated across business days until a new monthly value appears.
Q: What’s the best way to compute a spread versus another benchmark?
A: Pull both latest values (e.g., PBOC_LPR_1Y and a comparator), then spread_pp = r_PBOC − r_other. For basis points, spread_bps = spread_pp × 100.
Q: Which auth method does the API use?
A: A query parameter api_key on every GET request. No headers or POST methods are used.
Ready to integrate PBOC_LPR_1Y into your pricing engine or dashboard? Get your key and ship your first call today. Visit interestratesapi.com and the Interest Rates API MCP, then Register for an API key.