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,651.69−0.15%ETH2,354.86−0.04%
全部文章
白银API教程

白银价格 API:以 JSON 获取实时与历史 XAG 价格

使用白银价格 API 获取以盎司、克或千克计、支持 57 种货币的实时与历史 XAG 价格,附代码示例、缓存技巧和实际应用场景。

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

白银价格 API 能为您提供什么

白银价格 API 以结构化数据(通常是通过 HTTPS 传输的 JSON)返回白银的当前价格和历史价格,让网店、应用或报表无需从网站上复制数字即可使用。在 MetalAPI 中,白银的代码为 XAG,即 ISO 4217 中代表 1 金衡盎司白银的代码。它的实时价格是现货价:批发市场买入价与卖出价报价的中间值。

白银与黄金共用同一个 API,但它有自己的特点:它按金衡盎司报价,却以克和千克买卖;它的每克价格低到连取整都会产生影响;银器和废银的买家考虑的是成色,而不是 K 数。本指南介绍白银特有的请求和细节:

  • 用一次请求获取实时白银价格,以及如何解读它。
  • 以盎司、克和千克计的白银价格。
  • 以其他货币计的白银价格,同样只需一次请求。
  • 可追溯到 2000 年的白银历史价格。
  • 应用场景:金银条商店、银器和废银回收商,以及投资应用。

如何通过 API 获取实时白银价格

创建免费账户,并在控制台中添加一个 API 密钥。密钥以 mk_live_ 开头。请将密钥保存在环境变量中并通过请求头发送,然后用 XAG 请求 /latest:

bash
export METALAPI_KEY="mk_live_your_key_here"

curl "https://metalapi.com/api/v1/latest?base=USD&currencies=XAG" \
  -H "X-API-Key: $METALAPI_KEY"

响应如下所示。这些数字是 MetalAPI 文档中通用的示例数值,并非实时价格:

响应示例
{
  "success": true,
  "timestamp": 1792713600,
  "date": "2026-10-23",
  "base": "USD",
  "rates": {
    "XAG": 0.01853911754,
    "USDXAG": 53.94
  }
}

USDXAG 是 1 金衡盎司白银以基础货币计的价格,本例中为 53.94 美元。XAG 是其倒数,即每美元可买到的白银金衡盎司数,保留它是为了兼容外汇类 API。请始终读取带前缀的键:如果把 rates.XAG 当作价格,页面上就会显示 0.0185 而不是 53.94。

timestamp 是数据的时间,而不是您发出请求的时间。现货白银在工作日全天候交易,每周五 17:00 至周日 17:00(纽约时间)休市,因此在周末 API 会持续返回周五的收盘价。请在价格旁边显示时间戳,尤其是在周六和周日。

如果您还需要黄金、铂金或钯金,请把它们加到同一个请求中:currencies=XAU,XAG,XPT,XPD。无论返回多少个品种,一次请求只计一次。

以盎司、克和千克计的白银价格

除非传入 unit,白银价格均按金衡盎司(31.1034768 克)计。支持的取值有 troy_oz(默认)、gram、kilogram、ounce、pound、metric_ton 和 short_ton;当单位不是默认值时,响应会增加一个顶层的 unit 字段:

bash
curl "https://metalapi.com/api/v1/latest?currencies=XAG&unit=kilogram" \
  -H "X-API-Key: $METALAPI_KEY"

按每金衡盎司 53.94 美元的示例价格,白银的价格如下:

计价单位美元典型用途
金衡盎司(31.1035 克)53.94现货报价、银币和银章
克1.7342首饰、银器、废银
千克1,734.21千克银条、批发、印度的报价
托拉(11.6638 克)20.23南亚和海湾地区
常衡盎司49.16几乎从不适用于白银

unit=ounce 及其简写 oz 表示 28.35 克的常衡盎司。每金衡盎司的白银价格比每常衡盎司的价格高约 9.7%。如需现货报价,请省略 unit 或传入 troy_oz。

对于白银,有两个习惯值得养成。第一,每克价格要显示更多小数位:按 1.7342 美元计算,两位小数会掩盖大部分日常波动,因此通常保留四位。第二,如果您要显示多种单位,请只请求一次金衡盎司价格并在本地换算,而不是每种单位各请求一次。换算系数都是精确值:

silver-units.mjs
const GRAMS_PER_TROY_OZ = 31.1034768;

