MetalAPI
XAU3,997.89−1.54%XAG53.936−1.51%XPT1,554.47−0.83%XPD1,047.03−0.44%XCU6.5080+2.29%WTI103.27+3.82%BRENT111.70−1.30%EUR1.120400−0.01%GBP1.337500−0.01%JPY0.0063761+0.14%CHF1.213445−0.25%TRY0.020125−0.12%BTC80,329.75−0.55%ETH2,329.36−1.13%
All articles
Precious MetalsMarketsGuide

Spot, Bid, Ask and Spread: How Precious Metal Prices Are Quoted

What spot, bid, ask, mid and spread mean for gold, silver, platinum and palladium, how dealers build quotes, and how to request and display bid/ask via API.

By MetalAPI Team··9 min read

Why one ounce of gold has several prices

Look up the gold price on three websites at the same moment and you will often see three slightly different numbers. A coin dealer's site shows another two. None of them is necessarily wrong: they answer different questions. One shows the mid-market spot price, one a futures contract, one the price at which a dealer will sell you a bar and one the price at which it will buy it back.

If you build anything that displays or uses precious metal prices, such as a dealer storefront, a portfolio tracker, a jewellery calculator or an internal report, you need to know which of these numbers you are working with. This article explains the vocabulary (spot, bid, ask, mid and spread), shows how dealers turn wholesale quotes into retail prices, and walks through requesting and displaying bid and ask prices with the MetalAPI REST API.

This is an educational article about how prices are quoted. It is not investment or trading advice, and every number in the examples is illustrative.

Spot price: the reference for immediate delivery

The spot price is the price of a standard quantity of metal for immediate delivery, as opposed to delivery at a future date. In the wholesale gold market, which trades largely over the counter (OTC) and is centred on London, "spot" conventionally means settlement two business days after the trade.

Precious metals are quoted per troy ounce (31.1034768 grams), usually in US dollars, using ISO-style codes: XAU for gold, XAG for silver, XPT for platinum and XPD for palladium. XAU/USD therefore reads as "US dollars per troy ounce of gold", in the same way that EUR/USD reads as "US dollars per euro".

Because the spot market is OTC, there is no single exchange printing an official last trade. Banks and liquidity providers stream their own two-sided quotes, and the "spot price" you see on a website is a representative value derived from those quotes, most often the mid. A few related prices are easy to confuse with it:

  • Futures prices, such as the COMEX gold contract, are for delivery in a future month. They usually differ from spot by the cost of carry: interest and storage until delivery.
  • Benchmark prices, such as the LBMA Gold Price (set in auctions twice each London business day) and the LBMA Silver Price (set once a day), are single reference values used to settle contracts and value holdings. They are fixed at set times and do not move in between.
  • Retail prices for coins and bars include premiums on top of spot. They are covered further down.

Bid, ask and mid

In a two-sided market every quote consists of two numbers:

  • The bid is the highest price a market maker is currently willing to pay. It is the price at which you could sell.
  • The ask, also called the offer, is the lowest price at which a market maker is willing to sell. It is the price at which you could buy.

The ask is always at or above the bid. The mid is their average, (bid + ask) / 2. Nobody trades at the mid as such; it is a neutral reference that sits between the two sides and favours neither buyer nor seller. That makes it the natural number for charts, portfolio valuations and "gold price today" headlines, and it is what most price APIs return by default.

TermMeaningTypical use
BidBest price a buyer will payValuing metal you would sell; reference for dealer buy-back prices
Ask (offer)Best price a seller will acceptCost of buying; reference for dealer selling prices
MidAverage of bid and askCharts, valuations, headline prices
SpreadAsk minus bidMeasuring liquidity and the cost of a round trip

A worked example with illustrative numbers. Suppose the wholesale gold quote is 3,997.62 bid and 3,998.16 ask, in US dollars per troy ounce:

Illustrative example
bid    = 3,997.62
ask    = 3,998.16
mid    = (3,997.62 + 3,998.16) / 2 = 3,997.89
spread = 3,998.16 - 3,997.62       = 0.54 USD

spread as % of mid = 0.54 / 3,997.89 ≈ 0.0135 %  (about 1.35 basis points)

Spreads in practice

