如果你正在寻找 exchangerate.host 替代方案,你几乎肯定撞上了和所有人一样的那堵墙:免费套餐现在只有每月 100 次请求。不是每天 100 次,也不是每小时 100 次——是整个计费周期总共一百次调用。一个开发者调试结账页面,午饭前就能把它用完。这个曾经是互联网上「随手取点汇率」默认端点的服务,如今已经变成一个附带演示额度的付费产品。
本文按工程师真正的评估方式,比较 2026 年 7 个最佳 exchangerate.host 替代方案:免费额度大小、在你实际会达到的用量下的真实价格、更新频率、历史数据覆盖,以及你需要重写多少代码。下文所有价格数据均在撰写时对照各供应商官方定价页核实过,最后一节则展示完整的迁移过程——请求、响应映射与缓存——大约十分钟即可完成。
exchangerate.host 究竟改变了什么
exchangerate.host 最初带着社区气质:无需密钥、无需注册、基于欧洲央行的汇率、干净的 REST 接口。那个版本已经消失了。该服务现在由 APILayer(APILayer GmbH,总部位于奥地利维也纳)开发和维护,行为方式与该系列其他商业 API 完全一致。三项具体变化是开发者转向别处的直接原因。
1. 免费套餐只有每月 100 次请求
当前的 exchangerate.host 定价页 将 Free 套餐列为每月 100 次请求,汇率每日更新,且无技术支持。换个角度看:如果在 30 天里完全均匀地分配,相当于每七小时才能发一次请求。这是演示额度,不是开发额度。任何带测试套件、CI 流水线或多于一名开发者的项目都会立刻耗尽它。
2. 超额自动计费,而不是停止服务
这是最让人意外的部分。当你超出配额时,API 不会返回 429 并停止——它会继续提供服务,并按次收费。APILayer 自己的超额费率表把 Basic 套餐定为每次额外调用 0.005996 美元,并给出了这样一个实例:在 14.99 美元的 Basic 套餐上超出 10,000 次调用,费用为 59.96 美元。这是套餐价格的四倍,被加到一张你从未批准的账单上,源头是一个你没注意到的重试循环。你会在配额的 75%、90% 和 100% 收到邮件和控制台通知,但没有任何机制会硬性中断。
如果你的成本模型依赖一个可预测的上限,那么一个会悄悄把 bug 变成账单的 API 就是结构性问题,而不是定价上的小分歧。
3. 免费和低价套餐每天只更新一次
更新频率是分层的:Free 为每日,Basic(14.99 美元/月)为每小时,Professional Plus(59.99 美元/月)为每 10 分钟,Business(99.99 美元/月)为每 60 秒。历史数据以日终值提供,在 GMT 时间 00:05 发布前一天的数据。这个节奏用于记账没问题,但对结账页面、定价表,或任何汇率过期就会变成退款工单的场景,就完全不够。
4. 支持服务是另一张年度账单
标准支持已包含,但 Platinum Support(专属客户经理、优先处理缺陷)是一笔额外的年费:Basic 为 479.88 美元,Professional Plus 为 599.88 美元,Business 为 719.88 美元。它在注册时默认勾选,需要手动取消。在比较月费之前值得知道这一点。
这些都不能说明 exchangerate.host 是一个糟糕的 API。它只是变成了一个与大多数教程仍在引用的那个不同的 API,而且它的经济性只在特定用量下成立。如果你想了解供应商如何获取和定价这些数据的更广背景,可以看我们的汇率 API 的数据从哪里来指南。
如何评估 exchangerate.host 的替代方案
在列表之前,这份清单才真正决定一次迁移能否长久:
- 可用的免费额度 — 足够在不绑信用卡的情况下开发、测试并运行一个小型生产应用。
- 超额行为 — API 会在限额处硬性停止,还是把超出部分计费给你?
- 你实际付费档位的更新频率 — 实时、每小时还是每天,看的是你真正会购买的那个套餐。
- 历史与时间序列端点 — 查询单个历史日期是基本要求;能查日期区间做图表则不是。
- 基准货币灵活性 — 有些供应商把免费套餐锁定在 USD 或 EUR,改基准要收费。
- 货币广度 — 主要货币都很容易,差异出在新兴市场的长尾货币上。
- 迁移成本 — 请求与响应结构和你现在解析的有多接近?
2026 年 7 个最佳 exchangerate.host 替代方案
| API | 免费额度 | 货币数 | 免费档更新频率 | 历史数据 | 无需信用卡 |
|---|---|---|---|---|---|
| Finexly | 1,000 次/月 | 170+ | 实时 | 有 | 是 |
| exchangerate.host | 100 次/月 | 170+ | 每日 | 有 | 是 |
| Frankfurter | 无限,无需密钥 | ~30 | 每日(欧洲央行) | 有 | 是 |
| ExchangeRate-API | 1,500 次/月 | 161 | 每日 | 仅付费 | 是 |
| Open Exchange Rates | 1,000 次/月 | 200+ | 每小时(USD 基准) | 仅付费 | 否 |
| Fixer | 100 次/月 | 170+ | 每小时(EUR 基准) | 仅付费 | 否 |
| CurrencyLayer | 100 次/月 | 168 | 每日(USD 基准) | 仅付费 | 否 |
| CurrencyAPI | 约 300 次/月 | 170+ | 每日 | 仅付费 | 否 |
1. Finexly — 最接近的同类替代
Finexly 正是为 exchangerate.host 留下的缺口而生:通过简洁的 REST API 提供 170 多种货币的实时与历史汇率,免费套餐为每月 1,000 次请求(每分钟 10 次),注册无需信用卡。这是 exchangerate.host 免费额度的 10 倍,更新是实时而非每日,且历史数据直接包含而非另行付费。
付费阶梯才是比较真正尖锐的地方。Finexly 的 Growth 套餐是每月 12.99 美元,15,000 次请求;exchangerate.host 的 Basic 是每月 14.99 美元,10,000 次请求。你付得更少,却多出 50% 的余量。在自助购买区间的顶端,两家都是每月 59.99 美元,10 万次请求——但 Finexly 该档提供实时更新,而 exchangerate.host 的 Professional Plus 每 10 分钟才刷新一次。
端点就是常见的四个——latest、historical、timeseries 和 convert——采用统一一致的响应结构,详见 Finexly API 文档。完整档位见定价方案页面。
适合你如果: 你想要一个可以直接替换、免费额度真的够用来开发、并且随规模增长价格可预测的方案。
2. Frankfurter — 永久免费,前提是 ~30 种货币够用
Frankfurter 免费、开源、可自托管,而且完全不需要 API 密钥——是目前最接近 exchangerate.host 原始体验的选择。它提供欧洲央行参考汇率,历史档案很深。代价也很硬:覆盖范围止于大约 30 种货币(欧洲央行公布的那些),汇率每个工作日只变动一次,且一切都以欧元为基准。
适合你如果: 你以欧元为中心、不需要冷门货币对,而且每日粒度确实够用。否则你会在采用它的同一周就撞上天花板。
3. ExchangeRate-API — 无需绑卡、额度最慷慨的免费密钥
ExchangeRate-API(AYR Tech 的产品,自 2010 年运营至今)提供两条免费路径。开放访问端点完全不需要密钥,但要求可见的署名,每日更新一次,并有速率限制——滥用者会收到 HTTP 429 并被锁定 20 分钟。带密钥的免费档提供每月 1,500 次请求、每日更新、无署名要求,且无需信用卡。Pro 档为每月 10 美元、30,000 次请求,每 60 分钟更新。
注意它的上限:历史与时间序列数据在付费档,而且连 Pro 也只是每小时刷新。适合你如果: 你预算有限但需要请求量,且每日汇率可以接受。我们在 ExchangeRate-API、CurrencyLayer 与 Finexly 对比中对这一系列做了更细的拆解。
4. Open Exchange Rates — 货币覆盖最深
自 2011 年运营至今,覆盖 200 多种货币,客户端库生态成熟。免费档允许每月 1,000 次请求、每小时更新,但被锁定在 USD 基准——更换基准货币是付费功能,这会悄悄破坏任何假定以 EUR 或 GBP 为锚的代码。付费档从大约每月 12 美元、10,000 次请求起。
适合你如果: 货币覆盖广度是你的主要约束,而 USD 基准对你的产品来说很自然。
5. Fixer — 同一个东家,同样的计费模式
Fixer 通过与 exchangerate.host 相同的 APILayer 端点结构覆盖 170 多种货币,这让它成为本列表中迁移成本最低的选项——同时也是意义最小的一个。免费档为每月 100 次请求、每小时更新、EUR 基准,历史数据在付费档,超额同样自动计费。
适合你如果: 你已经深度使用 APILayer 生态并希望账单集中。但如果你离开 exchangerate.host 是因为免费额度或超额模式,Fixer 一个都解决不了。
6. CurrencyLayer — 货币加贵金属
同样属于 APILayer。168 种货币外加贵金属,免费档每月 100 次请求、每日更新、USD 基准。贵金属覆盖是它的差异点,其余基本与 Fixer 一致。
适合你如果: 你需要在法币之外同时获取 XAU/XAG,而且反正打算直接买付费档。
7. CurrencyAPI — 法币与加密货币同一端点
一个直白的 REST API,覆盖 170 多种法币与加密货币,免费档约每月 300 次请求、每日更新。更快的刷新频率在付费档提供。
适合你如果: 你需要在一次集成中同时拿到加密货币和法币,并且能接受较小的免费额度。
成本对比:你实际付出多少
标价掩盖了真正重要的东西,也就是在你所需更新频率下每次有效请求的成本。三个现实用量:
每月 10,000 次请求。 exchangerate.host 的 Basic 是 14.99 美元,每小时更新。Finexly 的 Growth 是 12.99 美元、15,000 次请求、实时更新。你账单更省,还多出 5,000 次请求的余量,短期内不用再操心。
每月 100,000 次请求。 两家都是 59.99 美元。差别在刷新节奏——10 分钟对实时——以及超额时是花钱还是收到一个错误。
在超额边界上。 这是分歧最尖锐的地方。按 APILayer 自己公布的数字,超出 Basic 套餐 10,000 次调用的费用是 59.96 美元,超过基础订阅费的四倍。一个配置错误的定时任务或一场重试风暴会直接变成账单。而在配额处硬性停止的供应商,会把同一次事故变成一条告警。
无论选哪家供应商,实用的防御手段都一样:积极缓存,并且失败时关闭。每小时更新一次的汇率不需要每次页面加载都去拉取。我们的货币 API 缓存与错误处理指南涵盖了这些模式——TTL 选择、stale-while-revalidate 和熔断器——能让你的延迟和账单都保持平稳。
如何从 exchangerate.host 迁移
大多数 exchangerate.host 集成就是一个 GET 请求加一个响应解析器,所以迁移是机械性的。需要映射的东西正好两样。
第 1 步:映射请求
exchangerate.host 采用 APILayer 的约定——URL 查询参数 access_key,用 source 指定基准货币,用 currencies 指定目标货币:
# exchangerate.host — 密钥放在 URL 中
curl "https://api.exchangerate.host/live?access_key=YOUR_ACCESS_KEY&source=USD¤cies=EUR,GBP,JPY"Finexly 使用标准的 Authorization 请求头,以及更常见的 base / symbols 参数名:
# Finexly — 密钥放在请求头中,实时汇率
curl "https://api.finexly.com/v1/latest?base=USD&symbols=EUR,GBP,JPY" \
-H "Authorization: Bearer YOUR_API_KEY"把密钥从查询字符串里挪走本身就是一次小的安全升级:URL 会出现在服务器日志、代理日志、浏览器历史和 referrer 头里,而请求头通常不会。
第 2 步:映射响应
这是唯一会触及你解析代码的部分。APILayer 系列的响应用拼接货币对(USDEUR)作为每个报价的键,所以你必须去掉来源前缀才能得到可用的符号。Finexly 返回一个以目标符号为键的扁平 rates 对象:
{
"success": true,
"base": "USD",
"timestamp": 1755763200,
"date": "2026-08-21",
"rates": {
"EUR": 0.9184,
"GBP": 0.7842,
"JPY": 152.31
}
}一个兼容层可以让你在迁移期间完全不动应用的其余部分:
// 直接替换:返回旧代码期望的拼接货币对格式
async function getQuotes(source = 'USD', currencies = ['EUR', 'GBP', 'JPY']) {
const url = `https://api.finexly.com/v1/latest?base=${source}&symbols=${currencies.join(',')}`;
const res = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.FINEXLY_API_KEY}` }
});
if (!res.ok) throw new Error(`FX request failed: ${res.status}`);
const data = await res.json();
// 重建旧版 "USDEUR" 键,下游代码无需改动
return Object.fromEntries(
Object.entries(data.rates).map(([symbol, rate]) => [`${source}${symbol}`, rate])
);
}Python 版本,附带你早就该有的过期数据防护:
import os, time, requests
FRESHNESS_LIMIT = 15 * 60 # seconds
def get_rates(base="USD", symbols=("EUR", "GBP", "JPY")):
resp = requests.get(
"https://api.finexly.com/v1/latest",
params={"base": base, "symbols": ",".join(symbols)},
headers={"Authorization": f"Bearer {os.environ['FINEXLY_API_KEY']}"},
timeout=5,
)
resp.raise_for_status()
data = resp.json()
age = time.time() - data["timestamp"]
if age > FRESHNESS_LIMIT:
raise RuntimeError(f"Rates are {int(age)}s old — refusing to price on stale data")
return data["rates"]以及 PHP 版本,面向占 exchangerate.host 用户很大一部分的 Laravel 与 WordPress 代码库:
<?php
$response = wp_remote_get(
'https://api.finexly.com/v1/latest?base=USD&symbols=EUR,GBP,JPY',
['headers' => ['Authorization' => 'Bearer ' . getenv('FINEXLY_API_KEY')], 'timeout' => 5]
);
if (is_wp_error($response)) {
return get_transient('fx_rates_fallback'); // 返回最后一次已知的正常值
}
$data = json_decode(wp_remote_retrieve_body($response), true);
set_transient('fx_rates_fallback', $data['rates'], HOUR_IN_SECONDS * 6);
return $data['rates'];第 3 步:切换前先加缓存
无论迁移到哪一家,第一天就要在前面加一层缓存。如果汇率每小时刷新,30 分钟的 TTL 能把请求量削减几个数量级,让免费额度足以支撑真实流量。同时始终保留一份最后已知正常值,在上游调用失败时返回——上面 PHP 示例里的回退就是这个思路的三行实现。符号处理是迁移期间另一个隐蔽的 bug 来源;我们的 ISO 4217 货币代码指南覆盖了那些最容易出错的代码。
你该选哪一个?
- 替换生产环境集成: Finexly。免费额度是 10 倍,更新是实时而非每日,迁移就是上面那两处映射。先用免费套餐,用满了再升级。
- 业余项目、以欧元为中心、不想要密钥: Frankfurter。
- 追求最多免费请求且能接受每日汇率: ExchangeRate-API 每月 1,500 次的带密钥免费档。
- 最广的货币列表且 USD 基准很自然: Open Exchange Rates。
- 已经全面使用 APILayer: Fixer 或 CurrencyLayer——但预期会遇到你正想逃离的同一套免费额度和同一套超额模式。
如果你想在决定之前亲自验证数据新鲜度和覆盖范围,货币转换器跑的就是 Finexly 的实时数据源,我们的实时汇率 API 对比则更深入地讨论了延迟与更新保证。在考虑自建数据源?先读货币 API 自建还是采购。
常见问题
exchangerate.host 现在还免费吗? 仍然有免费套餐,但上限是每月 100 次请求,每日更新且无支持。老教程里引用的那个无需密钥、实际上不限量的版本已经不存在了——现在必须有 API 密钥,而有意义的用量从每月 14.99 美元起。
为什么我的 exchangerate.host 集成突然不工作了?
几乎总是因为 API 密钥要求。没有有效 access_key 的请求会失败,而该 API 通过在 success 字段返回 false 来表示错误——有时伴随 HTTP 404 或 HTTP 521,而不是常规的 4xx。如果你的客户端只检查 HTTP 状态码,失败看起来可能像一次空的成功。请显式检查 success 字段。
exchangerate.host 最好的免费替代是什么? 若要一个真正可用、且数据实时的免费档,选 Finexly,每月 1,000 次请求且无需信用卡。若只看请求量、每日数据可接受,选 ExchangeRate-API,每月 1,500 次。若完全不想用密钥、~30 种欧洲央行货币够用,选 Frankfurter。
超出限额会被收费吗? 在 exchangerate.host 上会。超额是按次计费而不是拦截,Basic 档为每次请求 0.005996 美元。APILayer 自己的示例把 10,000 次超额调用算作 59.96 美元。评估任何供应商时都要看它的超额政策;有些会在配额处硬性停止,对不可控流量来说更安全。
迁移到另一个货币 API 需要多久?
对典型的单端点集成来说,不到一小时。工作量在于替换请求 URL 和认证方式,然后重新映射响应——APILayer 系列 API 用拼接货币对(USDEUR)作为键,而大多数替代方案返回扁平的 rates 对象。像上面那样的兼容层能让你在不动下游代码的情况下完成切换。
我需要历史汇率吗? 比大多数团队预期的更常需要。开票、税务申报和收入对账都需要特定日期的汇率,而不是今天的汇率。本列表中大多数供应商把历史访问放在付费档——在承诺之前先确认。我们的历史汇率 API 指南讲清楚了哪些该存、哪些该查。
从免费 API 密钥开始
exchangerate.host 流失开发者的原因不是价格,而是它的免费档不再是一个能动手开发的地方。准备好迁移了吗?获取你的免费 Finexly API 密钥——无需信用卡。你将获得每月 1,000 次请求、覆盖 170 多种货币的实时汇率,以及包含在内的历史数据;当你用满之后,付费方案从每月 6.99 美元起。文档里有你所用语言的可运行示例,决定之前也可以先对比各家货币 API。
Explore More
Vlado Grigirov
Senior Currency Markets Analyst & Financial Strategist
Vlado Grigirov is a senior currency markets analyst and financial strategist with over 14 years of experience in foreign exchange markets, cross-border finance, and currency risk management. He has wo...
View full profile →