Forex Historical Prices | Intrinio

Forex Historical Prices

Provided by FXCM
Info
Pricing
Documentation
Resources
Data Explorer

Flexible Access

This data is available via Web API and CSV Download.

Forex Data on Demand

Forex, also known as foreign exchange, FX or currency trading, is a decentralized global market where all the world's currencies trade. The forex market is the largest, most liquid market in the world with an average daily trading volume exceeding $5 trillion. All the world's combined stock markets don't even come close to this. 

With Forex data from FXCM, you will have access to over 10 years of historical data for 39 currency pairs, including majors and exotics, making it possible to back-test your trading strategies. 

The majors and the commodity pairs are the most liquid and most widely traded currency pairs in the forex market. These pairs and their combinations (EUR/JPY, GBP/JPY, and EUR/GBP) make up the vast majority of all trading in the forex market. Because these pairs have the largest volume of buyers and sellers, they also typically have the tightest spreads.

  • Majors: EUR/USD, USD/JPY, GBP/USD, USD/CHF
  • Commodity Pairs: AUD/USD, USD/CAD, NZD/USD

There are however other currency pairs that allow you to take advantage of macroeconomic events in specific international markets, such as the exotic pair of USD/MXN (US Dollar/Mexican Peso).

Currency pairs included in this data feed are:

AUD/CAD, AUD/CHF, AUD/JPY, AUD/NZD, AUD/USD
CAD/CHF, CAD/JPY, CHF/JPY, EUR/AUD, EUD/CAD
EUR/CHF, EUR/GBP, EUR/JPY, EUR/NOK, EUR/NZD
EUR/SEK, EUR/TRY, EUR/USD, GBP/AUD, GBP/CAD
GBP/CHF, GBP/JPY, GBP/NZD, GBP/USD, NZD/CAD
NZD/CHF, NZD/JPY, NZD/USD, TRY/JPY, USD/CAD
USD/CHF, USD/CNH, USD/JPY, USD/MXN, USD/NOK
USD/SEK, USD/TRY, USD/ZAR, ZAR/JPY

Have Questions?
Features
  • Forex data dating back to 2002
  • 39 currency pairs including majors and exotics
  • Timing intervals of 1min (M1), 5min (M5), 15min (M15), 30min (M30), 1hour (H1), 2hour (H2), 3hour (H3), 4hour (H4), 6hour (H6), 8hour (H8), 1day (D1), 1week (W1), and 1month (M1)
  • Bid and Ask data
Need a bulk historical download?
Buy a one-time historical download of this data
Browse Options

Custom Pricing with Intrinio

We offer custom pricing and plans for enterprises and start-ups because we don't think that you should pay an outrageous cost for data you don't use.
With Intrinio, you'll only pay for the data you need an an affordable rate.

Forex Historical Prices

Request a Quote

Request Sent! Thank You.
{{ submittedText }}
*
*
*
*
*
*
License
Non-Professional
define
Professional
define
Startup
define
Enterprise
define
Student/Military, 50% off
define
Usage
Non-Display
define
Display
define
Billing
Monthly
Yearly, Save 15%
Your Price
Questions?
Chat with Us
$
Request a Quote
The options you have selected require a custom quote.
Request Quote
Subscribe
Need to take a test drive?
1000 API calls, 7 days Free Trial
Looking for an enterprise solution?
High limits, custom terms, flexible licensing Contact Us

Frequently Asked Questions

Below you will find the most frequently asked questions about this data feed. We have also curated some resources to help you get started, listed on the right. As always, feel free to chat with us if you have any questions.
What data is included in the feed?

This feed contains historical market activity data, not sale data, so you will only see bids and asks. The bid/ask spreads are very low, so you can average them to get the close price.

For more helpful information, see the below from investopedia:

https://www.investopedia.com/ask/answers/05/forexclosingprice.asp

History is available at the 1min (M1), 5min (M5), 15min (M15), 30min (M30), 1hour (H1), 2hour (H2), 3hour (H3), 4hour (H4), 6hour (H6), 8hour (H8), 1day (D1), 1week (W1), and 1month (M1) levels.

How much history is available?

