BYTETOOLS

Nepal Rastra Bank Forex API

Free Nepal Rastra Bank forex API with no key: official Nepalese rupee buying and selling rates by date range, with per-currency quotation units. Tested example included.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the Nepal Rastra Bank Forex API?

Nepal Rastra Bank publishes its official foreign exchange rates through a free JSON API with no key. Requests take a date range and return buy and sell rates for each quoted currency, along with the unit each rate applies to.

The API is date-range based rather than single-date, which is the right design for a rate that only publishes on working days: ask for a week and take what comes back, instead of guessing which days had a fixing. Pagination is explicit through `page` and `per_page`, and the parameters you sent are echoed in the response so a cached payload is self-describing.

Two conventions matter for correctness. Rates are strings, not numbers — `"152.91"` rather than `152.91` — which is deliberate for money and means you must parse before arithmetic. And the Indian rupee is quoted per 100 units while the US dollar is per 1, exposed through `currency.unit`. Given how much Nepal–India trade the INR rate touches, getting that division wrong is not a hypothetical failure.

Quick facts

Base URL
https://www.nrb.org.np/api/forex/v1
Authentication
No key or registration required.
Rate limit
No documented limit. Rates publish once per working day.
Pricing
Free.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the Nepal Rastra Bank Forex 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. Official NPR forex rates for 20 August 2026

GET https://www.nrb.org.np/api/forex/v1/rates?page=1&per_page=1&from=2026-08-20&to=2026-08-20

curl
curl 'https://www.nrb.org.np/api/forex/v1/rates?page=1&per_page=1&from=2026-08-20&to=2026-08-20'
JavaScript (fetch)
const res = await fetch("https://www.nrb.org.np/api/forex/v1/rates?page=1&per_page=1&from=2026-08-20&to=2026-08-20");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://www.nrb.org.np/api/forex/v1/rates?page=1&per_page=1&from=2026-08-20&to=2026-08-20", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
{
  "status": {
    "code": 200
  },
  "errors": {
    "validation": null
  },
  "params": {
    "date": null,
    "from": "2026-08-20",
    "to": "2026-08-20",
    "post_type": null,
    "per_page": "1",
    "page": "1",
    "slug": null,
    "q": null
  },
  "data": {
    "payload": [
      {
        "date": "2026-08-20",
        "published_on": "2026-08-20 00:00:56",
        "modified_on": "2026-08-19 15:56:04",
        "rates": [
          {
            "currency": {
              "iso3": "INR",
              "name": "Indian Rupee",
              "unit": 100
            },
            "buy": "160.00",
            "sell": "160.15"
          },
          {
            "currency": {
              "iso3": "USD",
              "name": "U.S. Dollar",
              "unit": 1
            },
            "buy": "152.91",
            "sell": "153.51"
          },
          {
            "currency": {
              "iso3": "EUR",
              "name": "European Euro",
              "unit": 1
            },
            "buy": "177.46",
            "sell": "178.16"
          },
          {
            "currency": {
              "iso3": "GBP",
              "name": "UK Pound Sterling",
              "unit": 1
            },
            "buy": "207.29",
            "sell": "208.11"
          },
          {
            "currency": {
              "iso3": "CHF",
              "name": "Swiss Franc",
              "unit": 1
            },
            "buy": "188.71",
            "sell": "189.45"
          },
          {
            "currency": {
              "iso3": "AUD",

Parameters

ParameterTypeRequiredDescription
fromqueryRequiredStart of the date range in `YYYY-MM-DD`. 2026-08-20
toqueryRequiredEnd of the date range in `YYYY-MM-DD`. 2026-08-20
pagequeryOptionalPage number, starting at 1. 1
per_pagequeryOptionalRecords per page. Each record is one publication day. 1

Response fields

status.codeinteger
Application-level status, mirroring the HTTP code.
paramsobject
Echo of the query you sent, which makes a cached response self-documenting.
data.payload[].datestring
Publication date for this set of rates.
data.payload[].rates[].currency.iso3string
ISO 4217 code for the quoted currency.
data.payload[].rates[].currency.unitinteger
Units the rate applies to — 1 for USD, 100 for INR.
data.payload[].rates[].buy / sellstring
Buying and selling rates in Nepalese rupees per `unit`, returned as strings to avoid float rounding.
errors.validationobject|null
Populated when a parameter fails validation; null on success.

What you can build with the Nepal Rastra Bank Forex API

  • Convert Nepalese rupee amounts using the official published rate
  • Fetch a month of rates in one request to chart a currency's movement
  • Reconcile remittance transactions against the official buy and sell rates
  • Show the NPR/INR rate correctly by applying the per-100 quotation unit

Common errors and how to fix them

Empty payload array

The date range covers only non-publication days.

Fix: Weekends and Nepali public holidays have no fixing. Widen the range rather than retrying the same date.

Validation error object populated

`from` or `to` is missing or malformed.

Fix: Both are required and must be `YYYY-MM-DD`. The Nepali Bikram Sambat calendar is not accepted here.

INR conversion off by 100

`currency.unit` was ignored.

Fix: The Indian rupee is quoted per 100 units. Divide `buy`/`sell` by `currency.unit` in every code path.

Nepal Rastra Bank Forex API — frequently asked questions

Is the Nepal Rastra Bank forex API free?

Yes. It requires no key or registration and returns permissive CORS headers, so browser code can call it directly.

Why are the rates returned as strings?

Returning money as strings avoids the binary floating-point rounding that would otherwise creep into a decimal rate. Parse them with a decimal-safe type rather than a float where you can.

What is the difference between the buy and sell rate?

Buy is the rate at which the currency is purchased and sell the rate at which it is sold; the gap between them is the spread. Which one applies depends on the direction of your transaction.

Does the API accept Nepali calendar dates?

No. The `from` and `to` parameters expect Gregorian `YYYY-MM-DD` dates. Convert from Bikram Sambat before calling.

Tools that pair with this API

Nepal Rastra Bank Forex 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.