“What was the exchange rate on March 3?” sounds like a question with one answer. It isn’t: the euro–dollar rate moves thousands of times on a busy day. To give a single answer, data providers publish an end-of-day exchange rate – a value taken at a defined cut-off. Real-time and intraday data answer a different question: what is the rate now, or at 14:15? Knowing which one you need saves quota and prevents subtle reporting differences.
An end-of-day exchange rate is the rate recorded at a fixed cut-off time at the end of a trading day and used as that day’s representative value. Because FX trades around the clock on weekdays, the value depends on the provider’s cut-off time and time zone – for fxapi’s historical data, the end of the day in UTC.
What an end-of-day exchange rate means in a 24-hour market
Stock exchanges open and close. The foreign exchange market does not: it is an over-the-counter market that follows the sun from Asia–Pacific through Europe to North America from Monday morning in Asia to Friday evening in New York. There is no universal “close”, so every end-of-day series is a convention:
| Publisher type | Typical cut-off | Notes |
|---|---|---|
| fxapi historical data | End of day, UTC | /v1/historical returns end-of-day values for the requested date |
| Central bank reference rates | Fixed local time | The ECB’s euro reference rates reflect a concertation around 14:10 CET and are published around 16:00 CET, for information purposes only |
| Your own ERP or bank | Varies | Often local midnight or a bank’s internal fixing time |
Two series can both be correct and still differ, simply because one is taken at 14:10 Frankfurt time and the other at 23:59:59 UTC. When you reconcile numbers from two systems, compare cut-off times first.
Dates are UTC
fxapi timestamps are ISO 8601 in UTC – for example "last_updated_at": "2026-10-01T23:59:59Z" for an end-of-day value. A transaction made at 20:00 in New York on 1 October falls on 2 October in UTC (00:00Z). If your business books by local date, convert the timestamp to UTC (or define your policy) before choosing which day’s rate to apply.
Real-time and intraday rates
“Real-time” means different things in different products:
| Term | What you get | Typical consumer |
|---|---|---|
| Tick data / streaming | Every quote change, bid and ask, via a streaming connection | Trading desks, market makers |
| Real-time snapshot | Latest mid-market rate, refreshed on a schedule (e.g., every 60 s) | Apps, checkouts, wallets, dashboards |
| Intraday history | Snapshots at hourly, 15-minute or minute intervals | Analytics, auditing payment times |
| End-of-day | One value per day | Reporting, invoicing, accounting |
A reference-rate API such as fxapi provides the second, third and fourth rows. It is not a trading feed: there is no bid/ask and no order execution. For most software, a 60-second snapshot is indistinguishable from “live” – and far simpler to integrate. See the real-time exchange rate API for details.
Intraday data in fxapi
On Professional and Enterprise, /v1/range returns time series at several granularities:
accuracy | Data available | Max span per request |
|---|---|---|
minute | Last 7 days | 6 hours |
quarter_hour | Last 7 days | 24 hours |
hour | Last 3 months | 7 days |
day | Back to 1999 | 366 days |
week | Week-end (Sunday) values | 1,830 days |
month | Month-end values, back to 1999 | Any span |
Use intraday data when you need the rate at the moment a payment was authorized, or to chart how a currency moved during a volatile session. The time series API page covers CSV export and charting.
Choosing a refresh frequency
Match freshness to the business decision, not to what is technically possible:
| Use case | Recommended data | Why |
|---|---|---|
| Monthly reporting, closing rates | End-of-day | One auditable value per day |
| Invoices and bookkeeping | End-of-day for the invoice date | Reproducible later |
| Catalog prices in local currency | Daily or hourly | Prices shouldn’t jitter for shoppers |
| Checkout and payment quotes | Hourly or every 60 s | Limits drift between quote and settlement |
| Wallets, remittance, treasury dashboards | Every 60 s | Users compare against live market rates |
| Post-hoc audit of a payment provider | Intraday history | Compare at the authorization time |
Plan mapping
| fxapi plan | Latest-rate updates | Intraday history (/v1/range) | Requests / month |
|---|---|---|---|
| Free | Daily | – | 300 |
| Basic | Hourly | – | 15,000 |
| Professional | Every 60 seconds | Yes | 600,000 |
| Enterprise | Every 60 seconds | Yes | 1,700,000 |
All plans include end-of-day historical data back to 1999-01-01. Polling faster than your plan refreshes returns the same values and spends quota, so set your cache lifetime to the update interval – see caching exchange rates and the pricing page.
Example: compare today’s rate with yesterday’s close
This Python snippet fetches the latest EUR→USD rate and the previous day’s end-of-day value, then prints the change. It works on every plan.
import os
from datetime import date, timedelta
import requests
API = "https://api.fxapi.com/v1"
HEADERS = {"apikey": os.environ["FXAPI_KEY"]}
PARAMS = {"base_currency": "EUR", "currencies": "USD"}
def get(path, **extra):
r = requests.get(f"{API}/{path}", params={**PARAMS, **extra}, headers=HEADERS, timeout=10)
r.raise_for_status()
return r.json()
latest = get("latest")
yesterday = (date.today() - timedelta(days=1)).isoformat()
close = get("historical", date=yesterday)
now_rate = latest["data"]["USD"]["value"]
eod_rate = close["data"]["USD"]["value"]
change = (now_rate / eod_rate - 1) * 100
print(f"latest {now_rate:.5f} (as of {latest['meta']['last_updated_at']})")
print(f"close {eod_rate:.5f} ({yesterday}, end of day UTC)")
print(f"change {change:+.3f} %")
For changes over longer windows, /v1/fluctuation returns start_rate, end_rate, change and change_pct per currency in a single call, on every plan.
Key takeaways
- An end-of-day rate is a convention: always know the cut-off time and time zone. fxapi uses end of day in UTC.
- “Real-time” in a rate API means frequent snapshots, not a trading stream.
- Choose freshness by use case: end-of-day for books, hourly for catalogs, 60 seconds for payments and wallets.
- Cache for your plan’s update interval. New to rate APIs? Start with what is an exchange rate API; for accounting cut-offs see closing vs average exchange rates.
Want to try it? fxapi is a foreign exchange rate API that returns live and historical rates for 190+ currencies as JSON – free for up to 300 requests a month.
Frequently asked questions
What is an end-of-day exchange rate?
Is the end-of-day rate the same as the closing rate?
How often do real-time exchange rates update?
Do I need real-time exchange rates?
Can I get intraday historical exchange rates?
/v1/range returns hourly data for the last 3 months, and 15-minute or minute data for the last 7 days.