I'm looking for free open APIs (XML or REST(JSON)*) that I can access from my program code to get the (daily) exchange rate for foreign currencies to the Euro, Dollar or British Pound (especially from non-Euro European countries and the US).

No historical data required, I just want to query (on demand or each night) What is the exchange rate today? and store it in local database tables.
The source data should be updated at least once per day.

Ultimately, I want to encapsulate (updates from) several of these into my code (a standalone Windows program), so that our customers can choose which source they want to use for the exchange rates to their 'base currency' EUR or USD or GBP.
(This also means that the API should be free for commercial use, that it has a reputable source - i.e. it is not likely to disappear overnight, and that it can handle several 1000 requests/day).

From Philshem's answer I understand that in my case daily 'settlements' are preferable over real-time currency data.

* Actually, any parse-able format will do, but JSON or XML is preferable because more structured.


[Added 4-4-2016 by OP]
While my question was out, I kept searching and found this June 2010 post on StackOverflow: How do I get currency exchange rates via an API such as Google Finance? .
Since that is an old post and not limited to free APIs, I have verified which ones are still active and partially meet my requirements, and I have added these as an answer to this post, together with the European Central Bank resource that I mentioned here earlier.

Any APIs I find that meet all requirements, I will add as separate answers each.

Currencies at the end of the day are published as settlements, which are often averages of the day's trading and are used as references. For real-time currency data, you actually are looking at Bid/Ask data (for example). This means that there isn't really a single correct or published "current exchange rate". Even for Bid/Ask prices, each marketplace will have different data, depending on volumes traded, market participants, etc.

In order to get free bid/ask pricing for currency exchange rates, one tool that would work is the unofficial Yahoo Finance API.

You can use the Yahoo Finance website to find the exchange rate search terms, for example:

https://finance.yahoo.com/q?s=EURCHF=X

Then use those search terms as part of the unofficial API

finance.yahoo.com/d/quotes.csv?s=EURCHF=X&f=sb2b3jk

Note: If you are providing this data to paying customers, then I don't suggest using an unofficial API. There are many paid services that will provider proper APIs with correct licensing. I found one such service that has unlimited queries with real-time and historical data from $1200 per year (which I find to be a modest expense for the convenience of stability, accuracy, legality).

The Quandl API for Currency Data seems to meet all requirements:

Quandl offers spot exchange rates from the Bank of England (BOE) for over 40 currencies into USD, GBP and EUR. We also offer rates from the European Central Bank (ECB) for 30+ currencies into EUR and from the Federal Reserve Bank of St. Louis (FRED) for 20+ currencies into USD.

You need to register for an API key, then as an authenticated user you have a limit of 2,000 calls per 10 minutes, and a limit of 50,000 calls per day.

These converters almost meet my requirements (see question text; per 4-4-2016):

  • Thank you for linking to my service free.currencyconverterapi.com , I've added the number of currencies supported. – Manny Oct 11 '17 at 2:01

One effective currency conversion API for me is money.js

Features: 165+ Currencies, updated often, infinite free requests.

You simply give it the currencies you wish to convert, and off you go! It's really simple & easy to use. For example:

fx.convert(1, {from: 'GBP', to: 'EUR'})

Will return 1 pound (GBP) in euros, with immense precision. Right now, it returned 1.254187176646604.

Additionally, that line of code can be made even simpler!

fx.settings = { to: "EUR" };
fx.convert(1, {from: "GBP"}); // Using EUR from previously set fx.settings.
  • That does not meet my requirements. It's Javascript code that I would have to host somewhere. It is however a frontend for OpenExchangeRates.org, where I overlooked earlier that it has free option that allows 1000 API requests (with JSON response) per month – Jan Doggen Apr 4 '16 at 17:45

1Forge (http://1forge.com) provides what you're looking for.

To get rates for specific currency pairs try this:

https://forex.1forge.com/1.0.1/quotes?pairs=EURUSD,GBPJPY,AUDUSD

If you just want to convert currencies like in your example, try this:

https://forex.1forge.com/1.0.1/convert?from=USD&to=EUR&quantity=100
  • One of its strong points True tick data: 100+ updates per second counts against my requirement of daily settlements ;-) But it may be useful for others. – Jan Doggen Aug 3 at 9:01

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.