Two live desktop apps to try first:
| Dataset | Format · Size |
|---|---|
| knowledge_collection | Parquet · 12.4 GB |
| knowledge_catalog | CSV · 890 MB |
| knowledge_overview_series | JSONL · 3.1 GB |
| market_knowledge | Parquet · 24.8 GB |
| knowledge_snapshots | CSV · 1.2 GB |
| knowledge_summary_collection | Parquet · 9.7 GB |
Settings live on your device only — no accounts, no cookies.
Loading…
Every Eurodatahub API on this deployment, in one place — cached public reads (Market History, Crypto Klines) plus the streamed Search answer engine. Machine-readable copies: /api/docs and /llms.txt.
| Method | Path | What it serves | Cache |
|---|---|---|---|
| GET | /api/market-history | Market History — the top-10 crypto candle dataset (default 1-year window) mirrored from the market-data upstream and kept synced EVERY 1 MINUTE (database time stamps gate every fetch; max 1 concurrent curl process); permanent SQLite cache. 1m is stored raw (the single stored grid); 5m–3d derive on the fly from it. | permanent |
| GET | /api/klines | Crypto Klines chart feed — the same SQLite time-series (cached-only) used by the desktop chart app; 1m stored, 5m–3d derived from 1m at read time; synced every 1 minute. | permanent |
| POST | /api/search | Search — perplexity-like answer engine: open web search (free DuckDuckGo + Exa MCP) synthesized by the LLM into one streamed cited answer. | none |
| GET | /api/search/stream | The streamed reply poller for /api/search jobs (NDJSON-emulating polling). | none |
| GET | /api/llms.txt | Machine-readable API documentation for LLM agents (also at /llms.txt). | permanent |
Response appears here.
The kline/candlestick dataset replicated by Eurodatahub: ONLY the top-10 pairs (BTCUSDT, ETHUSDT, BNBUSDT, SOLUSDT, XRPUSDT, ADAUSDT, DOGEUSDT, TONUSDT, TRXUSDT, AVAXUSDT) with up to 1 year(s) of history (older rows pruned; default 1 year — the EDH_KLINES_HISTORY_YEAR_OVERRIDE env var widens/narrows the retained window), kept synced from the market-data upstream EVERY 1 MINUTE in the background — the database’s own time stamps (the newest stored kline via SQL MAX(open_time) + the per-series last-sync stamp in klines_meta) gate every fetch to a 1-minute cadence (price history is fetched every 1m, not every 15m), and only the GAP after the newest stored kline is fetched; symbols refresh SEQUENTIALLY with at most ONE concurrent curl process. Answers come from the permanent SQLite cache (eurodatahub_klines.sqlite3) — never a live proxy call; `cache` in the response says exactly that. Intervals: 1m is STORED raw exactly as synced (the 1-year window’s single stored grid); every larger interval up to 3d (5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d) is DERIVED on the fly from those stored 1m candles (a derived candle is emitted only once its bucket fully closed — authentic, never partial). The response mirrors the upstream klines row shape: openTime/open/high/low/close/volume/closeTime (epoch ms).
curl "https://eurodatahub.com/api/market-history?symbol=BTCUSDT&interval=1m&limit=100"
# A larger derived grid:
curl "https://eurodatahub.com/api/market-history?symbol=ETHUSDT&interval=15m&limit=500"
# 200 → { symbol, interval, rows: [...], cached: true,
# cache: { kind: "permanent", store: "sqlite3", maxAgeMs: 31536000000 },
# synced: { syncedAt, everyMs: 60000, maxDelayMs }, count, ... }
# 404 → unknown symbol (allowedSymbols lists the top 10)
# 400 → bad interval/limit/timeZone
# 503 → collector still seeding; retry shortlyThe perplexity-like Search API behind the desktop Search app: the query is fanned out to OPEN/FREE web-search backends (the Exa hosted MCP server in keyless mode via JSON-RPC initialize→tools/call, plus the DuckDuckGo HTML endpoint, both verified live), the configured LLM chat endpoint synthesizes ONE answer grounded in the fetched result snippets, and the reply streams back (poll /api/search/stream?job= like /api/chat — same machinery). No API keys, no rate limit, no stored history, and no count of searches — nothing tracks or displays how many searches have been run.
curl -X POST "https://eurodatahub.com/api/search" \
-H "Content-Type: application/json" \
-d '{"message":"what did the ECB decide this month?","history":[]}'
# → { jobId, conversationId, pollMs }
# then poll: GET /api/search/stream?job=
# done:true carries { reply, replyHtml } The desktop Crypto Klines chart feed: identical SQLite time-series as Market History (top-10 pairs; 1m stored raw for 1 year(s) — the single stored grid, 1-minute gated sync; 5m–3d derived from the stored 1m candles at read time), a compact chart payload.
curl "https://eurodatahub.com/api/klines?symbol=BTCUSDT&interval=1m&limit=500" curl "https://eurodatahub.com/api/klines?symbol=BTCUSDT&interval=15m&limit=500"