Crypto market data API · bots & agents · v1.0.0

Market data API you can trust

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.

Documentation →
1request instead of 8–10
8timeframes with indicators
6trading pairs in the API
≥70data_quality gate
BTCUSDT READY cached
Close (1m, closed)$86,406.03 +5.66%
RSI14 / ADX1447.8 / 13.3
ATR_PCT (1m)0.061%
Depth imbalance0.91 · bid pressure
H1 vs EMA50H1 above EMA50
Funding0.0077%
Fear & Greed70 · Greed
Volatility regimebreakout_expansion
Data quality
Score90
Live GET /v1/context/BTCUSDT via site PHP — bar · htf · depth · macro · regime
Principles

Not an advisor. A facts provider.

Oracle does not open trades or manage positions. Its job is to give your algorithms correct data you can build decisions on.

🎯

Signal only on a closed bar

Trading decisions are formed exclusively on a closed 1m bar (closed: true). No look-ahead — data is always point-in-time correct.

🧮

Verified correctness

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.

🤖

Built for agents

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.

Features

Everything for a trading decision — in one API

Context, quotes, and history work only for these symbols. You cannot add your own ticker; check ready via GET /v1/symbols.

BTCUSDTETHUSDTSOLUSDTBNBUSDTDOGEUSDTXRPUSDT

Context in one request

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.

GET /v1/context/{symbol}

The only signal source is a closed bar (closed: true). Everything else is filters: tradable, a macro pause, data_quality.score ≥ 70.

📊

Indicators on every TF

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.

EMA20/50/200RSI14ATR14/50ADX+DIVWAPBB 20,2OBVMFI14CVDswings
🧱

Microstructure

Closed minute aggregation of top-20: spread, imbalance, walls, pressure.

/v1/microstructure/{symbol}
🌍

Macro context

Fear&Greed, dominance, stablecoins, DXY, 10Y yield.

/v1/macro
🔥

Derivatives

Funding, open interest, liquidation cascades.

/v1/derivatives/{symbol}
🧭

Market regime

Correlation with BTC, realized vol, market breadth.

/v1/market-regime
🔗

Price consensus

Median-mid across independent sources with divergence control — protection against a bad tick before entry. Symbol must be from the list above.

/v1/quotes/{symbol}
📡

WebSocket

bar_close + opt-in microstructure_close; REST to recover gaps.

WS /v1/stream
🗓

Macro calendar

Upcoming events (FOMC, CPI) with impact level.

/v1/calendar
📚

History for all timeframes

Native 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=…
How it works

Six steps from connect to signal

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.

GET /health

Check the server

Confirm status=ok and that bars are fresh.

GET /v1/me

Check your plan

Daily limits, RPM, WS count, and key expiry — so you can pick a request cadence.

GET /v1/symbols

Pick pairs

Only the core set (BTC, ETH, SOL, BNB, DOGE, XRP) and only ready=true, ideally history=full_day.

WS /v1/stream

Subscribe

Receive bar_close in real time. Order book optionally via microstructure:true.

GET /v1/context

Decision snapshot

Before entry: cost, HTF, quality. Enter only if tradable and score ≥ 70.

signal

Form a signal

Exactly once per closed bar, with deduplication by symbol:ts.

Pricing

Transparent limits. No sign-ups or dashboards.

Get an API key — and go. Everything is managed from one page.

Free
0 ₽ / forever
  • 2,000 requests per day
  • 30 requests per minute
  • Min. pause between requests 2000 ms
  • 1 WebSocket connection
  • BTCUSDT only
Basic
7 500 ₽ / mo
  • 5,000 requests per day
  • 60 requests per minute
  • Min. pause between requests 200 ms
  • 2 WebSocket connections
  • WS bar_close does not spend daily quota
Pro
9 900 ₽ / mo
  • 8,000 requests per day
  • 90 requests per minute
  • Min. pause between requests 150 ms
  • 3 WebSocket connections
  • Highest client tier

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).

Documentation

Full integration specification

The manual is written so a developer can connect Oracle without extra questions. For an AI agent, feed the Markdown spec — link below.

📖
REST API referenceAll endpoints with request/response examples and field explanations.
📡
WebSocket protocolSubscribe, bar_close and microstructure_close events, reconnect with backoff.
🧮
Bar and indicator formatsDecimal strings for precision, semantics of each indicator.
⚠️
Limits and errorsPlans, daily limits, RPM, handling 429 and key_expired.
Open documentation → Agent spec (Markdown) llms.txt
oracle-client
# 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"])
Ecosystem

Data here, decisions in your code

Oracle delivers facts over the API. You write the strategy, backtest, and execution — any language, any bot or signal engine.

📡

Market Oracle

Clean market data: bars, indicators, order book, macro, and market regime.

● You are here
⚙️

Your bot

Any API client: trading robot, signals, screener, or AI agent.

● Your code
FAQ

Answers for bots, agents, and developers

Machine index: llms.txt. Full contract: agents.md. Below is the same facts in short form for crawlers and humans.

What is the Market Oracle API?

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.

Where do REST and WebSocket requests go?

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.

Can I use it from Python or Node.js without an SDK?

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.

Does the WebSocket stream the live order book?

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.

When may a bot or AI agent form a trading signal?

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.

Which symbols are available?

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.

How should an AI agent start integration?

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.

Can I pay with a foreign bank card?

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.