The spread is the price of immediacy: what it would cost to buy and sell straight back again. Compare spreads in relative terms, as a percentage of the mid or in basis points (hundredths of a percent). An absolute spread of 0.50 means something very different on gold at several thousand dollars an ounce than on silver at a few tens of dollars.

Several factors widen or narrow it:

  • Liquidity of the metal. Gold is the most heavily traded precious metal and usually has the tightest relative spread. Platinum and palladium trade in much smaller volumes, so their spreads are typically wider in percentage terms.
  • Time of day. Spreads tend to be tightest when the main trading centres overlap and wider in quiet hours, such as around the daily New York close and the weekly reopening on Sunday evening, New York time.
  • Volatility and news. Around major economic releases or during market stress, market makers widen their quotes to protect themselves.
  • Size. A quoted spread applies to a standard trade size. Very large orders may be priced wider, and small retail purchases carry costs the wholesale spread does not include at all.

When you calculate spreads in code, use the unrounded numbers from the feed and measure the relative spread against the mid:

javascript
function spreadStats(bid, ask) {
  const mid = (bid + ask) / 2;
  const spread = ask - bid;
  return {
    mid,
    spread,
    spreadPct: (spread / mid) * 100,
    spreadBps: (spread / mid) * 10000,
  };
}

spreadStats(3997.62, 3998.16);
// mid ≈ 3997.89, spread ≈ 0.54, spreadPct ≈ 0.0135, spreadBps ≈ 1.35

Wholesale and retail spreads are different things. The interbank spread on gold is a small fraction of a percent. The gap between a dealer's selling and buy-back prices for a one-ounce coin is much larger, because it also covers the product premium, distribution costs and the dealer's margin.

How dealers turn spot into a quote

A bullion dealer, jeweller or trading app rarely shows the wholesale quote as it is. Most start from a live reference, either the mid or the bid and ask, and apply their own terms to each side. A common structure looks like this:

  • Selling price (what the customer pays) = reference ask × weight × purity + premium
  • Buy-back price (what the customer receives) = reference bid × weight × purity − discount

The premium covers fabrication (minting a small coin costs more per ounce than casting a large bar), insurance, shipping, payment costs and margin. It may be a percentage over spot, a fixed amount per item or both, and it varies by product, size, dealer and demand.

Two conversions often sit in between. Prices for customers outside the United States are converted from US dollars into the local currency, which brings in an exchange rate and sometimes an FX spread of its own. And products sold by the gram or by karat, such as jewellery, are converted from troy ounces and scaled by purity: 22K gold is 22/24, about 91.67% pure, and 18K is 75% pure.

Step (illustrative, 1 oz gold coin)Selling sideBuy-back side
Wholesale reference, USD per troy ounceAsk 3,998.16Bid 3,997.62
Dealer adjustment (example only)+3.0% premium−1.0% discount
Customer price, USD≈ 4,118.10≈ 3,957.64

The premium and discount in this table are invented for the example; real ones differ widely. The point is the structure: the customer-facing spread is the wholesale spread plus the dealer's adjustments on both sides, and the wholesale part is usually the smallest piece of it.

Requesting bid and ask with MetalAPI

By default, MetalAPI returns the mid price. For spot precious metals that mid is derived from interbank bid/ask feeds. On the Standard plan and above you can request the two sides as well, by adding -BID and -ASK to a symbol in currencies:

bash
curl "https://metalapi.com/api/v1/latest?currencies=XAU,XAU-BID,XAU-ASK" \
  -H "Authorization: Bearer YOUR_API_KEY"

Each requested side appears in rates in both directions, exactly like the mid. USDXAU-BID is the bid in US dollars per troy ounce, and XAU-BID is its inverse:

Response (illustrative)
{
  "success": true,
  "timestamp": 1792834892,
  "date": "2026-10-24",
  "base": "USD",
  "rates": {
    "XAU": 0.0002501319446,
    "USDXAU": 3997.89,
    "XAU-BID": 0.0002501488386,
    "USDXAU-BID": 3997.62,
    "XAU-ASK": 0.0002501150529,
    "USDXAU-ASK": 3998.16
  }
}

