1 month free: no ads plus full access.

MetalCharts API reference

All 61 endpoints of the MetalCharts metals price API on one page: what each returns, the parameters it takes, the fields in its response, and a request you can run. It is generated from the same OpenAPI document the API serves.

Basics

Base URL, authentication and formats

Live and historical prices for precious and base metals, plus the exchange data behind them: COMEX warehouse inventory and deliveries, LBMA vaults and clearing, Shanghai SGE and SHFE, India MCX premiums, Guangzhou GFEX warehouse receipts, and CFTC Commitments of Traders positioning. Commercial use is permitted on every plan including the free tier, which allows 200 requests a month. On the free tier, any public display of the data must show a visible link to https://metalcharts.org, such as "Metal prices by MetalCharts"; free-tier responses carry an X-Attribution header saying so. Paid plans need no link. Authenticate with the header Authorization: Bearer mc_live_..., or, from a spreadsheet or another tool that can't send headers, with api_key=mc_live_... on a GET request. Add format=csv to /v1/prices, /v1/history and other list endpoints for CSV. From the Pro plan, /v1/stream/prices pushes live prices as Server-Sent Events.
Base URL
https://api.metalcharts.org
Authentication
Send your key in a header: Authorization: Bearer mc_live_YOUR_KEY
Formats
JSON by default. Add format=csv to any endpoint whose response is a list to get the same rows as CSV.
Free tier
200 requests a month, no card required. Commercial use is allowed on every plan.
Plans
Free $0, Starter $9/month, Basic $29/month, Pro $99/month, Ultimate $249/month, Enterprise $1,200/month.
Errors
400 for an invalid parameter, 401 for a missing or invalid key, 403 when the request needs a higher plan or reaches past the plan's history, 429 when a key is over its per-minute limit. Error bodies are JSON.
Machine-readable
OpenAPI 3.0 document, and a hosted MCP server for AI assistants

Quick start

Your first request

One call to /v1/prices returns every metal. The same request in five languages:

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.

Index

All 61 endpoints

Each links to its parameters, response fields and example request below.

Spot prices and conversion

Price history

Exchange and regional data

Positioning, rates and reference data

Markets, indices and instruments

Commodities

Cryptocurrencies

ETFs

News and sentiment

Prices

Spot prices and conversion

Live prices for every metal in one request, in any supported currency, mass unit or gold karat.

Latest spot prices

GET/v1/prices

Latest spot prices for all supported assets (precious and base metals plus key benchmarks) in a single call, keyed by symbol. Prices are in US dollars per each market's own unit unless currency, unit or karat say otherwise; every quote states the currency and unit it is in, and a converted response carries the fx rate used (ECB reference rate). karat returns gold only, at nominal purity karat/24.

ParameterInTypeDescription
symbolsquerystring
currencyquerystringISO 4217 code to quote in. Default USD. One of: USD, EUR, GBP, JPY, CHF, AUD, CAD, CNY, INR, SGD, HKD, NZD, SEK, NOK, DKK, MXN, BRL, ZAR, TRY, PLN, CZK, HUF, RON, ISK, ILS, KRW, IDR, MYR, PHP, THB, AED, SAR. Example: EUR
unitquerystringMass unit to quote per: toz, g, kg, lb, mt, tola (toz is the troy ounce; oz is accepted as an alias). Default: the market's own unit. Example: g
karatquerystringGold only: price 24, 23, 22, 21, 20, 18, 16, 15, 14, 12, 10, 9, 8-karat gold at nominal purity karat/24 (24K is the spot price). Example: 22

Returns: Spot prices keyed by metal symbol.

Response fieldTypeDescription
successboolean
dataobjectKeyed by metal symbol. Without a symbols filter it covers XAU, XAG, XPT, XPD, HG, ALI, NI, ZN, PB, JBP, CO, LC, UXA; a metal with no stored price is left out.
countnumber
sourcestring
cacheAgenumber or null
isStaleboolean
timestampstring (date-time)
_ridstringRequest id, for support.
currencystringCurrency of every quote in this response.
fxobjectPresent when prices were converted from US dollars.
data.<key>object
data.<key>.symbolstring
data.<key>.pricenumber
data.<key>.change24hnumber or null
data.<key>.changePercent24hnumber or null
data.<key>.high24hnumber or null
data.<key>.low24hnumber or null
data.<key>.exchangestring
data.<key>.marketTypestring
data.<key>.timestampstring (date-time)
data.<key>.open24hnumber or null
data.<key>.bidnumber or nullIndicative bid, a fixed spread below the mid price.
data.<key>.asknumber or nullIndicative ask, a fixed spread above the mid price.
data.<key>.stalebooleanTrue when this quote's feed hasn't updated for more than five days.
data.<key>.currencystringCurrency the price fields are in.
data.<key>.unitstringMass unit the price is per.
data.<key>.karatnumberWith karat: the karat priced.
data.<key>.puritynumberWith karat: nominal purity, karat/24.
fx.ratenumberUnits of currency per US dollar.
fx.datestringDate of the rate.
fx.sourcestring
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/prices"

Live price stream (Server-Sent Events)

GET/v1/stream/prices

Pushes spot prices as they change, as Server-Sent Events over HTTPS. The first event is snapshot with every requested quote ({"data": {"XAU": quote}, "timestamp"}); after that each change arrives as a price event ({"symbol": "XAU", ...quote}), and a : ping comment line keeps the connection open every 15 seconds. Quotes have the same fields as /v1/prices and honour currency, unit and karat the same way. Gold, silver, platinum and palladium update every few seconds while the market is open. The server closes a connection after an hour; reconnect when it does (EventSource clients do this on their own). Included from the Pro plan (1 connection); Ultimate allows 10 at once and Enterprise 50. Opening a connection counts as one request.

ParameterInTypeDescription
symbolsquerystringComma-separated metal symbols. Default: all of XAU, XAG, XPT, XPD, HG, ALI, NI, ZN, PB, JBP, CO, LC, UXA. Example: XAU,XAG
currencyquerystringISO 4217 code to quote in. Default USD. One of: USD, EUR, GBP, JPY, CHF, AUD, CAD, CNY, INR, SGD, HKD, NZD, SEK, NOK, DKK, MXN, BRL, ZAR, TRY, PLN, CZK, HUF, RON, ISK, ILS, KRW, IDR, MYR, PHP, THB, AED, SAR. Example: EUR
unitquerystringMass unit to quote per: toz, g, kg, lb, mt, tola (toz is the troy ounce; oz is accepted as an alias). Default: the market's own unit. Example: g
karatquerystringGold only: price 24, 23, 22, 21, 20, 18, 16, 15, 14, 12, 10, 9, 8-karat gold at nominal purity karat/24 (24K is the spot price). Example: 22

Returns: An event stream (text/event-stream).

curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/stream/prices"

List supported metals

GET/v1/metals

Reference list of supported metals with their names, categories, and units.

ParameterInTypeDescription
sortquerystring
orderquerystring

Returns: Every tracked metal with its latest price.

Response fieldTypeDescription
successboolean
dataobject
data.itemsarray of object
data.sparklinesobjectRecent price points per symbol, for inline charts.
data.items[].symbolstring
data.items[].namestring
data.items[].pricenumber
data.items[].categorystring or null
data.items[].unitstring or null
data.items[].change24hnumber or null
data.items[].change7dnumber or null
data.items[].high24hnumber or null
data.items[].low24hnumber or null
data.items[].updatedAtstring (date-time) or null
data.sparklines.<key>array of number
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/metals"

