You need a reliable, programmatic way to pull the People’s Bank of China one‑year Loan Prime Rate into your software and derive actionable metrics from it. By the end of this article, you will query the PBOC_LPR_1Y symbol from the Interest Rates API, read effective dates and units correctly, analyze historical movements, compute spreads and loan payments, and integrate the results into dashboards, loan pricing, and risk models.
What the PBOC_LPR_1Y rate represents and how it’s expressed
PBOC_LPR_1Y is the PBoC Loan Prime Rate (1-Year tenor). It is a key benchmark for CNY lending, widely referenced in corporate lending, mortgages, and rate-linked contracts. In the Interest Rates API, the rate is returned as a percentage (e.g., 5.33 means 5.33% per annum).
Publication frequency: monthly. For monthly series, the API returns a stable value across business days until the next monthly update becomes available. The date in responses indicates the effective date associated with that value in the API’s dataset for your query.
Effective dates for monthly symbols: when you request a specific date (historical) or a range (timeseries), the API provides the value associated with the last day in the requested month that has data (see the historical endpoint note below). This lets you align monthly rate settings with any date within the same calendar month.
All endpoints are authenticated via the api_key query parameter and are read-only with HTTP GET. See documentation and platform links at interestratesapi.com and the MCP.
API fundamentals you will use in each request
- Base URL: https://interestratesapi.com/api/v1/
- Authentication: append ?api_key=YOUR_API_KEY (no headers needed)
- All endpoints: HTTP GET only
- Core symbol for this article: PBOC_LPR_1Y
- Units: percentage per annum, numeric (e.g., 5.33)
- Dates: YYYY-MM-DD string values, UTC-based service
Key response fields you’ll see across endpoints:
- rates: Map of symbol to numeric rate value(s)
- date / dates: Global date stamp and per-symbol effective dates map
- currencies: Map of symbol to currency code
- frequencies: Map of symbol to frequency label (e.g., daily, monthly)
- OHLC fields: open, high, low, close, data_points
- Fluctuation fields: start_date, end_date, start_value, end_value, change, change_pct, high, low
Discovering symbols: /symbols
Use the symbols catalogue to confirm the exact identifier and metadata (like frequency). PBOC_LPR_1Y is categorized as a central bank rate and operates in CNY; the API may normalize reporting currency in combined results. Filters let you narrow by category and base currency.
cURL
curl -s "https://interestratesapi.com/api/v1/latest?api_key=YOUR_API_KEY&symbols=SOFR"
JSON response
{
"success": true,
"date": "2026-10-05",
"base": "USD",
"rates": {
"SOFR": 3.89
},
"dates": {
"SOFR": "2026-10-05"
},
"currencies": {
"SOFR": "USD"
},
"base_filter_note": null
}
Interpretation: The fields show a symbol’s identifier, name, category, country and currency codes, frequency, and description. For PBOC_LPR_1Y, you’ll see frequency "monthly" in the catalogue when filtering appropriately.
Python
import requests
resp = requests.get(
'https://interestratesapi.com/api/v1/symbols',
params=dict(category='central_bank', base='CNY', api_key='YOUR_KEY')
)
symbols = resp.json()
print(symbols.get('count'), 'symbols found')
JavaScript
const res = await fetch(
'https://interestratesapi.com/api/v1/symbols?category=central_bank&base=CNY&api_key=YOUR_KEY'
);
const symbols = await res.json();
console.log(symbols);
PHP
<?php
$url = 'https://interestratesapi.com/api/v1/symbols?category=central_bank&base=CNY&api_key=YOUR_KEY';
$json = file_get_contents($url);
$data = json_decode($json, true);
print_r($data);
Latest value: /latest
Use /latest to get the most recent setting of PBOC_LPR_1Y. The response includes a top-level date (the data batch date) and a dates map per symbol. For monthly series, the rate remains unchanged until the next update.
Official sample (copy verbatim)
This illustrates the response structure: a global date, a per-symbol rate, and a per-symbol effective date. The same layout applies to PBOC_LPR_1Y.
PBOC_LPR_1Y: cURL
PBOC_LPR_1Y: JSON response
Reading this response:
- rates.PBOC_LPR_1Y is the current 1Y LPR value as a percentage.
- dates.PBOC_LPR_1Y shows the effective date for that value in the dataset.
- currencies maps each symbol to its reporting currency in this response.
Python
import requests
r = requests.get(
'https://interestratesapi.com/api/v1/latest',
params=dict(symbols='PBOC_LPR_1Y', api_key='YOUR_KEY')
)
data = r.json()
lpr = data['rates']['PBOC_LPR_1Y']
lpr_date = data['dates']['PBOC_LPR_1Y']
print('PBOC_LPR_1Y:', lpr, 'effective', lpr_date)
JavaScript
const response = await fetch(
'https://interestratesapi.com/api/v1/latest?symbols=PBOC_LPR_1Y&api_key=YOUR_KEY'
);
const data = await response.json();
const lpr = data.rates['PBOC_LPR_1Y'];
const eff = data.dates['PBOC_LPR_1Y'];
console.log('LPR 1Y', lpr, 'effective', eff);
PHP
<?php
$url = 'https://interestratesapi.com/api/v1/latest?symbols=PBOC_LPR_1Y&api_key=YOUR_KEY';
$json = file_get_contents($url);
$data = json_decode($json, true);
echo 'PBOC_LPR_1Y: '.$data['rates']['PBOC_LPR_1Y'].' effective '.$data['dates']['PBOC_LPR_1Y'];
Value on a specific date: /historical
For monthly symbols like PBOC_LPR_1Y, the API returns the value associated with the last day in that month that has data, even if you specify a mid-month date.
cURL
JSON response
Reading this response: the date echoes your request; the rate returned corresponds to that month’s setting. Use this to align contractual calculations to a target date inside a given month.
Python
import requests
resp = requests.get(
'https://interestratesapi.com/api/v1/historical',
params=dict(date='2025-06-15', symbols='PBOC_LPR_1Y', api_key='YOUR_KEY')
)
hist = resp.json()
print(hist['rates']['PBOC_LPR_1Y'])
JavaScript
const res = await fetch(
'https://interestratesapi.com/api/v1/historical?date=2025-06-15&symbols=PBOC_LPR_1Y&api_key=YOUR_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_KEY';
$data = json_decode(file_get_contents($url), true);
echo $data['rates']['PBOC_LPR_1Y'];
Time series for analysis: /timeseries
Pull a continuous series across dates to chart trends, compute moving averages, or power risk models. For monthly series, the API’s rates map provides daily keys that reflect the held monthly value across business days.
cURL
JSON response
Key fields:
- rates.PBOC_LPR_1Y: date-indexed values
- frequencies.PBOC_LPR_1Y: labeled here as daily because the series is provided across business days, carrying the monthly setting
- currencies: reporting currency
Python
import requests
import pandas as pd
resp = requests.get(
'https://interestratesapi.com/api/v1/timeseries',
params=dict(start='2025-10-07', end='2026-10-07', symbols='PBOC_LPR_1Y', api_key='YOUR_KEY')
)
series = resp.json()['rates']['PBOC_LPR_1Y']
df = pd.Series(series, name='PBOC_LPR_1Y').sort_index()
print(df.head())
JavaScript
const url = 'https://interestratesapi.com/api/v1/timeseries?start=2025-10-07&end=2026-10-07&symbols=PBOC_LPR_1Y&api_key=YOUR_KEY';
const r = await fetch(url);
const ts = await r.json();
const points = Object.entries(ts.rates['PBOC_LPR_1Y']).sort(([a], [b]) => a.localeCompare(b));
console.log(points.slice(0, 3));
PHP
<?php
$url = 'https://interestratesapi.com/api/v1/timeseries?start=2025-10-07&end=2026-10-07&symbols=PBOC_LPR_1Y&api_key=YOUR_KEY';
$data = json_decode(file_get_contents($url), true);
$series = $data['rates']['PBOC_LPR_1Y'];
ksort($series);
print_r(array_slice($series, 0, 3, true));
Change statistics: /fluctuation
Compute absolute and percentage change over a period, along with the high/low during the range. This is useful for summary widgets and monitoring alerts.
cURL
JSON response
Interpretation:
- change and change_pct summarize the movement from start_value to end_value.
- high and low represent the extremes within the requested window.
Python
import requests
payload = dict(start='2025-10-07', end='2026-10-07', symbols='PBOC_LPR_1Y', api_key='YOUR_KEY')
res = requests.get('https://interestratesapi.com/api/v1/fluctuation', params=payload).json()
stats = res['rates']['PBOC_LPR_1Y']
print('Δ', stats['change'], '(', stats['change_pct'], '%)')
JavaScript
const q = 'start=2025-10-07&end=2026-10-07&symbols=PBOC_LPR_1Y&api_key=YOUR_KEY';
const fl = await (await fetch('https://interestratesapi.com/api/v1/fluctuation?' + q)).json();
console.log(fl.rates['PBOC_LPR_1Y']);
PHP
<?php
$q = 'start=2025-10-07&end=2026-10-07&symbols=PBOC_LPR_1Y&api_key=YOUR_KEY';
$data = json_decode(file_get_contents('https://interestratesapi.com/api/v1/fluctuation?'.$q), true);
print_r($data['rates']['PBOC_LPR_1Y']);
OHLC aggregation: /ohlc
Generate candlestick-style summaries (open, high, low, close) for a chosen period. This is useful for dashboards and compact summaries of monthly evolution.
cURL
JSON response
Field usage:
- period: a YYYY-MM string for the aggregated interval
- open/high/low/close: computed from the daily data in that month
- data_points: count of underlying data points in the aggregation
Python
import requests
params = dict(symbols='PBOC_LPR_1Y', period='monthly', start='2025-10-07', end='2026-10-07', api_key='YOUR_KEY')
ohlc = requests.get('https://interestratesapi.com/api/v1/ohlc', params=params).json()
print(ohlc['rates']['PBOC_LPR_1Y'][0])
JavaScript
const p = 'symbols=PBOC_LPR_1Y&period=monthly&start=2025-10-07&end=2026-10-07&api_key=YOUR_KEY';
const ohlc = await (await fetch('https://interestratesapi.com/api/v1/ohlc?' + p)).json();
console.log(ohlc.rates['PBOC_LPR_1Y'][0]);
PHP
<?php
$p = 'symbols=PBOC_LPR_1Y&period=monthly&start=2025-10-07&end=2026-10-07&api_key=YOUR_KEY';
$ohlc = json_decode(file_get_contents('https://interestratesapi.com/api/v1/ohlc?'.$p), true);
print_r($ohlc['rates']['PBOC_LPR_1Y'][0]);
Loan cost comparison: /convert
Compare the total interest cost of a simple loan priced at the latest PBOC_LPR_1Y to another benchmark. This endpoint returns totals for a given principal and term (months), enabling quick spread and interest savings calculations.
cURL
JSON response
Interpretation: rate_spread is the simple difference in percentage points; total_interest reflects a simple interest calculation over the term. Use this to power quick comparisons in lending or treasury tools.
Python
import requests
q = dict(from='PBOC_LPR_1Y', to='ECB_MRO', amount=100000, term_months=12, api_key='YOUR_KEY')
conv = requests.get('https://interestratesapi.com/api/v1/convert', params=q).json()
print(conv['difference'])
JavaScript
const params = 'from=PBOC_LPR_1Y&to=ECB_MRO&amount=100000&term_months=12&api_key=YOUR_KEY';
const out = await (await fetch('https://interestratesapi.com/api/v1/convert?' + params)).json();
console.log(out.difference);
PHP
<?php
$q = 'from=PBOC_LPR_1Y&to=ECB_MRO&amount=100000&term_months=12&api_key=YOUR_KEY';
$data = json_decode(file_get_contents('https://interestratesapi.com/api/v1/convert?'.$q), true);
print_r($data['difference']);
How to compute spreads and payments from the returned value
Spreads: subtract two benchmark rates to obtain a rate_spread in percentage points. For example, if you fetch PBOC_LPR_1Y via /latest and compare to another symbol, spread = rate_A − rate_B. The /convert endpoint returns this directly as difference.rate_spread, but you can also compute it yourself from the two rates in /latest.
Monthly payment from a benchmark rate: if you need a simple interest estimate over N months for amount A, compute total_interest = A × (annual_rate / 100) × (N / 12). Then, total_payment = A + total_interest. If you require amortized payments, apply the standard annuity formula with the monthly rate r = (annual_rate / 100) / 12: payment = A × r / (1 − (1 + r)^(−N)). The API returns the annualized percentage rate; the conversion to monthly r is straightforward. Do not assume compounding unless your product requires it.
Operational details: business days, caching, and error handling
Business days: For monthly PBOC_LPR_1Y, the value is stable across business days in the month and updates when the new monthly fixing is available. Daily endpoints like /timeseries present keys only for days with data; weekends and holidays are omitted.
Caching: If you serve dashboards or pricing pages, cache /latest for short intervals (e.g., a few minutes) and cache /timeseries for longer, as historical data changes infrequently. Invalidate cache after the monthly LPR publication window to reflect updates quickly.
Error handling: All responses include success; check it first. Common errors include:
- 401/403: missing or invalid api_key, or inactive account
- 404: request out of available ranges or unknown symbol; inspect any details field
- 422: validation errors (e.g., wrong date format)
- 429: quota exhaustion; honor Retry-After and inspect X-RateLimit-* headers
For full documentation and SDK concepts, see interestratesapi.com and the MCP.
Practical use cases with PBOC_LPR_1Y
- Interest rate dashboards: plot PBOC_LPR_1Y over time with /timeseries and show monthly OHLC with /ohlc.
- Lending and mortgage pricing: use /latest to set initial benchmarks, add your product spread, and compute amortized payments.
- Treasury and funding: monitor fluctuation with /fluctuation to summarize changes across reporting periods.
- Research and risk models: feed /timeseries into factor models; compute period-over-period deltas and volatility proxies from OHLC and fluctuation outputs.
- Loan comparison tools: call /convert to give end-users a quick quantified difference versus an alternative benchmark.
End-to-end example flow
- Validate symbol availability with /symbols (filter category=central_bank, base=CNY; confirm PBOC_LPR_1Y).
- Get the current setting with /latest (symbols=PBOC_LPR_1Y).
- For a backdated contract, confirm the relevant month’s value with /historical (date=YYYY-MM-DD inside the contract month).
- Populate charts with /timeseries for your analysis window (start/end).
- Show monthly summaries with /ohlc, period=monthly.
- Offer a quick cost comparison with /convert against another rate if needed.
Copy-paste cheatsheet
Base URL and auth:
# All requests are GET and use the api_key query parameter
https://interestratesapi.com/api/v1/latest?symbols=PBOC_LPR_1Y&api_key=YOUR_KEY
Python GET pattern:
import requests
response = requests.get(
'https://interestratesapi.com/api/v1/latest',
params=dict(symbols='PBOC_LPR_1Y,ECB_MRO', api_key='YOUR_KEY')
)
data = response.json()
JavaScript fetch pattern:
const response = await fetch(
'https://interestratesapi.com/api/v1/latest?symbols=PBOC_LPR_1Y&api_key=YOUR_KEY'
);
const data = await response.json();
Frequently asked questions
Q1: What unit is PBOC_LPR_1Y returned in?
A: Percentage per annum. For example, 5.33 means 5.33%.
Q2: How do I align a specific contract date to a monthly LPR?
A: Use /historical with the contract date; for monthly series, the API uses the last day with data within that month, ensuring you get that month’s effective setting.
Q3: Can I compute a loan’s monthly payment using the returned rate?
A: Yes. Convert the annual rate to a monthly rate r = (annual_rate / 100) / 12 and apply an annuity formula for amortized payments. For simple-interest comparisons, /convert returns total_interest and total_payment directly.
Q4: How often should I refresh /latest for PBOC_LPR_1Y?
A: The rate is monthly, so frequent polling isn’t necessary. However, if your app also shows other daily rates, a short cache (minutes) keeps the UI responsive and consistent.
Q5: How do I handle 429 rate limit responses?
A: Honor the Retry-After header and check X-RateLimit-* headers. Implement exponential backoff and avoid hot-loop retries.
Build your integration now. Explore the docs at interestratesapi.com and register for an API key to start calling the endpoints above: Register. If you need more details on models and capabilities, visit the MCP.




