API Reference
High-Level Client
BOJ
pyboj._boj.BOJ
High-level client for the Bank of Japan Time-Series Statistics API.
Every parameter is typed — no magic strings. The client fetches metadata, filters series by your criteria, and returns rich domain wrapper objects.
Usage::
from pyboj import BOJ, Currency, Frequency
boj = BOJ()
rates = boj.exchange_rates(currency=Currency.USD_JPY, frequency=Frequency.D)
for r in rates:
print(r.currency_pair, r.values[:3])
df = r.to_dataframe()
Or as a context manager::
with BOJ() as boj:
rates = boj.exchange_rates(currency=Currency.USD_JPY)
__init__(lang=Lang.JP, timeout=DEFAULT_TIMEOUT)
close()
Close the underlying HTTP client.
metadata(db)
Return metadata records for a database.
Parameters
db: Database to query.
exchange_rates(*, currency=None, rate_type=None, frequency=None, start_date=None, end_date=None, db=Database.EXCHANGE_RATES)
Fetch exchange rate series.
Parameters
currency:
Filter by currency pair (e.g. Currency.USD_JPY).
rate_type:
Filter by rate type (e.g. RateType.SPOT_9AM).
frequency:
Filter by frequency (e.g. Frequency.D).
start_date:
Start date in YYYYMM format.
end_date:
End date in YYYYMM format.
db:
Database to query. Default: FM08 (Exchange Rates).
interest_rates(*, category=None, collateralization=None, frequency=None, start_date=None, end_date=None, db=Database.CALL_RATES)
Fetch interest rate series.
Parameters
category:
Filter by rate category (e.g. RateCategory.CALL_RATE).
collateralization:
Filter by collateralization type.
frequency:
Filter by frequency.
start_date:
Start date in YYYYMM format.
end_date:
End date in YYYYMM format.
db:
Database to query. Default: FM01 (Call Rates).
price_indices(*, index_type=None, frequency=None, start_date=None, end_date=None, db=Database.PRODUCER_PRICE_INDEX)
Fetch price index series.
Parameters
index_type:
Filter by index type (e.g. IndexType.PRODUCER).
frequency:
Filter by frequency.
start_date:
Start date in YYYYMM format.
end_date:
End date in YYYYMM format.
db:
Database to query. Default: PR01 (Producer Price Index).
tankan(*, industry=None, size=None, item=None, series_type=None, timing=None, frequency=None, start_date=None, end_date=None)
Fetch TANKAN survey series.
Parameters
industry:
Filter by industry classification.
size:
Filter by enterprise size.
item:
Filter by survey item.
series_type:
Filter by series type (DI, percent point, etc.).
timing:
Filter by timing (actual vs forecast).
frequency:
Filter by frequency.
start_date:
Start date in YYYYMM format.
end_date:
End date in YYYYMM format.
balance_of_payments(*, account=None, frequency=None, start_date=None, end_date=None)
Fetch balance of payments series.
Parameters
account:
Filter by BOP account type.
frequency:
Filter by frequency.
start_date:
Start date in YYYYMM format.
end_date:
End date in YYYYMM format.
money_deposits(*, component=None, adjustment=None, frequency=None, start_date=None, end_date=None, db=Database.MONETARY_BASE)
Fetch money and deposit series.
Parameters
component:
Filter by monetary component.
adjustment:
Filter by adjustment type.
frequency:
Filter by frequency.
start_date:
Start date in YYYYMM format.
end_date:
End date in YYYYMM format.
db:
Database to query. Default: MD01 (Monetary Base).
loans(*, sector=None, frequency=None, start_date=None, end_date=None, db=Database.LOANS_BY_SECTOR)
Fetch loan series.
Parameters
sector:
Filter by industry sector.
frequency:
Filter by frequency.
start_date:
Start date in YYYYMM format.
end_date:
End date in YYYYMM format.
db:
Database to query. Default: LA01 (Loans by Sector).
financial_markets(*, segment=None, instrument_type=None, frequency=None, start_date=None, end_date=None, db=Database.SHORT_TERM_MONEY_OUTSTANDING)
Fetch financial markets series (FM03-FM07).
Parameters
segment:
Filter by market segment (e.g. MarketSegment.GOVT_BONDS).
instrument_type:
Filter by instrument type (e.g. InstrumentType.OUTSTANDING).
frequency:
Filter by frequency.
start_date:
Start date in YYYYMM format.
end_date:
End date in YYYYMM format.
db:
Database to query. Default: FM03.
balance_sheets(*, account_side=None, institution_type=None, frequency=None, start_date=None, end_date=None, db=Database.BOJ_ACCOUNTS)
Fetch balance sheet series (BS01-BS02).
Parameters
account_side:
Filter by balance sheet side (e.g. AccountSide.ASSETS).
institution_type:
Filter by institution type (e.g. InstitutionType.BOJ).
frequency:
Filter by frequency.
start_date:
Start date in YYYYMM format.
end_date:
End date in YYYYMM format.
db:
Database to query. Default: BS01.
flow_of_funds(*, sector=None, instrument=None, frequency=None, start_date=None, end_date=None)
Fetch flow of funds series (FF).
Parameters
sector:
Filter by economic sector (e.g. FofSector.HOUSEHOLDS).
instrument:
Filter by financial instrument (e.g. FofInstrument.EQUITY).
frequency:
Filter by frequency.
start_date:
Start date in YYYYMM format.
end_date:
End date in YYYYMM format.
boj_operations(*, operation_type=None, frequency=None, start_date=None, end_date=None, db=Database.GOVT_TRANSACTIONS)
Fetch BOJ operations series (OB01-OB02).
Parameters
operation_type:
Filter by operation type (e.g. OperationType.JGB_OPERATIONS).
frequency:
Filter by frequency.
start_date:
Start date in YYYYMM format.
end_date:
End date in YYYYMM format.
db:
Database to query. Default: OB01.
public_finance(*, fiscal_item=None, frequency=None, start_date=None, end_date=None, db=Database.TREASURY_RECEIPTS_PAYMENTS)
Fetch public finance series (PF01-PF02).
Parameters
fiscal_item:
Filter by fiscal item (e.g. FiscalItem.TAX_REVENUE).
frequency:
Filter by frequency.
start_date:
Start date in YYYYMM format.
end_date:
End date in YYYYMM format.
db:
Database to query. Default: PF01.
international(*, stat_category=None, frequency=None, start_date=None, end_date=None, db=Database.BIS_BANKING_STATISTICS)
Fetch international statistics series (BIS, DER, PS01, PS02, OT).
Parameters
stat_category:
Filter by statistics category (e.g. StatCategory.DERIVATIVES).
frequency:
Filter by frequency.
start_date:
Start date in YYYYMM format.
end_date:
End date in YYYYMM format.
db:
Database to query. Default: BIS.
layer_tree(db)
Build a hierarchical layer tree from database metadata.
Parameters
db: Database to build the tree for.
Returns
LayerNode Root node of the layer hierarchy.
search(db, query)
Search metadata records by keyword.
Parameters
db: Database to search. query: Case-insensitive search string.
Returns
list[MetadataRecord] Matching metadata records.
Database Enum
pyboj._config.Database
Bases: str, Enum
BOJ Time-Series Statistics database codes.
Each member maps to a database identifier used by the BOJ API.
Because Database inherits from str, members can be passed
directly to :pymeth:Client.get_data_code as the db argument.
Domain Wrappers
Base
pyboj._domains._base.Series
Base class for domain wrapper objects.
Wraps a :class:~boj_ts_api.SeriesResult and provides parsed
dates, cleaned numeric values, and optional DataFrame conversion.
series_code
property
name
property
English series name.
name_jp
property
Japanese series name.
unit
property
frequency
property
category
property
dates
property
Survey dates parsed into :class:datetime.date objects.
Entries where the raw date is None are excluded, along with their
corresponding values, to keep dates and values aligned.
values
property
Numeric values with non-numeric entries converted to None.
Entries where the corresponding date is None are excluded.
to_dataframe()
Return a :class:pandas.DataFrame with a DatetimeIndex.
Returns
pandas.DataFrame
Single column value indexed by date.
plot(*, lang=None, title=None, ylabel=None, figsize=(10, 4), **kwargs)
Plot this series.
Parameters
lang:
Language for labels (Lang.JP or Lang.EN).
Defaults to the language set on the BOJ client.
title:
Custom chart title.
ylabel:
Custom y-axis label.
figsize:
Figure size (width, height) in inches.
**kwargs:
Passed to ax.plot().
Returns
matplotlib.axes.Axes
ExchangeRate
pyboj._domains.exchange_rate.ExchangeRate
Bases: Series
Domain wrapper for exchange rate series (FM08 / FM09).
currency_pair
property
ISO currency pair (e.g. Currency.USD_JPY) or None.
rate_type
property
Classified rate type based on the English series name.
pyboj._domains.exchange_rate.Currency
Bases: str, Enum
ISO currency pair for exchange rate series.
pyboj._domains.exchange_rate.RateType
Bases: str, Enum
Type of exchange rate observation.
InterestRate
pyboj._domains.interest_rate.InterestRate
Bases: Series
Domain wrapper for interest rate series (FM01, FM02, IR01-IR04).
collateralization
property
Collateralization type, or None if not applicable.
rate_category
property
Classified rate category based on the English series name.
tenor
property
Extracted tenor string (e.g. "overnight", "3M"), or None.
pyboj._domains.interest_rate.RateCategory
Bases: str, Enum
High-level classification of the interest rate.
pyboj._domains.interest_rate.Collateralization
Bases: str, Enum
Whether the rate is collateralized or uncollateralized.
PriceIndex
pyboj._domains.price_index.PriceIndex
Bases: Series
Domain wrapper for price index series (PR01-PR04).
base_year
property
Base year string (e.g. "CY2020") extracted from the unit, or None.
index_type
property
Classified index type based on the English series name and category.
is_yoy_change
property
True when the series represents year-on-year percentage change.
pyboj._domains.price_index.IndexType
Bases: str, Enum
High-level classification of the price index.
Tankan
pyboj._domains.tankan.Tankan
Bases: Series
Domain wrapper for TANKAN survey series (CO database).
industry
property
Detected industry classification.
item
property
Detected survey item.
series_type
property
Detected series type (DI, percent point, etc.).
size
property
Detected enterprise size, or None if not identifiable.
timing
property
Detected timing (actual vs forecast).
pyboj._domains.tankan.TankanIndustry
Bases: str, Enum
TANKAN industry classification.
pyboj._domains.tankan.TankanSize
Bases: str, Enum
TANKAN enterprise size classification.
pyboj._domains.tankan.TankanItem
Bases: str, Enum
TANKAN survey item.
pyboj._domains.tankan.TankanSeriesType
Bases: str, Enum
TANKAN series type.
pyboj._domains.tankan.TankanTiming
Bases: str, Enum
TANKAN survey timing.
BalanceOfPayments
pyboj._domains.balance_of_payments.BalanceOfPayments
Bases: Series
Domain wrapper for balance of payments series (BP01).
account
property
Detected BOP account type.
pyboj._domains.balance_of_payments.BopAccount
Bases: str, Enum
Balance of payments account classification.
MoneyDeposit
pyboj._domains.money_deposit.MoneyDeposit
Bases: Series
Domain wrapper for money and deposit series (MD01-MD14).
adjustment
property
Detected adjustment type.
component
property
Detected monetary component.
pyboj._domains.money_deposit.MonetaryComponent
Bases: str, Enum
Monetary aggregate component.
pyboj._domains.money_deposit.Adjustment
Bases: str, Enum
Statistical adjustment type.
Loan
pyboj._domains.loan.Loan
pyboj._domains.loan.IndustrySector
Bases: str, Enum
Industry sector classification for loan data.
FinancialMarket
pyboj._domains.financial_market.FinancialMarket
Bases: Series
Domain wrapper for financial markets series (FM03-FM07).
instrument_type
property
Detected instrument type.
segment
property
Detected market segment.
pyboj._domains.financial_market.MarketSegment
Bases: str, Enum
Financial market segment classification.
pyboj._domains.financial_market.InstrumentType
Bases: str, Enum
Financial instrument classification.
BalanceSheet
pyboj._domains.balance_sheet.BalanceSheet
Bases: Series
Domain wrapper for balance sheet series (BS01-BS02).
account_side
property
Detected balance sheet side (assets/liabilities).
institution_type
property
Detected institution type.
pyboj._domains.balance_sheet.AccountSide
Bases: str, Enum
Balance sheet side classification.
pyboj._domains.balance_sheet.InstitutionType
Bases: str, Enum
Financial institution type.
FlowOfFunds
pyboj._domains.flow_of_funds.FlowOfFunds
Bases: Series
Domain wrapper for flow of funds series (FF).
instrument
property
Detected financial instrument.
sector
property
Detected economic sector.
pyboj._domains.flow_of_funds.FofSector
Bases: str, Enum
Flow of funds sector classification.
pyboj._domains.flow_of_funds.FofInstrument
Bases: str, Enum
Flow of funds financial instrument classification.
BOJOperation
pyboj._domains.boj_operation.BOJOperation
Bases: Series
Domain wrapper for BOJ operations series (OB01-OB02).
operation_type
property
Detected operation type.
pyboj._domains.boj_operation.OperationType
Bases: str, Enum
BOJ operation type classification.
PublicFinance
pyboj._domains.public_finance.PublicFinance
Bases: Series
Domain wrapper for public finance series (PF01-PF02).
fiscal_item
property
Detected fiscal item classification.
pyboj._domains.public_finance.FiscalItem
Bases: str, Enum
Public finance item classification.
InternationalStat
pyboj._domains.international_stat.InternationalStat
Bases: Series
Domain wrapper for international statistics series (BIS, DER, PS01, PS02, OT).
stat_category
property
Detected statistics category.
pyboj._domains.international_stat.StatCategory
Bases: str, Enum
International statistics category classification.
Discovery
Layer Tree
pyboj._helpers.layer_tree.LayerNode
dataclass
A node in the BOJ metadata layer hierarchy.
Attributes
level: Hierarchy level (0 = root). code: Layer code from the metadata. name: Human-readable name for this layer. children: Child nodes in the hierarchy. series_codes: Series codes belonging directly to this node (leaf level).
pyboj._helpers.layer_tree.build_layer_tree(records)
Build a hierarchical tree from flat BOJ metadata records.
The BOJ API returns metadata as a flat list where hierarchy is
encoded in the record ordering and LAYER1-LAYER5 fields. Header
rows (SERIES_CODE is None) define layer nodes; data rows
define leaf series.
Parameters
records:
Metadata records from :meth:BOJ.metadata or
:meth:Client.get_metadata.
Returns
LayerNode Root node of the layer tree.
pyboj._helpers.layer_tree.search_metadata(records, query)
Search metadata records by keyword (case-insensitive substring match).
Searches across series code, English name, Japanese name, and category.
Parameters
records: Metadata records to search. query: Search string (case-insensitive).
Returns
list[MetadataRecord] Matching records (only rows with a series code).
Low-Level Clients
Synchronous
boj_ts_api.client.Client
Bases: _BaseClient
Synchronous client for the Bank of Japan Time-Series API.
Usage::
with Client(lang=Lang.EN) as client:
resp = client.get_data_code(db="CO", code="TK99F1000601GCQ01000")
get_data_code(db, code, *, start_date=None, end_date=None, start_position=None)
Fetch time-series data by series code(s). Returns a single page.
iter_data_code(db, code, *, start_date=None, end_date=None)
Iterate over all series results, auto-paginating via NEXTPOSITION.
get_data_code_csv(db, code, *, start_date=None, end_date=None, start_position=None)
Fetch time-series data as raw CSV text.
get_data_layer(db, frequency, layer, *, start_date=None, end_date=None, start_position=None)
Fetch time-series data by hierarchy layer. Returns a single page.
iter_data_layer(db, frequency, layer, *, start_date=None, end_date=None)
Iterate over all series results from Layer API, auto-paginating.
get_data_layer_csv(db, frequency, layer, *, start_date=None, end_date=None, start_position=None)
Fetch layer data as raw CSV text.
get_metadata(db)
Fetch metadata for a database.
get_metadata_csv(db)
Fetch metadata as raw CSV text.
close()
Asynchronous
boj_ts_api.async_client.AsyncClient
Bases: _BaseClient
Asynchronous client for the Bank of Japan Time-Series API.
Usage::
async with AsyncClient(lang=Lang.EN) as client:
resp = await client.get_data_code(db="CO", code="TK99F1000601GCQ01000")
get_data_code(db, code, *, start_date=None, end_date=None, start_position=None)
async
Fetch time-series data by series code(s). Returns a single page.
iter_data_code(db, code, *, start_date=None, end_date=None)
async
Iterate over all series results, auto-paginating via NEXTPOSITION.
get_data_code_csv(db, code, *, start_date=None, end_date=None, start_position=None)
async
Fetch time-series data as raw CSV text.
get_data_layer(db, frequency, layer, *, start_date=None, end_date=None, start_position=None)
async
Fetch time-series data by hierarchy layer. Returns a single page.
iter_data_layer(db, frequency, layer, *, start_date=None, end_date=None)
async
Iterate over all series results from Layer API, auto-paginating.
get_data_layer_csv(db, frequency, layer, *, start_date=None, end_date=None, start_position=None)
async
Fetch layer data as raw CSV text.
get_metadata(db)
async
Fetch metadata for a database.
get_metadata_csv(db)
async
Fetch metadata as raw CSV text.
close()
async
Response Models
boj_ts_api._types.models.response.DataResponse
Bases: ResponseEnvelope
Envelope for Code/Layer API JSON responses.
boj_ts_api._types.models.response.MetadataResponse
Bases: ResponseEnvelope
Envelope for Metadata API JSON responses.
boj_ts_api._types.models.series.SeriesResult
Bases: BOJBaseModel
A single series item from the RESULTSET of Code/Layer endpoints.
boj_ts_api._types.models.series.SeriesValues
Bases: BOJBaseModel
Nested time-series values within a series result.
boj_ts_api._types.models.metadata.MetadataRecord
Bases: BOJBaseModel
A single metadata record from the RESULTSET of the Metadata endpoint.
Enums
boj_ts_api._types.config.Lang
Bases: str, Enum
Language for API responses.
boj_ts_api._types.config.Format
Bases: str, Enum
Response format.
boj_ts_api._types.config.Frequency
Bases: str, Enum
Time-series frequency.
Exceptions
boj_ts_api._types.exceptions.BOJError
Bases: Exception
Base exception for all BOJ API errors.
boj_ts_api._types.exceptions.BOJAPIError
boj_ts_api._types.exceptions.BOJRequestError
boj_ts_api._types.exceptions.BOJValidationError
Bases: BOJError
Raised when request parameters fail local validation.
Plotting
pyboj._plotting._plot.plot_series(*series, lang=None, title=None, ylabel=None, figsize=(10, 4), **kwargs)
Plot one or more Series on a single Axes.
Parameters
series:
One or more :class:~pyboj.Series objects to plot.
lang:
Language for auto-generated labels. Defaults to the language set
by :func:set_default_lang (which follows BOJ(lang=...)).
title:
Custom chart title. If None and a single series is plotted,
the series name is used.
ylabel:
Custom y-axis label. If None and a single series is plotted,
the series unit is used.
figsize:
Figure size (width, height) in inches.
*kwargs:
Passed to ax.plot().
Returns
matplotlib.axes.Axes
pyboj._plotting._plot.set_default_lang(lang)
Set the default language for plot labels.
Called automatically by :class:~pyboj.BOJ on initialization so that
the plotting language matches the client language.
Utilities
pyboj._helpers.csv.csv_to_dataframe(csv_text, *, encoding='utf-8')
Convert CSV text from the BOJ API into a pandas DataFrame.
Parameters
csv_text:
Raw CSV text returned by a *_csv() client method. Accepts str
(already decoded) or bytes (decoded using encoding).
encoding:
Encoding for csv_text when it is bytes. The BOJ API uses UTF-8
for English (lang=en) and Shift-JIS for Japanese (lang=jp).
Use encoding="shift_jis" for Japanese CSV responses.
Returns
pandas.DataFrame