---
title: "ERPNext Exchange Rate API: Currency Exchange Settings for ECB and Central Bank Rates"
description: "Point ERPNext Currency Exchange Settings at AllRatesToday: keyless ECB reference rates on the transaction date, or the official rate of a named central bank (RBI, SNB, CBUAE and 120 more) for statutory accounting. Exact field values included."
canonical: https://allratestoday.com/migrate/erpnext/
source: AllRatesToday (https://allratestoday.com/) — Markdown mirror of the page above; index of all pages at https://allratestoday.com/llms.txt
generated: 2026-10-28T02:10:24.124Z
---

# ERPNext Exchange Rate API: Currency Exchange Settings for ECB and Central Bank Rates

Point ERPNext Currency Exchange Settings at AllRatesToday: keyless ECB reference rates on the transaction date, or the official rate of a named central bank (RBI, SNB, CBUAE and 120 more) for statutory accounting. Exact field values included.

By [Madhushan](https://allratestoday.com/authors/madhushan/), Founder & Lead Developer · Updated 27 Oct 2026

# ERPNext exchange rates from AllRatesToday

ERPNext looks up a rate from an online provider whenever no manual *Currency Exchange* record exists for the pair and date. The provider is configured once, site-wide, in **Currency Exchange Settings**: a URL template, query parameters and a result-key path. Three placeholders are substituted on every request: `{from_currency}`, `{to_currency}` and `{transaction_date}`.

  **Two ways to fill the form.** ECB reference rates need no key and work for any ERPNext site. Official rates from a named central bank are for companies whose tax or accounting rules name the publisher.

## Option 1: ECB reference rates, no key

Set *Service Provider* to **Custom** and enter:

| Field | Value |
| --- | --- |
| API Endpoint | `https://allratestoday.com/api/compat/frankfurter/{transaction_date}` |
| Parameters | `base` = `{from_currency}` `symbols` = `{to_currency}` |
| Result Key | `rates`, then `{to_currency}` (two rows) |
| Access Key | leave empty |

`Save. ERPNext issues a test request for USD to INR on today's date, which the endpoint answers from the ECB table. The request it builds looks like this: GET https://allratestoday.com/api/compat/frankfurter/2026-10-20?base=USD&symbols=INR {"amount":1,"base":"USD","date":"2026-10-20","rates":{"INR":94.925546},"source":"European Central Bank reference rates, served by AllRatesToday"} The date in the response is the ECB publication date actually used. On a Saturday the Friday table is returned, which is the rate in force. Any base currency in the ECB table works; a non-EUR pair is a cross-rate inside the same table, as Frankfurter computes it. The same endpoint is what the AllRatesToday entry in the Service Provider list fills in automatically, in ERPNext versions that include it. Option 2: the official rate of a named central bank Indian GST and Income Tax rules, Swiss VAT, UAE corporate tax and many other regimes name the rate publisher, not "the market". For those books, point ERPNext at the bank's own table. Set Service Provider to Custom and enter: FieldValue API Endpointhttps://allratestoday.com/api/v1/central-bank/rbi/{transaction_date} Parameterssource = {from_currency}target = {to_currency}api_key = your key Result Keyrate (one row) {"bank":"rbi","name":"Reserve Bank of India","requested_date":"2026-10-27","rate_date":"2026-10-27","published_on_requested_date":true,"source":"USD","target":"INR","rate":95.1623,"rate_type":"reference","derived":false} Replace rbi with the code of the institution your rules name. The full list, with each bank's currencies and publication time, is at the institutions page. Dated lookups on a bank's table are on paid plans; the latest table of every bank is keyless at /api/open/central-bank/{bank}. Two things to know: The save-time test is USD to INR. A bank that does not cover that pair fails validation with Invalid result key. Save with the ECB settings first if your bank does not quote INR, then edit the endpoint. Direction matters. ERPNext expects "one unit of from_currency in to_currency". The source/target parameters follow that convention, and derived tells you when the pair was cross-computed inside the bank's own table rather than published directly. Why not just use Frankfurter? For ECB rates alone, Frankfurter is fine and this endpoint serves the same numbers in the same shape. The difference is what sits next to it: the same account covers 123 central banks and tax authorities with history, publication dates and a stale-source monitor, a daily reference rate, and real-time mid-market rates. One provider for the books and the storefront. Frequently asked questions Does ERPNext fetch the rate for the invoice date or for today? For the transaction date. ERPNext substitutes the transaction date into the endpoint, so these configurations return the rate in force on the invoice, payment or journal date, and the most recent published rate before it on weekends and holidays. ERPNext caches each rate for six hours. Is a key required? Not for the ECB configuration: dated lookups on the compatible endpoints are keyless, CORS-open and edge-cached, and ECB data may be used commercially with attribution. Official rates from a named central bank on a past date need an API key on a paid plan, passed as the api_key parameter. Why does saving the settings fail with Invalid result key? ERPNext validates the settings with a USD to INR request for today. If the chosen bank does not cover USD/INR, that request returns an error and the save fails. Pick a bank that covers the test pair, or validate with the ECB settings first. Can I use the central bank my tax authority requires? Yes. Replace rbi with any bank code from the institutions list. Each response carries the bank's own publication date, so the rate is citable in an audit file. Set it up ECB rates work with no key. A key on a paid plan adds every central bank's table on any date. Get an API key Institution codes Related For finance teamsMonth-end, VAT and audit use cases Central bank rates API123 institutions, history and publication dates Migration guidesDrop-in shapes for other providers MethodologyHow pairs are cross-computed`
