Référence API Ingestion historique
Les prix sont enregistrés par cotation, résolution (1D, 1W, 1M) et séance dans l'hypertable prices_eod. Les routes d'ingestion modifient des données : elles exigent une clé à accès complet (une clé en lecture seule reçoit 403).
POST /historical/ingest
Ingérer l'historique d'une cotation. Les paramètres sont des paramètres de requête (query).
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
ticker | string | — | Ticker à ingérer (obligatoire) |
resolution | string | 1D | 1D, 1W ou 1M |
source | string | auto | auto (Yahoo Finance, puis TradingView), yfinance ou tradingview |
force_refresh | boolean | false | Récupérer de nouveau d'un seul tenant la plage demandée et la plage enregistrée, remplacer les barres enregistrées et rechercher à nouveau le symbole source |
from_date, to_date | date | — | Fenêtre YYYY-MM-DD. Sans elles : dix ans lors d'une première ingestion, sinon à partir du lendemain de la dernière séance enregistrée |
currency, exchange | string | — | Choisir la cotation lorsque plusieurs partagent le ticker (la principale sinon) |
isin | string | — | Ne garder que les cotations de cet instrument, lorsque plusieurs instruments partagent le ticker. Un ISIN mal formé est refusé avec 422 |
curl -s -X POST -H "X-API-KEY: $FONREX_API_KEY" \
"http://localhost:5000/historical/ingest?ticker=AIR.PA"
{
"ticker": "AIR.PA",
"resolution": "1D",
"status": "success",
"source_used": "yfinance",
"provider_symbol": "AIR.PA",
"records_added": 2531,
"from_date": "2016-10-10",
"to_date": "2026-10-07",
"duration_ms": 1840,
"error": null,
"note": null
}
| Champ | Signification |
|---|---|
status | success, up_to_date (rien à récupérer) ou failed |
source_used | yfinance ou tradingview ; en cas d'échec, la source demandée (auto…) |
provider_symbol | Le symbole demandé à la source : le symbole Yahoo vérifié pour la cotation, ou le symbole TradingView |
note | Pourquoi Yahoo n'a pas été la source, lorsque les prix viennent de TradingView ; Whole history fetched again: ... lorsque la série enregistrée a été remplacée (split ou dividende depuis la dernière ingestion, rafraîchissement forcé, ou série enregistrée avant la migration 016) |
error | Pourquoi rien n'a pu être ingéré, par ex. aucun symbole Yahoo coté dans la devise de la cotation |
POST /historical/ingest/bulk
Ingérer plusieurs tickers en parallèle. Corps JSON :
{
"tickers": ["AIR.PA", "BNP.PA", "MC.PA"],
"resolution": "1D",
"source": "auto",
"force_refresh": false,
"concurrency": 5
}
concurrency est compris entre 1 et 20. Chaque ticker désigne sa cotation principale. La réponse est {"status": "completed", "results": [...]} avec un résultat par ticker, au format ci-dessus.
GET /ticker/{symbol}/history
Les barres OHLCV d'une cotation, lues uniquement en base : cette route n'ingère jamais. Les barres sont renvoyées de la plus récente à la plus ancienne.
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
symbol | string | — | Ticker |
start_date, end_date | date | — | Fenêtre YYYY-MM-DD |
interval | string | 1D | 1D, 1W, 1M (ou daily, weekly, monthly) |
currency, exchange | string | — | Choisir la cotation |
isin | string | — | Ne garder que les cotations de cet instrument (422 s'il est mal formé) |
curl -s -H "X-API-KEY: $FONREX_API_KEY" \
"http://localhost:5000/ticker/AIR.PA/history?start_date=2026-09-28&end_date=2026-10-02"
{
"ticker": "AIR.PA",
"listing": { "ticker": "AIR.PA", "isin": "NL0000235190", "currency": "EUR", "exchange": "XPAR" },
"interval": "1D",
"count": 5,
"data": [
{ "time": "2026-10-02T00:00:00Z", "open": 149.07, "high": 151.07, "low": 147.07, "close": 150.07, "adj_close": 150.07, "volume": 1395000 },
{ "time": "2026-10-01T00:00:00Z", "open": 147.97, "high": 149.97, "low": 145.97, "close": 148.97, "adj_close": 148.97, "volume": 1394000 }
]
}
close est la clôture négociée (ajustée des splits) ; adj_close est aussi ajusté des dividendes, et il est vide pour les barres TradingView. listing est la cotation qui a été lue (null lorsque le ticker n'en désigne aucune). time est la date de la séance, à minuit UTC. Les réponses sont mises en cache 24 heures et invalidées lorsque le ticker est ingéré à nouveau.
Barres hebdomadaires et mensuelles
En plus des barres 1W et 1M que vous pouvez ingérer, la base maintient deux agrégats continus calculés à partir des barres journalières de chaque cotation, prices_weekly et prices_monthly. Ils sont rafraîchis chaque jour et répondent à partir des barres journalières pour la période récente.
Voir Ingérer des données historiques pour le pipeline et le choix du symbole source.