History is available back to the beginning of 2000 for all currency pairs.

What currency pairs are supported?

AUD/CAD, AUD/CHF, AUD/JPY, AUD/NZD, AUD/USD
CAD/CHF, CAD/JPY, CHF/JPY, EUR/AUD, EUD/CAD
EUR/CHF, EUR/GBP, EUR/JPY, EUR/NOK, EUR/NZD
EUR/SEK, EUR/TRY, EUR/USD, GBP/AUD, GBP/CAD
GBP/CHF, GBP/JPY, GBP/NZD, GBP/USD, NZD/CAD
NZD/CHF, NZD/JPY, NZD/USD, TRY/JPY, USD/CAD
USD/CHF, USD/CNH, USD/JPY, USD/MXN, USD/NOK
USD/SEK, USD/TRY, USD/ZAR, ZAR/JPY

- or -
Data Categories

Intrinio offers a variety of ways to access this data feed. Choose your preferred access method below:

API
CSV

API Documentation

There are two versions of our API. We recommend "v2". To learn which one may be right for you, click here.
API v1
API v2

{{ docSectionTitle }} Documentation

Welcome to the Intrinio Financial Data Platform! Through our Financial Data Marketplace, we offer a wide selection of financial data feeds sourced by our own proprietary processes as well as from many data vendors. The Intrinio API uses HTTPS verbs and a RESTful endpoint structure, which makes it easy to request data from Intrinio. Basic Authentication is administered over HTTPS. Responses are delivered in JSON format.

Getting Started

First, you'll need an Intrinio account for your API access credentials.

Sign Up for API Access

If you have an Intrinio account you can view your Account API Access Keys here.

For a quick-start guide to our API, please see the tutorial.

If you need additional help using the API, chat with us.

Authentication

Private

You can find your API Key(s) on your Account API Access Keys page.

You must include a valid API Key with every request in-order to access to the API.

If your API Key is not authorized, a status code of 401 will be returned.

URL Parameter Authentication

Simply include your API Key in the HTTPS request by specifying an api_key URL parameter set to the value of your API Key.

For example:

https://api.intrinio.com/prices?identifier=AAPL&api_key={{base64_encoded_api_key}} https://api.intrinio.com/prices?identifier=AAPL&api_key=OjA1ZTFiNGZiN2U4Y2JlNjAwNzE0OGQ4YjM2YTFmNjRk

* Showing your API Key.
* Example API Key is not valid.



Authorization Header Authentication

Include your API Key in the HTTPS request by specifying an Authorization header with the value:

Bearer [API_KEY]

Simply replace [API_KEY] with your valid API Key.

For example:

Authorization: Bearer {{base64_encoded_api_key}} Authorization: Bearer OjA1ZTFiNGZiN2U4Y2JlNjAwNzE0OGQ4YjM2YTFmNjRk

* Showing your API Key.
* Example API Key is not valid.



Public

For public/untrusted environments (such as client-side JavaScript), use our public key authentication over HTTPS.

You can create a Public Access Key on your Account Access Keys page. Make sure to specify all domains from which this key may be used. Any domain not listed will be rejected by the API. For development purposes, localhost is listed as a domain by default. Make sure to delete this domain before going to production.

To include a public key in your HTTPS request, specify it as the value of an X-Authorization-Public-Key header.

If your public key is not authorized, a status code of 401 will be returned.

Response Codes

Intrinio uses normal HTTP response codes to indicate the success or failure of an API request. A response code of 200 indicates success and codes in the 4xx range indicate an error that failed given the information provided, and codes in the 5xx range indicate an error with Intrinio’s servers (these are rare).

The Intrinio API uses the following error codes:

Code Meaning
200 OK – Everything worked as expected
401 Unauthorized – Your User/Password API Keys are incorrect
403 Forbidden – You are not subscribed to the data feed requested
404 Not Found – The endpoint requested does not exist
429 Too Many Requests – You have hit a limit. See limits
500 Internal Server Error – We had a problem with our server. Try again later.
503 Service Unavailable – You have hit your throttle limit or Intrinio may be experiencing high system load.

Paging

