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.
| Parameter | In | Type | Description |
|---|
| symbols | query | string | |
| type | query | string | |
| series | query | string | |
| Response field | Type | Description |
|---|
| success | boolean | |
| data | object | |
| count | number | |
| source | string | |
| series | string | |
| cacheAge | number | |
| isStale | boolean | |
| timestamp | string (date-time) | |
| data.XAU | object | |
| data.XAG | object | |
| data.XAU.symbol | string | |
| data.XAU.exchange | string | |
| data.XAU.marketType | string | |
| data.XAU.price | number | |
| data.XAU.priceCNY | number | |
| data.XAU.timestamp | string (date-time) | |
| data.XAU.exchangeRate | number | |
| data.XAU.source | string | |
| data.XAU.vatInclusive | boolean | |
| data.XAU.vatRate | number | |
| data.XAU.priceExVat | number | |
| data.XAU.priceCNYExVat | number | |
| data.XAU.premiumPercent | number | |
| data.XAU.premiumPercentExVat | number | |
| data.XAG.symbol | string | |
| data.XAG.exchange | string | |
| data.XAG.marketType | string | |
| data.XAG.price | number | |
| data.XAG.priceCNY | number | |
| data.XAG.timestamp | string (date-time) | |
| data.XAG.exchangeRate | number | |
| data.XAG.source | string | |
| data.XAG.vatInclusive | boolean | |
| data.XAG.vatRate | number | |
| data.XAG.priceExVat | number | |
| data.XAG.priceCNYExVat | number | |
2 more nested fields are in the OpenAPI document.
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/shanghai"
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.
| Parameter | In | Type | Description |
|---|
| range | query | string | |
| series | query | string | |
| start | query | string | |
| end | query | string | |
| Response field | Type | Description |
|---|
| success | boolean | |
| data | array of object | |
| vatInclusive | boolean | |
| count | number | |
| source | string | |
| series | string | |
| range | object | |
| requestedRange | object | |
| data[].date | string (date) | |
| data[].premium | number or null | |
| data[].premiumPercent | number or null | |
| data[].premiumPercentExVat | number or null | |
| data[].shanghai | number | |
| data[].shanghaiExVat | number | |
| data[].western | number or null | |
| range.minDate | string (date) | |
| range.maxDate | string (date) | |
| range.totalRecords | number | |
| requestedRange.start | string (date) | |
| requestedRange.end | string (date) | |
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/shanghai/history"
Historical Shanghai gold price series. Gold carries no VAT, so shanghaiExVat and premiumPercentExVat equal the raw values. Requires the Pro plan or higher.
| Parameter | In | Type | Description |
|---|
| range | query | string | |
| series | query | string | |
| start | query | string | |
| end | query | string | |
| Response field | Type | Description |
|---|
| success | boolean | |
| data | array of object | |
| vatInclusive | boolean | |
| count | number | |
| source | string | |
| series | string | |
| range | object | |
| requestedRange | object | |
| data[].date | string (date) | |
| data[].premium | number or null | |
| data[].premiumPercent | number or null | |
| data[].premiumPercentExVat | number or null | |
| data[].shanghai | number | |
| data[].shanghaiExVat | number | |
| data[].western | number or null | |
| range.minDate | string (date) | |
| range.maxDate | string (date) | |
| range.totalRecords | number | |
| requestedRange.start | string (date) | |
| requestedRange.end | string (date) | |
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/shanghai/gold/history"
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.
| Parameter | In | Type | Description |
|---|
| range | query | string | One of 1M, 3M, 6M, 1Y, 2Y, 5Y, ALL. Default 1M. |
| type | query | string | latest: the newest rate only. Example: latest |
Returns: Daily rates, oldest first.
| Response field | Type | Description |
|---|
| success | boolean | |
| data | array of object | |
| data[].date | string | |
| data[].price | number | |
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.
| Parameter | In | Type | Description |
|---|
| symbols | query | string | |
| fresh | query | string | |
| Response field | Type | Description |
|---|
| success | boolean | |
| data | object | |
| futures | object | |
| futuresMap | object | |
| count | number | |
| source | string | |
| cacheAge | number | |
| isStale | boolean | |
| lastUpdated | string (date-time) | |
| timestamp | string (date-time) | |
| data.XAU | object | |
| data.XAG | object | |
| data.XAU.symbol | string | |
| data.XAU.indiaSymbol | string | |
| data.XAU.price | number | |
| data.XAU.priceRaw | number | |
| data.XAU.unit | string | |
| data.XAU.unitRaw | string | |
| data.XAU.premium | number | |
| data.XAU.premiumPercent | number | |
| data.XAU.source | string | |
| data.XAU.timestamp | string (date-time) | |
| data.XAG.symbol | string | |
| data.XAG.indiaSymbol | string | |
| data.XAG.price | number | |
| data.XAG.priceRaw | number | |
| data.XAG.unit | string | |
| data.XAG.unitRaw | string | |
| data.XAG.premium | number | |
| data.XAG.premiumPercent | number | |
| data.XAG.source | string | |
| data.XAG.timestamp | string (date-time) | |
| futures.symbol | string | |
| futures.price | number | |
| futures.priceINR | number | |
| futures.timestamp | string (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"
Historical MCX India premium series versus Western pricing. Requires the Pro plan or higher.
| Parameter | In | Type | Description |
|---|
| range | query | string | |
| symbol | query | string | |
| start | query | string | |
| end | query | string | |
| Response field | Type | Description |
|---|
| success | boolean | |
| data | array of object | |
| count | number | |
| symbol | string | |
| range | object | |
| requestedRange | object | |
| data[].date | string (date) | |
| data[].india | number or null | |
| data[].indiaINR | number or null | |
| data[].premium | number or null | |
| data[].premiumPercent | number or null | |
| data[].western | number or null | |
| range.minDate | string (date) | |
| range.maxDate | string (date) | |
| range.totalRecords | number | |
| requestedRange.start | object or null | |
| requestedRange.end | string (date) | |
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/india/history"
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.
| Parameter | In | Type | Description |
|---|
| symbolrequired | query | string | Required. cu, al, zn, pb, ni, sn, au or ag. |
| range | query | string | One 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. |
| type | query | string | |
| Response field | Type | Description |
|---|
| success | boolean | |
| symbol | string | |
| range | string | |
| asOf | string (date) | |
| ageDays | number | |
| stale | boolean | |
| count | number | |
| data | array of object | |
| data[].date | string (date) | |
| data[].total | number | |
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/shfe/settlement"
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.
| Parameter | In | Type | Description |
|---|
| symbolrequired | query | string | Required. cu, al, zn, pb, ni, sn, au or ag. |
| range | query | string | One 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. |
| type | query | string | |
| Response field | Type | Description |
|---|
| success | boolean | |
| symbol | string | |
| range | string | |
| asOf | string (date) | |
| ageDays | number | |
| stale | boolean | |
| count | number | |
| data | array of object | |
| data[].date | string (date) | |
| data[].total | number | |
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/shfe/inventory"
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.
| Parameter | In | Type | Description |
|---|
| symbolrequired | query | string | Required. Metal symbol: XAU, XAG, HG, XPT, XPD, ALI, ZN or PB (availability varies by endpoint). |
| range | query | string | One 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. |
| type | query | string | |
| Response field | Type | Description |
|---|
| success | boolean | |
| symbol | string | |
| range | string | |
| asOf | string (date) | |
| ageDays | number | |
| stale | boolean | |
| count | number | |
| data | array of object | |
| data[].date | string (date) | |
| data[].eligible | number or null | |
| data[].registered | number or null | |
| data[].total | number | |
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/comex/inventory"
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.
| Parameter | In | Type | Description |
|---|
| symbolrequired | query | string | Required. Metal symbol: XAU, XAG, HG, XPT, XPD, ALI, ZN or PB. |
| range | query | string | One 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. |
| start | query | string | First report date, YYYY-MM-DD. |
| end | query | string | Last report date, YYYY-MM-DD. Defaults to today. |
| depository | query | string | Case-insensitive part of a depository name, e.g. jp morgan, brink or hsbc. |
| Response field | Type | Description |
|---|
| success | boolean | |
| symbol | string | |
| unit | string or null | |
| range | string or null | |
| start | string (date) or null | |
| end | string (date) | |
| flowsAvailableFrom | string (date) or null | |
| asOf | string (date) or null | |
| ageDays | number or null | |
| stale | boolean | |
| count | number | |
| data | array of object | |
| data[].date | string (date) | CME report date. |
| data[].activityDate | string (date) or null | |
| data[].depository | string | |
| data[].registered | object | |
| data[].eligible | object | |
| data[].total | object | |
| data[].registered.previous | number or null | |
| data[].registered.received | number or null | |
| data[].registered.withdrawn | number or null | |
| data[].registered.netChange | number or null | |
| data[].registered.adjustment | number or null | |
| data[].registered.today | number or null | |
| data[].eligible.previous | number or null | |
| data[].eligible.received | number or null | |
| data[].eligible.withdrawn | number or null | |
| data[].eligible.netChange | number or null | |
| data[].eligible.adjustment | number or null | |
| data[].eligible.today | number or null | |
| data[].total.previous | number or null | |
| data[].total.received | number or null | |
| data[].total.withdrawn | number or null | |
| data[].total.netChange | number or null | |
| data[].total.adjustment | number or null | |
| data[].total.today | number or null | |
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/comex/depositories"
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.
| Parameter | In | Type | Description |
|---|
| symbolrequired | query | string | Required. Metal symbol: XAU, XAG, HG, XPT, XPD, ALI, ZN or PB (availability varies by endpoint). |
| Response field | Type | Description |
|---|
| success | boolean | |
| symbol | string | |
| data | object | |
| data.date | string (date) | |
| data.openInterest | number | |
| data.volume | number | |
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/comex/volume-oi"
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.
| Parameter | In | Type | Description |
|---|
| type | query | string | |
| symbolrequired | query | string | Required. Metal symbol: XAU, XAG, HG, XPT, XPD, ALI, ZN or PB (availability varies by endpoint). |
| range | query | string | One 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. |
| year | query | string | |
| date | query | string | |
| Response field | Type | Description |
|---|
| success | boolean | |
| symbol | string | |
| range | string | |
| asOf | string (date) | |
| ageDays | number | |
| stale | boolean | |
| count | number | |
| data | array of object | |
| data[].dailyIssued | number | |
| data[].dailyStopped | number | |
| data[].date | string (date) | |
| data[].exchange | string | |
| data[].mtdCumulative | number or null | |
| data[].settlementPrice | object or null | |
| data[].symbol | string | |
| data[].ytdCumulative | number or null | |
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/comex/delivery-notices"
Shanghai Gold Exchange contract trading history. Requires the Pro plan or higher.
| Parameter | In | Type | Description |
|---|
| contractrequired | query | string | Required. Au99.99, Au99.95, Au(T+D), mAu(T+D), Ag(T+D) or Ag99.99. |
| range | query | string | One 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. |
| type | query | string | |
| Response field | Type | Description |
|---|
| success | boolean | |
| contract | string | |
| range | string | |
| asOf | string (date) | |
| ageDays | number | |
| stale | boolean | |
| count | number | |
| data | array of object | |
| data[].date | string (date) | |
| data[].total | number | |
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/sge/trading"
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.
| Parameter | In | Type | Description |
|---|
| metalrequired | query | string | Required. gold or silver. |
| range | query | string | One of 1Y, 2Y, 5Y or ALL. Defaults to ALL. ALL returns the whole series, and MAX is accepted as a synonym for it. |
| type | query | string | |
| Response field | Type | Description |
|---|
| success | boolean | |
| metal | string | |
| range | string | |
| asOf | string (date) | |
| ageDays | number | |
| stale | boolean | |
| count | number | |
| data | array of object | |
| data[].amPrice | number | |
| data[].date | string (date) | |
| data[].pmPrice | number | |
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/sge/benchmark"
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.
| Parameter | In | Type | Description |
|---|
| metalrequired | query | string | Required. gold or silver. Example: silver |
| range | query | string | One 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 |
| type | query | string | Example: latest |
| Response field | Type | Description |
|---|
| success | boolean | |
| metal | string | |
| range | string | |
| asOf | string (date) | |
| ageDays | number | |
| stale | boolean | |
| count | number | |
| data | array of object | |
| data[].date | string (date) | |
| data[].total | number | |
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/sge/inventory?metal=silver"
GFEX settlement price history for platinum or palladium. Requires the Ultimate plan.
| Parameter | In | Type | Description |
|---|
| symbolrequired | query | string | Required. pt or pd. |
| range | query | string | One of 1M, 3M, 6M, 1Y or ALL. Defaults to ALL. ALL returns the whole series, and MAX is accepted as a synonym for it. |
| type | query | string | |
| Response field | Type | Description |
|---|
| success | boolean | |
| symbol | string | |
| range | string | |
| asOf | string (date) | |
| ageDays | number | |
| stale | boolean | |
| count | number | |
| data | array of object | |
| data[].date | string (date) | |
| data[].total | number | |
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/gfex/settlement"
GFEX platinum and palladium premium history versus Western pricing. Requires the Ultimate plan.
| Parameter | In | Type | Description |
|---|
| symbol | query | string | |
| range | query | string | One 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 field | Type | Description |
|---|
| success | boolean | |
| data | array of object | |
| count | number | |
| symbol | string | |
| cnyRate | number | |
| requestedRange | object | |
| data[].date | string (date) | |
| data[].gfex | number | |
| data[].premium | number or null | |
| data[].premiumPercent | number or null | |
| data[].western | number or null | |
| requestedRange.start | string (date) | |
| requestedRange.end | string (date) | |
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/gfex/premium"
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.
| Parameter | In | Type | Description |
|---|
| symbolrequired | query | string | Required. LC, SI, PS, XPT or XPD. Example: LC |
| type | query | string | Example: totals |
| date | query | string | Example: 2026-09-17 |
| start | query | string | Example: 2026-01-01 |
| end | query | string | Example: 2026-09-17 |
| Response field | Type | Description |
|---|
| success | boolean | |
| symbol | string | |
| asOf | string (date) | |
| total | number | |
| count | number | |
| data | array of object | |
| data[].cancelled | number | |
| data[].change | number | |
| data[].date | string (date) | |
| data[].quantity | number | |
| data[].registered | number | |
| data[].warehouse | string | |
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/gfex/receipts?symbol=LC"
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 field | Type | Description |
|---|
| success | boolean | |
| data | array of object | |
| data[].from | string (date) | |
| data[].name | string | |
| data[].symbol | string | |
| data[].to | string (date) | |
| data[].warehouses | number | |
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/gfex/receipts/coverage"
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.
| Parameter | In | Type | Description |
|---|
| metalrequired | query | string | Required. gold or silver. |
| range | query | string | One of 1Y, 2Y, 5Y or ALL. Defaults to ALL. ALL returns the whole series, and MAX is accepted as a synonym for it. |
| type | query | string | |
| Response field | Type | Description |
|---|
| success | boolean | |
| metal | string | |
| range | string | |
| asOf | string (date) | |
| ageDays | number | |
| stale | boolean | |
| count | number | |
| data | array of object | |
| data[].date | string (date) | |
| data[].total | number | |
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/lbma/vault"
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.
| Parameter | In | Type | Description |
|---|
| metalrequired | query | string | Required. gold or silver. |
| range | query | string | One of 1Y, 2Y, 5Y or ALL. Defaults to ALL. ALL returns the whole series, and MAX is accepted as a synonym for it. |
| type | query | string | |
| Response field | Type | Description |
|---|
| success | boolean | |
| metal | string | |
| range | string | |
| asOf | string (date) | |
| ageDays | number | |
| stale | boolean | |
| count | number | |
| data | array of object | |
| data[].date | string (date) | |
| data[].transfers | number | |
| data[].value | number | |
| data[].volume | number | |
curl -H "Authorization: Bearer mc_live_YOUR_KEY" \
"https://api.metalcharts.org/v1/lbma/clearing"