Effectuer votre premier appel d'API
Toutes les routes, sauf /health, /docs, /redoc, /openapi.json, /widgets.json, /apps.json et /static, exigent une clé d'API, envoyée dans l'un de ces deux en-têtes :
Authorization: Bearer frx_live_...
X-API-KEY: frx_live_...
Une clé absente renvoie 401, une clé inconnue 403. Les exemples ci-dessous utilisent la clé définie dans .env lors de l'installation :
export FONREX_API_KEY="frx_live_..." # the value of FONREX_API_KEY in .env
AUTH="X-API-KEY: $FONREX_API_KEY"
La documentation interactive de votre instance se trouve à http://localhost:5000/docs.
1. Cours de clôture
curl -s -H "$AUTH" "http://localhost:5000/eod/AIR.PA?period=5d"
Quand rien n'est encore stocké pour la cotation, Fonrex ingère d'abord son historique (Yahoo Finance, TradingView en solution de repli) ; le premier appel peut donc prendre quelques secondes.
{
"ticker": "AIR.PA",
"period": "5d",
"format": "json",
"count": 3,
"retrieved_at": "2026-10-08T16:34:42.404598+00:00",
"data_source": "database",
"data": [
{
"Date": "2026-10-07",
"Open": 154.46,
"High": 156.46,
"Low": 152.46,
"Close": 155.46,
"Adj Close": 155.46,
"Volume": 1400000
}
]
}
Ajoutez &fmt=csv pour obtenir du CSV. Quand plusieurs cotations partagent un ticker, choisissez-en une avec currency ou exchange.
Python
import os
import requests
session = requests.Session()
session.headers["X-API-KEY"] = os.environ["FONREX_API_KEY"]
eod = session.get("http://localhost:5000/eod/AIR.PA", params={"period": "1mo"}).json()
for bar in eod["data"]:
print(bar["Date"], bar["Close"])
2. Un indicateur technique
Les indicateurs sont calculés sur les prix stockés en base de données : ingérez d'abord la cotation (étape 1, ou POST /historical/ingest?ticker=AIR.PA). Sans prix, la réponse est 404.
curl -s -H "$AUTH" "http://localhost:5000/technical/AIR.PA?indicator=rsi&period=14"
rsi = session.get(
"http://localhost:5000/technical/AIR.PA",
params={"indicator": "rsi", "period": 14},
).json()
last = rsi["series"][0]["values"][-1]
print(f"RSI(14) on {last['t']}: {last['v']}")
Les valeurs sont renvoyées sous forme de chaînes (nombres décimaux), ou null tant que l'indicateur a trop peu de barres.
3. Données fondamentales
curl -s -H "$AUTH" "http://localhost:5000/fundamental?ticker=AIR.PA"
La réponse est un document unique au format EODHD (General, Highlights, Valuation, …) avec une section Sources qui indique la source de chaque chiffre. Voir Données fondamentales.
4. Prix en temps réel par WebSocket
Les navigateurs ne peuvent pas définir d'en-têtes sur un WebSocket : passez la clé dans la chaîne de requête (token, api_key ou key).
const ws = new WebSocket(`ws://localhost:5000/ws/realtime/AIR.PA?token=${FONREX_API_KEY}`);
ws.onmessage = (event) => {
const message = JSON.parse(event.data);
if (message.type === "tick") console.log(message.data.close, message.data.timestamp);
};
import asyncio
import json
import os
import websockets
async def stream(ticker: str) -> None:
url = f"ws://localhost:5000/ws/realtime/{ticker}?token={os.environ['FONREX_API_KEY']}"
async with websockets.connect(url) as ws:
async for raw in ws:
message = json.loads(raw)
if message["type"] in ("snapshot", "tick"):
print(message["type"], message["data"]["close"])
asyncio.run(stream("AIR.PA"))
Avec une clé à accès complet, la connexion démarre le flux TradingView du ticker s'il n'est pas encore diffusé. Une clé en lecture seule n'en démarre jamais : elle reçoit un message not_streaming, puis les ticks dès qu'un client à accès complet a abonné le ticker. Voir Temps réel.