Open Exchange Rates Hourly Updates vs AllRatesToday's 60-Second Real-Time Feed
Open Exchange Rates' documentation is explicit about cadence: "All plans update hourly, except for the Unlimited Plan, which updates every 10 minutes." The Unlimited plan is $97/month.
That means unless you're paying top tier, the rate you see at 14:03 is the rate that was set at around 14:01 — and it will not change until roughly 15:01. Between the two timestamps, you're working with data that's up to 59 minutes stale.
AllRatesToday refreshes every 60 seconds across every plan, including the free tier. This article explains why that matters, when hourly data is enough, and how much hourly staleness costs in concrete scenarios.
The update cadence, plan by plan
| Provider / Plan | Update interval |
|---|---|
| AllRatesToday — Free | 60 seconds |
| AllRatesToday — Any paid plan | 60 seconds |
| OpenExchangeRates — Free | 60 minutes |
| OpenExchangeRates — Developer ($12/mo) | 60 minutes |
| OpenExchangeRates — Enterprise ($47/mo) | 60 minutes |
| OpenExchangeRates — Unlimited ($97/mo) | 10 minutes |
Even at $97/month, Open Exchange Rates is a 10-minute cadence. AllRatesToday's free tier is 10x fresher than their top-paid tier.
"Real-time" is a loaded word. Here's the reality.
No public API is truly tick-by-tick real-time — that data lives on paid Bloomberg/Refinitiv terminals. The practical question is: how stale can the number be when I display it?
- 60 seconds — fast enough that a displayed rate and the true market rate disagree by at most a few basis points for major pairs.
- 10 minutes — enough for markets to move 10-30 bps on a normal day, 50+ bps during announcements.
- 60 minutes — markets can move 50-100 bps on a calm day, 200+ bps during Fed/ECB announcements or macro surprises.
Concrete cost: a mid-size e-commerce checkout
Imagine an online store processing 1,000 cross-border orders per day with an average ticket of $100. The store displays prices in the customer's local currency and settles in USD.
- Scenario A (60-second rates): the displayed price and the true market rate disagree by an average of ~2 bps across the day. Expected daily slippage cost: ~$20 (0.02% × $100,000).
- Scenario B (hourly rates): the displayed price and the true market rate disagree by an average of ~15-25 bps across the day, depending on volatility. Expected daily slippage cost: ~$150-250.
On a calm day, hourly rates cost the business $130-230 more than 60-second rates. On a volatile day, the gap widens.
Over a year on a $36M GMV operation, that's tens of thousands of dollars in cumulative rate drift — a multiple of what any real-time rate API costs.
Where hourly data is actually fine
Not every use case cares. Hourly updates are sufficient for:
- Read-only dashboards (analytics, reporting) where decisions aren't made in-flight.
- Accounting rollups that only care about end-of-day or end-of-month snapshots.
- Historical charting where intraday precision isn't the point.
- Informational widgets (country pages, blog posts) where "roughly correct" is good enough.
If your app fits these profiles, Open Exchange Rates' hourly cadence is not a problem.
Where hourly data hurts
- Payments and checkout. The rate that determines how much the customer pays.
- Quotes and invoicing. A USD invoice converted at 09:00 can be 0.5% off by 09:55 on a volatile morning.
- Treasury and cash management. Intra-day FX moves directly hit the balance sheet.
- Trading and backtesting. Anywhere the rate is part of a P&L calculation.
- Remittance marketplaces. Users comparing rates across providers; stale data = lost trust.
How AllRatesToday delivers 60-second rates
Rates are pulled from Reuters (Refinitiv) and interbank market feeds every 60 seconds and cached at the edge. The API response reflects the most recent snapshot, and every response includes a time field so you can confirm freshness:
{
"source": "USD",
"target": "EUR",
"rate": 0.9234,
"time": "2026-04-21T14:03:22Z"
} If time is more than 60 seconds behind "now," something's wrong. With Open Exchange Rates' hourly cadence, the timestamp field is supposed to be up to 59 minutes old — so you can't use it as a freshness check.
Rate limits aren't the bottleneck. Data is.
A common misconception: "Open Exchange Rates gives 1,000 free requests, AllRatesToday gives 300. So Open Exchange Rates is more generous."
Request quota isn't the constraint for most apps — freshness is. Once you've fetched rates, you'll cache them for their validity window anyway. The question is how often the source updates, not how often you're allowed to poll.
- With AllRatesToday, you can poll every 60 seconds and always get fresh data.
- With Open Exchange Rates free, polling more than once per hour returns the same stale number. The extra 900 requests buy you nothing but duplicated responses.
In other words: a 300-request quota on a 60-second feed gives you more fresh data points per day than a 1,000-request quota on a 60-minute feed.
Migration: one URL swap
If you're on Open Exchange Rates' free tier and hourly data isn't cutting it, the migration is short. The JSON response shape is nearly identical — swap the URL and the auth header.
- https://openexchangerates.org/api/latest.json?app_id=XXX
+ https://allratestoday.com/api/v1/rates?source=USD
(Authorization: Bearer YOUR_API_KEY) A full migration guide walks through every endpoint.
Stop serving hour-old rates
60-second updates from Reuters and interbank feeds, every plan including free.
Get your free API key