---
title: "BNM per-bank Base Rate, BLR, BFR, Indicative ELR"
method: GET
path: "/api/v1/bnm/base-rate"
tags: ["Central Banks & Monetary"]
---

# BNM per-bank Base Rate, BLR, BFR, Indicative ELR

`GET /api/v1/bnm/base-rate`

Per-bank retail lending benchmarks curated by Bank Negara Malaysia for all licensed conventional and Islamic banks operating in Malaysia (35 institutions). Returns Base Rate (BR), Base Lending Rate (BLR, conventional) or Base Financing Rate (BFR, Islamic), and the Indicative Effective Lending Rate for a standard reference housing loan.

## Response `200`

Per-bank benchmarks with `meta.effective_date` reflecting the last industry-wide snapshot.

- EnvelopeBnmBaseRatePayload
  - `data` BnmBaseRatePayload, required
    - `effective_date` string, nullable — Effective date of the industry-wide snapshot curated by BNM (YYYY-MM-DD). Individual banks may have revised their own websites more recently; this field reflects the BNM feed.
    - `count` integer, required — Number of banks in the snapshot.
    - `banks` BnmBaseRateRow[], required — One row per licensed retail bank (conventional + Islamic).
      - `bank_code` string, nullable — BNM bank identifier.
      - `bank_name` string, nullable — Full registered name of the licensed bank.
      - `base_rate` number, nullable — Base Rate (BR) used to price floating-rate retail loans, in percent per annum.
      - `base_lending_rate` number, nullable — Base Lending Rate (BLR) - legacy conventional retail lending rate, in percent per annum. Null for Islamic banks.
      - `base_financing_rate` number, nullable — Base Financing Rate (BFR) - Islamic equivalent of BLR, in percent per annum. Null for conventional banks.
      - `indicative_eff_lending_rate` number, nullable — Indicative Effective Lending Rate for a standard reference housing loan, in percent per annum.
  - `meta` SugraMeta, required — Metadata attached to every /api/v1/* response envelope.
    - `endpoint` string, required — Requested endpoint path.
    - `data_time` string, required — ISO 8601 UTC timestamp of the source data, not of the request.
    - `response_time` string, required — ISO 8601 UTC timestamp when this response was produced.
    - `provider` string, required — API name and version.
    - `source` string, nullable — Identifier of the primary upstream source used for this response.
    - `attribution` string, nullable — Human-readable attribution mandated by an upstream source (e.g. a securities regulator or self-regulatory organization). Present only on responses whose source requires the owner and source to be clearly identified. Do not remove or alter it when using the response.
    - `fallback_used` boolean, nullable — True when the primary source failed and a fallback produced the data.
    - `fallback_chain` string[], nullable — Ordered list of sources attempted, in the order they were tried.
    - `cached` boolean, nullable — True when this response was served from the internal cache.
    - `stale` boolean, nullable — True when the cached response was returned after the upstream rate-limited or errored. Clients can use this to detect degraded data.

## Other responses

- `401` — Missing or invalid `x-api-key` header. JSON body with a stable `code` distinguishing `missing_api_key` (no header sent) from `invalid_api_key` (header sent, key not accepted); any other 401 source carries the generic `unauthorized` with its detail as `reason`. Plus `hint`. `plan` is always null on 401 - an unauthenticated request has no plan; quota exhaustion is 429, not 401.
- `429` — Daily rate limit exceeded. Check `X-RateLimit-Reset` for the next window.
- `503` — Upstream source is temporarily unavailable. Retry after a short delay.

---

[API](https://skmtc.net/sugra/apis/sugra-api.md) · [All operations](https://skmtc.net/sugra/apis/sugra-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sugra/sugra-api/versions/d3e3d9c28132/schema)
