Get one date
Put the date and base currency in the path. The symbols filter is optional; without it, the response includes every supported quote currency.
If the requested date is a weekend or market holiday, the endpoint carries forward the most recent published fix and sets is_forward_filled to true. It never invents a rate.
Get a date range
The range endpoint needs symbols, start_date, and end_date. The base defaults to USD.
- JSON returns up to 366 business-day rows at a time.
- When
has_moreis true, passnext_cursorback as the next request'scursor. - A single request can span up to 1,830 days, roughly five years.
- Range rows are published business-day observations; missing weekends are not inserted.
Download CSV or Parquet
Add format=csv or format=parquet. Exports return the full requested window as one file, so they do not use the JSON cursor.
Keep provenance with the numbers
Each row includes source, is_forward_filled, and derived_symbols. Store those fields with the rates. They explain where an observation came from and whether a cross was calculated from other pairs.
For a worked Python example, read Historical FX time series in Python.