EOD PROXY // API DOCS
NEURAL-OS · gemini-os.replit.app · Kein Rate Limit · Nur EOD Endpoint

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

ParameterTypDefaultBeschreibung
symbolREQUIREDTicker-Symbol. Format: AAPL.US · BAS.DE · BTC-USD · ^GSPC
endpointoptionalreal-timereal-time · historical · intraday · fundamentals
periodoptionaldFür historical: d (täglich) · w (wöchentlich) · m (monatlich)
fromoptionalStartdatum YYYY-MM-DD (für historical & intraday)
tooptionalEnddatum YYYY-MM-DD (für historical & intraday)
fmtoptionaljsonjson · 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
}
// 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 },
  ...
]
// 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

MarktFormatBeispiele
US StocksTICKER.USAAPL.US · MSFT.US · TSLA.US · NVDA.US
Deutsche AktienTICKER.DEBAS.DE · SAP.DE · BMW.DE · VOW3.DE
ÖsterreichTICKER.VIEBS.VI · OMV.VI · ATS.VI
UKTICKER.LSEHSBA.LSE · BP.LSE · SHEL.LSE
SchweizTICKER.SWNESN.SW · ROG.SW · NOVN.SW
CryptoCOIN-USDBTC-USD · ETH-USD · SOL-USD
Indizes^KÜRZEL^GSPC (S&P500) · ^DJI · ^IXIC · ^GDAXI
ForexPAIR.FOREXEURUSD.FOREX · GBPUSD.FOREX
ETFsTICKER.USSPY.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.