Convert between metals, currencies and units

GET/v1/convert

Converts an amount between a metal, a currency and a mass unit: 10 g of gold in euros (from=XAU&to=EUR&amount=10&unit=g), how much silver 1,000 rupees buys (from=INR&to=XAG&unit=g), euros to yen, or grams to troy ounces. Metal prices are live spot (or the close on date), currency rates are ECB reference rates. karat prices gold at nominal purity karat/24. A date counts as history: Free reaches 30 days back, paid plans their history depth.

ParameterInTypeDescription
fromrequiredquerystringA metal symbol (XAU), a currency (EUR) or a unit (g). Example: XAU
torequiredquerystringA metal symbol, a currency or a unit. Example: EUR
amountquerystringQuantity of from. Default 1. Example: 10
unitquerystringFor a metal: the unit its quantity is in (toz, g, kg, lb, mt, tola). Default: the metal's own unit. Example: g
karatquerystringFor gold to or from a currency: karat purity (karat/24). Example: 22
datequerystringYYYY-MM-DD: convert at that day's closing price and ECB rate instead of live. Counts as history for plan limits. Example: 2025-01-15

Returns: The converted amount and the rate used.

Response fieldTypeDescription
successboolean
resultnumber
ratenumber
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/convert?from=XAU&to=EUR"

History

Price history

Daily bars back to 1966 for gold and silver, and intraday bars down to 15 minutes.

Price history for a metal

GET/v1/history/{symbol}

Historical price series for a metal. Symbols are the metal codes, not names: XAU (gold), XAG (silver), XPT (platinum), XPD (palladium), HG (copper), plus ALI, NI, ZN, PB, JBP, CO, LC and UXA.GOLD is not valid here; it belongs to /v1/markets. Use the range parameter (for example 1M, 6M, 1Y or ALL; MAX is accepted as a synonym for ALL) or a start date to set the window; start overrides range, and end (used only with start) defaults to now. interval picks the candle size. Supported intervals are 15m, 30m, 45m, 1h, 2h, 4h, 8h, 1d, 1w and 1M; intraday intervals read the interval candle tables and 1w/1M are aggregated from daily candles. Prices are in US dollars per the market's own unit unless currency, unit or karat say otherwise; each point is converted at the ECB reference rate in force on its date (FX history starts 1999-01-04, and earlier points are left out of a converted series). The response states the currency and unit it is in.

ParameterInTypeDescription
symbolrequiredpathstringExample: XAU
rangequerystring
intervalquerystring
startquerystring
endquerystring
currencyquerystringISO 4217 code to quote in. Default USD. One of: USD, EUR, GBP, JPY, CHF, AUD, CAD, CNY, INR, SGD, HKD, NZD, SEK, NOK, DKK, MXN, BRL, ZAR, TRY, PLN, CZK, HUF, RON, ISK, ILS, KRW, IDR, MYR, PHP, THB, AED, SAR. Example: EUR
unitquerystringMass unit to quote per: toz, g, kg, lb, mt, tola (toz is the troy ounce; oz is accepted as an alias). Default: the market's own unit. Example: g
karatquerystringGold only: price 24, 23, 22, 21, 20, 18, 16, 15, 14, 12, 10, 9, 8-karat gold at nominal purity karat/24 (24K is the spot price). Example: 22

Returns: OHLC series, oldest first.

Response fieldTypeDescription
successboolean
dataarray of object
symbolstring
rangestring
startDatestring
endDatestring
countnumber
sourcestring
exchangestring or null
_ridstringRequest id, for support.
data[].timestampstring (date-time)
data[].pricenumberSame as close. Kept for older consumers.
data[].opennumber
data[].highnumber
data[].lownumber
data[].closenumber
data[].volumenumber0 where the source publishes no volume.
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/history/XAU"

Bulk daily history download

GET/v1/bulk/historyFrom Ultimate

Every daily bar for the requested metals, back to the start of each series (October 1966 for gold and silver), as one CSV file with columns symbol, date, open, high, low, close, volume, currency, unit. currency and unit convert as on /v1/history (FX history starts 1999-01-04, so a converted file starts there). For an initial load or a nightly sync. Requires the Ultimate plan.

ParameterInTypeDescription
symbolsquerystringComma-separated metal codes. Default: all of XAU, XAG, XPT, XPD, HG, ALI, NI, ZN, PB, JBP, CO, LC, UXA. Example: XAU,XAG
currencyquerystringISO 4217 code to quote in. Default USD. One of: USD, EUR, GBP, JPY, CHF, AUD, CAD, CNY, INR, SGD, HKD, NZD, SEK, NOK, DKK, MXN, BRL, ZAR, TRY, PLN, CZK, HUF, RON, ISK, ILS, KRW, IDR, MYR, PHP, THB, AED, SAR. Example: EUR
unitquerystringMass unit to quote per: toz, g, kg, lb, mt, tola (toz is the troy ounce; oz is accepted as an alias). Default: the market's own unit. Example: g

Returns: CSV file.

curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/bulk/history"

Regional

Exchange and regional data

COMEX inventory and deliveries, LBMA vaults and clearing, Shanghai (SGE and SHFE), Guangzhou (GFEX) and India.

Latest Shanghai prices and premiums

GET/v1/shanghai

Latest Shanghai Gold Exchange spot prices and premium to Western pricing. price is USD per troy ounce, priceCNY is in the exchange's native unit (CNY/kg for silver, CNY/g for gold), and exchangeRate is USD/CNY. Shanghai silver prices (SGE and SHFE) include China's VAT and are returned as quoted; priceExVat, priceCNYExVat and premiumPercentExVat strip it at vatRate, and vatInclusive says whether a price carries VAT. Gold carries none, so its ex-VAT fields equal the raw ones.

ParameterInTypeDescription
symbolsquerystring
typequerystring
seriesquerystring
Response fieldTypeDescription
successboolean
dataobject
countnumber
sourcestring
seriesstring
cacheAgenumber
isStaleboolean
timestampstring (date-time)
data.XAUobject
data.XAGobject
data.XAU.symbolstring
data.XAU.exchangestring
data.XAU.marketTypestring
data.XAU.pricenumber
data.XAU.priceCNYnumber
data.XAU.timestampstring (date-time)
data.XAU.exchangeRatenumber
data.XAU.sourcestring
data.XAU.vatInclusiveboolean
data.XAU.vatRatenumber
data.XAU.priceExVatnumber
data.XAU.priceCNYExVatnumber
data.XAU.premiumPercentnumber
data.XAU.premiumPercentExVatnumber
data.XAG.symbolstring
data.XAG.exchangestring
data.XAG.marketTypestring
data.XAG.pricenumber
data.XAG.priceCNYnumber
data.XAG.timestampstring (date-time)
data.XAG.exchangeRatenumber
data.XAG.sourcestring
data.XAG.vatInclusiveboolean
data.XAG.vatRatenumber
data.XAG.priceExVatnumber
data.XAG.priceCNYExVatnumber

2 more nested fields are in the OpenAPI document.

curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/shanghai"

Shanghai silver premium history

GET/v1/shanghai/historyFrom Pro

Historical Shanghai silver premium series versus Western pricing. shanghai and premiumPercent use the SGE silver price as quoted, which includes China's VAT; shanghaiExVat and premiumPercentExVat strip it at the rate in force on each date (13% since 2019-04-01, 16% from 2018-05-01, 17% before). Requires the Pro plan or higher.

