---
title: "Exchange Rates for FEMA Reporting and Transfer Pricing in India"
description: "Which exchange rate goes into FC-GPR, the FLA return, ODI forms, Rule 10D transfer-pricing documentation, customs valuation and GST invoices, and how to pull a dated RBI reference rate or a full-year series from the API with the exact fields you will file."
canonical: https://allratestoday.com/blog/fema-transfer-pricing-exchange-rate-india/
source: AllRatesToday (https://allratestoday.com/) — Markdown mirror of the page above; index of all pages at https://allratestoday.com/llms.txt
generated: 2026-10-19T23:59:56.937Z
---

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.

 **Not legal or tax advice.** Reporting rules change and your AD bank or chartered accountant has the final word on your filing. This is a practitioner's map of where each rate is used.

## 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:

1. **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.
2. **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.
3. **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](https://allratestoday.com/blog/gst-invoice-exchange-rate-india/) 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](https://allratestoday.com/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](https://allratestoday.com/for-finance-teams/customs-exchange-rates/) page explains the period logic.

## Pull a dated RBI reference rate

Dated tables and history are on [paid plans](https://allratestoday.com/pricing/); 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](https://allratestoday.com/openapi.json). 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](https://allratestoday.com/for-finance-teams/audit-evidence-exchange-rates/) page has a template for that record, and the [transfer-pricing exchange rates](https://allratestoday.com/for-finance-teams/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](https://allratestoday.com/pricing/)

## Related Articles

- [Exchange rates for transfer pricing](https://allratestoday.com/for-finance-teams/transfer-pricing-exchange-rates/)
- [Exchange rates as audit evidence](https://allratestoday.com/for-finance-teams/audit-evidence-exchange-rates/)
- [RBI exchange rate API — today’s table and endpoints](https://allratestoday.com/central-bank-rates-api/rbi/)
- [Exchange rate for GST invoices: which rate to use](https://allratestoday.com/blog/gst-invoice-exchange-rate-india/)
- [SBI TT buying rate for Income Tax Rule 115](https://allratestoday.com/blog/sbi-tt-buying-rate-income-tax-rule-115/)
- [RBI reference rate vs SBI card rate vs market rate](https://allratestoday.com/blog/rbi-reference-rate-vs-sbi-card-rate-vs-market-rate/)
- [Tax authority exchange rates API](https://allratestoday.com/tax-authority-rates-api/)
