╔══════════════════════════════════════════════════════════════════╗ ║ EOD PROXY — API INTEGRATION DOCS ║ ║ https://gemini-os.replit.app/api/eod ║ ║ Kein Rate Limit · Kein Auth-Header · CORS offen ║ ╚══════════════════════════════════════════════════════════════════╝ PROXY URL: https://gemini-os.replit.app/api/eod METHODE: GET AUTH: Nicht erforderlich CORS: Alle Origins erlaubt FORMAT: JSON (default) oder CSV ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ PARAMETER ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ symbol [REQUIRED] Ticker-Symbol (z.B. AAPL.US, BAS.DE, BTC-USD) endpoint [optional] real-time | historical | intraday | fundamentals Default: real-time period [optional] Für historical: d (täglich) | w (wöchentlich) | m (monatlich) Default: d from [optional] Startdatum YYYY-MM-DD (historical & intraday) to [optional] Enddatum YYYY-MM-DD (historical & intraday) fmt [optional] json | csv — Default: json ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ENDPOINTS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1. REAL-TIME (default) URL: /api/eod?symbol=AAPL.US&endpoint=real-time Gibt: Einzelnes JSON-Objekt mit aktuellem Kurs Response: { "code": "AAPL.US", "timestamp": 1778876880, "open": 297.9, "high": 303.2, "low": 296.52, "close": 300.23, ← aktueller Kurs "volume": 54620573, "previousClose": 298.21, "change": 2.02, "change_p": 0.6774 ← Änderung in Prozent } 2. HISTORICAL URL: /api/eod?symbol=AAPL.US&endpoint=historical&from=2025-01-01&to=2025-12-31&period=d Gibt: Array von OHLCV-Tagesobjekten (neueste zuerst nach sort) Response: [ { "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", ... }, ... ] 3. INTRADAY URL: /api/eod?symbol=AAPL.US&endpoint=intraday&from=2025-06-01&to=2025-06-02 Gibt: Array von 1-Minuten-Kerzen 4. FUNDAMENTALS URL: /api/eod?symbol=AAPL.US&endpoint=fundamentals Gibt: Großes JSON-Objekt mit EPS, KGV, Dividende, Bilanzdaten etc. Wichtige Felder: data.Highlights.PERatio → KGV data.Highlights.EPS → Gewinn je Aktie data.Highlights.DividendYield → Dividendenrendite (als Dezimalzahl!) data.Highlights.MarketCapitalization data.Highlights.52WeekHigh / 52WeekLow HEALTH CHECK: URL: /api/health Gibt: { "status": "EOD Proxy running", "eod_key": true, "timestamp": "..." } ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SYMBOL FORMATE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ US-Aktien: TICKER.US AAPL.US · MSFT.US · TSLA.US · NVDA.US Deutschland: TICKER.DE BAS.DE · SAP.DE · BMW.DE · VOW3.DE Österreich: TICKER.VI EBS.VI · OMV.VI UK: TICKER.LSE HSBA.LSE · BP.LSE Schweiz: TICKER.SW NESN.SW · ROG.SW Crypto: COIN-USD BTC-USD · ETH-USD · SOL-USD Indizes: ^KÜRZEL ^GSPC · ^DJI · ^IXIC · ^GDAXI · ^ATX Forex: PAIR.FOREX EURUSD.FOREX · GBPUSD.FOREX ETFs (US): TICKER.US SPY.US · QQQ.US · VTI.US ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ JAVASCRIPT — COPY & PASTE 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: const rt = await eodFetch('AAPL.US'); // → { close: 300.23, change_p: 0.6774, ... } const hist = await eodFetch('SAP.XETRA', 'historical', { from: '2025-01-01', to: '2025-12-31' }); // → [{ date, open, high, low, close, volume }, ...] const fund = await eodFetch('MSFT.US', 'fundamentals'); // → { Highlights: { PERatio, EPS, DividendYield, ... }, ... } const today = new Date().toISOString().split('T')[0]; const intra = await eodFetch('BTC-USD', 'intraday', { from: today, to: today }); ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ RETRY-HELPER FÜR MASS-SCANS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 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 reached'); } // Mass-Scan mit 2500ms Pause 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)); } ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ WICHTIGE HINWEISE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - DividendYield kommt als Dezimalzahl: 0.0037 = 0.37% → mal 100 für Prozent - Fundamentals-Margen (ProfitMargin etc.) auch als Dezimalzahl: 0.245 = 24.5% - Historical Array muss nach Datum sortiert werden (sort neueste zuerst) - Real-time Daten: close = letzter Kurs; last = alternativ bei manchen Symbolen - Bei Real-time: change_p ist der %-Wert direkt (kein mal 100 nötig) - Intraday nur für aktuelle Handelstage verfügbar (kein Wochenende) - Indizes mit ^ prefix: ^GSPC, ^DJI — kein Exchange-Suffix nötig ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ NEURAL-OS · gemini-os.replit.app · EOD Proxy v2.0