ParameterInTypeDescription
rangequerystring
seriesquerystring
startquerystring
endquerystring
Response fieldTypeDescription
successboolean
dataarray of object
vatInclusiveboolean
countnumber
sourcestring
seriesstring
rangeobject
requestedRangeobject
data[].datestring (date)
data[].premiumnumber or null
data[].premiumPercentnumber or null
data[].premiumPercentExVatnumber or null
data[].shanghainumber
data[].shanghaiExVatnumber
data[].westernnumber or null
range.minDatestring (date)
range.maxDatestring (date)
range.totalRecordsnumber
requestedRange.startstring (date)
requestedRange.endstring (date)
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/shanghai/history"

Shanghai gold price history

GET/v1/shanghai/gold/historyFrom Pro

Historical Shanghai gold price series. Gold carries no VAT, so shanghaiExVat and premiumPercentExVat equal the raw values. Requires the Pro plan or higher.

ParameterInTypeDescription
rangequerystring
seriesquerystring
startquerystring
endquerystring
Response fieldTypeDescription
successboolean
dataarray of object
vatInclusiveboolean
countnumber
sourcestring
seriesstring
rangeobject
requestedRangeobject
data[].datestring (date)
data[].premiumnumber or null
data[].premiumPercentnumber or null
data[].premiumPercentExVatnumber or null
data[].shanghainumber
data[].shanghaiExVatnumber
data[].westernnumber or null
range.minDatestring (date)
range.maxDatestring (date)
range.totalRecordsnumber
requestedRange.startstring (date)
requestedRange.endstring (date)
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/shanghai/gold/history"

IBJA gold rate

GET/v1/india/ibjaFrom Pro

The India Bullion and Jewellers Association benchmark gold rate for 999 fine gold, in rupees per gram, one value per day. Requires the Pro plan or higher; depth follows the plan's history limit.

ParameterInTypeDescription
rangequerystringOne of 1M, 3M, 6M, 1Y, 2Y, 5Y, ALL. Default 1M.
typequerystringlatest: the newest rate only. Example: latest

Returns: Daily rates, oldest first.

Response fieldTypeDescription
successboolean
dataarray of object
data[].datestring
data[].pricenumber
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/india/ibja"

Latest India MCX prices and premiums

GET/v1/india

Latest MCX India spot prices and premium to Western pricing.

ParameterInTypeDescription
symbolsquerystring
freshquerystring
Response fieldTypeDescription
successboolean
dataobject
futuresobject
futuresMapobject
countnumber
sourcestring
cacheAgenumber
isStaleboolean
lastUpdatedstring (date-time)
timestampstring (date-time)
data.XAUobject
data.XAGobject
data.XAU.symbolstring
data.XAU.indiaSymbolstring
data.XAU.pricenumber
data.XAU.priceRawnumber
data.XAU.unitstring
data.XAU.unitRawstring
data.XAU.premiumnumber
data.XAU.premiumPercentnumber
data.XAU.sourcestring
data.XAU.timestampstring (date-time)
data.XAG.symbolstring
data.XAG.indiaSymbolstring
data.XAG.pricenumber
data.XAG.priceRawnumber
data.XAG.unitstring
data.XAG.unitRawstring
data.XAG.premiumnumber
data.XAG.premiumPercentnumber
data.XAG.sourcestring
data.XAG.timestampstring (date-time)
futures.symbolstring
futures.pricenumber
futures.priceINRnumber
futures.timestampstring (date-time)

13 more nested fields are in the OpenAPI document.

curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/india"

India MCX premium history

GET/v1/india/historyFrom Pro

Historical MCX India premium series versus Western pricing. Requires the Pro plan or higher.

ParameterInTypeDescription
rangequerystring
symbolquerystring
startquerystring
endquerystring
Response fieldTypeDescription
successboolean
dataarray of object
countnumber
symbolstring
rangeobject
requestedRangeobject
data[].datestring (date)
data[].indianumber or null
data[].indiaINRnumber or null
data[].premiumnumber or null
data[].premiumPercentnumber or null
data[].westernnumber or null
range.minDatestring (date)
range.maxDatestring (date)
range.totalRecordsnumber
requestedRange.startobject or null
requestedRange.endstring (date)
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/india/history"

SHFE settlement prices

GET/v1/shfe/settlementFrom Pro

Shanghai Futures Exchange settlement price history for a metal. Requires the Pro plan or higher. Every response carries asOf, ageDays and a stale flag, so you can tell a current series from one that has stopped updating without inspecting the array.

ParameterInTypeDescription
symbolrequiredquerystringRequired. cu, al, zn, pb, ni, sn, au or ag.
rangequerystringOne of 1M, 3M, 6M, 1Y, 5Y or ALL. Defaults to 1Y. ALL returns the whole series, and MAX is accepted as a synonym for it.
typequerystring
Response fieldTypeDescription
successboolean
symbolstring
rangestring
asOfstring (date)
ageDaysnumber
staleboolean
countnumber
dataarray of object
data[].datestring (date)
data[].totalnumber
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/shfe/settlement"

SHFE warehouse inventory

GET/v1/shfe/inventoryFrom Pro

Shanghai Futures Exchange warehouse inventory history for a metal. Requires the Pro plan or higher. Every response carries asOf, ageDays and a stale flag, so you can tell a current series from one that has stopped updating without inspecting the array.

ParameterInTypeDescription
symbolrequiredquerystringRequired. cu, al, zn, pb, ni, sn, au or ag.
rangequerystringOne of 1M, 3M, 6M, 1Y, 5Y or ALL. Defaults to 1Y. ALL returns the whole series, and MAX is accepted as a synonym for it.
typequerystring
Response fieldTypeDescription
successboolean
symbolstring
rangestring
asOfstring (date)
ageDaysnumber
staleboolean
countnumber
dataarray of object
data[].datestring (date)
data[].totalnumber
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/shfe/inventory"

COMEX warehouse inventory

GET/v1/comex/inventoryFrom Pro

COMEX warehouse inventory history for a metal symbol: exchange-wide registered, eligible and total per day. type=latest returns the newest day with the previous day's figures; type=depositories returns the newest day per depository, with that day's received, withdrawn and adjustment figures. For per-depository history use /v1/comex/depositories. Requires the Pro plan or higher. Every response carries asOf, ageDays and a stale flag, so you can tell a current series from one that has stopped updating without inspecting the array.

ParameterInTypeDescription
symbolrequiredquerystringRequired. Metal symbol: XAU, XAG, HG, XPT, XPD, ALI, ZN or PB (availability varies by endpoint).
rangequerystringOne of 1M, 3M, 6M, 1Y, 5Y or ALL. Defaults to 1Y. ALL returns the whole series, and MAX is accepted as a synonym for it.
typequerystring
Response fieldTypeDescription
successboolean
symbolstring
rangestring
asOfstring (date)
ageDaysnumber
staleboolean
countnumber
dataarray of object
data[].datestring (date)
data[].eligiblenumber or null
data[].registerednumber or null
data[].totalnumber
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/comex/inventory"

COMEX stocks and flows by depository

GET/v1/comex/depositoriesFrom Pro