A few details are worth knowing:

  • Which symbols. Bid and ask are available for symbols quoted from interbank feeds: the precious metals and the major currencies. Futures-based symbols, such as copper or crude oil, are published as a single price. If a side is not available for a symbol, it is left out of rates, so check that the key exists rather than assuming it does.
  • One snapshot. Bid, ask and mid come from the same snapshot, so they are consistent with each other. They refresh at your plan's interval: every 10 minutes on Standard, every minute on Advanced and Pro, every 15 seconds on Ultra and Business, and every 5 seconds on Enterprise.
  • Other currencies and units. base and unit work as usual, so base=EUR&unit=gram returns the gold bid and ask in euros per gram. The conversion into another base currency uses that currency's mid rate; if you need to apply an FX spread as well, add it yourself.
  • Plans. On Free and Lite, a request that includes -BID or -ASK symbols returns error 106 (plan_restriction). Like other plan restrictions, that request is not billed.
  • History. Historical endpoints (daily closes, time series, OHLC) return mid prices. Bid and ask are part of the latest quote.
  • AI assistants. The same suffixes work in the symbols argument of the get_latest_prices MCP tool if you use MetalAPI from Claude or ChatGPT. See AI & MCP.

Displaying quotes correctly

Most mistakes with metal prices happen in the display layer rather than in the data. A short checklist:

  • Say which price it is. Label mid prices as such ("spot" or "mid"). If you show both sides, label them from the customer's point of view: the customer buys at the ask and sells at the bid. Dealer sites often use "We buy" and "We sell", which is the dealer's point of view; mixing the two conventions on one page confuses people.
  • Show the unit and currency. "$3,997.89" on its own is ambiguous. Write "USD per troy ounce" or "EUR per gram". Watch out for ounces: in MetalAPI's unit parameter, ounce and oz mean the avoirdupois ounce (28.35 g), while bullion is priced per troy ounce (troy_oz, the default).
  • Show when. Display the quote time from the response's timestamp field, which is the time of the data, not of your request. On plans with delayed updates, say how often the price refreshes.
  • Handle market hours. Spot metals and major currencies trade from Sunday 17:00 to Friday 17:00 New York time. Over the weekend MetalAPI keeps returning Friday's closing prices, so show a "market closed" note rather than letting a frozen price look live.
  • Round only for display. Keep full precision in calculations and round at the very end. A spread computed from rounded bid and ask values can be off by a large fraction of its own size.
  • Guard against a crossed quote. If your own adjustments ever produce a selling price below the buy-back price, treat it as a bug and stop quoting until it is fixed.
  • Be clear that prices are indicative. Prices from a data API are information, not an offer to trade. If you display them to customers, make clear that the binding price is the one confirmed at checkout or on a trade confirmation.

Putting this together, here is a small example that fetches the gold mid, bid and ask in euros per gram and prints them with labels and a timestamp:

javascript
const res = await fetch(
  "https://metalapi.com/api/v1/latest?base=EUR&unit=gram&currencies=XAU,XAU-BID,XAU-ASK",
  { headers: { Authorization: "Bearer " + process.env.METALAPI_KEY } },
);
const data = await res.json();
if (!data.success) throw new Error(data.error.code + ": " + data.error.info);

const r = data.rates;
const eur = new Intl.NumberFormat("en-GB", { style: "currency", currency: "EUR" });
const asOf = new Date(data.timestamp * 1000).toISOString();

console.log("Gold, EUR per gram, as of " + asOf);
console.log("Mid:", eur.format(r.EURXAU));
if (r["EURXAU-BID"] !== undefined && r["EURXAU-ASK"] !== undefined) {
  console.log("You sell at (bid):", eur.format(r["EURXAU-BID"]));
  console.log("You buy at (ask):", eur.format(r["EURXAU-ASK"]));
}

Quick reference

TermDefinition
SpotPrice for immediate delivery; in the wholesale market, settlement two business days after the trade
BidPrice at which the market will buy from you
Ask / offerPrice at which the market will sell to you
Mid(bid + ask) / 2; the usual reference and default API price
SpreadAsk minus bid; often quoted as a percentage of the mid or in basis points
Basis point0.01%, one hundredth of a percent
PremiumA dealer's mark-up over the reference price for a physical product
Troy ounce31.1034768 grams; the unit precious metals are priced in

To try it yourself, register for a free key to work with mid prices, and see pricing for the plans that include bid and ask. The API docs list every parameter, and the Data Formats & Units guide covers base currencies, mass units and the inverse rates in more detail.

Try it with your own data

Create a free account and make your first request in under two minutes. 100 requests a month, no credit card.

Keep reading