Market Oracle is a REST and WebSocket crypto market data API for trading systems and AI agents: closed bars, verified indicators, order-book microstructure, macro context, and market regime. One request. You make the decisions — we supply facts only.
Oracle does not open trades or manage positions. Its job is to give your algorithms correct data you can build decisions on.
Trading decisions are formed exclusively on a closed 1m bar (closed: true). No look-ahead — data is always point-in-time correct.
EMA, RSI, ATR, ADX(+DI), VWAP, Bollinger, OBV, MFI, and CVD are computed on every native TF and covered by tests. Closed bars and indicators are stored atomically; state recovers after failures.
One call to GET /v1/context/{symbol} returns everything for a decision: bar, order book, derivatives, macro, and market regime. Machine-readable formats, explicit limits, predictable errors.
Context, quotes, and history work only for these symbols. You cannot add your own ticker; check ready via GET /v1/symbols.
The main endpoint for bots and AI agents. Bar with indicators, ticker, live order book, trade_cost / cost_risk, live HTF, derivatives, macro, quote check, market regime, and data_quality — instead of 8–10 separate calls.
The only signal source is a closed bar (closed: true). Everything else is filters: tradable, a macro pause, data_quality.score ≥ 70.
The same core on 1m and on native 5m/15m/30m/1h/4h/1d/1w. Decimal strings; during warmup a field is null, not zero.
Closed minute aggregation of top-20: spread, imbalance, walls, pressure.
/v1/microstructure/{symbol}Fear&Greed, dominance, stablecoins, DXY, 10Y yield.
/v1/macroFunding, open interest, liquidation cascades.
/v1/derivatives/{symbol}Correlation with BTC, realized vol, market breadth.
/v1/market-regimeMedian-mid across independent sources with divergence control — protection against a bad tick before entry. Symbol must be from the list above.
/v1/quotes/{symbol}bar_close + opt-in microstructure_close; REST to recover gaps.
WS /v1/streamUpcoming events (FOMC, CPI) with impact level.
/v1/calendarNative candles, not stitched minutes: 5m 60d, 15m 90d, 30m 120d, 1h ~9 mo, 4h 2y, 1d 3y, 1w 5y. WS closes 1m only.
/v1/history/{symbol}?interval=…A typical flow for an AI agent or trading bot.
Start with an API key mo_… (“Get API key”). Every /v1/* call and the WebSocket then send Authorization: Bearer mo_…. Without a key there are no bars, context, or stream. Only GET /health is public.
Confirm status=ok and that bars are fresh.
Daily limits, RPM, WS count, and key expiry — so you can pick a request cadence.
Only the core set (BTC, ETH, SOL, BNB, DOGE, XRP) and only ready=true, ideally history=full_day.
Receive bar_close in real time. Order book optionally via microstructure:true.
Before entry: cost, HTF, quality. Enter only if tradable and score ≥ 70.
Exactly once per closed bar, with deduplication by symbol:ts.
Get an API key — and go. Everything is managed from one page.
Already have a key?
Paid plans: RUB only, Russian-issued MIR, Visa and Mastercard (banks of the Russian Federation) or SBP. Foreign cards are not accepted. The service is delivered by email (API key). Terms: license agreement (public offer).
The manual is written so a developer can connect Oracle without extra questions. For an AI agent, feed the Markdown spec — link below.
# Python — standard library only import json, urllib.request req = urllib.request.Request(BASE + "/v1/context/BTCUSDT", headers={"Authorization": f"Bearer {KEY}"}) ctx = json.load(urllib.request.urlopen(req, timeout=15)) # Signal — only on a closed bar if (ctx["bar"]["closed"] and ctx["data_quality"]["score"] >= 70 and ctx["cost_risk"]["tradable"]): decide(ctx["bar"])
// Node.js 18+: fetch is built in const res = await fetch( `${BASE}/v1/context/BTCUSDT`, { headers: { Authorization: `Bearer ${KEY}` } } ); const ctx = await res.json(); // Signal — only on a closed bar if (ctx.bar.closed && ctx.data_quality.score >= 70 && ctx.cost_risk.tradable) { decide(ctx.bar); }
Oracle delivers facts over the API. You write the strategy, backtest, and execution — any language, any bot or signal engine.
Clean market data: bars, indicators, order book, macro, and market regime.
● You are hereAny API client: trading robot, signals, screener, or AI agent.
● Your codeMachine index: llms.txt. Full contract: agents.md. Below is the same facts in short form for crawlers and humans.
Market Oracle is a crypto market-data API for trading bots, signal engines, and AI agents. It does not open trades. One call to GET /v1/context/{symbol} returns a decision snapshot: closed bar with verified indicators, live book, trade_cost/cost_risk, HTF, derivatives, macro, quotes, market regime, and data_quality.
API host is https://api.market-oracle.pro (not the marketing site). WebSocket: wss://api.market-oracle.pro/v1/stream. Every /v1/* call and the socket need Authorization: Bearer mo_…. Only GET /health is public.
Yes. There is no official SDK. Docs include stdlib Python (urllib) and Node.js fetch examples. Send JSON decimal strings as-is; do not treat prices as binary floats.
The default stream is closed 1m bar_close (lean bar + indicators). Minute order-book microstructure is opt-in (microstructure:true → microstructure_close). REST GET /v1/microstructure/{symbol} and GET /v1/depth cover book facts. WebSocket does not emit 5m/15m bar_close.
Only on a closed bar (closed: true), once per symbol:ts. Live trigger is closed 1m; higher TFs must wait for the native closed candle (GET /v1/history?interval=… or live context.htf). Do not trade an in-progress candle and do not stitch minutes for oracle-only fields.
Paid plans see the full fixed USDT spot set: BTCUSDT, ETHUSDT, SOLUSDT, BNBUSDT, DOGEUSDT, XRPUSDT. The Free plan is BTCUSDT only (GET /v1/me → allowed_symbols). You cannot add a ticker. Use GET /v1/symbols and take ready=true (ideally history=full_day). Macro and calendar are not pair-scoped.
Read /llms.txt, then the Markdown spec /en/docs/agents.md (or /ru/docs/agents.md). Fetch a free API key from the site, call GET /health, GET /v1/me, GET /v1/symbols, subscribe to WS /v1/stream, and take GET /v1/context/{symbol} before an entry. Enter only if cost_risk.tradable and data_quality.score ≥ 70.
No. Paid plans are in RUB only. We accept Russian-issued MIR, Visa, and Mastercard (banks of the Russian Federation) and SBP. Cards of foreign banks are not accepted. The Free plan does not require a card.