RBI Reference Rate in Zoho Books and TallyPrime (Automated)
Many Indian companies want their books in the RBI reference rate: it is official, published once a day, and easy to show an auditor. The two most common accounting tools for Indian SMEs don't load it on their own. Zoho Books' automatic feed uses market rates, and TallyPrime has no rate feed at all. This guide fixes both: a short script that posts the RBI rate to Zoho Books every business day, and a clean daily table to keep TallyPrime in step.
All of it starts from one free URL with the day's RBI table (USD, EUR, GBP, JPY, AED and IDR against the rupee):
https://allratestoday.com/api/open/central-bank/rbi No key, no sign-up. Add ?format=csv for a spreadsheet. The same numbers are on the RBI exchange rate API page.
Zoho Books: post the RBI rate every day
Step 1. Turn off Zoho's automatic feed
Zoho Books updates exchange rates automatically from Open Exchange Rates, and the feed is on by default. Turn it off under Settings → Currencies, or Zoho will overwrite your RBI figures with market rates. With the feed off, Zoho uses the rate you add for each date.
Step 2. Get API access
Create a self-client in the Zoho API console and generate a refresh token with the scopes ZohoBooks.settings.READ and ZohoBooks.settings.CREATE. You also need your organization ID (Settings → Organization Profile). Organisations on Zoho's Indian data centre use zohoapis.in; others use zohoapis.com.
Step 3. The script
It reads the day's RBI table, looks up each currency's ID in Zoho Books, and adds the rate with the RBI's own publication date as the effective date:
import os, requests
ZOHO = "https://www.zohoapis.in/books/v3" # zohoapis.com outside India
ORG = os.environ["ZOHO_ORG_ID"]
TOKEN = os.environ["ZOHO_ACCESS_TOKEN"] # refreshed from your refresh token
H = {"Authorization": f"Zoho-oauthtoken {TOKEN}"}
# 1. Today's RBI reference rates (no key needed)
rbi = requests.get("https://allratestoday.com/api/open/central-bank/rbi", timeout=15).json()
rate_date = rbi["rate_date"]
rates = {r["base"]: r["value"] for r in rbi["rates"] if r["quote"] == "INR"}
# 2. Currency IDs in Zoho Books
cur = requests.get(f"{ZOHO}/settings/currencies", params={"organization_id": ORG}, headers=H, timeout=15).json()
ids = {c["currency_code"]: c["currency_id"] for c in cur["currencies"]}
# 3. Post each rate for the RBI publication date
for code, value in rates.items():
if code not in ids:
continue # currency not enabled in Zoho
resp = requests.post(
f"{ZOHO}/settings/currencies/{ids[code]}/exchangerates",
params={"organization_id": ORG},
headers=H,
json={"effective_date": rate_date, "rate": value},
timeout=15,
)
print(code, rate_date, value, resp.json().get("message")) Zoho stores the rate as rupees per 1 unit of the foreign currency, which is exactly how the API returns it, so no conversion is needed.
Step 4. Run it after 13:30 IST
The RBI rate is published around 13:30 IST on Mumbai business days. Schedule the script for 14:00 IST, Monday to Friday: a cron job, a GitHub Actions schedule, or a Zoho Deluge scheduled function calling the same URLs. On a holiday the API returns the last published table with its real date, so a run on a holiday just re-posts the previous day's rate for that date.
exchange_rate field explicitly on invoices and bills you create with the API. Zoho users report that API-created transactions can otherwise default to a rate of 1.Backfilling past dates
Starting mid-year? Pull the RBI history for the missing months with a free API key and post each day the same way:
hist = requests.get(
"https://allratestoday.com/api/v1/central-bank/rbi/history",
params={"source": "USD", "target": "INR", "from": "2026-04-01", "to": "2026-09-30"},
headers={"Authorization": f"Bearer {os.environ['ALLRATESTODAY_API_KEY']}"},
timeout=30,
).json()
for row in hist["rates"]:
print(row["date"], row["rate"]) # post each to Zoho as above TallyPrime: keep rates of exchange in step
TallyPrime keeps a standard, selling and buying rate per currency for each date, and suggests them when you enter a foreign-currency voucher. There is no built-in feed, so there are two practical ways to get the RBI rate in.
Option A. Enter the day's standard rate
- Open the day's table: RBI exchange rate API page, or the CSV link above in Excel.
- In TallyPrime, open Rates of Exchange (Alt+G Go To, then type the name).
- Set the date to the RBI
rate_dateand enter the Standard Rate for each currency you use.
Tally warns that changing an existing standard rate can recalculate forex gains and losses already in your data, so take a backup before you edit past dates.
Option B. Put the rate in your voucher import
If you import foreign-currency vouchers from Excel, the import sheet has a Rate of Exchange column next to Currency and Forex Amount. Fill it from the RBI table for each voucher's date, and every imported entry carries the official rate. In Excel, Power Query can load the CSV directly:
Data → Get Data → From Web →
https://allratestoday.com/api/open/central-bank/rbi?format=csv Then look up the rate for each row with =XLOOKUP([@Currency], rbi[base], rbi[value]). For vouchers dated in the past, download that period's history as a spreadsheet with a free key: add format=xlsx to the history URL above.
FAQ
Why not use Zoho Books' built-in exchange rate feed?
Zoho Books' automatic feed uses market rates from Open Exchange Rates. If your accountant or auditor wants the RBI reference rate in the books, turn the feed off and post the RBI rate yourself, which is what the script in this guide does.
Does this need an API key?
The daily RBI table is open, so the Zoho script needs no AllRatesToday key. You only need a free key to backfill past dates or pull a history.
Can TallyPrime fetch the RBI rate automatically?
TallyPrime has no built-in RBI feed. Enter the day's rate in Rates of Exchange, or include it in the Rate of Exchange column of an Excel-to-Tally voucher import. The CSV link in this guide gives you the day's figures in the right shape for both.
What about JPY?
The RBI quotes the yen per 100 units. The API normalises every rate to 1 unit, so the JPY figure is about 0.60 rather than 60. Zoho Books and TallyPrime both expect the rate per 1 unit, so you can post it as it is.
Backfill your books
RBI history back to 2003, and official rates from 121 central banks. 300 free requests, no credit card.
Get your free API keyRelated Articles
- RBI exchange rate API — today’s table and endpoints
- RBI Reference Rate for Accounting: Book Closing, FX Gain/Loss & Audit
- Exchange rate for GST invoices: which rate to use
- USD to INR API in Python
- ERP integration guides (SAP, Xero, QuickBooks, Odoo, Business Central)
- Exchange rates for finance teams