Daily COMEX warehouse stocks and flows per depository, laid out like CME's metal depository statistics report: for registered, eligible and total metal, the previous stock, received, withdrawn, net change, adjustment and today's stock. Rows are per report date, with activityDate giving the business day the movements happened. Received, withdrawn and adjustment are null on report dates before flowsAvailableFrom; stocks go back to February 2026 for most metals. Use /v1/comex/inventory for the exchange-wide totals, which go back to 1992 for gold and silver. Requires the Pro plan or higher.

ParameterInTypeDescription
symbolrequiredquerystringRequired. Metal symbol: XAU, XAG, HG, XPT, XPD, ALI, ZN or PB.
rangequerystringOne of 1M, 3M, 6M, 1Y, 5Y or ALL. Defaults to 1M. ALL returns the whole series, and MAX is accepted as a synonym for it. Ignored when start or end is given.
startquerystringFirst report date, YYYY-MM-DD.
endquerystringLast report date, YYYY-MM-DD. Defaults to today.
depositoryquerystringCase-insensitive part of a depository name, e.g. jp morgan, brink or hsbc.
Response fieldTypeDescription
successboolean
symbolstring
unitstring or null
rangestring or null
startstring (date) or null
endstring (date)
flowsAvailableFromstring (date) or null
asOfstring (date) or null
ageDaysnumber or null
staleboolean
countnumber
dataarray of object
data[].datestring (date)CME report date.
data[].activityDatestring (date) or null
data[].depositorystring
data[].registeredobject
data[].eligibleobject
data[].totalobject
data[].registered.previousnumber or null
data[].registered.receivednumber or null
data[].registered.withdrawnnumber or null
data[].registered.netChangenumber or null
data[].registered.adjustmentnumber or null
data[].registered.todaynumber or null
data[].eligible.previousnumber or null
data[].eligible.receivednumber or null
data[].eligible.withdrawnnumber or null
data[].eligible.netChangenumber or null
data[].eligible.adjustmentnumber or null
data[].eligible.todaynumber or null
data[].total.previousnumber or null
data[].total.receivednumber or null
data[].total.withdrawnnumber or null
data[].total.netChangenumber or null
data[].total.adjustmentnumber or null
data[].total.todaynumber or null
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/comex/depositories"

COMEX volume and open interest

GET/v1/comex/volume-oiFrom Pro

COMEX volume and open interest for a metal symbol. Requires the Pro plan or higher. Every response carries asOf, ageDays and a stale flag, so you can tell a current series from one that has stopped updating without inspecting the array.

ParameterInTypeDescription
symbolrequiredquerystringRequired. Metal symbol: XAU, XAG, HG, XPT, XPD, ALI, ZN or PB (availability varies by endpoint).
Response fieldTypeDescription
successboolean
symbolstring
dataobject
data.datestring (date)
data.openInterestnumber
data.volumenumber
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/comex/volume-oi"

COMEX delivery notices

GET/v1/comex/delivery-noticesFrom Pro

COMEX delivery notice history for a metal symbol. Requires the Pro plan or higher. Every response carries asOf, ageDays and a stale flag, so you can tell a current series from one that has stopped updating without inspecting the array.

ParameterInTypeDescription
typequerystring
symbolrequiredquerystringRequired. Metal symbol: XAU, XAG, HG, XPT, XPD, ALI, ZN or PB (availability varies by endpoint).
rangequerystringOne of 1M, 3M, 6M, 1Y, 5Y or ALL. Defaults to 1Y. ALL returns the whole series, and MAX is accepted as a synonym for it.
yearquerystring
datequerystring
Response fieldTypeDescription
successboolean
symbolstring
rangestring
asOfstring (date)
ageDaysnumber
staleboolean
countnumber
dataarray of object
data[].dailyIssuednumber
data[].dailyStoppednumber
data[].datestring (date)
data[].exchangestring
data[].mtdCumulativenumber or null
data[].settlementPriceobject or null
data[].symbolstring
data[].ytdCumulativenumber or null
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/comex/delivery-notices"

SGE contract trading history

GET/v1/sge/tradingFrom Pro

Shanghai Gold Exchange contract trading history. Requires the Pro plan or higher.

ParameterInTypeDescription
contractrequiredquerystringRequired. Au99.99, Au99.95, Au(T+D), mAu(T+D), Ag(T+D) or Ag99.99.
rangequerystringOne of 1M, 3M, 6M, 1Y, 5Y or ALL. Defaults to ALL. ALL returns the whole series, and MAX is accepted as a synonym for it.
typequerystring
Response fieldTypeDescription
successboolean
contractstring
rangestring
asOfstring (date)
ageDaysnumber
staleboolean
countnumber
dataarray of object
data[].datestring (date)
data[].totalnumber
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/sge/trading"

SGE gold and silver benchmark fixings

GET/v1/sge/benchmarkFrom Pro

Shanghai Gold Exchange AM and PM benchmark fixings for gold or silver, one row per trading day dated in Shanghai time. Gold is in CNY per gram, silver in CNY per kilogram. New fixings are fetched on weekdays at 03:00 and 07:00 UTC, shortly after each auction. Requires the Pro plan or higher.

ParameterInTypeDescription
metalrequiredquerystringRequired. gold or silver.
rangequerystringOne of 1Y, 2Y, 5Y or ALL. Defaults to ALL. ALL returns the whole series, and MAX is accepted as a synonym for it.
typequerystring
Response fieldTypeDescription
successboolean
metalstring
rangestring
asOfstring (date)
ageDaysnumber
staleboolean
countnumber
dataarray of object
data[].amPricenumber
data[].datestring (date)
data[].pmPricenumber
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/sge/benchmark"

SGE vault inventory

GET/v1/sge/inventoryFrom Pro

Shanghai Gold Exchange vault inventory history. Every response carries asOf, ageDays and a stale flag, so you can tell current inventory from an archived series without inspecting the array. Coverage is uneven and worth knowing before you build on it: silver vault stock updates normally, but the exchange feed has only ever produced ten gold vault-stock observations and the most recent is from January 2016, so metal=gold returns an archive rather than a current series. Requires the Pro plan or higher.

ParameterInTypeDescription
metalrequiredquerystringRequired. gold or silver. Example: silver
rangequerystringOne of 1Y, 2Y, 5Y or ALL. Defaults to ALL. ALL returns the whole series, and MAX is accepted as a synonym for it. Example: 1Y
typequerystringExample: latest
Response fieldTypeDescription
successboolean
metalstring
rangestring
asOfstring (date)
ageDaysnumber
staleboolean
countnumber
dataarray of object
data[].datestring (date)
data[].totalnumber
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/sge/inventory?metal=silver"

GFEX platinum and palladium settlement prices

GET/v1/gfex/settlementFrom Ultimate

GFEX settlement price history for platinum or palladium. Requires the Ultimate plan.

ParameterInTypeDescription
symbolrequiredquerystringRequired. pt or pd.
rangequerystringOne of 1M, 3M, 6M, 1Y or ALL. Defaults to ALL. ALL returns the whole series, and MAX is accepted as a synonym for it.
typequerystring
Response fieldTypeDescription
successboolean
symbolstring
rangestring
asOfstring (date)
ageDaysnumber
staleboolean
countnumber
dataarray of object
data[].datestring (date)
data[].totalnumber
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/gfex/settlement"

GFEX premium over Western prices

GET/v1/gfex/premiumFrom Ultimate

GFEX platinum and palladium premium history versus Western pricing. Requires the Ultimate plan.

