BOJ (BOJ_POLICY_RATE) Rate History

BOJ (BOJ_POLICY_RATE) Rate History

You need to query, cache, and analyze the Bank of Japan’s policy rate inside your software. By the end of this article, you’ll be able to fetch the BOJ policy rate (symbol: BOJ_POLICY_RATE) from the Interest Rates API, read effective dates correctly, build a historical time series, compute fluctuations and OHLC, and safely plug those numbers into calculations such as spreads and monthly payments—using only GET requests with api_key authentication.

What the BOJ policy rate is and why it matters

BOJ_POLICY_RATE represents the Bank of Japan (BOJ) policy rate, the central monetary policy benchmark for JPY. It is categorized as a central bank rate and provided in JPY with a monthly frequency in this API. Developers use it to drive lending and deposit pricing logic, compare policy stances across central banks, power macro dashboards, and run scenario and risk models.

Illustration: BOJ (BOJ_POLICY_RATE) Rate History

Key characteristics for this symbol in the API:

  • Symbol: BOJ_POLICY_RATE
  • Category: central_bank
  • Currency: JPY
  • Frequency: monthly (returned in time series as date-indexed observations; for monthly symbols, the last day with data within that month is used when you query a single date)

All endpoints use GET over HTTPS at https://interestratesapi.com/api/v1/ and authenticate with an api_key query parameter. See the MCP for a compact reference, and Register to get an API key.

Reading the latest BOJ policy rate

Use the latest endpoint to retrieve the most recent observation for BOJ_POLICY_RATE. The fields you’ll rely on are:

  • rates: map of symbol to numeric rate
  • date: the API’s consolidated latest date across requested symbols
  • dates: per-symbol effective date (use this when multiple symbols are in a single request)
  • currencies: per-symbol currency code

Official cURL sample (verbatim)

curl -s "https://interestratesapi.com/api/v1/latest?api_key=YOUR_API_KEY&symbols=BOJ_POLICY_RATE"

Official JSON response (verbatim)

{
    "success": true,
    "date": "2023-12-01",
    "base": "JPY",
    "rates": {
        "BOJ_POLICY_RATE": 0.3
    },
    "dates": {
        "BOJ_POLICY_RATE": "2023-12-01"
    },
    "currencies": {
        "BOJ_POLICY_RATE": "JPY"
    },
    "base_filter_note": null
}

How to read this:

  • The BOJ policy rate is expressed as a percentage (e.g., 0.3 means 0.30%).
  • Use dates["BOJ_POLICY_RATE"] to interpret the effective date for the returned rate.
  • Currency is JPY, as indicated in currencies["BOJ_POLICY_RATE"].

Python (requests) example

import requests

resp = requests.get(
"https://interestratesapi.com/api/v1/latest",
params=dict(symbols="BOJ_POLICY_RATE", api_key="YOUR_API_KEY"),
timeout=10
)
data = resp.json()
rate = data["rates"]["BOJ_POLICY_RATE"]
effective_date = data["dates"]["BOJ_POLICY_RATE"]
currency = data["currencies"]["BOJ_POLICY_RATE"]
print(rate, effective_date, currency)

JavaScript (fetch) example

const response = await fetch(
'https://interestratesapi.com/api/v1/latest?symbols=BOJ_POLICY_RATE&api_key=YOUR_API_KEY'
);
const data = await response.json();
const rate = data.rates.BOJ_POLICY_RATE;
const effectiveDate = data.dates.BOJ_POLICY_RATE;
const currency = data.currencies.BOJ_POLICY_RATE;
console.log(rate, effectiveDate, currency);

PHP example

<?php
$url = 'https://interestratesapi.com/api/v1/latest?symbols=BOJ_POLICY_RATE&api_key=YOUR_API_KEY';
$json = file_get_contents($url);
$data = json_decode($json, true);
$rate = $data['rates']['BOJ_POLICY_RATE'];
$effectiveDate = $data['dates']['BOJ_POLICY_RATE'];
$currency = $data['currencies']['BOJ_POLICY_RATE'];
echo $rate . " " . $effectiveDate . " " . $currency;

Discovering symbols (filtering to central bank rates)

Use the symbols endpoint to catalog or validate available codes. This is helpful when your app supports multiple policy rates. For BOJ_POLICY_RATE specifically, you can filter by category=central_bank and base=JPY to ensure you target JPY policy benchmarks.

cURL

Python

import requests

