MetalAPI
XAU3,997.89−1.54%XAG53.936−1.51%XPT1,554.47−0.83%XPD1,047.03−0.44%XCU6.5080+2.29%WTI103.27+3.82%BRENT111.70−1.30%EUR1.120400−0.01%GBP1.337500−0.01%JPY0.0063761+0.14%CHF1.213445−0.25%TRY0.020125−0.12%BTC80,703.72−0.09%ETH2,357.31+0.06%
全部文章
黄金API指南

免费黄金价格 API:每月 100 次请求能做什么

如实介绍免费黄金价格 API:MetalAPI Free 套餐包含哪些功能,如何通过缓存和合并请求用好每月 100 次请求,以及何时该升级。

作者:MetalAPI Team··阅读约 9 分钟

免费黄金价格 API 实际能做什么?

免费黄金价格 API 是把真实金价放进原型、个人网站或内部报表的最快方式,无需走采购流程。但人们也很容易对它期望过高。免费套餐的存在,是为了让您构建和测试集成,并运行每天只需一次价格的小型任务。它们并不是为需要逐分钟跟随行情的结账流程而设计的。

本文如实介绍 MetalAPI 的 Free 套餐,包括它不包含的内容。接着说明如何让每月 100 次请求完成相当多的工作,以及如何判断您已经超出了它的能力范围。如果您正在比较多家服务商,文末附近的检查清单适用于任何免费金属 API。

MetalAPI 的免费套餐包含什么?

Free 套餐完全免费,且无需信用卡。概要如下:

功能Free 套餐
价格$0,无需信用卡
请求数每月 100 次,每月 1 日 00:00 UTC 重置
每分钟限制每分钟 10 次请求
价格更新每日:午夜(UTC)一次快照
品种全部 83 个:黄金、白银、铂金、钯金、工业金属、能源、57 种货币和 13 种加密货币
端点/latest、历史单日、/convert、/timeframe、/change 和 /ohlc
历史数据完整:金属和能源自 2000 年起,货币自 1999 年起,加密货币自 2014 年起
单次请求区间/timeframe 和 /change 最多 30 天
货币与单位任意 base 和任意 unit,与所有套餐相同
小组件1 个可嵌入小组件;其页面浏览不消耗配额
支持社区支持

部分功能需要付费套餐:

  • 按 K 数计的黄金价格(来自 /carat):Lite 及以上。在 Free 套餐中,您仍可以根据 24K 价格自行计算 K 金价格。
  • 买入价和卖出价,例如 XAU-BID 和 XAU-ASK:Standard 及以上。
  • 价格提醒:电子邮件提醒从 Lite 起,Webhook 提醒从 Advanced 起。
  • 实时流(通过 Server-Sent Events):Pro 及以上。
  • 可用性 SLA:Business 和 Enterprise。

请求超出套餐范围的功能时,API 会返回错误 106(plan_restriction)并附带 upgrade_url,该请求不计费。Free 套餐同样可以使用 MetalAPI MCP 服务器,因此 AI 助手可以用您的免费配额查询金价,数据同样每日更新。

免费黄金价格 API 多久更新一次?

上表中最重要的一行是更新频率。在 Free 套餐中,API 每天在午夜(UTC)获取一次价格快照,直到下一个午夜之前,每次 /latest 请求返回的都是这一快照。响应如下所示,使用的是 MetalAPI 文档中的示例数值:

Free 套餐响应示例
{
  "success": true,
  "timestamp": 1792713600,
  "date": "2026-10-23",
  "base": "USD",
  "rates": {
    "XAU": 0.0002501319446,
    "USDXAU": 3997.89
  },
  "rate_limit": {
    "limit": 100,
    "remaining": 99,
    "reset": 1793491200,
    "used": 1,
    "plan": "Free",
    "reset_date": "2026-11-01T00:00:00.000Z"
  }
}

USDXAU 是 1 金衡盎司黄金的美元价格,XAU 是其倒数。timestamp 是数据的时间,这里是 2026 年 10 月 23 日 00:00 UTC;rate_limit 部分显示本月配额还剩多少。

由此可以得出两点结论。第一,在 Free 套餐中每天多次调用 /latest 只会消耗配额,永远拿不到更新的价格。第二,Free 套餐适合那些每天一次的价格恰好就是正确价格的任务:

  • 每日评估持仓、库存或投资组合的价值。
  • 日终报表、新闻简报和内部数据看板。
  • 需要某一天金价的会计和发票。
  • 原型、学生项目,以及在选择套餐前学习 API。