ParameterInTypeDescription
symbolquerystring
rangequerystringOne of 1M, 3M, 6M, 1Y or ALL. Defaults to 1Y. ALL returns the whole series, and MAX is accepted as a synonym for it.
Response fieldTypeDescription
successboolean
dataarray of object
countnumber
symbolstring
cnyRatenumber
requestedRangeobject
data[].datestring (date)
data[].gfexnumber
data[].premiumnumber or null
data[].premiumPercentnumber or null
data[].westernnumber or null
requestedRange.startstring (date)
requestedRange.endstring (date)
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/gfex/premium"

GFEX warehouse receipts

GET/v1/gfex/receiptsFrom Ultimate

GFEX registered warehouse receipts, per warehouse and per day. Covers lithium carbonate (LC), industrial silicon (SI) and polysilicon (PS), which is Chinese battery and solar supply-chain inventory published only in Chinese, plus platinum (XPT) and palladium (XPD). The default response is the per-warehouse breakdown for the most recent date, or an explicit date. Pass type=totals for the exchange-wide daily series instead. Warehouse names are the exchange's own and are passed through unaltered, because they are identifiers you match against exchange notices. Requires the Ultimate plan.

ParameterInTypeDescription
symbolrequiredquerystringRequired. LC, SI, PS, XPT or XPD. Example: LC
typequerystringExample: totals
datequerystringExample: 2026-09-17
startquerystringExample: 2026-01-01
endquerystringExample: 2026-09-17
Response fieldTypeDescription
successboolean
symbolstring
asOfstring (date)
totalnumber
countnumber
dataarray of object
data[].cancellednumber
data[].changenumber
data[].datestring (date)
data[].quantitynumber
data[].registerednumber
data[].warehousestring
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/gfex/receipts?symbol=LC"

GFEX warehouse receipts coverage

GET/v1/gfex/receipts/coverageFrom Ultimate

Which symbols the GFEX receipts dataset covers, how many warehouses each spans, and the date range held. Requires the Ultimate plan.

This endpoint takes no parameters.

Response fieldTypeDescription
successboolean
dataarray of object
data[].fromstring (date)
data[].namestring
data[].symbolstring
data[].tostring (date)
data[].warehousesnumber
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/gfex/receipts/coverage"

LBMA vault holdings

GET/v1/lbma/vaultFrom Pro

LBMA vault holdings history for gold or silver. Requires the Pro plan or higher. Every response carries asOf, ageDays and a stale flag, so you can tell a current series from one that has stopped updating without inspecting the array.

ParameterInTypeDescription
metalrequiredquerystringRequired. gold or silver.
rangequerystringOne of 1Y, 2Y, 5Y or ALL. Defaults to ALL. ALL returns the whole series, and MAX is accepted as a synonym for it.
typequerystring
Response fieldTypeDescription
successboolean
metalstring
rangestring
asOfstring (date)
ageDaysnumber
staleboolean
countnumber
dataarray of object
data[].datestring (date)
data[].totalnumber
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/lbma/vault"

LBMA clearing statistics

GET/v1/lbma/clearingFrom Pro

LBMA clearing statistics for gold or silver. Requires the Pro plan or higher. Every response carries asOf, ageDays and a stale flag, so you can tell a current series from one that has stopped updating without inspecting the array.

ParameterInTypeDescription
metalrequiredquerystringRequired. gold or silver.
rangequerystringOne of 1Y, 2Y, 5Y or ALL. Defaults to ALL. ALL returns the whole series, and MAX is accepted as a synonym for it.
typequerystring
Response fieldTypeDescription
successboolean
metalstring
rangestring
asOfstring (date)
ageDaysnumber
staleboolean
countnumber
dataarray of object
data[].datestring (date)
data[].transfersnumber
data[].valuenumber
data[].volumenumber
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/lbma/clearing"

Analytics

Positioning, rates and reference data

CFTC Commitments of Traders, visible supply, all-time highs, exchange rates, the economic calendar and funding rates.

Exchange rates

GET/v1/currency

Exchange rates for the 32 currencies the API quotes metals in: the US dollar, the ECB reference set and the pegged UAE dirham and Saudi riyal. rates holds units of each currency per one unit of base (USD by default). With date, the rates in force on that day; on weekends and holidays, the last publication before it. timestamp is in milliseconds.

ParameterInTypeDescription
basequerystringCurrency the rates are quoted against. Default USD. Example: EUR
datequerystringYYYY-MM-DD: the ECB reference rates in force that day (history from 1999-01-04). Counts as history for plan limits. Example: 2020-03-02

Returns: Exchange rates keyed by ISO 4217 code.

Response fieldTypeDescription
successboolean
basestring
datestring (date) or null
ratesobjectRate per unit of base, keyed by ISO 4217 code.
timestampnumber or null
sourcestring or null
currenciesarray of object
rates.<key>number
currencies[].codestring
currencies[].namestring or null
currencies[].symbolstring or null
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/currency"

Exchange rate history

GET/v1/currency/history

Daily ECB reference rates for one currency against base (units of currency per one base), one point per ECB publication day, back to 1999-01-04. Depth follows the plan's history limit.

ParameterInTypeDescription
currencyrequiredquerystringThe currency to chart. Example: EUR
basequerystringQuoted against. Default USD. Example: USD
rangequerystringOne of 1M, 3M, 6M, 1Y, 5Y, ALL, MAX. Default 1M. Example: 1Y
startquerystringYYYY-MM-DD; overrides range. Example: 2024-01-01
endquerystringYYYY-MM-DD, used with start. Default today. Example: 2024-12-31

Returns: Daily rates, oldest first.

Response fieldTypeDescription
successboolean
dataarray of object
data[].datestring
data[].ratenumber
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/currency/history?currency=EUR"

Commitments of Traders positioning

GET/v1/cotFrom Pro

COT (Commitments of Traders) positioning history for a metal. Requires the Pro plan or higher.

ParameterInTypeDescription
typequerystring
metalrequiredquerystringRequired. XAU, XAG, HG, XPT or XPD.
rangequerystringOne of 1M, 3M, YTD, 1Y, 5Y, 10Y or ALL. Defaults to 1Y. ALL returns the whole series, and MAX is accepted as a synonym for it.
Response fieldTypeDescription
successboolean
metalstring
rangestring
countnumber
dataarray of object
timestampstring (date-time)
data[].cftcContractCodestring
data[].marketNamestring
data[].metalstring
data[].mmLongnumber
data[].mmNetnumber
data[].mmShortnumber
data[].mmSpreadingnumber
data[].nrLongnumber
data[].nrNetnumber
data[].nrShortnumber
data[].openInterestnumber
data[].orLongnumber
data[].orNetnumber
data[].orShortnumber
data[].orSpreadingnumber
data[].pmLongnumber
data[].pmNetnumber
data[].pmShortnumber
data[].reportDatestring (date)
data[].sdLongnumber
data[].sdNetnumber
data[].sdShortnumber
data[].sdSpreadingnumber
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/cot"

Visible supply and inventory

GET/v1/supplyFrom Ultimate

Visible supply and inventory history for a metal. Requires the Ultimate plan.

ParameterInTypeDescription
typequerystring
metalrequiredquerystringRequired. XAU or XAG.
rangequerystringOne of 1M, 3M, 6M, 1Y, 5Y or ALL. Defaults to 1Y. ALL returns the whole series, and MAX is accepted as a synonym for it.
Response fieldTypeDescription
successboolean
metalstring
rangestring
countnumber
dataarray of object
timestampstring (date-time)
data[].comexEligiblenumber or null
data[].comexRegisterednumber or null
data[].comexTotalnumber
data[].datestring (date)
data[].lbmaTotalnumber
data[].metalstring
data[].sgeTotalobject or null
data[].shfeTotalnumber or null
data[].totalOznumber
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/supply"

