
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.
Prices are available in 160+ ISO 4217 currencies, with the major ones quoted natively and everything else available via a transparent cross.
*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 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
/metals/list — supported metals, keyed by symbol/metals/units — units of mass prices can be quoted in/metals/purities — purity grades per precious metal, finest first/metals/instruments — tradeable instruments, with category, grade, unit and typePrices
/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 allThose 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.
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.
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.
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.
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 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.
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.
Not every instrument is a metal priced in a currency. Alongside the spot instruments, the catalogue includes:
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.Each entry from /metals/instruments declares its type as spot, ratio or crypto, so you can filter to what your application actually handles.
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.
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].
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.