PROXY OVERVIEW
Der EOD-Proxy läuft direkt auf gemini-os.replit.app als Node.js/Express Server — kein Rate Limit, kein fremdes Proxy, volle Kontrolle. Der Proxy leitet Anfragen an eodhd.com weiter und schützt den API-Key.
BASE URL → https://gemini-os.replit.app/api/eod
Alle Anfragen sind GET-Requests. Kein Auth-Header nötig. CORS ist offen (alle Origins erlaubt). Kann direkt aus HTML/JS aufgerufen werden.
PARAMETER
| Parameter | Typ | Default | Beschreibung |
|---|---|---|---|
| symbol | REQUIRED | — | Ticker-Symbol. Format: AAPL.US · BAS.DE · BTC-USD · ^GSPC |
| endpoint | optional | real-time | real-time · historical · intraday · fundamentals |
| period | optional | d | Für historical: d (täglich) · w (wöchentlich) · m (monatlich) |
| from | optional | — | Startdatum YYYY-MM-DD (für historical & intraday) |
| to | optional | — | Enddatum YYYY-MM-DD (für historical & intraday) |
| fmt | optional | json | json · csv |
ENDPOINT: REAL-TIME
Aktueller Kurs, Volumen, Change. Gibt ein einzelnes JSON-Objekt zurück.
https://gemini-os.replit.app/api/eod?symbol=AAPL.US&endpoint=real-time
{
"code": "AAPL.US",
"timestamp": 1778876880,
"gmtoffset": 0,
"open": 297.9,
"high": 303.2,
"low": 296.52,
"close": 300.23,
"volume": 54620573,
"previousClose": 298.21,
"change": 2.02,
"change_p": 0.6774
}
"code": "AAPL.US",
"timestamp": 1778876880,
"gmtoffset": 0,
"open": 297.9,
"high": 303.2,
"low": 296.52,
"close": 300.23,
"volume": 54620573,
"previousClose": 298.21,
"change": 2.02,
"change_p": 0.6774
}
// Minimal Fetch — Real-Time
const res = await fetch('https://gemini-os.replit.app/api/eod?symbol=AAPL.US&endpoint=real-time');
const data = await res.json();
console.log(data.close, data.change_p); // 300.23 0.6774
ENDPOINT: HISTORICAL
EOD-Kursdaten (OHLCV) über einen Zeitraum. Gibt ein Array von Tagesobjekten zurück.
https://gemini-os.replit.app/api/eod?symbol=AAPL.US&endpoint=historical&from=2025-01-01&to=2025-12-31&period=d
[
{ "date": "2025-12-31", "open": 251.1, "high": 255.3, "low": 249.8, "close": 253.7, "volume": 41200000, "adjusted_close": 253.7 },
{ "date": "2025-12-30", "open": 249.5, "high": 252.1, "low": 248.0, "close": 251.1, "volume": 38500000, "adjusted_close": 251.1 },
...
]
{ "date": "2025-12-31", "open": 251.1, "high": 255.3, "low": 249.8, "close": 253.7, "volume": 41200000, "adjusted_close": 253.7 },
{ "date": "2025-12-30", "open": 249.5, "high": 252.1, "low": 248.0, "close": 251.1, "volume": 38500000, "adjusted_close": 251.1 },
...
]
// Historical OHLCV — letzte 30 Tage
function dateStr(daysAgo = 0) {
const d = new Date();
d.setDate(d.getDate() - daysAgo);
return d.toISOString().split('T')[0];
}
const url = `https://gemini-os.replit.app/api/eod?symbol=AAPL.US&endpoint=historical&from=${dateStr(30)}&to=${dateStr(0)}&period=d`;
const data = await (await fetch(url)).json();
data.sort((a, b) => new Date(b.date) - new Date(a.date)); // neueste zuerst
const latest = parseFloat(data[0].close);
const prev = parseFloat(data[1].close);
const signal = latest > prev ? 'LONG' : 'SHORT';
ENDPOINT: INTRADAY
1-Minuten Kerzen (intraday). Gibt ein Array zurück — nur für Handelstage verfügbar.
https://gemini-os.replit.app/api/eod?symbol=AAPL.US&endpoint=intraday&from=2025-06-01&to=2025-06-02
// Intraday — heutiger Tag
const today = new Date().toISOString().split('T')[0];
const data = await (await fetch(
`https://gemini-os.replit.app/api/eod?symbol=AAPL.US&endpoint=intraday&from=${today}&to=${today}`
)).json();
ENDPOINT: FUNDAMENTALS
Fundamentaldaten: EPS, KGV, Dividende, Margen, Bilanz, etc. Großes JSON-Objekt.
https://gemini-os.replit.app/api/eod?symbol=AAPL.US&endpoint=fundamentals
// Fundamentals — KGV und Dividendenrendite
const data = await (await fetch(
'https://gemini-os.replit.app/api/eod?symbol=AAPL.US&endpoint=fundamentals'
)).json();
const pe = data?.Highlights?.PERatio;
const div = data?.Highlights?.DividendYield;
const eps = data?.Highlights?.EPS;
VOLLSTÄNDIGE INTEGRATION — COPY & PASTE
Universeller EOD-Helper für jedes HTML-Projekt. Einfach oben im Script-Tag einbinden:
// ═══ EOD PROXY HELPER ═══════════════════════════════════════════
const EOD_PROXY = 'https://gemini-os.replit.app/api/eod';
async function eodFetch(symbol, endpoint = 'real-time', opts = {}) {
const p = new URLSearchParams({ symbol, endpoint, ...opts });
const res = await fetch(`${EOD_PROXY}?${p}`);
if (!res.ok) throw new Error(`EOD ${res.status}`);
return res.json();
}
// BEISPIELE:
// Real-Time Kurs
const rt = await eodFetch('AAPL.US');
// → { close: 300.23, change_p: 0.6774, ... }
// Historische Daten
const hist = await eodFetch('SAP.DE', 'historical', { from: '2025-01-01', to: '2025-12-31' });
// → [{ date, open, high, low, close, volume }, ...]
// Fundamentals
const fund = await eodFetch('MSFT.US', 'fundamentals');
// → { Highlights: { PERatio, EPS, DividendYield, ... }, ... }
// Intraday
const today = new Date().toISOString().split('T')[0];
const intra = await eodFetch('BTC-USD', 'intraday', { from: today, to: today });
SYMBOL FORMATE
| Markt | Format | Beispiele |
|---|---|---|
| US Stocks | TICKER.US | AAPL.US · MSFT.US · TSLA.US · NVDA.US |
| Deutsche Aktien | TICKER.DE | BAS.DE · SAP.DE · BMW.DE · VOW3.DE |
| Österreich | TICKER.VI | EBS.VI · OMV.VI · ATS.VI |
| UK | TICKER.LSE | HSBA.LSE · BP.LSE · SHEL.LSE |
| Schweiz | TICKER.SW | NESN.SW · ROG.SW · NOVN.SW |
| Crypto | COIN-USD | BTC-USD · ETH-USD · SOL-USD |
| Indizes | ^KÜRZEL | ^GSPC (S&P500) · ^DJI · ^IXIC · ^GDAXI |
| Forex | PAIR.FOREX | EURUSD.FOREX · GBPUSD.FOREX |
| ETFs | TICKER.US | SPY.US · QQQ.US · VTI.US · IWDA.LSE |
RETRY-HELPER FÜR MASS-SCANS
Bei Massenabfragen (100+ Symbole) empfehle ich diesen Retry-Helper mit Delay:
async function eodWithRetry(symbol, endpoint = 'real-time', opts = {}, retries = 3) {
const delays = [10000, 20000, 40000];
for (let i = 0; i < retries; i++) {
const res = await fetch(`${EOD_PROXY}?${new URLSearchParams({ symbol, endpoint, ...opts })}`);
if (res.status === 429) { await new Promise(r => setTimeout(r, delays[i])); continue; }
if (!res.ok) throw new Error(`EOD ${res.status}`);
return res.json();
}
throw new Error('Max retries');
}
// Mass-Scan Loop — 2500ms zwischen Requests
const symbols = ['AAPL.US', 'MSFT.US', 'SAP.DE', 'BAS.DE' /* ... */];
for (const sym of symbols) {
try {
const d = await eodWithRetry(sym);
console.log(sym, d.close, d.change_p);
} catch(e) { console.warn(sym, e.message); }
await new Promise(r => setTimeout(r, 2500));
}
HEALTH CHECK
https://gemini-os.replit.app/api/health
{ "status": "EOD Proxy running", "eod_key": true, "timestamp": "2026-05-17T08:50:01.063Z" }
Der EOD-API-Key ist serverseitig gespeichert und wird nie an den Client übertragen. Alle Requests gehen über den Proxy — der Key bleibt sicher.