For bot operators
Stream-native data for Discord, Telegram, and Slack bots.
SSE streams for whale tape, funding deltas, and liq cascades. Webhook-friendly REST for everything else. Single-file SDKs in TS + Python. No auth for the read tier — pop a key in for higher quotas.
Monday-morning workflow
- 1
Auto-reconnects with Last-Event-ID resume semantics. /docs/api
- 2
Each delta arrives as one SSE event. /docs/api
- 3
Cached at the edge — cheap to call. /liquidations
- 4
Copy-paste TypeScript or Python. /docs/api/cookbook
- 5
compressed_bull, short_squeeze, cascade_fuel_reset, etc. /signals
- 6
Self-serve, per-key usage dashboard included. /profile/api-keys
Pages built for you
SSE endpoints for whales, funding deltas — Vercel-edge runtime, sub-2s end-to-end latency.
/docs/api
Sortable per-coin feed. Filter by min notional, surface to Discord with webhook.
/whales
Global timeline + cascade forecast. JSON-friendly for chart embeds.
/liquidations
Subscribe to regime transitions for high-signal Discord pings.
/funding/regime
End-to-end recipes: Discord whale bot, Telegram funding-flip, Slack gamma-flip.
/docs/api/cookbook
Probe every endpoint your bot depends on. Refreshes every 30s.
/docs/api/status
Cross-archive labels emit on transition — perfect signal source.
/signals
Issue and revoke keys. 3,000 req/min ceiling, per-key analytics.
/profile/api-keys
Real code
Discord webhook on every $250k+ whale print
import { mmflow } from "@mmflow/sdk";
const WEBHOOK = process.env.DISCORD_WEBHOOK!;
const es = mmflow.streams.whales({ minUsd: 250_000 });
es.on("whale", async (w) => {
await fetch(WEBHOOK, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
content: `${w.coin} ${w.side === "buy" ? "BOUGHT" : "SOLD"} $${w.notionalUsd.toLocaleString()} @ $${w.price}`,
}),
});
});Telegram funding-flip alert (Python)
import requests, time
from mmflow import client
CHAT_ID = -1001234567890
BOT_TOKEN = "..."
last = {}
while True:
f = client.perps.funding(coin="BTC")
rate = f["venues"]["hyperliquid"]["rate"]
sign = "long-pay" if rate > 0 else "short-pay"
if last.get("BTC") and last["BTC"] != sign:
msg = f"BTC funding flipped {last['BTC']} -> {sign} ({rate*10_000:.1f}bp)"
requests.post(f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage",
json={"chat_id": CHAT_ID, "text": msg})
last["BTC"] = sign
time.sleep(60)