BYTETOOLS

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.

No API key requiredCORS enabledHTTPSFree tier

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
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'
JavaScript (fetch)
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);
Python (requests)
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())
Response — HTTP 200 (truncated)
{
  "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

ParameterTypeRequiredDescription
dataflow/{agency}/{id}/{version}pathRequiredIdentifies the dataset, for example `BIS/WS_CBPOL/1.0` for central bank policy rates. BIS/WS_CBPOL/1.0
{key}pathRequiredDot-separated dimension values. `D.US` is daily frequency, United States. A blank position matches everything. D.US
lastNObservationsqueryOptionalReturn only the most recent N observations per series. 3
startPeriod / endPeriodqueryOptionalRestrict the window, in the dataflow's own period format. 2026-01-01
AcceptheaderRequired`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

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.