const res = await fetch("https://metalapi.com/api/v1/latest?currencies=XAG", {
  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 perOz = data.rates[`${data.base}XAG`]; // 文档示例中为 53.94
const perGram = perOz / GRAMS_PER_TROY_OZ; // 1.7342...
const perKg = perGram * 1000; // 1734.21...

console.log({ perOz, perGram: perGram.toFixed(4), perKg: perKg.toFixed(2) });

金衡盎司、克与千克列出了所有换算系数(包括英钱),以及适用于发票的取整规则。

以其他货币计的白银价格

设置 base 即可以其他货币为白银计价:base=EUR 返回 EURXAG,base=INR 返回 INRXAG。结合 unit,下面的请求返回以欧元/克计的价格:

bash
curl "https://metalapi.com/api/v1/latest?base=EUR&currencies=XAG&unit=gram" \
  -H "X-API-Key: $METALAPI_KEY"
响应示例
{
  "success": true,
  "timestamp": 1792765800,
  "date": "2026-10-23",
  "base": "EUR",
  "unit": "gram",
  "rates": {
    "XAG": 0.6713138244,
    "EURXAG": 1.489616277
  }
}

要以多种货币显示白银价格,一次请求仍然足够。以 USD 为基础货币请求白银和这些货币,然后做除法:以欧元计的白银价格为 USDXAG ÷ USDEUR,因为 USDEUR 是 1 欧元的美元价格。所有数值都来自同一快照,因此结果与 base=EUR 返回的数值一致。按文档中 1 欧元兑 1.1642 美元的示例汇率,53.94 ÷ 1.1642 得到每金衡盎司 46.33 欧元,即每克 1.4896 欧元,与上面的结果相同:

silver_currencies.py
import os

import requests

GRAMS_PER_TROY_OZ = 31.1034768
CURRENCIES = ["EUR", "GBP", "INR", "TRY"]

resp = requests.get(
    "https://metalapi.com/api/v1/latest",
    params={"base": "USD", "currencies": ",".join(["XAG", *CURRENCIES])},
    headers={"X-API-Key": os.environ["METALAPI_KEY"]},
    timeout=10,
)
data = resp.json()
if not data["success"]:
    err = data["error"]
    raise RuntimeError(f"MetalAPI {err['code']} ({err['type']}): {err['info']}")

rates = data["rates"]
silver_usd = rates["USDXAG"]
for cur in ["USD", *CURRENCIES]:
    per_oz = silver_usd if cur == "USD" else silver_usd / rates["USD" + cur]
    print(f"{cur}: {per_oz:,.2f} per troy oz, {per_oz / GRAMS_PER_TROY_OZ:,.4f} per gram")

57 种受支持货币中的任何一种都可以这样处理,黄金、铂金和钯金也同样适用,因此一次调用就能为整个价格看板提供数据。在印度,白银通常按千克报价,base=INR&unit=kilogram 可以直接给出当地熟悉的数字。

通过 API 获取白银历史价格

白银历史数据从 2000 年开始,使用与实时价格相同的参数和响应格式。每天的数值是当天的收盘价,日期以 UTC 为准。以下四个端点可以满足大多数需求:

  • /YYYY-MM-DD、/historical?date= 或 /yesterday:某一天的收盘价。对于周末或节假日,返回最近一个交易日的收盘价。
  • /timeframe:start_date 与 end_date 之间的每日收盘价,单次请求最多 30 天(Free)或 365 天(付费套餐)。
  • /change:两个日期之间的起始价、结束价、绝对变化和百分比变化。
  • /ohlc:某一天的开盘价、最高价、最低价和收盘价。
bash
# 2024 年 1 月 15 日收盘时的白银价格(文档示例中 USDXAG 为 23.162)
curl "https://metalapi.com/api/v1/2024-01-15?currencies=XAG" \
  -H "X-API-Key: $METALAPI_KEY"

# 2026 年 9 月以欧元/克计的每日白银收盘价
curl "https://metalapi.com/api/v1/timeframe?start_date=2026-09-01&end_date=2026-09-30&base=EUR&currencies=XAG&unit=gram" \
  -H "X-API-Key: $METALAPI_KEY"

# 500 克白银在 2026 年 10 月 1 日收盘时的欧元价值
curl "https://metalapi.com/api/v1/convert?from=XAG&to=EUR&amount=500&unit=gram&date=2026-10-01" \
  -H "X-API-Key: $METALAPI_KEY"

过去日期的收盘价不会改变,因此请存储下来,而不要重复请求。付费套餐的单次区间上限为 365 天,回填自 2000 年以来的完整数据只需每年一次 /timeframe 请求。请注意,2026 年 10 月之前的金属价格源自近月期货,因此可能与同一天的现货价略有差异。

通过 API 获取黄金和白银历史价格提供了完整的回填脚本、存储与校验建议,以及一张同时展示金价和金银比的图表。

白银价格 API 的应用场景

金银条商店和钱币经销商。交易商以高于现货的价格卖出,以低于现货的价格回购。典型的售价是每金衡盎司现货价格乘以纯银含量,加上产品溢价,再加上每件商品的固定费用。请为每个产品单独存储溢价,按套餐的更新间隔刷新现货价格,并向客户显示价格的最后更新时间。在 Standard 及以上套餐中,可以把 XAG-BID 和 XAG-ASK 加入 currencies,直接根据市场自身的价差报出买卖双边价格。现货价、买入价、卖出价与价差介绍了交易商如何将这些数字转换为买入和卖出报价。

银器、首饰和废银回收商。银制品按重量和成色计价,成色即纯银所占的千分比。常见的成色有 999(纯银)、958(不列颠银)、925(标准纯银,sterling)和 800(常见于欧洲大陆的老式银器)。熔化价值 = 克重 × 成色 × 每克价格。按每克 1.7342 美元的示例价格,一个 500 克的 925 银托盘含 462.5 克白银,价值约 802.07 美元。废银回收商按熔化价值的一定百分比付款,因此请把这个百分比设为可配置项,而不是写死的常量。

MetalAPI 的 K 金端点 /carat 只适用于黄金,因此白银成色需要您自行计算:

melt.mjs
const GRAMS_PER_TROY_OZ = 31.1034768;

/** 银制品的熔化价值:克重 × 成色(例如 0.925)× 每克价格。 */
export function meltValue(grams, fineness, pricePerTroyOz) {
  return grams * fineness * (pricePerTroyOz / GRAMS_PER_TROY_OZ);
}

meltValue(500, 0.925, 53.94); // 802.07…  按示例价格计算的 925 银托盘
meltValue(1000, 0.999, 53.94); // 1732.48… 1 千克 999 银条

投资和投资组合应用。用户持有银币、银章和千克银条,希望以自己的货币查看其价值。请在内部以金衡盎司存储持仓,只在输入时换算一次单位,并以用户的货币作为 base 来评估投资组合。/change 返回两个日期之间的百分比变动,适用于“本月白银涨跌”这类显示,而从 /timeframe 获取并存储的每日收盘价则可以用来绘制图表。

价格提醒。如果您只需要在白银突破某个价位时作出响应,价格提醒可以监控以任意货币计的 XAG,并从 Lite 套餐起通过电子邮件、从 Advanced 套餐起通过签名 Webhook 通知您,您无需自行轮询。

数据新鲜度、配额与套餐

白银价格的新鲜程度取决于套餐。以高于套餐更新频率的频率轮询,只会再次拿到相同的数字:

套餐月费每月请求数价格更新
Free$0100每日
Lite$4.991,000每 30 分钟
Standard$11.9910,000每 10 分钟,另含买入价/卖出价
Advanced$24.9950,000每分钟
Pro$49.99100,000每分钟,另含实时流
Ultra 和 Business$99.99 和 $149.99500,000每 15 秒
Enterprise$299.991,500,000每 5 秒
  • 缓存时间至少等于更新间隔。在 Free 套餐中,每天一次请求就足以获取当前价格。
  • 在一次调用中请求所有金属。currencies=XAU,XAG,XPT,XPD 只算一次请求;分四次调用则算四次。
  • 将密钥保存在服务器上。向页面提供缓存的价格,而不是从每位访客的浏览器调用 API。
  • 免费查看用量。/usage 和 /symbols 从不计入配额,且每个响应都带有 rate_limit 部分。

准备好开始构建了吗?创建免费账户,一分钟内即可获得 API 密钥,无需信用卡。请在定价页面比较各套餐的更新间隔和配额,并以 API 文档作为所有端点和参数的参考。

常见问题

白银在价格 API 中的代码是什么?

XAG,即 ISO 4217 中代表 1 金衡盎司白银的代码。在 MetalAPI 中,以基础货币计的白银价格对应由两个代码组合而成的键,例如表示美元/盎司的 USDXAG 或表示欧元/盎司的 EURXAG。

有免费的白银价格 API 吗?

有。MetalAPI 的 Free 套餐包含白银、所有其他品种和完整的历史数据,每月 100 次请求,价格每日更新,且无需信用卡。付费套餐起价为每月 $4.99,提供 30 分钟更新和 1,000 次请求。

如何获取每克白银价格?

传入 unit=gram,或将每金衡盎司价格除以 31.1034768。不要除以 28.35:那是常衡盎司,会把每克价格高估约 9.7%。

白银历史价格可以追溯到多久以前?

所有套餐都提供自 2000 年起的每日白银价格。单次区间请求最多覆盖 30 天(Free)或 365 天(付费套餐)。

为什么交易商的白银价格与 API 价格不同?

API 返回的是批发市场的现货中间价。交易商在卖出时会加上铸造、分销和利润等溢价,回购时则支付低于现货的价格,因此零售银币和银条的价格高于现货,回购价则低于现货。

用您自己的数据试一试

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

继续阅读