Gold price API
Live prices for gold, silver, platinum, palladium and copper, exchange rates, daily history and candles, over simple GET requests with an API key.
Reference
- Base URL
- https://goldapi.dev/api/v1
- Authentication
- Your key in the X-API-Key header
- Response format
- JSON
- Free plan
- 100 requests an hour, no credit card
curl --fail-with-body --max-time 10 "https://goldapi.dev/api/v1/price/XAU/USD" \ -H "X-API-Key: $API_KEY"const res = await fetch("https://goldapi.dev/api/v1/price/XAU/USD", { headers: { "X-API-Key": process.env.API_KEY }, signal: AbortSignal.timeout(10_000),});if (!res.ok) throw new Error("HTTP " + res.status);console.log(await res.json());import os, requestsres = requests.get( "https://goldapi.dev/api/v1/price/XAU/USD", headers={"X-API-Key": os.environ["API_KEY"]}, timeout=10,)res.raise_for_status()print(res.json())package mainimport ( "fmt" "io" "net/http" "os" "time")func main() { client := http.Client{Timeout: 10 * time.Second} req, err := http.NewRequest("GET", "https://goldapi.dev/api/v1/price/XAU/USD", nil) if err != nil { panic(err) } req.Header.Set("X-API-Key", os.Getenv("API_KEY")) res, err := client.Do(req) if err != nil { panic(err) } defer res.Body.Close() body, err := io.ReadAll(res.Body) if err != nil { panic(err) } if res.StatusCode != 200 { panic(fmt.Sprintf("HTTP %d: %s", res.StatusCode, body)) } fmt.Println(string(body))}import java.io.IOException;import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.time.Duration;public class Main { public static void main(String[] args) throws Exception { HttpRequest request = HttpRequest.newBuilder(URI.create("https://goldapi.dev/api/v1/price/XAU/USD")) .header("X-API-Key", System.getenv("API_KEY")) .timeout(Duration.ofSeconds(10)) .build(); HttpResponse<String> response = HttpClient.newHttpClient() .send(request, HttpResponse.BodyHandlers.ofString()); if (response.statusCode() != 200) throw new IOException("HTTP " + response.statusCode()); System.out.println(response.body()); }}import Foundationvar request = URLRequest(url: URL(string: "https://goldapi.dev/api/v1/price/XAU/USD")!)request.setValue(ProcessInfo.processInfo.environment["API_KEY"], forHTTPHeaderField: "X-API-Key")request.timeoutInterval = 10let (data, response) = try await URLSession.shared.data(for: request)guard (response as? HTTPURLResponse)?.statusCode == 200 else { throw URLError(.badServerResponse) }print(String(data: data, encoding: .utf8)!)$context = stream_context_create(["http" => [ "header" => "X-API-Key: " . getenv("API_KEY"), "timeout" => 10,]]);$body = file_get_contents("https://goldapi.dev/api/v1/price/XAU/USD", false, $context);if ($body === false) throw new RuntimeException("Request failed");echo $body;Response 200
{
"symbol": "XAU",
"name": "Gold",
"currency": "USD",
"unit": "oz",
"price": 4072.1,
"gram": 130.921,
"karat": 24,
"updatedAt": "2026-11-07T01:59:48+02:00"
}
An endpoint for each job
Metal data for the apps you build
Practical guides
FAQ
Is the gold price API free?
Yes. Free includes 100 requests an hour, live spot prices for gold, silver, copper, platinum and palladium, and exchange rates. No credit card required. Free permits commercial use with a visible link.
Good API for commodity price data?
Yes. Every plan includes live spot prices for gold, silver, copper, platinum and palladium, with conversions into other currencies. Basic at $8/mo adds daily history.
Which sources feed the API?
Spot prices come from our market data source. Prices in other currencies are USD spot × live exchange rates, and gold in EGP also follows Egypt's local market. Each response includes the time it was computed.
Commercial use?
Every plan permits commercial use. Free requires a visible link to goldapi.dev near the prices. Redistribution or reselling the data itself requires a separate deal: [email protected].