Skip to content
Time series

Exchange rate time series API

Get every exchange rate between two dates in one request – at minute, quarter-hour, hourly, daily, weekly or monthly accuracy, back to 1999, as JSON or ready-to-load CSV.

Accuracy1 min – 1 mo
HistorySince 1999
FormatsJSON · CSV
PlanProfessional+
200 OK · GET /v1/range · text/csv
curl -G "https://api.fxapi.com/v1/range" \
  -d datetime_start=2026-01-01T00:00:00Z \
  -d datetime_end=2026-09-30T23:59:59Z \
  -d accuracy=day -d base_currency=EUR \
  -d currencies=USD,CHF -d format=csv \
  -H "apikey: $FXAPI_KEY"
datetime,base_currency,currency,value
2026-01-01T23:59:59Z,EUR,USD,…
2026-01-01T23:59:59Z,EUR,CHF,…
2026-01-02T23:59:59Z,EUR,USD,…

A single historical rate answers “what was EUR/USD on 30 June?”. Charts, backtests, revaluations and warehouse tables need the whole series. The fxapi exchange rate time series API (/v1/range) returns every data point between datetime_start and datetime_end in one call, for as many currencies as you like, at the granularity your use case needs.

Parameters

ParameterRequiredDescription
datetime_startyesStart, ISO 8601 – e.g. 2026-01-01T00:00:00Z
datetime_endyesEnd, ISO 8601
accuracynoday (default), hour, quarter_hour, minute, week, month
base_currencynoBase currency, default USD
currenciesnoComma-separated targets – default: all
typenofiat, metal or crypto
formatnojson (default) or csv

Full reference: range endpoint docs.

Accuracy, span and look-back

AccuracyData pointMax. span per requestAvailable back to
minuteevery minute6 hourslast 7 days
quarter_hourevery 15 minutes24 hourslast 7 days
hourevery hour7 dayslast 3 months
dayend of day (UTC)366 days1999-01-01
weekend of week (Sunday)1,830 days1999-01-01
monthend of monthunlimited1999-01-01

Pick the coarsest accuracy that answers your question: a five-year chart reads better with weekly points, a revaluation needs month-end values, an intraday dashboard wants minutes.

CSV for analysts, JSON for applications

format=csv returns flat rows – datetime,base_currency,currency,value – that load straight into pandas, Excel, Google Sheets, Postgres COPY, BigQuery or Snowflake. JSON returns the same data nested by timestamp for application code. See loading FX data into a warehouse.

Python: 25 years of month-end EUR/USD in one call

import io, os
import pandas as pd
import requests

r = requests.get(
    "https://api.fxapi.com/v1/range",
    params={
        "datetime_start": "2001-01-01T00:00:00Z",
        "datetime_end": "2025-12-31T23:59:59Z",
        "accuracy": "month",
        "base_currency": "EUR",
        "currencies": "USD",
        "format": "csv",
    },
    headers={"apikey": os.environ["FXAPI_KEY"]},
    timeout=30,
)
r.raise_for_status()
eurusd = pd.read_csv(io.StringIO(r.text), parse_dates=["datetime"])
print(eurusd.tail())

For daily data over more than 366 days, loop year by year – each year is one request. The Python guide has a complete backfill script.

Typical uses

  • Charts and widgets – plot currency trends in dashboards and customer-facing apps.
  • Revaluation – month-end rates for balance sheet items; combine with average rates for P&L.
  • Backtesting and pricing models – consistent daily history since 1999.
  • Data warehouses – a daily rates table joined to transactions for constant-currency reporting.
  • Volatility checks – feed a series into your own statistics, or get the start/end change directly from the fluctuation API.

Plans

The range endpoint is part of the Professional ($34.99/month, 600,000 requests) and Enterprise ($74.99/month, 1,700,000 requests) plans – see pricing. Need single dates only? The historical exchange rates API is available on every plan, including Free.

This endpoint is part of the fxapi foreign exchange rate API – the same key, response format and 190+ currencies across every endpoint.

Frequently asked questions

How far back does the time series go?
Daily, weekly and monthly series go back to 1 January 1999. Hourly data covers the last three months; 15-minute and minute data cover the last seven days.
What is the maximum span per request?
366 days for daily accuracy, 1,830 days for weekly, unlimited for monthly, 7 days for hourly, 24 hours for quarter-hourly and 6 hours for minute accuracy.
Which plan includes the range endpoint?
The time series (range) endpoint is included in the Professional and Enterprise plans. On Free and Basic you can call /v1/historical for individual dates.
Does a time series cost one request?
Yes – a whole series is one request, however many data points and currencies it contains. Only successful calls count against your quota.
What do weekly and monthly accuracy return?
Weekly returns the end-of-week (Sunday) daily rate, monthly the end-of-month daily rate. If datetime_end falls inside a period, the last point is the rate at datetime_end.
Free plan · no credit card

Get your free exchange rate API key

300 requests a month, latest and historical rates, fluctuation and averages – free forever. Upgrade when you need faster updates or more requests.