它不适合在日内为黄金商品重新定价的网店、交易界面,或任何向客户承诺实时价格的场景。

每月 100 次请求够用多久?

每次成功调用数据端点都计为一次请求,无论返回多少个品种。正是这条规则让少量配额也能派上用场。一个小型网站切合实际的月度预算如下:

任务每月请求数
每天获取一次您所展示的全部品种的最新价格28–31
一年的每日黄金历史数据,每次请求一个自然月(仅一次)12
历史查询,例如发票日期当天的价格10–20
开发和测试剩余部分,约 35

相比之下,以下做法并不合适:

  • 每小时刷新一次:每月约 744 次请求,而价格每天只变化一次。
  • 黄金、白银、铂金和钯金每天各请求一次:约 124 次,而合并为一次请求只需 31 次。
  • 每次页面浏览都从浏览器调用 API:一百次访问就会用完整月的配额。

用好免费配额的七种方法

  1. 在一次调用中请求所有品种。currencies=XAU,XAG,XPT,XPD,EUR,GBP 只算一次请求。省略 currencies 会返回全部品种,同样只算一次请求。
  2. 缓存到下一个午夜(UTC)。在 Free 套餐中,在此之前没有更新的数据可以获取。请保留最后一次成功的响应,并在调用失败时继续提供它。
  3. 在本地换算。克和千克与金衡盎司之间是精确的倍数关系(1 金衡盎司 = 31.1034768 克),交叉汇率也来自同一快照:以欧元计的金价为 USDXAU ÷ USDEUR。一次以美元/盎司计的请求就能满足您展示的所有单位和货币。
  4. 历史数据只存一次。过去的收盘价不会改变。请一次性获取一个区间,保存在数据库或文件中,之后只请求新的日期。
  5. 发送前先校验。校验错误(代码 201 至 210)和 300(无结果)都会计为请求。请先检查日期和品种;/symbols 列出了所有有效代码,且从不计入配额。
  6. 在服务器端调用。写在浏览器代码中的密钥对所有人可见,而且每位访客都会消耗一次请求。请在服务器上获取数据并提供缓存结果,或者嵌入小组件,其页面浏览不消耗您的配额。
  7. 关注计数器。每个响应都带有 rate_limit 部分和 X-RateLimit-* 响应头,/usage 也会返回相同的数字且不计费。因速率限制(104)、套餐限制(106)、来源限制(107)和服务器错误而被拒绝的请求同样不计费,因此重试这些请求不会产生任何消耗。

综合起来,Free 集成的核心就是一个定时任务。下面的 Node.js 脚本每天在午夜(UTC)之后不久运行一次,只发出一次请求,并将黄金、白银、铂金和钯金以三种货币计的每盎司和每克价格写入一个 JSON 文件,供您的页面读取:

daily-prices.mjs
// 每天 00:00 UTC 之后运行一次,例如使用 cron:5 0 * * *(服务器时钟为 UTC)
import { writeFile } from "node:fs/promises";

const GRAMS_PER_TROY_OZ = 31.1034768;
const METALS = ["XAU", "XAG", "XPT", "XPD"];
const CURRENCIES = ["EUR", "GBP"];

const params = new URLSearchParams({ base: "USD", currencies: [...METALS, ...CURRENCIES].join(",") });
const res = await fetch(`https://metalapi.com/api/v1/latest?${params}`, {
  headers: { "X-API-Key": process.env.METALAPI_KEY },
  signal: AbortSignal.timeout(10_000),
});
const data = await res.json();
if (!data.success) {
  // 保留昨天的文件,让页面继续显示最后一次成功获取的价格。
  throw new Error(`MetalAPI ${data.error.code} (${data.error.type}): ${data.error.info}`);
}

const prices = {};
for (const metal of METALS) {
  const usdPerOz = data.rates[`USD${metal}`];
  prices[metal] = {};
  for (const cur of ["USD", ...CURRENCIES]) {
    const perOz = cur === "USD" ? usdPerOz : usdPerOz / data.rates[`USD${cur}`];
    prices[metal][cur] = { perOz, perGram: perOz / GRAMS_PER_TROY_OZ };
  }
}

await writeFile("prices.json", JSON.stringify({ asOf: data.timestamp, prices }, null, 2));
console.log(`Saved. ${data.rate_limit.remaining} requests left this month.`);

按每天运行一次计算,该任务每月使用 28 到 31 次请求,其余配额留给历史数据和测试。在 Serverless 平台上,请将结果写入键值存储或框架的数据缓存,而不是文件。

