Metadata-Version: 2.4
Name: mmflow-sdk
Version: 0.1.0
Summary: Python SDK for the mmflow market-data API — REST, SSE streams, and a typed WebSocket client.
Project-URL: Homepage, https://mmflow.ai
Project-URL: Documentation, https://mmflow.ai/docs/api
Project-URL: Source, https://github.com/0xBingBong69/mmflow.ai/tree/claude/nifty-greider-349c85/frontend/clients/python
Author: mmflow
License: MIT
Keywords: crypto,hyperliquid,market-data,mmflow,trading,websocket
Requires-Python: >=3.9
Provides-Extra: ws
Requires-Dist: websockets>=12; extra == 'ws'
Description-Content-Type: text/markdown

# mmflow — Python SDK

Typed Python client for the mmflow market-data API: REST endpoints, SSE
streams, and a real-time WebSocket client. The REST + SSE surface is
standard-library only; the WebSocket client needs the `ws` extra.

```bash
pip install mmflow-sdk          # REST + SSE (zero dependencies)
pip install "mmflow-sdk[ws]"    # adds MmflowSocket (websockets)
```

The package name is `mmflow-sdk`; the import name remains `mmflow`.

## REST + candles

```python
from mmflow import MmflowClient

mm = MmflowClient()

# OHLCV history (normalized to {time, open, high, low, close, volume})
for c in mm.candles("BTC", interval="1m", hours=24):
    print(c["time"], c["close"])

# Cross-venue open interest / funding / liquidations / whales
oi = mm.perps_oi(coins=["BTC", "ETH"], venues=["hl", "binance"])
for row in oi.data:
    print(row["coin"], row.get("oiUsd"))

# Anything else under /api/v1:
resp = mm.get("/quant/density", {"coin": "BTC"})
```

## SSE streams

```python
for ev in mm.stream_trades("BTC"):
    if ev.type == "trade":
        print(ev.data["price"], ev.data["size"])
    elif ev.type == "bye":
        break
```

## Real-time WebSocket

```python
import asyncio
from mmflow import MmflowSocket

async def main():
    sock = MmflowSocket(api_key="YOUR_KEY")
    sock.subscribe("trades", "BTC", lambda payload, meta: print(meta["channel"], payload))
    sock.subscribe("orderbook", "ETH", lambda payload, meta: print(payload))
    await sock.run()      # auto-reconnects; runs until close()

asyncio.run(main())
```

Channels: `trades`, `orderbook`, `candles`, `liquidations`, `funding`,
`openInterest`, `markPrice`, `footprint`. Auth, exponential-backoff
reconnect, and subscription replay are built in.
