Fluctuation

On this page, we’ll dive into the fluctuation endpoint you can use to see how exchange rates changed between two dates, in absolute terms and in percent.

Instead of requesting two historical days and computing the difference yourself, one request returns each currency’s rate at the end of both days and the change in between, together with the high, low and average of the daily closes in the span. Typical uses are “biggest movers” lists, price-adjustment triggers and month-over-month reporting.


GET/v3/fluctuation

Fluctuation

Returns, for every requested currency, its rate at the end of date_from and of date_to (UTC) and how much it changed.

Required attributes

  • Name
    date_from
    Type
    string
    Description

    First day, format YYYY-MM-DD. Data are available back to 1999-01-01.

  • Name
    date_to
    Type
    string
    Description

    Last day, format YYYY-MM-DD, on or after date_from. The newest allowed day is yesterday.

Optional attributes

  • Name
    base_currency
    Type
    string
    Description

    The base currency all rates are expressed in. Defaults to USD.

  • Name
    currencies
    Type
    string
    Description

    A list of comma separated currency codes you want to get (EUR,GBP,JPY). By default all currencies are returned.

  • Name
    type
    Type
    string
    Description

    Limit the result to fiat, metal or crypto.

  • Name
    format
    Type
    string
    Description

    json (default), csv or xlsx. The CSV has one row per currency: date_from,date_to,base_currency,currency,start_rate,end_rate,change,change_pct. xlsx gives the same table as an Excel workbook, see Excel downloads

Response Properties

  • Name
    start_rate
    Type
    float
    Description

    The rate at the end of date_from.

  • Name
    end_rate
    Type
    float
    Description

    The rate at the end of date_to.

  • Name
    change
    Type
    float
    Description

    end_rate - start_rate.

  • Name
    change_pct
    Type
    float
    Description

    The change in percent of start_rate, rounded to 4 decimals. Negative when the currency got cheaper against the base currency.

  • Name
    high
    Type
    float
    Description

    The highest daily close from date_from to date_to.

  • Name
    low
    Type
    float
    Description

    The lowest daily close from date_from to date_to.

  • Name
    average
    Type
    float
    Description

    The average of the daily closes from date_from to date_to, as /average computes it for the whole span.

high, low and average are null when date_from and date_to are more than 1830 days apart or no rates are stored in the span. They are part of the JSON response only; the CSV keeps its columns.

A request costs one request of your quota. If no rates are stored for one of the two days, the endpoint returns a 404.

Request

GET
/v3/fluctuation
curl -G https://api.currencyapi.com/v3/fluctuation \
    -d date_from=2026-01-01 \
    -d date_to=2026-06-30 \
    -d currencies=EUR,GBP,JPY \
    -H "apikey: YOUR-API-KEY"

Response

{
    "meta": {
        "base_currency": "USD",
        "date_from": "2026-01-01",
        "date_to": "2026-06-30"
    },
    "data": {
        "EUR": {
            "code": "EUR",
            "start_rate": 0.9654,
            "end_rate": 0.8771,
            "change": -0.0883,
            "change_pct": -9.1465,
            "high": 0.9712,
            "low": 0.8695,
            "average": 0.9183
        },
        "GBP": {
            "code": "GBP",
            "start_rate": 0.7988,
            "end_rate": 0.7302,
            "change": -0.0686,
            "change_pct": -8.5879,
            "high": 0.8051,
            "low": 0.7244,
            "average": 0.7653
        },
        "JPY": {
            "code": "JPY",
            "start_rate": 157.21,
            "end_rate": 144.12,
            "change": -13.09,
            "change_pct": -8.3264,
            "high": 158.87,
            "low": 142.35,
            "average": 149.6
        }
    }
}