Often there is too much information in our system to serve in a single request of reasonable size. Therefore we limit results to a certain number per request and provide you with paging information which can be used to retrieve the remaining pages of data.

In the Web API, you will notice that most requests contain paging information.

File Downloads may have paging information as well, listed in the first row.

In order to request the next page of data, append a page_number parameter to your request:

https://api.intrinio.com/companies
https://api.intrinio.com/companies?page_number=2
https://api.intrinio.com/companies?page_number=3

Limits

The Intrinio API employs several reasonable limits to ensure that stable, reliable service is provided to all users. These limits can vary based on the type of API request you are making. If you hit an API limit, the response will contain a 429 code and an explanation of the limit.

Daily Request Limits

Most data feed subscriptions have limited daily usage. This means that you can make up to a certain number of API requests in a 24-hour period (resetting at midnight Eastern). To view the limits for a data feed subscription, go to your Account page, click on Subscriptions, click on the subscription in question, and click on Limits.

Per-Minute Request Limits

Some data feed subscriptions have limited usage per x minutes. This means that you can make up to a certain number of API requests in x minutes. Common timeframes are 10 minutes and 1 minute.

Per-Second Request Limits

Certain high-workload API request are limited by the second. This means that you can make up to a certain number of API requests per second.

Paging Limits

API endpoints that return a list of data often employ paging to allow users to retrieve the rest of the data. Below are the default and maximum page sizes for various endpoints:

Endpoint Default Page Size Maximum Page Size
historical_data 1,000 10,000
All others 100 10,000

Certain requests are considered "high-paging" and are subject to additional limits:

  • Requests with a page size that is higher than the Default Page Size
  • Requests with a page offset greater than or equal to the Maximum Page Size

These request are limited by:

User Type High-Paging Request Limit
Free 1 per minute
Paid 1 per second
Custom Contact Sales

Bulk Request Limits

Certain API endpoints allow you to make "bulk" requests that return all of the available data. These requests are limited by:

User Type Bulk Request Limit
Free 1 per minute
Paid 1 per second
Custom Contact Sales

Throttle Limits

Users enjoying free data feed subscriptions only are limited to 100 requests per second.

Timeout Limits

Each request must be fulfilled within 25 seconds, otherwise it will be dropped with a 503 error. Given the flexibility of our endpoints and the complexity of potential API requests, we leave it to the users to fashion requests which can be satisfied in a reasonable time.

Usage & Limits

The following endpoints will help you to check your API access, limits, and usage:

Note: this is limited to data feeds with daily API requests limits.

Endpoints

Below are all of the API endpoints available for this data feed:

Welcome to the Intrinio Financial Data Platform! Through our Data Marketplace, we offer a wide selection of financial data feeds sourced by our own proprietary processes as well as from many data vendors. All of our data is available for download in the CSV (comma-separated values) format.

If you need additional help, chat with us.

Getting Started

For a quick guide to getting started with our CSV Download functionality, please see the Tutorial.

Authentication

When using the download links, your browser will prompt you for a username and password. These credentials correspond to your access keys, which can be found in your Account page.

Limits

CSV Downloads are limited according to the matrix below. If you exceed the limit, the system will return a 429 error. If you need to download a larger dataset, we recommend browsing our Financial Data Downloads , which allow you to download massive datasets for a flat fee.

User Type CSV Download Limit
Free 1 per minute
Paid 1 per second
Custom Contact Sales

Paging

Sometimes there is too much information in our system to put into a single file of reasonable size. Therefore we limit file downloads to 10,000 rows. In order to retrieve the rest of the rows, you will have to request the second "page" of results. The first row of each file will contain paging information: RESULT_COUNT: 6342 , PAGE_SIZE: 10000 , CURRENT_PAGE: 1, TOTAL_PAGES: 1 , API_CALL_CREDITS: 1

  • RESULT_COUNT tells you how many total rows there are in our system
  • PAGE_SIZE tells you how many records you are fetching per page
  • CURRENT_PAGE tells you which page you are currently viewing
  • TOTAL_PAGES tells you how many total pages there are
  • API_CALL_CREDITS tells you how many API calls credits your request consumed

If the TOTAL_PAGES field in your file is greater than 1 and you want to see the other pages, append a page_number parameter to the URL:

