BIS Statistics API
Free Bank for International Settlements statistics API with no key: central bank policy rates, credit, debt securities and effective exchange rates as SDMX-JSON. Tested example.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the BIS Statistics API?
The Bank for International Settlements serves its statistical datasets through a free SDMX REST API at stats.bis.org with no key. The WS_CBPOL dataflow returns central bank policy rates for dozens of countries on a common basis.
The BIS's value here is comparability. Central banks each publish their own policy rate in their own format, on their own calendar, in their own language; the BIS restates them on a common basis in one dataflow, so comparing the US, euro area and Japanese policy rates becomes a matter of changing one dimension in a key rather than integrating three separate APIs.
Format negotiation is done through the `Accept` header, not a query parameter, and getting it wrong returns HTTP 406 rather than a helpful message. Send `Accept: application/vnd.sdmx.data+json;version=1.0.0` for SDMX-JSON. The payload that comes back is normalised to a fault: observations are positional arrays indexed against dimension lists held elsewhere in the document, so decoding it means walking `structure.dimensions` to map indices to codes before any value means anything.
Quick facts
- Base URL
https://stats.bis.org/api/v2/data- Authentication
- No key or registration. Published by the BIS as open statistical data.
- Rate limit
- No documented limit. Most series update daily or monthly.
- Pricing
- Free.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the BIS Statistics API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Last three US central bank policy rate observations
GET https://stats.bis.org/api/v2/data/dataflow/BIS/WS_CBPOL/1.0/D.US?lastNObservations=3
curl 'https://stats.bis.org/api/v2/data/dataflow/BIS/WS_CBPOL/1.0/D.US?lastNObservations=3' \
-H 'Accept: application/vnd.sdmx.data+json;version=1.0.0'const res = await fetch("https://stats.bis.org/api/v2/data/dataflow/BIS/WS_CBPOL/1.0/D.US?lastNObservations=3", {
headers: {
"Accept": "application/vnd.sdmx.data+json;version=1.0.0",
},
});
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
headers = {
"Accept": "application/vnd.sdmx.data+json;version=1.0.0",
}
res = requests.get("https://stats.bis.org/api/v2/data/dataflow/BIS/WS_CBPOL/1.0/D.US?lastNObservations=3", headers=headers, timeout=20)
res.raise_for_status()
print(res.json()){
"meta": {
"id": "IDREF07c1e12c-2c27-419b-9ef9-9036a37e02f5",
"prepared": "2026-08-21T07:45:40",
"test": false,
"datasetId": "65801925-d3c1-435a-9dfe-ecd76e54e1ca",
"sender": {
"id": "UNKNOWN"
},
"receiver": {
"id": "guest"
},
"links": [
{
"rel": "self",
"href": "/data/dataflow/BIS/WS_CBPOL/1.0/D.US?lastNObservations=3",
"uri": "https://raw.githubusercontent.com/sdmx-twg/sdmx-json/develop/structure-message/tools/schemas/1.0/sdmx-json-structure-schema.json"
}
]
},
"data": {
"dataSets": [
{
"links": [
{
"rel": "dataflow",
"urn": "urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=BIS:WS_CBPOL(1.0)"
}
],
"reportingBegin": "2026-08-16T00:00:00",
"reportingEnd": "2026-08-18T23:59:59",
"action": "Information",
"series": {
"0:0": {
"attributes": [
null,
0,
0,
0,
null,
0
],
"observations": {
"0": [
"3.625",
0,
0,
null
],
"1": [
"3.625",
0,
0,
null
],
"2": [
"3.625",
0,
0,
null
]
}
}
},
"attributes": [
0,
0
]
}
],Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
dataflow/{agency}/{id}/{version} | path | Required | Identifies the dataset, for example `BIS/WS_CBPOL/1.0` for central bank policy rates. BIS/WS_CBPOL/1.0 |
{key} | path | Required | Dot-separated dimension values. `D.US` is daily frequency, United States. A blank position matches everything. D.US |
lastNObservations | query | Optional | Return only the most recent N observations per series. 3 |
startPeriod / endPeriod | query | Optional | Restrict the window, in the dataflow's own period format. 2026-01-01 |
Accept | header | Required | `application/vnd.sdmx.data+json;version=1.0.0` for SDMX-JSON. Omitting it returns XML or 406. application/vnd.sdmx.data+json;version=1.0.0 |
Response fields
metaobject- Message metadata — a generated id, the preparation timestamp and self links.
data.dataSets[]array- The observations, keyed by positional dimension indices such as `"0:0"`.
data.dataSets[].seriesobject- Each series maps observation index to a value array whose first element is the number.
data.structures[].dimensionsobject- The dimension definitions that positional keys index into. You must walk this to decode anything.
attributesarray- Observation attributes as indices into an attribute value list, again resolved through the structure block.
What you can build with the BIS Statistics API
- Compare central bank policy rates across countries on a common basis
- Pull BIS credit-to-GDP or debt securities statistics for research
- Fetch effective exchange rate indices for a set of economies
- Build a policy rate chart without integrating a dozen central bank APIs
Common errors and how to fix them
406 Not Acceptable
No usable `Accept` header was sent.
Fix: Set `Accept: application/vnd.sdmx.data+json;version=1.0.0`. A `format=jsondata` query parameter does not work on this API.
404
The dataflow id, agency or version is wrong.
Fix: Query the dataflow list endpoint first; version numbers change and old ones are removed.
Values are meaningless numbers
Positional arrays were read without resolving the structure block.
Fix: Map `series` keys and observation indices through `data.structures[].dimensions` before interpreting anything.
BIS Statistics API — frequently asked questions
Is the BIS statistics API free?
Yes. stats.bis.org requires no key or registration and serves the BIS's published statistical datasets over a standard SDMX REST interface.
How do I get JSON instead of XML?
Through the `Accept` header — `application/vnd.sdmx.data+json;version=1.0.0`. This API does not honour a `format` query parameter and returns HTTP 406 if the header is missing.
What is the WS_CBPOL dataflow?
It holds central bank policy rates restated on a common basis across dozens of jurisdictions. That common basis is the point: comparing the US, euro area and Japanese policy rates becomes a matter of changing one dimension in the key rather than integrating three separate central bank APIs.
Why is the SDMX-JSON so hard to read?
SDMX normalises data aggressively: observations are positional arrays and dimension values are indices into definitions stored elsewhere in the document. Write a small decoder once that resolves the structure block, and every SDMX API becomes usable.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
JSON Path Finder
Evaluate a dot/bracket path against your JSON and list every leaf path for discovery. Free online JSON path finder that runs 100% in your browser.
Percentage Change Calculator
Work out the percentage increase or decrease between an old and a new value. See the absolute change and whether it went up or down, instantly and privately.
BIS Statistics is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.