Exchange Rates for FEMA Reporting and Transfer Pricing in India
An Indian company with a foreign parent, a foreign subsidiary or foreign investors files the same foreign-currency numbers with several regulators, and each one has a view on the exchange rate. The RBI wants FEMA forms. The tax department wants a transfer-pricing file. Customs and GST have their own notified rates. This guide lists which rate belongs in which filing, and shows how to pull a dated RBI reference rate or a full financial-year series from the API so the file can be rebuilt on demand.
The one-page map
| Filing | Rate | Date |
|---|---|---|
| FC-GPR, FC-TRS (foreign investment received or transferred) | Actual conversion rate on the FIRC where funds were converted; RBI reference rate for rupee equivalents that were never converted | Date of receipt or transfer |
| FLA return (annual foreign liabilities and assets) | RBI reference rate | Reference date, 31 March, for closing balances |
| ODI forms (Form FC, APR) | Actual remittance rate for amounts sent; RBI reference rate for rupee equivalents of foreign balances | Remittance date or reporting date |
| Transfer-pricing documentation (Rule 10D, Form 3CEB) | A documented, consistent rate: RBI reference rate on the transaction date or a stated average | Transaction date or the financial year |
| Customs valuation and GST on goods | CBIC notified rate (fortnightly) | Notification in force on the date of filing the bill of entry or shipping bill |
| GST on services | Rate under generally accepted accounting principles, commonly the RBI reference rate | Time of supply |
| Income-tax conversion of foreign income | SBI TT buying rate (Rule 115) | Specified date per head of income |
FEMA filings: FC-GPR, FLA, ODI
FEMA reporting runs through the RBI's FIRMS portal and the AD bank. Two situations keep coming up.
Money actually moved. A foreign investor wires USD and the AD bank converts it to rupees. The rupee amount on the FC-GPR is the amount credited, and the rate is whatever the FIRC shows. There is no choice to make; you attach the FIRC and the KYC.
Money did not move. The FLA return, due by 15 July each year, asks for closing values of foreign liabilities and assets on 31 March. A loan from a parent in EUR, an unpaid trade payable in USD or an investment held in a subsidiary abroad has no conversion attached to it, so you convert the balance at the RBI reference rate on the reference date. The same logic applies to the rupee equivalents on ODI forms when the figure is a valuation rather than a remittance. The RBI, FBIL and the archive at rbi.org.in all carry the same daily number, computed at about 13:30 IST on each Mumbai business day.
31 March 2026 was a Tuesday and a working day in Mumbai, so the dated request below returns the table published that day. When the reference date is a weekend or a holiday, the API returns the last published table and tells you so (see the published_on_requested_date field).
Transfer pricing: Rule 10D documentation
Rule 10D of the Income-tax Rules lists the documents a company must keep for international transactions with associated enterprises, and Form 3CEB reports them in rupees. Nothing in Rule 10D names an exchange rate. What the assessing officer and the TPO want is consistency and evidence: the same rate basis across the year, stated in the TP study, and traceable to a public source.
Three places where the rate matters:
- Converting AE transactions to rupees for Form 3CEB. Most groups use the rate booked in the ledger, which under Ind AS 21 is the spot rate on the transaction date, and the RBI reference rate is the usual proxy for it.
- Comparables whose financials are in another currency. The study has to say which rate converted them: the transaction-date rate, the year-end rate, or an annual average. Any of the three is defensible if stated and applied consistently.
- Year-end true-ups and adjustments. An ALP adjustment agreed in USD and booked at 31 March should carry the 31 March rate and a note saying so.
For a yearly average you need the whole series, not a single day. Both calls are below.
Customs and GST
Customs valuation under section 14 of the Customs Act does not use the RBI rate. The CBIC notifies exchange rates for about 22 currencies twice a month, and the notification in force on the date of the bill of entry or shipping bill applies. GST on goods borrows the same CBIC rate through CGST Rule 34; GST on services uses the accounting-standard rate, where the RBI reference rate is the common choice. The GST invoice guide covers Rule 34 in detail.
AllRatesToday does not publish the CBIC notified rates yet. Support is being added alongside the other tax authorities on the tax authority rates API hub; until then load them from the CBIC notifications on cbic.gov.in and store them as validity periods, not daily values. The customs exchange rates page explains the period logic.
Pull a dated RBI reference rate
Dated tables and history are on paid plans; the keyless endpoint only serves today's table. For the 31 March 2026 FLA reference date, one pair:
curl -H "Authorization: Bearer $ALLRATESTODAY_API_KEY" \
"https://allratestoday.com/api/v1/central-bank/rbi/2026-03-31?source=USD&target=INR" The response is the pair object documented in the OpenAPI spec. Its fields are bank, name, requested_date, rate_date, published_on_requested_date, source, target, rate, rate_type, derived, method and disclaimer. For the FLA file you keep three of them: rate, rate_date and published_on_requested_date. If the last one is false, the reference date was not a publication day and the note in your working papers should cite the rate_date actually returned.
Leave out source and target to get the whole table for that date (all six RBI currencies) in one call.
Pull a financial-year series
For an annual average, or to convert every AE invoice of the year at its own date, request the history for FY 2025-26:
curl -H "Authorization: Bearer $ALLRATESTODAY_API_KEY" \
"https://allratestoday.com/api/v1/central-bank/rbi/history?source=USD&target=INR&from=2025-04-01&to=2026-03-31" Parameters, from the spec: source and target for one pair, or symbol for every published pair involving one currency; from and to as YYYY-MM-DD (default: the last year); format as json, csv, xml or xlsx. The response carries bank, name, source, target, from, to, count, truncated and a rates array. In pair mode each row has date, rate, derived and method. In symbol mode the rows are rate_date, base, quote, type and value instead. The series is capped at 5,000 rows; truncated is true if you hit it, which a one-year RBI pull never will.
In Python, the annual average and a per-date lookup from the same call:
import os, requests
from statistics import mean
r = requests.get(
"https://allratestoday.com/api/v1/central-bank/rbi/history",
params={"source": "USD", "target": "INR", "from": "2025-04-01", "to": "2026-03-31"},
headers={"Authorization": f"Bearer {os.environ['ALLRATESTODAY_API_KEY']}"},
timeout=30,
).json()
by_date = {row["date"]: row["rate"] for row in r["rates"]}
print(r["count"], "business days;", "truncated:", r["truncated"])
print("FY average USD/INR:", round(mean(by_date.values()), 4))
def rate_on(day):
"""RBI reference rate in force on a date (last published on or before it)."""
candidates = [d for d in by_date if d <= day]
return by_date[max(candidates)]
print(rate_on("2026-03-31")) For the working-paper copy, add format=xlsx to the same URL and attach the workbook. It carries typed dates and numbers, so auditors can filter it without reformatting.
What to keep on file
Whatever the filing, the evidence set is the same four items: the rate, the publication date it belongs to, the source named in words (“RBI/FBIL reference rate”, “CBIC notification no. …”, “SBI TT buying rate”), and the rupee figure rounded once at the end. The audit evidence page has a template for that record, and the transfer-pricing exchange rates page covers the policy wording for the TP study.
FAQ
Is the RBI reference rate the same as the FBIL reference rate?
Yes. Since 10 July 2018 FBIL computes the rate and the RBI publishes the same figures in its Reference Rate Archive. Filings that say either name mean the same daily number.
Which rate do I use when money was actually converted?
The actual rate on the bank's FIRC or debit advice, because the rupee amount already exists. The RBI reference rate is for amounts that need a rupee equivalent but were never converted, such as balances on the FLA reference date or comparables in a transfer-pricing study.
Can I get the RBI rate for 31 March of a past year without a key?
No. The keyless endpoint returns today's table only. Dated tables and history are on paid plans; the free API key covers live market rates, not dated central-bank data.
Do you publish the CBIC customs rates?
Not yet. Customs valuation uses the CBIC's fortnightly notified rates, which are separate from the RBI reference rate. Support is being added to the tax-authority hub; until then load them from cbic.gov.in.
What does published_on_requested_date mean?
A dated request for a weekend or holiday returns the last table published on or before that date. The flag is false when the two dates differ, and rate_date tells you the actual publication date to cite.
Rebuild any filing on demand
RBI reference rate for any date back to 2003, as JSON, CSV or Excel, and official rates from 121 central banks on one key.
See plans