Palladium Price API
A REST API for live and historical palladium prices, quoted in US dollars per troy ounce. Spot updates continuously, and the history endpoint returns 5,799 daily bars going back to January 2005. JSON over HTTPS, authenticated with a bearer token, no SDK required.
Get the live palladium price
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \ "https://api.metalcharts.org/v1/prices"
Every tracked metal comes back in one response, so a dashboard showing several does not need several requests. The palladium entry looks like this:
{
"success": true,
"data": {
"XPD": {
"symbol": "XPD",
"price": 4380.04,
"change24h": 2.87,
"changePercent24h": 0.0655,
"high24h": 4380.25,
"low24h": 4377.84,
"exchange": "SPOT",
"timestamp": "2026-09-19T18:58:27.856Z"
}
}
}Spot prices are on the free tier. You need an account and a key, but not a card.
Code examples
Each example fetches the live palladium price and prints it. There is no SDK to install: the API is plain HTTPS returning JSON, so whatever HTTP client you already use will do.
Palladium price 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"]["XPD"]["price"]
print(f"Palladium: ${price}")Uses requests. raise_for_status turns a 401 or 429 into an exception rather than letting a bad payload through.
Palladium price 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(`Palladium: ${data.XPD.price}`);Native fetch, so it runs in Node 18 and above and in the browser. Never ship a key to the browser; proxy through your own server.
Palladium price 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 "Palladium: " . $data["data"]["XPD"]["price"];Plain cURL with no dependencies. Checking the status code matters because a failed call still returns a parseable body.
Palladium price 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("Palladium:", out.Data["XPD"].Price)Decoding into a narrow struct rather than a map keeps the compiler honest about the field you actually use.
Replace mc_live_YOUR_KEY with a key from the API console. The free tier needs an account but not a card.
Historical palladium prices
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \ "https://api.metalcharts.org/v1/history/XPD?range=1Y&interval=1d"
5,799 daily bars are available, the oldest dated 2005-01-02. Set the window with range or explicit start and end dates, and the candle size with interval: 15m, 30m, 45m, 1h, 2h, 4h, 8h, 1d, 1w or 1M. Each point carries open, high, low, close and volume, so it drives a candlestick chart directly.
History depth is what separates the plans. Basic reaches back 1 year, Pro five, and Ultimate returns the full series.
The symbol is XPD. Passing the metal's name instead returns a 400, which is the single most common mistake on first use.
Endpoints carrying palladium
| Endpoint | Returns | Plan |
|---|---|---|
| /v1/prices | Live spot price, bid, ask, 24h change, high and low | Free |
| /v1/history/{symbol} | Daily, weekly and monthly candles, plus 15m to 8h intraday | Basic |
| /v1/ath/{symbol} | All-time high and the date it was set | Basic |
| /v1/instruments | Which symbol each endpoint expects | Free |
Palladium is an industrial metal that trades like a precious one, driven by autocatalyst demand rather than investment flows. Most price APIs either omit it or carry a stale daily close, which is unhelpful for a metal this volatile.
Beyond price, palladium also appears in:
| Endpoint | Returns | Plan |
|---|---|---|
| /v1/gfex/settlement?symbol=pd | Guangzhou Futures Exchange palladium settlement | Ultimate |
| /v1/gfex/premium?symbol=pd | GFEX premium over Western pricing | Ultimate |
| /v1/gfex/receipts?symbol=XPD | GFEX registered warehouse receipts | Ultimate |
| /v1/futures?symbol=XPD | NYMEX futures settlement | Basic |
Plans
Rate limiting is by weight per minute, not a monthly request quota. Most endpoints cost 1 weight and history costs 2. Free is capped at 1,000 weight a month; no paid plan has a monthly ceiling.
Compare plansPalladium API questions
How far back does palladium history go?
5,799 daily bars from January 2005, with NYMEX futures settlement reaching back to 1986 through the futures endpoints.
Why is palladium priced above or below platinum at different times?
They substitute for each other in autocatalysts, so the spread inverts when one becomes uneconomic. Pulling both from one /v1/prices call is the cheapest way to track that spread.
What symbol do I use for palladium?
XPD on the Western endpoints, and pd on the GFEX endpoints.
Other metals
- Gold Price API — 14,425 daily bars
- Silver Price API — 14,488 daily bars
- Platinum Price API — 5,798 daily bars
- Copper Price API — 9,776 daily bars
- All metals, one API