All-time high for a metal

GET/v1/ath/{symbol}

All time high price and the date it was recorded. Symbols are metal codes such as XAU, XAG, XPT, XPD and HG, not names like GOLD.

ParameterInTypeDescription
symbolrequiredpathstringExample: XAU
Response fieldTypeDescription
successboolean
dataobject
data.symbolstring
data.pricenumber
data.recordedAtstring (date-time)
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/ath/XAU"

Economic calendar events

GET/v1/economic-calendarFrom Pro

Upcoming and recent macroeconomic calendar events. Requires the Pro plan or higher.

ParameterInTypeDescription
countryquerystring
impactquerystring
daysquerystring
Response fieldTypeDescription
successboolean
dataarray of object
countnumber
sourcestring
timestampstring (date-time)
data[].actualstring or null
data[].countrystring
data[].createdAtstring (date-time)
data[].eventDatestring (date-time)
data[].eventNamestring
data[].forecaststring or null
data[].idstring
data[].impactstring
data[].previousstring or null
data[].sourcestring
data[].updatedAtstring (date-time)
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/economic-calendar"

Latest perpetual funding rates

GET/v1/fundingFrom Pro

Latest perpetual funding rate for every symbol, optionally scoped to one venue. Funding is the periodic payment between longs and shorts that holds a perpetual near spot: a positive rate means longs pay shorts, so the sign and size read directly as crowd positioning. Rates are per-interval decimals, so 0.0000125 is 0.00125%. Coverage includes GOLD and SILVER perps alongside crypto and tokenised equities. Requires the Pro plan or higher.

ParameterInTypeDescription
exchangequerystringExample: HYPERLIQUID
Response fieldTypeDescription
successboolean
countnumber
dataarray of object
data[].exchangestring
data[].fundingRatenumber
data[].premiumnumber
data[].symbolstring
data[].timestring (date-time)
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/funding"

Funding rate venues

GET/v1/funding/venuesFrom Pro

Venues currently publishing funding data, with how many symbols each covers and when it last printed. Requires the Pro plan or higher.

This endpoint takes no parameters.

Response fieldTypeDescription
successboolean
dataarray of object
data[].exchangestring
data[].lateststring (date-time)
data[].symbolsnumber
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/funding/venues"

Funding rate history for a perpetual

GET/v1/funding/{symbol}/historyFrom Pro

Funding rate history for one perpetual, oldest first. Symbols are the venue's own tickers such as BTC, ETH, GOLD, SILVER, NVDA; call /v1/funding for the full list. Set the window with range (1D, 1W, 1M, 3M, 6M, 1Y, ALL) or explicit start and end dates. Requires the Pro plan or higher.

ParameterInTypeDescription
symbolrequiredpathstringExample: BTC
exchangequerystringExample: HYPERLIQUID
rangequerystringOne of 1D, 1W, 1M, 3M, 6M, 1Y or ALL. Defaults to 1M. ALL returns the whole series, and MAX is accepted as a synonym for it. Example: 1M
startquerystringExample: 2026-01-01
endquerystringExample: 2026-09-01
Response fieldTypeDescription
successboolean
symbolstring
rangestring
countnumber
dataarray of object
data[].exchangestring
data[].fundingRatenumber
data[].premiumnumber
data[].symbolstring
data[].timestring (date-time)
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/funding/BTC/history"

Your usage and limits

GET/v1/usage

Your plan, its per-minute and monthly limits, what you have used today and this month, and daily totals for the last 30 days. Free: calling it costs no weight.

This endpoint takes no parameters.

curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/usage"

Markets

Markets, indices and instruments

Exchange status, market indices, 24/7 markets, the instrument catalogue and retail bullion dealer prices.

Exchange open and closed status

GET/v1/market-status

Current open or closed status and trading hours for supported exchanges.

ParameterInTypeDescription
exchangequerystring

Returns: Open/closed state per venue.

Response fieldTypeDescription
successboolean
exchangesobjectKeyed by venue: COMEX, LME, LBMA, SHFE, SGE, TOCOM, MCX.
timestampstring (date-time)
exchanges.<key>object
exchanges.<key>.namestring
exchanges.<key>.countrystring
exchanges.<key>.currencystring
exchanges.<key>.isOpenboolean
exchanges.<key>.isHolidayboolean
exchanges.<key>.holidayNamestring or null
exchanges.<key>.localTimestringHH:mm in the venue's own timezone.
exchanges.<key>.timezonestring
exchanges.<key>.tradingHoursstringLocal session windows, comma separated where a venue breaks.
exchanges.<key>.tradingDaysstring
exchanges.<key>.nextOpenobject or null

3 more nested fields are in the OpenAPI document.

curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/market-status"

Service health check

GET/v1/health

Service health and database connectivity. Free on every plan and weight 0, so a monitor can poll it without consuming quota.

This endpoint takes no parameters.

Response fieldTypeDescription
statusstring
timestampstring (date-time)
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/health"

Latest 24/7 market prices

GET/v1/markets

Latest prices for 24/7 markets.

ParameterInTypeDescription
sortquerystring
orderquerystring

Returns: Every 24/7 market instrument with its latest price.

Response fieldTypeDescription
successboolean
dataobject
cacheAgenumber or null
timestampstring (date-time) or null
data.itemsarray of object
data.sparklinesobject
data.items[].symbolstring
data.items[].namestring
data.items[].pricenumber
data.items[].assetClassstring or null
data.items[].exchangestring or null
data.items[].change24hnumber or null
data.items[].change7dnumber or null
data.items[].high24hnumber or null
data.items[].low24hnumber or null
data.items[].volume24hnumber or null
data.items[].updatedAtstring (date-time) or null
data.sparklines.<key>array of number
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/markets"

Price history for a 24/7 market

GET/v1/markets/{symbol}/history

Historical series for a single 24/7 market. These symbols are plain names such as GOLD, SILVER, BTC and AAPL, unlike /v1/history which uses metal codes like XAU.

ParameterInTypeDescription
symbolrequiredpathstringExample: GOLD
rangequerystring
intervalquerystring
Response fieldTypeDescription
successboolean
dataarray of object
symbolstring
rangestring
intervalstring
countnumber
timestampstring (date-time)
data[].pricenumber
data[].timestampstring (date-time)
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/markets/GOLD/history"

Latest market index values

GET/v1/indicesFrom Basic

Latest values for market indices: DXY, SPX and DJI. DXY is a US dollar index computed by MetalCharts from daily reference exchange rates with the standard six-currency weights, updated once a day. Requires the Basic plan or higher.

ParameterInTypeDescription
symbolsquerystring
Response fieldTypeDescription
successboolean
dataobject
countnumber
sourcestring
cacheAgenumber
isStaleboolean
timestampstring (date-time)
data.DJIobject
data.DXYobject
data.SPXobject
data.DJI.symbolstring
data.DJI.exchangestring
data.DJI.pricenumber
data.DJI.timestampstring (date-time)
data.DJI.sourcestring
data.DXY.symbolstring
data.DXY.exchangestring
data.DXY.pricenumber
data.DXY.timestampstring (date-time)
data.DXY.sourcestring
data.SPX.symbolstring
data.SPX.exchangestring
data.SPX.pricenumber
data.SPX.timestampstring (date-time)
data.SPX.sourcestring
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/indices"

