Gold, Silver and Base Metals — Now Live on the fastFOREX API

Tom Walder
August 20, 2026

Short version: fastFOREX now serves real-time prices for Gold, Silver and more - 9 precious and base metals alongside our currency, crypto and FX data. You can ask for 18 carat gold, priced per gram, in Japanese yen, and get back a bid/ask quote in a single call. No unit maths, no purity factors, no second request to convert the currency.

Six new endpoints are live now, and 40+ metals instruments are streaming over WebSockets.

What's covered

Prices are available in 160+ ISO 4217 currencies, with the major ones quoted natively and everything else available via a transparent cross.

Symbol Metal Category Default unit*
XAU Gold Precious Troy ounce (oz_t)
XAG Silver Precious Troy ounce (oz_t)
XPT Platinum Precious Troy ounce (oz_t)
XPD Palladium Precious Troy ounce (oz_t)
XAL Aluminium Base Metric tonne
XCU Copper Base Metric tonne
XPB Lead Base Metric tonne
XNI Nickel Base Metric tonne
XZN Zinc Base Metric tonne

*Get spot prices in any unit: Gram, Kilogram, Metric Tonne, Grain, Pennyweight, Troy Ounce, Troy Pound, Ounce (Avoirdupois), Pound (Avoirdupois), Tael (Hong Kong), Baht (Thai), Tola

The endpoints

The metals product follows the same shape as the rest of the API — metadata endpoints so you can discover what's available, price endpoints so you can build against it.

Metadata

Prices

  • /metals/spot — a metal in the currency, unit and purity you ask for, with conversion applied
  • /metals/quote — up to 10 instruments in one request, quoted exactly as the feed supplies them, with no conversion at all

Those two are deliberately different tools. /metals/spot is for pricing something: you describe the product and we do the work. /metals/quote is for building a board of live instruments where you want the raw feed and nothing between you and it.

/metals/quote also degrades gracefully. Send eleven instruments and the eleventh comes back under warnings.ignored_instruments; send a symbol we don't recognise and it comes back under warnings.invalid_instruments. The request only fails outright if none of the symbols were valid — one typo doesn't cost you the other nine prices.

Streaming

Metals instruments also stream over our WebSocket API, alongside the ~2,300 FX pairs already there. If you're driving a live board, subscribe rather than poll.

Authentication, error handling, rate limits and response conventions are identical to the endpoints you're already using. If you've integrated fastFOREX before, this is a new path and nothing else to learn.

Why we built it this way

Most metals APIs hand you a mid price for gold in dollars per troy ounce and leave the rest to you. That's fine if you're building a price ticker. It's not fine if you're pricing a 9 carat wedding band per gram in Australian dollars, or valuing a copper inventory in tonnes against a euro-denominated cost model.

So we built the awkward parts into the API.

Bid, ask, mid and spread — not just a single number

Metals responses carry bid, ask, mid and spread. If you're quoting a customer a buy price and a sell price, you need both sides. If you're marking a position, you need to know how wide the market is. A lone mid price hides all of that. (On rare instruments where the feed publishes no ask, ask, mid and spread are simply absent rather than fabricated — check for the field rather than assuming it.)

Prices are returned as strings, deliberately. Metals prices carry significant figures that a float will happily round away, and precious metals pricing is exactly the domain where a rounding error compounds into a real invoice discrepancy. Parse them as decimals.

Any unit of mass

Metals are traded in troy ounces, sold in grams, shipped in tonnes and weighed in taels depending on where you're standing. The unit parameter accepts twelve of them — gram, kilogram, metric tonne, grain, pennyweight, troy ounce, troy pound, avoirdupois ounce and pound, plus the Hong Kong tael, Thai baht and tola. The full list with display names is at /metals/units.

Ask for the unit your business actually uses. The conversion happens server-side against the underlying quote, so you're not layering your own arithmetic on top of a price you didn't derive.

Purity, as a first-class parameter

This is the one we think matters most for anyone building in jewellery, retail or recycling.

Spot gold is quoted pure. Almost nothing is sold pure. If you're pricing 18K, you're applying a 750/1000 factor — and if you're pricing scrap, secondhand or bespoke stock, you're applying a dozen different factors across your catalogue.

Pass purity=750 and the price comes back at 18 carat. 916 gives you 22K, 999 gives you 24K. For silver, 925 is Sterling and 958.4 is Britannia. Pass any custom fineness between 1 and 1000 and we'll price at that fineness and echo it back with purity_name: "custom". Omit it entirely and you get the pure quoted price.

The full set of named grades, finest first, is at /metals/purities — each with its code, display name and exact fineness in parts per thousand, so you can present the grade to a customer rather than just a number.