resp = requests.get(
"https://interestratesapi.com/api/v1/symbols",
params={"category": "central_bank", "base": "JPY", "api_key": "YOUR_API_KEY"},
timeout=10
)
symbols = resp.json()
print(symbols)

JavaScript

const res = await fetch('https://interestratesapi.com/api/v1/symbols?category=central_bank&base=JPY&api_key=YOUR_API_KEY');
const symbols = await res.json();
console.log(symbols);

PHP

<?php
$url = 'https://interestratesapi.com/api/v1/symbols?category=central_bank&base=JPY&api_key=YOUR_API_KEY';
$data = json_decode(file_get_contents($url), true);
print_r($data);

Sample JSON

Example shape (values are illustrative to show structure only):

Querying a specific historical date

Use the historical endpoint to retrieve the policy rate for a specific date. For monthly symbols like BOJ_POLICY_RATE, the API returns the last available date within that month if you pass any date in that month. This is ideal for end-of-month analytics and backfills.

cURL

Python

import requests

params = {"date": "2025-06-15", "symbols": "BOJ_POLICY_RATE", "api_key": "YOUR_API_KEY"}
resp = requests.get("https://interestratesapi.com/api/v1/historical", params=params, timeout=10)
data = resp.json()
rate = data["rates"]["BOJ_POLICY_RATE"]
currency = data["currencies"]["BOJ_POLICY_RATE"]
print(rate, currency)

JavaScript

const url = 'https://interestratesapi.com/api/v1/historical?date=2025-06-15&symbols=BOJ_POLICY_RATE&api_key=YOUR_API_KEY';
const res = await fetch(url);
const data = await res.json();
console.log(data.rates.BOJ_POLICY_RATE, data.currencies.BOJ_POLICY_RATE);

PHP

<?php
$url = 'https://interestratesapi.com/api/v1/historical?date=2025-06-15&symbols=BOJ_POLICY_RATE&api_key=YOUR_API_KEY';
$data = json_decode(file_get_contents($url), true);
echo $data['rates']['BOJ_POLICY_RATE'] . " " . $data['currencies']['BOJ_POLICY_RATE'];

Sample JSON

Values below are illustrative (follow the documented fields):

Building a time series for BOJ_POLICY_RATE

Use the timeseries endpoint for a continuous series between two dates. Even though BOJ_POLICY_RATE is monthly, the series is presented on a date basis. In many integrations, you’ll forward-fill or sample month-end points depending on your analytics model.

cURL

Python

import requests

params = {
"start": "2025-10-26",
"end": "2026-10-26",
"symbols": "BOJ_POLICY_RATE",
"api_key": "YOUR_API_KEY"
}
resp = requests.get("https://interestratesapi.com/api/v1/timeseries", params=params, timeout=10)
series = resp.json()
print(series["frequencies"]["BOJ_POLICY_RATE"])
print(series["rates"]["BOJ_POLICY_RATE"])

JavaScript

const url = 'https://interestratesapi.com/api/v1/timeseries?start=2025-10-26&end=2026-10-26&symbols=BOJ_POLICY_RATE&api_key=YOUR_API_KEY';
const res = await fetch(url);
const data = await res.json();
console.log(data.frequencies.BOJ_POLICY_RATE);
console.log(data.rates.BOJ_POLICY_RATE);

PHP

<?php
$url = 'https://interestratesapi.com/api/v1/timeseries?start=2025-10-26&end=2026-10-26&symbols=BOJ_POLICY_RATE&api_key=YOUR_API_KEY';
$data = json_decode(file_get_contents($url), true);
print_r($data['frequencies']['BOJ_POLICY_RATE']);
print_r($data['rates']['BOJ_POLICY_RATE']);

Sample JSON

Values below are illustrative; focus on field usage:

Key fields:

  • rates.BOJ_POLICY_RATE: date-indexed map of rate values
  • frequencies.BOJ_POLICY_RATE: frequency string for the returned series
  • currencies.BOJ_POLICY_RATE: currency code

Fluctuation statistics over a range

Use fluctuation to compute start/end values, absolute and percentage change, and range stats (high/low). This is useful for dashboards and risk overlays.

cURL

Python

import requests

params = {
"start": "2025-10-26",
"end": "2026-10-26",
"symbols": "BOJ_POLICY_RATE",
"api_key": "YOUR_API_KEY"
}
resp = requests.get("https://interestratesapi.com/api/v1/fluctuation", params=params, timeout=10)
stats = resp.json()["rates"]["BOJ_POLICY_RATE"]
print(stats["change"], stats["change_pct"], stats["high"], stats["low"])

