# `Money.ExchangeRates.OpenExchangeRates`
[🔗](https://github.com/ex-money/money/blob/v6.1.1/lib/money/exchange_rates/open_exchange_rates.ex#L1)

Implements the `Money.ExchangeRates` for the Open Exchange
Rates service.

## Required configuration:

The configuration key `:open_exchange_rates_app_id` should be
set to your `app_id`. For example:

    config :ex_money,
      open_exchange_rates_app_id: "your_app_id"

or configure it via environment variable:

    config :ex_money,
      open_exchange_rates_app_id: {:system, "OPEN_EXCHANGE_RATES_APP_ID"}

It is also possible to configure an alternative base url for this
service in case it changes in the future. For example:

    config :ex_money,
      open_exchange_rates_app_id: "your_app_id"
      open_exchange_rates_url: "https://openexchangerates.org/alternative_api"

# `get_historic_rates`

Retrieves the historic exchange rates from Open Exchange Rates site.

* `date` is a `t:Date.t/0` or any date-compatible map or struct (`t:Calendar.date/0`).

* `config` is the retrieval configuration. When invoked from the
  exchange rates service this will be the config returned from
  `Money.ExchangeRates.config/0`

Returns:

* `{:ok, rates}` if the rates can be retrieved

* `{:ok, :not_modified}` if the rates are unchanged since the last retrieval

* `{:error, reason}` if rates cannot be retrieved

Typically this function is called by the exchange rates retrieval
service although it can be called outside that context as
required.

# `get_latest_rates`

Retrieves the latest exchange rates from Open Exchange Rates site.

* `config` is the retrieval configuration. When invoked from the
  exchange rates service this will be the config returned from
  `Money.ExchangeRates.config/0`

Returns:

* `{:ok, rates}` if the rates can be retrieved

* `{:ok, :not_modified}` if the rates are unchanged since the last retrieval

* `{:error, reason}` if rates cannot be retrieved

Typically this function is called by the exchange rates retrieval
service although it can be called outside that context as
required.

# `init`

Update the retriever configuration to include the requirements
for Open Exchange Rates. This function is invoked when the
exchange rate service starts up, just after the ets table
:exchange_rates is created.

* `default_config` is the configuration returned by `Money.ExchangeRates.default_config/0`

Returns the configuration either unchanged or updated with
additional configuration specific to this exchange
rates retrieval module.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
