Accéder aux données historiques
Interrogez les prix quotidiens depuis 1999, récupérez des plages de dates, comparez deux dates, obtenez des barres OHLC et analysez les tendances des prix.
Historique disponible
MetalAPI conserve une barre quotidienne (ouverture, plus haut, plus bas et clôture) par symbole et par jour :
- Devises depuis 1999
- Métaux précieux, métaux industriels et énergie depuis 2000
- Cryptos depuis 2014
Les prix des métaux antérieurs à octobre 2026 sont dérivés des contrats à terme de première échéance : ils peuvent donc légèrement différer du prix au comptant du même jour. Tous les plans peuvent interroger l'historique complet. Les plans diffèrent uniquement par le nombre de jours qu'une seule requête de plage peut couvrir.
Un seul jour
Utilisez la date dans le chemin, l'endpoint /historical avec un paramètre date, ou /yesterday. La réponse contient les prix de clôture de ce jour (UTC). Pour GET /api/v1/2026-10-01?currencies=XAU,XAG :
{
"success": true,
"timestamp": 1790812800,
"historical": true,
"date": "2026-10-01",
"base": "USD",
"rates": {
"XAU": 0.0002583044893,
"USDXAU": 3871.4,
"XAG": 0.02097315436,
"USDXAG": 47.68
}
}Plages de dates avec /timeframe
/timeframe renvoie une entrée par jour entre start_date et end_date, indexée par date. Pour GET /api/v1/timeframe?start_date=2026-10-19&end_date=2026-10-23¤cies=XAU :
{
"success": true,
"timeframe": true,
"start_date": "2026-10-19",
"end_date": "2026-10-23",
"base": "USD",
"rates": {
"2026-10-19": { "XAU": 0.0002537298285, "USDXAU": 3941.2 },
"2026-10-20": { "XAU": 0.0002526049889, "USDXAU": 3958.75 },
"2026-10-21": { "XAU": 0.0002517369852, "USDXAU": 3972.4 },
"2026-10-22": { "XAU": 0.0002506642603, "USDXAU": 3989.4 },
"2026-10-23": { "XAU": 0.0002501319446, "USDXAU": 3997.89 }
}
}Les jours sans prix de clôture, comme les week-ends ou les jours fériés des marchés, peuvent être absents. Ne supposez pas qu'il y a une entrée par jour calendaire. /timeseries est un alias qui renvoie "timeseries": true au lieu de "timeframe": true.
Plages plus longues que ce qu'autorise votre plan
Une seule requête peut couvrir jusqu'à 30 jours sur Free et 365 jours sur les plans payants. Les périodes plus longues renvoient l'erreur 207. Découpez les longues plages en tranches, chaque tranche correspondant à une requête :
const DAY = 86_400_000;
const MAX_DAYS = 365; // 30 sur le plan Free
const iso = (d) => d.toISOString().slice(0, 10);
async function fetchRange(start, end, currencies) {
const rates = {};
let from = new Date(`${start}T00:00:00Z`);
const last = new Date(`${end}T00:00:00Z`);
while (from <= last) {
const to = new Date(Math.min(from.getTime() + MAX_DAYS * DAY, last.getTime()));
const params = new URLSearchParams({ start_date: iso(from), end_date: iso(to), currencies });
const res = await fetch(`https://metalapi.com/api/v1/timeframe?${params}`, {
headers: { "X-API-Key": process.env.METALAPI_KEY },
});
const data = await res.json();
if (!data.success) throw new Error(`${data.error.code}: ${data.error.info}`);
Object.assign(rates, data.rates);
from = new Date(to.getTime() + DAY);
}
return rates;
}
// Dix ans de prix quotidiens de l'or en 10 requêtes
const gold = await fetchRange("2016-01-01", "2025-12-31", "XAU");Variations entre deux dates
/change compare directement deux jours : inutile de télécharger toute la plage intermédiaire. Pour GET /api/v1/change?start_date=2026-09-30&end_date=2026-10-23¤cies=XAU :
{
"success": true,
"change": true,
"start_date": "2026-09-30",
"end_date": "2026-10-23",
"base": "USD",
"rates": {
"XAU": { "start_rate": 0.0002591613539, "end_rate": 0.0002501319446, "change": -0.000009029409258, "change_pct": -3.48409 },
"USDXAU": { "start_rate": 3858.6, "end_rate": 3997.89, "change": 139.29, "change_pct": 3.60986 }
}
}Utilisez les clés préfixées comme USDXAU pour les variations de prix. Les clés inverses évoluent dans le sens opposé.
Barres OHLC quotidiennes
/ohlc renvoie l'ouverture, le plus haut, le plus bas et la clôture d'un jour, soit exactement ce qu'il faut pour des graphiques en chandeliers et des fourchettes quotidiennes. Pour GET /api/v1/ohlc?date=2026-10-22¤cies=XAU :
{
"success": true,
"ohlc": true,
"date": "2026-10-22",
"base": "USD",
"rates": {
"USDXAU": { "open": 3962.1, "high": 4012.75, "low": 3951.3, "close": 3989.4 },
"XAU": { "open": 0.0002523914086, "high": 0.0002530812644, "low": 0.000249205657, "close": 0.0002506642603 }
}
}Conversions historiques
Ajoutez date à /convert pour convertir à un prix de clôture passé. Par exemple, voici ce que valaient 10 onces troy d'argent en euros le 1er octobre 2026 :
GET /api/v1/convert?api_key=YOUR_API_KEY&from=XAG&to=EUR&amount=10&date=2026-10-01Analyser les tendances
La réponse de /timeframe se transforme facilement en série. Cet exemple calcule la moyenne mobile simple sur 20 jours du prix de l'or :
// data = réponse de /timeframe?currencies=XAU
const series = Object.entries(data.rates)
.sort(([a], [b]) => a.localeCompare(b))
.map(([date, rates]) => ({ date, price: rates.USDXAU }));
function movingAverage(points, period) {
return points.slice(period - 1).map((point, i) => ({
date: point.date,
sma: points.slice(i, i + period).reduce((sum, p) => sum + p.price, 0) / period,
}));
}
const sma20 = movingAverage(series, 20);Les prix de clôture des jours passés ne changent jamais : stockez-les durablement au lieu de les redemander. Seule la barre du jour évolue encore.
Guides associés
Prêt à commencer ?
Créez un compte gratuit pour obtenir votre clé API, ou explorez tous les endpoints dans la référence de l'API.