https://api.intrinio.com/indices.csv?type=economic&page_number=1
https://api.intrinio.com/indices.csv?type=economic&page_number=2
https://api.intrinio.com/indices.csv?type=economic&page_number=3

To exclude the paging information from your file, include a hide_paging parameter in the URL:

https://api.intrinio.com/indices.csv?type=economic&page_number=1&hide_paging=true

URL Formatting

URLs must be formatted correctly in order for file downloads to be processed successfully. Here are examples of correct URLs:

https://api.intrinio.com/indices.csv
https://api.intrinio.com/indices.csv?type=economic
https://api.intrinio.com/indices.csv?type=economic&query=GDP
https://api.intrinio.com/data_point.csv?identifier=AAPL&item=marketcap,beta

Here are examples of incorrect URLs:

https://api.intrinio.com/indices.csv&type=economic
https://api.intrinio.com/indices.csv?type=economic?query=GDP
https://api.intrinio.com/data_point.csv?identifier=AAPL&item=marketcap/beta

Here is a key to the different parts of a URL:

https://api.intrinio.com /data_point.csv ? identifier = AAPL & item = marketcap,beta
1 2 3 4 5 6 7 8 9 10

  1. Intrinio's API web address.
  2. The location of the data you are trying to access.
  3. The separator between the URL address and the URL parameters.
  4. The name of the URL parameter.
  5. The separator between the name of the URL parameter and the value of the URL parameter.
  6. The value of the URL parameter.
  7. The separator between URL parameters.
  8. The name of the URL parameter.
  9. The separator between the name of the URL parameter and the value of the URL parameter.
  10. The value of the URL parameter. Note some parameters allow multiple values - separate them with a comma.

Functions

Below are all of the CSV file downloads available for this data feed:

Forex Currencies

Returns a list of forex currencies for which prices are available.

Endpoint:

Parameters

expand collapse
Name Description Example
hide_paging
* required
Hide first row of paging information.
Options:
true
true

Output Fields

expand collapse
Name Description Type Example
code ISO 4217 currency code string AUD
name Currency name string Dollar
country Country in which currency is used string Australia

Sample Data

expand collapse

Currency Master

Not available for this access method

Forex Currency Pairs

Returns a list of currency pairs used to request foreign exchange (forex) market price data. The currency that is used as the reference is called quote currency and the currency that is quoted in relation is called the base currency. For example, in the pair code “EURGBP” with a price of 0.88, one Euro (base currency) can be exchanged for 0.88 British Pounds (quote currency).

Parameters

expand collapse
Name Description Example
hide_paging
* required
Hide first row of paging information.
Options:
true
true

Output Fields

expand collapse
Name Description Type Example
code The code of the currency pair used for the currency_prices endpoint string EURUSD
base_currency ISO 4217 currency code of the base currency string EUR
quote_currency ISO 4217 currency code of the quote currency string USD

Sample Data

expand collapse

Currency Pairs Master

Not available for this access method

Forex Currency Prices

Provides a list of forex price quotes for a given forex currency pair and timeframe.

Parameters

