MM Flow

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

    Open an EventSource on /streams/whales — get every print over your threshold.

    Auto-reconnects with Last-Event-ID resume semantics. /docs/api

  2. 2

    Listen for funding deltas — heartbeat every 15s so you can detect stalled connections.

    Each delta arrives as one SSE event. /docs/api

  3. 3

    Poll /api/liquidations every 5s for cascade alerts.

    Cached at the edge — cheap to call. /liquidations

  4. 4

    Wire a Discord webhook via the cookbook's whale-alert recipe (~80 LOC).

    Copy-paste TypeScript or Python. /docs/api/cookbook

  5. 5

    Cross-reference setup transitions for high-signal channel pings.

    compressed_bull, short_squeeze, cascade_fuel_reset, etc. /signals

  6. 6

    Mint an API key for 3,000 req/min when traffic outgrows the anonymous tier.

    Self-serve, per-key usage dashboard included. /profile/api-keys

Pages built for you

Real code

Discord webhook on every $250k+ whale print

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

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)

Start streaming.

Browse the recipes or grab a key for 3,000 req/min.