Free Metals Price API with no card and no trial clock
Live gold, silver, platinum, palladium and copper prices as JSON. The free tier allows 200 requests a month, roughly 7 a day, and it never turns into a trial.
The free plan
200 requests a month
- Price
- $0, no card, no expiry
- Per month
- 200 weight for the account (200 spot calls)
- Per minute
- 10 weight for the key
- API keys
- 1
- Data
- Live spot for 13 metals, exchange rates for 32 currencies, market status, instruments
- Credit link
- Required wherever the prices appear publicly
Plans
Start free, upgrade when you need more
Free
Live spot prices for a personal site or a weekend project
No card, just a credit link
- Per month
- 200requests, all keys
- Per minute
- 10weight, per key
- 1 API key
- 30 days, daily history
- Live spot prices
Starter
Live and historical metal prices for a small site or app
$7.50/mo
- Per month
- 10,000requests, all keys
- Per minute
- 20weight, per key
- 2 API keys
- 1 year history
- Metals + 1yr history
Basic
Every market price, plus history and news, for products and scripts
$24.17/mo
- Per month
- 250,000requests, all keys
- Per minute
- 30weight, per key
- 3 API keys
- 1 year history
- All prices + 1yr history
Pro
Exchange data most metals APIs don't carry: inventory, COT, premiums
$82.50/mo
- Per month
- 1,000,000requests, all keys
- Per minute
- 200weight, per key
- 10 API keys
- 5 years history
- COMEX, COT, Shanghai + 5yr
Ultimate
The full record: gold and silver daily since 1966, bulk downloads, every dataset and no monthly cap
$207.50/mo
- Per month
- No cap
- Per minute
- 1,000weight, per key
- 25 API keys
- Daily back to 1966 history
- Bulk CSV, GFEX, supply, news AI
Enterprise
Everything in Ultimate, plus an uptime SLA, a support response time, higher limits and redistribution rights by agreement
$833.33/mo
- Per month
- No cap
- Per minute
- 3,000weight, per key
- 50 API keys
- Daily back to 1966 history
- Redistribution + 99.9% SLA
Custom terms or redistribution rights? Contact us
Every feature, plan by plan, is on the pricing page.
What you get
What the free tier includes, and what it doesn't
Included free
- Live spot prices for gold, silver, platinum, palladium and copper
- Aluminium, nickel, zinc and lead
- Steel, lithium and uranium
- 24-hour change, high and low on every quote, with an indicative bid and ask
- Prices in any of 32 currencies, per gram, kilo, tola or troy ounce, and by karat for gold
- Exchange rates for 32 currencies, and a conversion endpoint
- Market status, so you know whether a venue is open
- The full instrument catalogue, 1,100 plus symbols
Needs a paid plan
- Intraday candles and history beyond 30 days, from Starter ($9 a month)
- News, crypto, ETFs and indices
- COMEX, LBMA, Shanghai and India exchange data
- CFTC positioning, funding rates and bullion dealer premiums
Quickstart
Your first request
Gold price API in cURL
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/prices"Every tracked metal comes back in one response; gold is under data.XAU.
Gold price API in Python
import requests
res = requests.get(
"https://api.metalcharts.org/v1/prices",
headers={"Authorization": "Bearer mc_live_YOUR_KEY"},
timeout=10,
)
res.raise_for_status()
price = res.json()["data"]["XAU"]["price"]
print(f"Gold: ${price}")Uses requests. raise_for_status turns a 401 or 429 into an exception rather than letting a bad payload through.
Gold price API in JavaScript
const res = await fetch(
"https://api.metalcharts.org/v1/prices",
{ headers: { Authorization: "Bearer mc_live_YOUR_KEY" } },
);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const { data } = await res.json();
console.log(`Gold: ${data.XAU.price}`);Native fetch, so it runs in Node 18 and above. Keep the key on your server; proxy browser requests through it.
Gold price API in PHP
<?php
$ch = curl_init("https://api.metalcharts.org/v1/prices");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer mc_live_YOUR_KEY"],
CURLOPT_TIMEOUT => 10,
]);
$body = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($code !== 200) {
throw new RuntimeException("MetalCharts API returned $code");
}
$data = json_decode($body, true);
echo "Gold: " . $data["data"]["XAU"]["price"];Plain cURL with no dependencies. Check the status code, because a failed call still returns a parseable body.
Gold price API in Go
req, _ := http.NewRequest(
http.MethodGet, "https://api.metalcharts.org/v1/prices", nil,
)
req.Header.Set("Authorization", "Bearer mc_live_YOUR_KEY")
resp, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
var out struct {
Data map[string]struct {
Price float64 `json:"price"`
} `json:"data"`
}
if err := json.NewDecoder(resp.Body).Decode(&out); err != nil {
return err
}
fmt.Println("Gold:", out.Data["XAU"].Price)Decoding into a narrow struct keeps the compiler honest about the field you actually use.
Limits
Exactly how the free limits work
01
What a request costs
Every call costs weight. Spot prices, market status, instruments and most other endpoints cost 1. History and news cost 2. News search and sentiment cost 3. Checking your own usage at /v1/usage costs 0. Both limits are counted in weight, so a 10,000 allowance is 10,000 spot calls or 5,000 history calls.
02
The per-minute limit is per key
Each API key has its own per-minute limit, counted in fixed one-minute windows that reset at the start of every minute (UTC). Go over it and that key gets a 429 with a Retry-After header giving the seconds until the next minute. Your other keys are unaffected.
03
The monthly allowance is per account
On plans that have one, the monthly allowance is shared by all of your keys and counted per calendar month in UTC. It resets at 00:00 UTC on the 1st. We email you at 80% and 100% of it. Requests keep working to 10% past it; after that every request returns a 429 saying the monthly quota is exceeded, until the reset or until you upgrade.
04
What counts and what doesn't
Every request with a valid key for data your plan includes counts toward both limits. A request refused with a 429 counts toward the per-minute limit, so a key that keeps retrying stays refused, but not toward the monthly allowance. A request with a missing or invalid key (401), or for data your plan doesn't include (403), counts toward neither.
05
No surprise bills
Going over a limit never charges you and never upgrades your plan. You change plans yourself from the pricing page or the API console: an upgrade charges only the difference for the rest of the billing period, a downgrade credits the unused time to your next invoices, and the new limits apply to your keys within 20 seconds.
06
Every response tells you where you stand
Responses carry X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used and X-RateLimit-Reset for the current minute. On plans with a monthly allowance they also carry X-RateLimit-Month-Limit, X-RateLimit-Month-Remaining, X-RateLimit-Month-Used, X-RateLimit-Month-Grace-Limit (where refusals start) and X-RateLimit-Month-Reset.
The one condition
Show a credit link where the prices are public
<a href="https://metalcharts.org" target="_blank" rel="noopener">Metal prices by MetalCharts</a>FAQ
Free API questions
Is the metals API really free?
How many requests does the free tier allow?
What happens when I reach 200 requests?
What is not included in the free tier?
Do I need a credit card for the free tier?
How does this compare to other free metals APIs?
Can I use the free tier commercially?
Guides