对于历史数据,30 天的区间限制意味着每个自然月需要一次请求:一年的每日金价需要 12 次请求。通过 API 获取黄金和白银历史价格提供了回填脚本和存储建议;在 Free 套餐中,请将其中按年划分的区间改为按自然月划分。

如何评估任何免费黄金价格 API

如果您正在比较免费金属 API,醒目的宣传数字远不如细节重要。以下问题值得向任何服务商(包括我们)问清楚:

  • 免费数据有多新?是实时、延迟还是每日更新?每个响应是否注明了价格的时间?
  • 什么算一次请求?一次调用获取多个品种算一次,还是每个品种各算一次?失败或被拒绝的调用是否计费?
  • 包含哪些端点?只有最新价格,还是也包括历史数据、换算和时间序列?
  • 历史数据有多长,按什么区间获取?数据最早可追溯到何时,单次区间请求最多可以覆盖多少天。
  • 单位和货币。是否支持克、千克和您的本地货币,还是只有以美元计的金衡盎司价格?
  • 使用条款。数据能否用于商业网站?哪些用途被排除在外?
  • 达到上限时会怎样?是直接停止并返回明确的错误,还是自动收费?升级多快生效?
  • 密钥处理。密钥能否通过请求头传递,而不是放在会被记入日志的 URL 中?

然后用您自己的品种和货币进行一次简短的实际测试,一个免费密钥就足够了。如何选择贵金属价格 API将这些问题整理成了一份完整的检查清单,并附有对比模板。

对 MetalAPI 而言,答案就在上文和文档中:Free 套餐提供带 timestamp 的每日快照;每次调用计为一次请求,无论返回多少个品种;因速率限制、套餐、来源和服务器错误被拒绝的请求不计费;包含历史数据、换算和时间序列;支持任意单位和 57 种货币中的任意一种;数据可用于您自己的网站、应用和报表,包括向用户展示价格,但不得再分发原始数据源;达到配额时直接停止并返回错误 105,没有超额费用;密钥可放在请求头或查询字符串中。

何时从免费套餐升级

只要每天一次的价格就是合适的价格,并且 100 次请求足够您用一个月,Free 套餐就够用。以下是它不再够用的常见信号:

您需要提供该功能的最低套餐月费
比每天一次更新鲜的价格Lite:每 30 分钟$4.99
每月超过 100 次请求Lite:1,000 次请求$4.99
单次请求超过 30 天的区间Lite:365 天$4.99
来自 /carat 的 K 金价格、电子邮件提醒Lite$4.99
每 10 分钟更新的价格、买入价和卖出价Standard$11.99
每 1 分钟更新的价格、Webhook 提醒Advanced$24.99
实时流Pro$49.99
可用性 SLABusiness$149.99

升级立即生效,因此遇到错误 105(quota_exceeded)的密钥在更换套餐后会马上恢复可用;否则需要等到每月 1 日重置。按年付费最多可节省 25%。定价页面提供最新价格和完整对比,速率限制与套餐详细解释了配额和每分钟限制。

要判断 Free 套餐是否满足您的项目,最快的方法就是亲自试用。创建免费账户,从控制台复制 API 密钥,然后按照快速入门指南发出第一个请求。无需信用卡,当项目需要更新鲜的价格时,您可以随时切换到付费套餐。

常见问题

有完全免费的黄金价格 API 吗?

有。MetalAPI 的 Free 套餐完全免费,无需信用卡,包含黄金、白银、铂金、钯金及所有其他品种,每月 100 次请求,价格每日更新一次。

免费套餐多久更新一次金价?

每天一次。Free 套餐使用在午夜(UTC)获取的一次快照,直到下一个午夜之前,每次请求都返回相同的价格。付费套餐中,Lite 每 30 分钟更新一次,Enterprise 最快每 5 秒更新一次。

可以在商业网站上使用免费黄金价格 API 吗?

使用 MetalAPI 可以。数据可用于您自己的网站、应用、内部系统和报表,包括向用户展示价格。再分发原始数据源(例如将其作为您自己的 API 提供)则需要另行签订书面协议。

用完 100 次请求后会怎样?

后续请求会返回错误 105(quota_exceeded)和 HTTP 状态码 429,直到配额在每月 1 日 00:00 UTC 重置。不会自动收取超额费用,升级套餐可立即解除限制。

免费套餐包含黄金历史价格吗?

包含。Free 密钥可以查询完整的历史数据(黄金最早可追溯到 2000 年),并可使用 /timeframe 和 /change,单次请求区间最长 30 天。

用您自己的数据试一试

创建免费账户,两分钟内即可发起第一次请求。每月 100 次请求,无需信用卡。

继续阅读