JavaScript

const res = await fetch('https://interestratesapi.com/api/v1/fluctuation?start=2025-10-26&end=2026-10-26&symbols=BOJ_POLICY_RATE&api_key=YOUR_API_KEY');
const out = await res.json();
const s = out.rates.BOJ_POLICY_RATE;
console.log(s.start_value, s.end_value, s.change, s.change_pct, s.high, s.low);

PHP

<?php
$url = 'https://interestratesapi.com/api/v1/fluctuation?start=2025-10-26&end=2026-10-26&symbols=BOJ_POLICY_RATE&api_key=YOUR_API_KEY';
$data = json_decode(file_get_contents($url), true);
$s = $data['rates']['BOJ_POLICY_RATE'];
echo $s['change'] . " " . $s['change_pct'] . " " . $s['high'] . " " . $s['low'];

Sample JSON

Values below are illustrative; focus on field semantics:

Note that change_pct is null when start_value is 0 to avoid division by zero.

OHLC for monthly or weekly candles

Use OHLC to create candlestick aggregations from daily data. For BOJ_POLICY_RATE (monthly frequency), OHLC still returns periodized open/high/low/close calculated on-the-fly. You can chart this directly. Each bucket also returns data_points: the number of observations within that period.

cURL

Python

import requests

params = {
"symbols": "BOJ_POLICY_RATE",
"period": "monthly",
"start": "2025-10-26",
"end": "2026-10-26",
"api_key": "YOUR_API_KEY"
}
resp = requests.get("https://interestratesapi.com/api/v1/ohlc", params=params, timeout=10)
ohlc = resp.json()["rates"]["BOJ_POLICY_RATE"]
print(ohlc)

JavaScript

const url = 'https://interestratesapi.com/api/v1/ohlc?symbols=BOJ_POLICY_RATE&period=monthly&start=2025-10-26&end=2026-10-26&api_key=YOUR_API_KEY';
const res = await fetch(url);
const data = await res.json();
console.log(data.rates.BOJ_POLICY_RATE);

PHP

<?php
$url = 'https://interestratesapi.com/api/v1/ohlc?symbols=BOJ_POLICY_RATE&period=monthly&start=2025-10-26&end=2026-10-26&api_key=YOUR_API_KEY';
$data = json_decode(file_get_contents($url), true);
print_r($data['rates']['BOJ_POLICY_RATE']);

Sample JSON

Values below are illustrative:

Compare loan interest costs across benchmarks

If you need to contextualize the BOJ policy rate against another central bank rate, the convert endpoint returns a comparison of total interest costs for a simple loan at the latest rate of each symbol. This avoids implementing your own baseline comparison and ensures you use consistent latest values across the two series.

cURL

Python

import requests

params = {
"from": "BOJ_POLICY_RATE",
"to": "ECB_MRO",
"amount": 100000,
"term_months": 12,
"api_key": "YOUR_API_KEY"
}
resp = requests.get("https://interestratesapi.com/api/v1/convert", params=params, timeout=10)
cmp = resp.json()
print(cmp["from"]["rate"], cmp["to"]["rate"], cmp["difference"]["rate_spread"])

JavaScript

const res = await fetch('https://interestratesapi.com/api/v1/convert?from=BOJ_POLICY_RATE&to=ECB_MRO&amount=100000&term_months=12&api_key=YOUR_API_KEY');
const cmp = await res.json();
console.log(cmp.from.rate, cmp.to.rate, cmp.difference.rate_spread);

PHP

<?php
$url = 'https://interestratesapi.com/api/v1/convert?from=BOJ_POLICY_RATE&to=ECB_MRO&amount=100000&term_months=12&api_key=YOUR_API_KEY';
$data = json_decode(file_get_contents($url), true);
echo $data['from']['rate'] . " " . $data['to']['rate'] . " spread=" . $data['difference']['rate_spread'];

Sample JSON

Values below are illustrative to show fields:

Use difference.rate_spread to present the spread between two benchmarks. Note that returned costs are computed at the latest rate for each symbol over the selected simple term.

Operational details developers need

Publication frequency and business days

BOJ_POLICY_RATE is monthly in the Interest Rates API. For historical queries, if you request a date within a month, the API uses the last day with data in that month. Because policy decisions can occur on specific dates that are not aligned to business-day conventions, check dates["BOJ_POLICY_RATE"] to display the effective date accurately in your UI and logs.

