無料の金価格API:月100リクエストでできること
無料の金価格APIを正直に解説します。MetalAPIのFreeプランの内容、キャッシュとまとめ取得で月100リクエストを有効に使う方法、アップグレードの目安を紹介します。
無料の金価格APIで現実的に何ができるか?
無料の金価格APIは、購買手続きなしにプロトタイプ、趣味のサイト、社内レポートへ実際の金価格を取り込む最も手早い方法です。ただし、期待しすぎてしまいがちでもあります。無料プランは、連携を構築してテストしたり、1日1回の価格で足りる小規模な処理を動かしたりするためのものです。市場を分単位で追う必要がある決済処理を支えるようには設計されていません。
この記事では、MetalAPIのFreeプランを、含まれない機能も含めてありのままに説明します。そのうえで、月100リクエストで驚くほど多くの作業をこなす方法と、Freeプランでは足りなくなったことを見極める方法を紹介します。複数のプロバイダーを比較している場合は、終盤のチェックリストがどの無料の金属APIにも使えます。
MetalAPIの無料プランには何が含まれるか?
Freeプランは無料で、クレジットカードも不要です。概要は次のとおりです:
| 機能 | Freeプラン |
|---|---|
| 料金 | $0、クレジットカード不要 |
| リクエスト数 | 月100回。毎月1日00:00(UTC)にリセット |
| 1分あたりの上限 | 1分あたり10リクエスト |
| 価格の更新 | 毎日:UTCの午前0時に1回スナップショットを取得 |
| シンボル | 全83種類:金、銀、プラチナ、パラジウム、産業用金属、エネルギー、57通貨、13の暗号資産 |
| エンドポイント | /latest、過去の日付、/convert、/timeframe、/change、/ohlc |
| 履歴 | 全期間:金属とエネルギーは2000年から、通貨は1999年から、暗号資産は2014年から |
| 1リクエストあたりの期間 | /timeframeと/changeで最大30日 |
| 通貨と単位 | すべてのプランと同様に、任意のbaseと任意のunit |
| ウィジェット | 埋め込みウィジェット1個。ページビューはクォータを消費しません |
| サポート | コミュニティサポート |
一部の機能には有料プランが必要です:
- カラット別の金価格(
/carat):Lite以上。Freeでも、24Kの価格からカラット別の価格を自分で計算することはできます。 - Bid価格とAsk価格(
XAU-BIDやXAU-ASKなど):Standard以上。 - 価格アラート:メールはLiteから、WebhookはAdvancedから。
- リアルタイムストリーミング(Server-Sent Events):Pro以上。
- 稼働率SLA:BusinessとEnterprise。
プランの対象外の機能をAPIでリクエストすると、upgrade_url付きのエラー106(plan_restriction)が返され、そのリクエストは課金されません。FreeプランはMetalAPI MCPサーバーでも使えるため、AIアシスタントに無料のクォータで金価格を調べてもらうこともできます。更新頻度は同じく1日1回です。
無料の金価格APIの更新頻度は?
表の中で最も重要なのは更新間隔の行です。Freeでは、APIはUTCの午前0時に1日1回価格のスナップショットを取得し、次の午前0時までのすべての/latestリクエストがそのスナップショットを返します。MetalAPIのドキュメントの例の値を使ったレスポンスは次のとおりです:
{
"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ブロックは、その月のクォータの残りを示します。
ここから2つのことが言えます。第一に、Freeで/latestを1日に2回以上呼び出しても、新しい価格は一切返されず、クォータを消費するだけです。第二に、Freeは1日1回の価格で十分な用途に向いています:
- 保有資産、在庫、ポートフォリオの日次評価。
- 日終わりのレポート、ニュースレター、社内ダッシュボード。
- 特定の日の金価格が必要な会計や請求書。
- プロトタイプ、学生のプロジェクト、プランを選ぶ前のAPIの学習。
日中に金製品の価格を改定するショップ、トレーディング画面、顧客にリアルタイム価格を約束するものには向いていません。
月100リクエストでどこまでできるか?
データエンドポイントへの呼び出しは、成功すれば返されるシンボルの数にかかわらず1リクエストとしてカウントされます。このルールがあるからこそ、小さなクォータでも実用になります。小規模なサイトの現実的な月間予算は次のとおりです:
| タスク | 月間リクエスト数 |
|---|---|
| 表示するすべてのシンボルの最新価格を1日1回取得 | 28~31 |
| 金の日次履歴1年分を、1リクエストにつき1暦月ずつ取得(1回のみ) | 12 |
| 過去の価格の参照(請求日の価格など) | 10~20 |
| 開発とテスト | 残り、約35 |
一方、次のような使い方は収まりません:
- 1時間ごとの更新:1日1回しか変わらない価格のために、月に約744リクエスト。
- 金、銀、プラチナ、パラジウムを金属ごとに1日1リクエスト:約124リクエスト。まとめて1リクエストにすれば31で済みます。
- ページビューのたびにブラウザからAPIを呼び出す:100回の訪問で1か月分を使い切ります。
無料のクォータを有効に使う7つの方法
- すべてのシンボルを1回の呼び出しで取得する。
currencies=XAU,XAG,XPT,XPD,EUR,GBPは1リクエストです。currenciesを省略するとすべてのシンボルが返され、これも1リクエストです。 - 次のUTC午前0時までキャッシュする。 Freeでは、それまでに取得できる新しいデータはありません。最後に成功したレスポンスを保持し、呼び出しが失敗したときはそれを返してください。
- ローカルで換算する。 グラムやキログラムはトロイオンスの正確な倍数で(1トロイオンス=31.1034768 g)、クロスレートは1つのスナップショットから求められます。ユーロ建ての金価格は
USDXAU÷USDEURです。1オンスあたりの米ドル建て価格を1回リクエストすれば、表示するすべての単位と通貨をまかなえます。 - 履歴は一度だけ保存する。 過去の終値は変わりません。期間を一度取得してデータベースやファイルに保存し、新しい日付だけをリクエストしてください。
- 送信前に検証する。 バリデーションエラー(コード
201~210)と300(結果なし)はリクエストとしてカウントされます。日付とシンボルは事前に確認してください。/symbolsはすべての有効なコードを一覧にしており、クォータには一切カウントされません。 - 呼び出しはサーバー側で行う。 ブラウザのコードに含めたキーは誰からも見え、訪問者ごとにリクエストを消費します。サーバーで取得してキャッシュした結果を返すか、ページビューがクォータを消費しないウィジェットを埋め込んでください。
- カウンターを監視する。 すべてのレスポンスに
rate_limitブロックとX-RateLimit-*ヘッダーが含まれ、/usageは課金されずに同じ数値を返します。レート制限(104)、プラン制限(106)、オリジン(107)、サーバーエラーによる拒否も課金されないため、これらの再試行にコストはかかりません。
これらを組み合わせると、Free連携の中核は1つのスケジュールジョブになります。次のNode.jsスクリプトはUTCの午前0時を少し過ぎた頃に1日1回実行され、1回のリクエストで金、銀、プラチナ、パラジウムの1オンスあたりと1グラムあたりの価格を3つの通貨で取得し、ページが読み込むJSONファイルに書き込みます:
// 00:00 UTC以降に1日1回実行する(例: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.`);1日1回の実行なら、このジョブが使うのは月28~31リクエストで、残りは履歴とテストに回せます。サーバーレスのプラットフォームでは、ファイルの代わりにキーバリューストアやフレームワークのデータキャッシュに結果を書き込んでください。
履歴については、期間の上限が30日なので、1暦月につき1リクエストになります。金の日次価格1年分は12リクエストです。APIで金・銀の過去価格を取得するには、バックフィル用のスクリプトと保存のヒントを掲載しています。Freeでは、スクリプトの1年単位の期間を暦月単位に変更してください。
無料の金価格APIを評価する方法
無料の金属APIを比較する場合、目立つ数字よりも細部のほうが多くを物語ります。次の問いは、当社を含め、どのプロバイダーについても確認する価値があります:
- 無料データの鮮度は? リアルタイム、遅延、日次のどれか。各レスポンスに価格の時刻が示されているか。
- 何がリクエストとしてカウントされるか? 多数のシンボルを1回の呼び出しで取得できるか、シンボルごとに1回か。失敗した呼び出しや拒否された呼び出しは課金されるか。
- どのエンドポイントが含まれるか? 最新価格だけか、履歴、換算、時系列も含まれるか。
- 履歴はどこまで、どの単位で取得できるか? データがどこまで遡れるか、1回の期間リクエストで何日分を取得できるか。
- 単位と通貨。 グラム、キログラム、現地通貨に対応しているか、米ドル建てのトロイオンスのみか。
- 利用規約。 商用サイトにデータを掲載できるか、何が禁止されているか。
- 上限に達したらどうなるか? 明確なエラーで停止するか、自動で課金されるか。アップグレードはどれくらいで反映されるか。
- キーの扱い。 ログに残りやすいURLではなく、ヘッダーでキーを送れるか。
そのうえで、自分のシンボルと通貨を使って短い実地テストをしてください。それには無料のキーで十分です。貴金属価格APIの選び方では、これらの問いを比較用テンプレート付きの完全なチェックリストにまとめています。
MetalAPIの答えは、上記とドキュメントに記載しています。Freeではtimestamp付きの日次スナップショット。返されるシンボルの数にかかわらず1回の呼び出しで1リクエスト。レート制限、プラン、オリジン、サーバーエラーによる拒否は課金なし。履歴、換算、時系列を含む。任意の単位と57通貨のいずれにも対応。自社のウェブサイト、アプリ、レポートでのデータ利用が可能で、ユーザーへの価格表示も含まれるが、元のフィードの再配布は不可。クォータに達するとエラー105で停止し、超過料金はなし。キーはヘッダーでもクエリ文字列でも送信できます。
無料プランからアップグレードするタイミング
1日1回の価格で十分で、月100リクエストに収まる限り、Freeプランで足ります。足りなくなったときによく見られるサインは次のとおりです:
| 必要なもの | 対応する最小のプラン | 月額料金 |
|---|---|---|
| 1日1回より新しい価格 | Lite:30分ごと | $4.99 |
| 月100回を超えるリクエスト | Lite:1,000リクエスト | $4.99 |
| 1リクエストあたり30日を超える期間 | Lite:365日 | $4.99 |
/caratによるカラット別価格、メールアラート | Lite | $4.99 |
| 10分ごとの価格、Bid/Ask | Standard | $11.99 |
| 1分ごとの価格、Webhookアラート | Advanced | $24.99 |
| リアルタイムストリーミング | Pro | $49.99 |
| 稼働率SLA | Business | $149.99 |
アップグレードはすぐに反映されるため、エラー105(quota_exceeded)に達したキーも、プランを変更すればすぐに再び使えるようになります。変更しない場合は、毎月1日のリセットを待つことになります。年払いにすると最大25%お得です。最新の料金と詳しい比較は料金ページに、クォータと1分あたりの上限の詳細はレート制限とプランに掲載しています。
Freeで足りるかどうかを確かめる一番の近道は、実際に試すことです。無料アカウントを作成し、ダッシュボードからAPIキーをコピーして、スタートガイドに沿って最初のリクエストを送ってみてください。クレジットカードは不要で、より新しい価格が必要になったらいつでも有料プランに切り替えられます。
よくある質問
完全に無料の金価格APIはありますか?
はい。MetalAPIのFreeプランは無料でクレジットカードも不要です。金、銀、プラチナ、パラジウムをはじめすべてのシンボルを、月100リクエスト、1日1回の価格更新で利用できます。
無料プランでは金価格はどれくらいの頻度で更新されますか?
1日1回です。FreeプランではUTCの午前0時に取得された1つのスナップショットが使われ、次の午前0時まではどのリクエストも同じ価格を返します。有料プランでは、Liteで30分ごと、Enterpriseでは最短5秒ごとに更新されます。
無料の金価格APIを商用サイトで使えますか?
MetalAPIなら使えます。データは、自社のウェブサイト、アプリ、社内システム、レポートで利用でき、ユーザーへの価格表示も可能です。元のフィードを再配布する場合、たとえば自社のAPIとして提供する場合には、別途書面による契約が必要です。
100リクエストを使い切るとどうなりますか?
毎月1日00:00(UTC)にクォータがリセットされるまで、以降のリクエストはHTTPステータス429とエラー105(quota_exceeded)を返します。自動の超過料金は発生せず、アップグレードすればすぐに上限が引き上げられます。
無料プランで金の過去価格を取得できますか?
はい。Freeのキーでも全期間の履歴(金は2000年まで遡れます)を照会でき、/timeframeと/changeを1リクエストあたり最大30日の期間で利用できます。
関連記事
XAU/USDの意味:XAU・XAG・XPT・XPDが表すもの
XAU/USDの意味を解説します。金にISO 4217の通貨コードがある理由、XAG・XPT・XPDの意味、価格やAPIデータでの表示方向の読み方までわかります。
Pythonで金価格APIを使う:価格の取得、キャッシュ、グラフ化
Pythonで金価格APIを使う方法を解説します。requestsでの最新価格の取得、エラー処理とリトライ、レスポンスのキャッシュ、pandasの時系列とmatplotlibによるグラフ化まで紹介します。
JavaScriptで金価格APIを使う:Node.js、TypeScript、Next.js
JavaScriptで金価格APIから金価格を取得する方法。async/awaitとfetch、TypeScriptのレスポンス型、キャッシュ付きのExpress・Next.jsルート、APIキーの安全な扱い方を解説します。