History for a market index

GET/v1/indices/history/{symbol}From Basic

Historical series for a single market index. DXY is computed by MetalCharts from daily reference exchange rates with the standard six-currency weights: daily only, from January 1999. Requires the Basic plan or higher.

ParameterInTypeDescription
symbolrequiredpathstringExample: DXY
intervalquerystring
rangequerystring
limitquerystring
Response fieldTypeDescription
successboolean
dataarray of object
symbolstring
intervalstring
rangeobject or null
countnumber
sourcestring
data[].pricenumber
data[].timestampstring (date-time)
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/indices/history/DXY"

List tracked instruments

GET/v1/instruments

Every instrument the platform tracks, with the exchange and asset class it belongs to. Use this to discover the symbol a given endpoint expects: symbol spaces differ per route, so gold is XAU on /v1/history but GOLD on /v1/markets, and commodities are contract codes such as CL1. Filter with asset_class (commodity, crypto, equity, etf, fx, index, bond), exchange, or a case-insensitive search across symbol and name. Available on every plan including Free.

ParameterInTypeDescription
asset_classquerystringExample: commodity
exchangequerystringExample: COMEX
searchquerystringExample: gold
limitquerystringExample: 100

Returns: The instrument catalogue.

Response fieldTypeDescription
successboolean
countnumber
dataarray of object
data[].symbolstring
data[].namestring
data[].assetClassstring or null
data[].exchangestring or null
data[].marketTypestring or null
data[].currencystring or null
data[].unitstring or null
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/instruments"

Instrument counts by asset class

GET/v1/instruments/summary

Instrument counts per asset class, with the exchanges each covers. A cheap way to see the shape of the catalogue before paging through it. Available on every plan including Free.

This endpoint takes no parameters.

Response fieldTypeDescription
successboolean
totalnumber
dataarray of object
data[].assetClassstring
data[].countnumber
data[].exchangesarray of string
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/instruments/summary"

Retail bullion dealer prices

GET/v1/bullionFrom Pro

Retail bullion prices across competing dealers, with each quote's premium over spot. Every product is normalised to its fine-ounce content so premiums are comparable across coins, bars and junk silver. best is the cheapest in-stock quote at or above spot, falling back to the cheapest such quote; a below-spot quote stays in quotes but is never best, and best is null when every fresh quote is below spot. Premium is the figure recorded at scrape time and travels with its own scrapedAt, so price and premium always agree. Filter with metal: gold, silver, platinum or palladium, or the code each product carries in metal (XAU, XAG, XPT, XPD), in any case. Quotes older than 7 days are excluded by default and never chosen as best, because individual dealer scrapers fail silently and a stale row would otherwise be presented as today's cheapest price; widen or narrow that with max_age_days, and read asOf, ageDays and staleQuotesExcluded to judge freshness yourself. Requires the Pro plan or higher.

ParameterInTypeDescription
metalquerystringOptional. gold, silver, platinum or palladium, or the code XAU, XAG, XPT or XPD, in any case. Example: gold
max_age_daysquerystringExample: 7
Response fieldTypeDescription
successboolean
maxAgeDaysnumber
countnumber
dataarray of object
data[].asOfstring (date-time)
data[].bestobject
data[].fineOznumber
data[].formstring
data[].metalstring
data[].namestring
data[].productIdstring
data[].puritynumber
data[].quotesarray of object
data[].seriesstring
data[].staleQuotesExcludednumber
data[].weightLabelstring
data[].best.dealerstring
data[].best.inStockboolean
data[].best.premiumPctnumber
data[].best.priceCashnumber
data[].best.scrapedAtstring (date-time)
data[].quotes[].ageDaysnumber
data[].quotes[].dealerstring
data[].quotes[].dealerIdstring
data[].quotes[].inStockboolean
data[].quotes[].premiumPctnumber
data[].quotes[].priceCardobject or null
data[].quotes[].priceCashnumber
data[].quotes[].scrapedAtstring (date-time)
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/bullion"

Dealer quotes for a bullion product

GET/v1/bullion/{productId}From Pro

Every dealer quote for one bullion product. Product ids are slugs such as 1-oz-american-gold-eagle; call /v1/bullion for the full list. Quotes older than 7 days are excluded by default; widen with max_age_days. Requires the Pro plan or higher.

ParameterInTypeDescription
productIdrequiredpathstringExample: 1-oz-american-gold-eagle
max_age_daysquerystringExample: 7
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/bullion/1-oz-american-gold-eagle"

Commodities

Commodities

Energy, grains, softs and livestock futures prices and history.

Latest commodity prices

GET/v1/commoditiesFrom Basic

Latest prices for energy, agriculture, and industrial commodities. Symbols are contract codes such as CL1 (crude), CO1 (Brent), W_1 (wheat) and KC1 (coffee); call this endpoint to list them all. Requires the Basic plan or higher.

ParameterInTypeDescription
sortquerystring
orderquerystring
Response fieldTypeDescription
successboolean
dataobject
cacheAgenumber
timestampstring (date-time)
data.itemsarray of object
data.sparklinesobject
data.items[].change24hnumber
data.items[].change7dnumber
data.items[].high24hnumber
data.items[].low24hnumber
data.items[].namestring
data.items[].pricenumber
data.items[].symbolstring
data.items[].updatedAtstring (date-time)
data.sparklines.<key>array of number
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/commodities"

Price history for a commodity

GET/v1/commodities/{symbol}/historyFrom Basic

Historical price series for a single commodity. Requires the Basic plan or higher.

ParameterInTypeDescription
symbolrequiredpathstringExample: CL1
rangequerystring
intervalquerystring
Response fieldTypeDescription
successboolean
dataarray of object
symbolstring
rangestring
intervalstring
countnumber
timestampstring (date-time)
data[].pricenumber
data[].timestampstring (date-time)
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/commodities/CL1/history"

Crypto

Cryptocurrencies

Prices and history for the tracked cryptocurrencies.

Latest cryptocurrency prices

GET/v1/cryptoFrom Basic

Latest cryptocurrency prices. Requires the Basic plan or higher.

ParameterInTypeDescription
sortquerystring
orderquerystring
Response fieldTypeDescription
successboolean
dataobject
cacheAgenumber
timestampstring (date-time)
data.itemsarray of object
data.sparklinesobject
data.items[].change24hnumber
data.items[].change7dnumber or null
data.items[].high24hnumber
data.items[].low24hnumber
data.items[].marketCapnumber
data.items[].namestring
data.items[].pricenumber
data.items[].symbolstring
data.items[].updatedAtstring (date-time)
data.items[].volume24hnumber
data.sparklines.<key>array of number
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/crypto"

Price history for a cryptocurrency

GET/v1/crypto/{symbol}/historyFrom Basic

Historical price series for a single cryptocurrency. Requires the Basic plan or higher.

ParameterInTypeDescription
symbolrequiredpathstringExample: BTC
rangequerystring
intervalquerystring
Response fieldTypeDescription
successboolean
dataarray of object
symbolstring
rangestring
intervalstring
countnumber
timestampstring (date-time)
data[].pricenumber
data[].timestampstring (date-time)
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/crypto/BTC/history"

ETFs

ETFs

Prices and history for metal and commodity exchange-traded funds.

Latest ETF prices

GET/v1/etfsFrom Basic