Caching recommendations

  • Latest: Cache for at least one day, or until you detect a rate change by polling dates["BOJ_POLICY_RATE"].
  • Historical and time series: Cache aggressively; these endpoints return immutable past data except for rare revisions.
  • OHLC and fluctuation: Cache per request parameters (symbol, period or range) as they are derived from underlying series.

Respect the rate-limit headers (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset) and handle 429 responses with backoff. All requests are GET and authenticated via the api_key query parameter only.

Computing spreads and monthly payments from returned values

  • Spread between two rates r1 and r2 (percent values as returned): spread = r1 − r2. For example, use the convert endpoint or fetch each latest rate and subtract.
  • Monthly payment for a principal P, annual rate r (percent), and term n months (amortizing):
    // Convert annual percent to monthly decimal
    i = (r / 100) / 12
    payment = P * i / (1 - (1 + i)^(-n))
    The API returns r as a percentage (e.g., 0.3 for 0.30%), so divide by 100 before calculating. Always read the rate’s effective date from dates[...] to align it with your loan’s pricing date.

Error handling and diagnostics

Common error responses share the shape success=false and an error message. Handle:

  • 401: Missing or invalid api_key
  • 403: Account without active plan
  • 404: No symbols matched or no data for the requested date/range (may include a details field with available ranges)
  • 422: Validation error (e.g., invalid date format or symbol)
  • 429: Request quota exhausted (use Retry-After and X-RateLimit-* headers)

Always log your full request URL without the key, the HTTP status, and the response body to speed up diagnostics.

End-to-end examples per endpoint summarized

Below is a concise set of endpoint calls you can copy as-is with your own key. All use GET and api_key in the query string. For full details and additional endpoints, see interestratesapi.com and the Interest Rates API MCP.

  • /symbols: Catalog and filter symbols, confirm BOJ_POLICY_RATE availability.
  • /latest: Retrieve current BOJ_POLICY_RATE and its effective date.
  • /historical: Get the rate on a specific date (uses last day with data within the month for monthly symbols).
  • /timeseries: Pull a continuous series for charting and analytics.
  • /fluctuation: Compute start/end, change, change_pct, high, low over a range.
  • /ohlc: Derive candlestick data by month/quarter for visualization.
  • /convert: Compare loan interest cost at BOJ_POLICY_RATE versus another symbol.

Use cases: where BOJ_POLICY_RATE fits

  • Interest rate dashboards: Display BOJ policy stance with effective dates and trend charts using timeseries and ohlc.
  • Loan pricing engines: Set a margin over BOJ_POLICY_RATE; compute amortized payments from latest values and update when dates[...] changes.
  • Macro research: Quantify shifts using fluctuation over policy cycles and export time series to modeling pipelines.
  • Risk and scenario analysis: Sensitize portfolios to policy moves; OHLC can communicate volatility of policy stances over time.

If you’re ready to wire this into production, Get started with Interest Rates API. You can also bookmark the homepage for updates and additional symbols.

FAQ

How often is BOJ_POLICY_RATE updated?
It is a monthly symbol in this API. For single-date queries, the API returns the last day with data in that month. Always inspect the per-symbol effective date via dates["BOJ_POLICY_RATE"] in the response.

What unit is the rate in?
Percent. For example, 0.3 means 0.30% annually. Convert to a monthly decimal for loan math by dividing by 100 and then by 12.

How should I handle weekends and holidays?
For monthly symbols, focus on the provided dates["BOJ_POLICY_RATE"] field rather than assuming business-day alignment. For derived analytics (OHLC, fluctuation), the API aggregates across the returned date-indexed series.

Can I compare BOJ_POLICY_RATE with other policy rates?
Yes. Use /latest or /convert to compute spreads or interest cost differences across symbols (e.g., BOJ_POLICY_RATE vs. ECB_MRO). Keep in mind each symbol’s currency and effective date.

What if I receive a 404 or 422?
A 404 indicates no data for the requested symbol or date/range; the response may include details about available ranges. A 422 signals a validation problem (e.g., incorrect date format or symbol). Validate parameters and retry.

Ship your integration with accurate central bank data, starting from BOJ_POLICY_RATE, using only GET requests and a query-string key. Explore more on the MCP, then Register for an API key and build.

Ready to get started?

Get your API key and start validating bank data in minutes.

Get API Key