cURL
curl --request GET \
--url 'https://api.fastforex.io/metals/quote?api_key='import requests
url = "https://api.fastforex.io/metals/quote?api_key="
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.fastforex.io/metals/quote?api_key=', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fastforex.io/metals/quote?api_key=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fastforex.io/metals/quote?api_key="
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fastforex.io/metals/quote?api_key=")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fastforex.io/metals/quote?api_key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"quotes": {
"XAUUSD": {
"bid": "2500.10",
"ask": "2500.90",
"mid": "2500.50",
"spread": "0.80",
"tsp": 1739305030072,
"dtm": "2026-08-16T21:02:19Z",
"metal": "XAU",
"target": "USD",
"unit": "oz_t",
"purity": "1000",
"cross_rate": false
},
"XCUUSD": {
"bid": "9500.00",
"ask": "9510.00",
"mid": "9505.00",
"spread": "10.00",
"tsp": 1739305030072,
"dtm": "2026-08-16T21:02:19Z",
"metal": "XCU",
"target": "USD",
"unit": "metric_tonne",
"cross_rate": false
}
},
"source": "otc_aggregate",
"warnings": {
"invalid_instruments": [
"XYZUSD"
]
},
"ms": 8
}Metals
Real-time Metals bid/ask quote
Latest bid/ask for up to 10 metals instruments, quoted exactly as the feed supplies them - no unit, purity or currency conversion is applied.
Instruments beyond the first 10 are reported under warnings.ignored_instruments, and unrecognised ones under warnings.invalid_instruments. The request fails only if no valid instrument is supplied at all.
GET
/
metals
/
quote
cURL
curl --request GET \
--url 'https://api.fastforex.io/metals/quote?api_key='import requests
url = "https://api.fastforex.io/metals/quote?api_key="
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.fastforex.io/metals/quote?api_key=', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fastforex.io/metals/quote?api_key=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fastforex.io/metals/quote?api_key="
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fastforex.io/metals/quote?api_key=")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fastforex.io/metals/quote?api_key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"quotes": {
"XAUUSD": {
"bid": "2500.10",
"ask": "2500.90",
"mid": "2500.50",
"spread": "0.80",
"tsp": 1739305030072,
"dtm": "2026-08-16T21:02:19Z",
"metal": "XAU",
"target": "USD",
"unit": "oz_t",
"purity": "1000",
"cross_rate": false
},
"XCUUSD": {
"bid": "9500.00",
"ask": "9510.00",
"mid": "9505.00",
"spread": "10.00",
"tsp": 1739305030072,
"dtm": "2026-08-16T21:02:19Z",
"metal": "XCU",
"target": "USD",
"unit": "metric_tonne",
"cross_rate": false
}
},
"source": "otc_aggregate",
"warnings": {
"invalid_instruments": [
"XYZUSD"
]
},
"ms": 8
}Authorizations
api_keyapiKeyHeaderbearerAuthbasicAuth
Query Parameters
Comma-separated list of instrument symbols, maximum 10 A comma-separated list of metals instrument symbols
Pattern:
[A-Z]{6,7}(,[A-Z]{6,7})*Example:
"XAUUSD,XAGUSD"
Include the display-name fields in the response Truthy values are true, 1, yes and y. Anything else is treated as false.
Example:
"true"