Base metals carry their contract grade

Base metals aren't a single substance — they're a deliverable specification. Ask for copper and the response tells you the grade you're being priced at, along with its minimum purity as a percentage. Grade A copper, for instance, comes back with grade_min_purity_pct: 99.9935.

That matters because the number you store then has a definition attached to it, rather than sitting in your database as an unqualified "copper price" that nobody can reconcile a year later.

Currency crossing you can actually see

Where an instrument is quoted directly in your requested currency, you get that quote. Where it isn't, we cross it via USD and set cross_rate: true in the response.

We flag it because it matters. A crossed price consumes an additional FX product call and inherits the FX bid/ask gap on top of the metal's own, which means a slightly wider spread than the native instrument. You should know when that's happening rather than discovering it in a reconciliation.

The same instinct drives source_instrument, which names the instrument the price was actually built from. If you need to audit a number six months from now, the response tells you where it came from.

Ratios and crypto-denominated metals

Not every instrument is a metal priced in a currency. Alongside the spot instruments, the catalogue includes:

  • Ratio instruments — one metal priced against another, such as XAGXAU for the silver/gold ratio. A ratio has no unit of mass, because it doesn't need one. If you're building a relative-value dashboard or a rebalancing signal, you no longer need to fetch two prices and divide them yourself.
  • Crypto-denominated instruments — metals priced against a cryptocurrency, for the growing set of products that treat gold and BTC as siblings on the same screen.

Each entry from /metals/instruments declares its type as spot, ratio or crypto, so you can filter to what your application actually handles.

Where the data comes from

We think you should know what you're buying, so: this is OTC aggregate data, not exchange data.

The feed aggregates Tier-1 liquidity providers — global banks and top-tier ECNs — into a single order book, with top-of-book generated under a best-execution policy and continuously monitored. Every response labels itself source: otc_aggregate.

This is genuinely tradable, tight, real-market pricing. For live valuation, quoting, hedging reference and pricing engines — which is most of what people actually need — OTC aggregate is the better input, because it reflects where the market is right now rather than where it closed.

Who this is for

  • Jewellery and precious metals retail — price stock by carat and by gram, in your customer's currency, without maintaining your own purity table.
  • Scrap, refining and recycling — value mixed-purity intake against live market pricing, using custom fineness where the named grades don't fit.
  • Manufacturing and procurement — track aluminium, copper, nickel, lead and zinc input costs in tonnes, in your reporting currency, against a known contract grade.
  • Fintech, wealth and treasury — mark metals holdings with a real bid/ask rather than a stale mid, and pull ratios directly rather than deriving them.
  • Anyone already using fastFOREX for FX — one API key, one integration pattern, one invoice.

Getting started

Metals endpoints are available on The Premium Plan. If you already have a key on Premium, they're live right now — nothing to enable.

Start here: fastFOREX Metals API documentation →

If you're building something with metals data and there's a unit, purity, grade, instrument or currency we don't yet cover, tell us — that list has grown almost entirely on the back of what customers asked for. Reach us at [email protected].

FAQ

Which metals does the fastFOREX API support? Nine: gold (XAU), silver (XAG), platinum (XPT) and palladium (XPD) among precious metals, plus aluminium (XAL), copper (XCU), lead (XPB), nickel (XNI) and zinc (XZN) among base metals.

Can I get gold prices in grams instead of troy ounces? Yes. Pass unit=gram, or any of the twelve supported units of mass including kilogram, tonne, pennyweight, tael, baht and tola. Conversion is handled server-side.

Can I get a price for 18K or 9K gold? Yes. Pass a purity code such as 750 for 18K or 916 for 22K, or any custom fineness between 1 and 1000. Silver supports Sterling (925) and Britannia (958.4). Omit the parameter for the pure spot price.

Do you provide bid and ask, or only a mid price? Both sides, plus the mid and the spread, wherever the feed publishes an ask.

Is this exchange or LME data? No. It's OTC aggregate pricing sourced from Tier-1 liquidity providers, labelled source: otc_aggregate in every response. It reflects live tradable market levels rather than exchange settlement prices.

Which currencies can I price metals in? Any supported ISO 4217 currency. Where the instrument isn't quoted natively in that currency, the price is crossed via USD and flagged with cross_rate: true.

Can I get the gold/silver ratio? Yes. Ratio instruments such as XAGXAU are quoted directly via /metals/quote — no need to fetch two prices and divide.

Is there a streaming option? Yes. 40+ metals instruments are available over the WebSocket API alongside FX pairs.

It's time to switch to a faster, more secure, more reliable currency API.

What are you waiting for? It's time to get started.
Get your Free Trial API Key