expand collapse
Name Description Example
pair
* required
The currency trading pair. EURUSD
timeframe
* required
The time interval for the quotes.
Options:
m1
m5
m15
m30
H1
H2
H3
H4
H6
H8
D1
W1
M1
D1
timezone
* required
Return price date/times in this timezone, also interpret start/end date/time parameters in this timezone
Options:
Africa/Algiers
Africa/Cairo
Africa/Casablanca
Africa/Harare
Africa/Johannesburg
Africa/Monrovia
Africa/Nairobi
America/Argentina/Buenos_Aires
America/Bogota
America/Caracas
America/Chicago
America/Chihuahua
America/Denver
America/Godthab
America/Guatemala
America/Guyana
America/Halifax
America/Indiana/Indianapolis
America/Juneau
America/La_Paz
America/Lima
America/Lima
America/Los_Angeles
America/Mazatlan
America/Mexico_City
America/Mexico_City
America/Monterrey
America/Montevideo
America/New_York
America/Phoenix
America/Regina
America/Santiago
America/Sao_Paulo
America/St_Johns
America/Tijuana
Asia/Almaty
Asia/Baghdad
Asia/Baku
Asia/Bangkok
Asia/Bangkok
Asia/Chongqing
Asia/Colombo
Asia/Dhaka
Asia/Dhaka
Asia/Hong_Kong
Asia/Irkutsk
Asia/Jakarta
Asia/Jerusalem
Asia/Kabul
Asia/Kamchatka
Asia/Karachi
Asia/Karachi
Asia/Kathmandu
Asia/Kolkata
Asia/Kolkata
Asia/Kolkata
Asia/Kolkata
Asia/Krasnoyarsk
Asia/Kuala_Lumpur
Asia/Kuwait
Asia/Magadan
Asia/Muscat
Asia/Muscat
Asia/Novosibirsk
Asia/Rangoon
Asia/Riyadh
Asia/Seoul
Asia/Shanghai
Asia/Singapore
Asia/Srednekolymsk
Asia/Taipei
Asia/Tashkent
Asia/Tbilisi
Asia/Tehran
Asia/Tokyo
Asia/Tokyo
Asia/Tokyo
Asia/Ulaanbaatar
Asia/Urumqi
Asia/Vladivostok
Asia/Yakutsk
Asia/Yekaterinburg
Asia/Yerevan
Atlantic/Azores
Atlantic/Cape_Verde
Atlantic/South_Georgia
Australia/Adelaide
Australia/Brisbane
Australia/Darwin
Australia/Hobart
Australia/Melbourne
Australia/Melbourne
Australia/Perth
Australia/Sydney
Etc/UTC
UTC
Europe/Amsterdam
Europe/Athens
Europe/Belgrade
Europe/Berlin
Europe/Berlin
Europe/Bratislava
Europe/Brussels
Europe/Bucharest
Europe/Budapest
Europe/Copenhagen
Europe/Dublin
Europe/Helsinki
Europe/Istanbul
Europe/Kaliningrad
Europe/Kiev
Europe/Lisbon
Europe/Ljubljana
Europe/London
Europe/London
Europe/Madrid
Europe/Minsk
Europe/Moscow
Europe/Moscow
Europe/Paris
Europe/Prague
Europe/Riga
Europe/Rome
Europe/Samara
Europe/Sarajevo
Europe/Skopje
Europe/Sofia
Europe/Stockholm
Europe/Tallinn
Europe/Vienna
Europe/Vilnius
Europe/Volgograd
Europe/Warsaw
Europe/Zagreb
Pacific/Apia
Pacific/Auckland
Pacific/Auckland
Pacific/Chatham
Pacific/Fakaofo
Pacific/Fiji
Pacific/Guadalcanal
Pacific/Guam
Pacific/Honolulu
Pacific/Majuro
Pacific/Midway
Pacific/Midway
Pacific/Noumea
Pacific/Pago_Pago
Pacific/Port_Moresby
Pacific/Tongatapu
Etc/UTC
start_date
* required
Return quotes on or after this date. 2017-06-01
start_time
* required
Return quotes at or after this time (24-hour, UTC). -
end_date
* required
Return quotes on or before this date. 2017-06-30
end_time
* required
Return quotes at or before this time (24-hour, UTC). -
page_number
* required
An integer greater than or equal to 1 for specifying the page number for the return values. 3
page_size
* required
An integer greater than or equal to 1 for specifying the number of results on each page. 10
sort_order
* required
The order of the price quotes.
Options:
asc
desc
asc
hide_paging
* required
Hide first row of paging information.
Options:
true
true

Output Fields

expand collapse
Name Description Type Example
date The date and time of the beginning of the timeframe (in UTC). The open prices would be at this time, while close prices would be at this time plus the timeframe. timestamp 2018-07-19 21:00:00 UTC
open_bid Open bid number 0.87962
high_bid High bid number 0.88137
low_bid Low bid number 0.87582
close_bid Close bid number 0.87591
open_ask Open Ask number 0.87972
high_ask High Ask number 0.88151
low_ask Low Ask number 0.87646
close_ask Close Ask number 0.87733
total_ticks Total Ticks number 199438

Sample Data

expand collapse