返回博客

exchangerate.host 替代方案:2026 年 7 款最佳汇率 API

V
Vlado Grigirov
August 21, 2026
Currency API Exchange Rates API Comparison exchangerate.host Alternative Free Currency API Finexly 2026

如果你正在寻找 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 的替代方案

在列表之前,这份清单才真正决定一次迁移能否长久:

  1. 可用的免费额度 — 足够在不绑信用卡的情况下开发、测试并运行一个小型生产应用。
  2. 超额行为 — API 会在限额处硬性停止,还是把超出部分计费给你?
  3. 你实际付费档位的更新频率 — 实时、每小时还是每天,看的是你真正会购买的那个套餐
  4. 历史与时间序列端点 — 查询单个历史日期是基本要求;能查日期区间做图表则不是。
  5. 基准货币灵活性 — 有些供应商把免费套餐锁定在 USD 或 EUR,改基准要收费。
  6. 货币广度 — 主要货币都很容易,差异出在新兴市场的长尾货币上。
  7. 迁移成本 — 请求与响应结构和你现在解析的有多接近?

2026 年 7 个最佳 exchangerate.host 替代方案

API免费额度货币数免费档更新频率历史数据无需信用卡
Finexly1,000 次/月170+实时
exchangerate.host100 次/月170+每日
Frankfurter无限,无需密钥~30每日(欧洲央行)
ExchangeRate-API1,500 次/月161每日仅付费
Open Exchange Rates1,000 次/月200+每小时(USD 基准)仅付费
Fixer100 次/月170+每小时(EUR 基准)仅付费
CurrencyLayer100 次/月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 分钟才刷新一次。

端点就是常见的四个——latesthistoricaltimeseriesconvert——采用统一一致的响应结构,详见 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&currencies=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

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 →