Latest prices for tracked ETFs such as GLD and SLV. Requires the Basic plan or higher.

ParameterInTypeDescription
sortquerystring
orderquerystring
Response fieldTypeDescription
successboolean
dataobject
cacheAgenumber
timestampstring (date-time)
data.itemsarray of object
data.sparklinesobject
data.items[].aumnumber
data.items[].change24hnumber
data.items[].change7dnumber
data.items[].high24hnumber
data.items[].low24hnumber
data.items[].marketCapobject or null
data.items[].namestring
data.items[].pricenumber
data.items[].providerstring
data.items[].symbolstring
data.items[].updatedAtstring (date-time)
data.items[].volume24hnumber
data.sparklines.DBCarray of number
data.sparklines.GLDarray of number
data.sparklines.IAUarray of number
data.sparklines.PALLarray of number
data.sparklines.PDBCarray of number
data.sparklines.PPLTarray of number
data.sparklines.SLVarray of number
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/etfs"

Price history for an ETF

GET/v1/etfs/{symbol}/historyFrom Basic

Historical price series for a single ETF. Requires the Basic plan or higher.

ParameterInTypeDescription
symbolrequiredpathstringExample: GLD
rangequerystring
intervalquerystring
Response fieldTypeDescription
successboolean
dataarray of object
symbolstring
rangestring
intervalstring
countnumber
timestampstring (date-time)
data[].pricenumber
data[].timestampstring (date-time)
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/etfs/GLD/history"

News

News and sentiment

Market news, search, and news sentiment by metal.

Latest market news

GET/v1/news

Latest market news articles.

This endpoint takes no parameters.

Response fieldTypeDescription
successboolean
articlesarray of object
countnumber
sourcestring
timestampstring (date-time)
articles[].categorystring
articles[].descriptionstring
articles[].entitiesobject
articles[].idstring
articles[].imageUrlstring
articles[].keyTopicsarray of string
articles[].marketImpactstring
articles[].publishedAtstring (date-time)
articles[].relevanceScorenumber
articles[].sentimentstring
articles[].sentimentScorenumber
articles[].sourcestring
articles[].subcategorystring
articles[].symbolsarray of string
articles[].tickersarray of string
articles[].titlestring
articles[].urlstring
articles[].entities.locationsarray of string
articles[].entities.orgsarray of string
articles[].entities.peoplearray of string
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/news"

Paginated news feed

GET/v1/news/feed

Paginated market news feed.

ParameterInTypeDescription
categoryquerystring
symbolsquerystring
sourcesquerystring
limitquerystring
offsetquerystring
sincequerystring
timePeriodquerystring
sortquerystring
impactquerystring
sourceTypesquerystring
excludeSourceTypesquerystring
Response fieldTypeDescription
successboolean
articlesarray of object
groupedobject
countnumber
totalnumber
hasMoreboolean
timestampstring (date-time)
articles[].categorystring
articles[].descriptionstring
articles[].entitiesobject
articles[].idstring
articles[].imageUrlstring
articles[].keyTopicsarray of string
articles[].marketImpactstring
articles[].publishedAtstring (date-time)
articles[].relevanceScorenumber
articles[].sentimentstring
articles[].sentimentScorenumber
articles[].sourcestring
articles[].subcategorystring
articles[].symbolsarray of string
articles[].tickersarray of string
articles[].titlestring
articles[].urlstring
articles[].entities.locationsarray of string
articles[].entities.orgsarray of string
articles[].entities.peoplearray of string
grouped.Todayarray of string
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/news/feed"

News filter values with counts

GET/v1/news/filters

Every filter value available on the news endpoints, with a count per value: sources, categories and symbols. Call this to build a filter UI rather than hard-coding the options.

This endpoint takes no parameters.

Response fieldTypeDescription
successboolean
filtersobject
totalArticlesnumber
timestampstring (date-time)
filters.sourcesarray of object
filters.categoriesarray of object
filters.symbolsarray of object
filters.sourceTypesarray of object
filters.sources[].countnumber
filters.sources[].labelstring
filters.sources[].valuestring
filters.categories[].countnumber
filters.categories[].labelstring
filters.categories[].valuestring
filters.symbols[].countnumber
filters.symbols[].labelstring
filters.symbols[].valuestring
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/news/filters"

News categories

GET/v1/news/categories

The distinct news categories currently in use, for populating a category filter.

This endpoint takes no parameters.

Response fieldTypeDescription
successboolean
categoriesarray of object
timestampstring (date-time)
categories[].countnumber
categories[].iconstring
categories[].idstring
categories[].labelstring
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/news/categories"

News sentiment candles for a metal

GET/v1/news/sentiment/candles/{symbol}From Ultimate

News sentiment aggregated into OHLC-style candles, so sentiment can be charted alongside price. Requires the Ultimate plan.

ParameterInTypeDescription
symbolrequiredpathstringExample: XAU
intervalquerystring
rangequerystring
Response fieldTypeDescription
successboolean
symbolstring
intervalstring
rangestring
dataarray of object
countnumber
timestampstring (date-time)
data[].avgConfidencenumber
data[].avgScorenumber
data[].bearishCountnumber
data[].bullishCountnumber
data[].closenumber
data[].highnumber
data[].lownumber
data[].neutralCountnumber
data[].opennumber
data[].timestampstring (date-time)
data[].volumenumber
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/news/sentiment/candles/XAU"

News sentiment for a metal

GET/v1/news/sentiment/{symbol}From Ultimate

AI-scored news sentiment for one metal, aggregated across articles. Requires the Ultimate plan.

ParameterInTypeDescription
symbolrequiredpathstringExample: XAU
limitquerystring
Response fieldTypeDescription
successboolean
symbolstring
sentimentsarray of object
countnumber
timestampstring (date-time)
sentiments[].articleIdstring
sentiments[].articleTitlestring
sentiments[].assetClassstring
sentiments[].confidencenumber
sentiments[].impactstring
sentiments[].publishedAtstring (date-time)
sentiments[].reasoningstring
sentiments[].relationshipstring
sentiments[].scorenumber
sentiments[].sentimentstring
sentiments[].symbolstring
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/news/sentiment/XAU"

Latest news for a symbol

GET/v1/news/{symbol}

Latest news articles filtered to a specific asset symbol.

ParameterInTypeDescription
symbolrequiredpathstringExample: XAU
includeTwitterquerystring
sourceTypesquerystring
limitquerystring
Response fieldTypeDescription
successboolean
symbolstring
articlesarray of object
countnumber
sourcestring
timestampstring (date-time)
articles[].categorystring
articles[].descriptionstring
articles[].entitiesobject
articles[].idstring
articles[].imageUrlstring
articles[].keyTopicsarray of string
articles[].marketImpactstring
articles[].publishedAtstring (date-time)
articles[].relevanceScorenumber
articles[].sentimentstring
articles[].sentimentScorenumber
articles[].sourcestring
articles[].subcategorystring
articles[].symbolsarray of string
articles[].tickersarray of string
articles[].titlestring
articles[].urlstring
articles[].entities.locationsarray of string
articles[].entities.orgsarray of string
articles[].entities.peoplearray of string
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
  "https://api.metalcharts.org/v1/news/XAU"

Limits

How rate limits and allowances work

The numbers for each plan are on the pricing page. The rules are the same on every plan:
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.
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.
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.
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.
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.
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.

Start with a free key

200 requests a month, no card required, and every endpoint on this page documented in OpenAPI 3.0.