Skip to main content

Documentation Index

Fetch the complete documentation index at: https://hypernode-docs.polynode.dev/llms.txt

Use this file to discover all available pages before exploring further.

Install

pip install websocket-client requests

Basic connection

import json
import websocket

def on_message(ws, message):
    event = json.loads(message)

    # Skip protocol messages
    if "action" in event:
        return

    layer = event.get("consensus", "?")  # "pre" or "confirmed"

    if event["type"] == "order":
        d = event["data"]
        side = "BUY" if d["side"] == "B" else "SELL"
        print(f"[{layer}] ORDER {event['asset']} {side} {d['sz']}@{d['px']} [{d['tif']}]")

    elif event["type"] == "fill":
        d = event["data"]
        side = "BUY" if d["side"] == "B" else "SELL"
        print(f"[{layer}] FILL {event['asset']} {side} {d['sz']}@{d['px']} {d['dir']} PnL={d['closedPnl']}")

def on_open(ws):
    ws.send(json.dumps({
        "action": "subscribe",
        "filters": {"action_types": ["order", "fill"]}
    }))

def on_error(ws, error):
    print(f"Error: {error}")

ws = websocket.WebSocketApp(
    "wss://hyper.polynode.dev/ws?key=pn_live_YOUR_KEY",
    on_open=on_open,
    on_message=on_message,
    on_error=on_error,
)
ws.run_forever()

Track a wallet

def on_open(ws):
    ws.send(json.dumps({
        "action": "subscribe",
        "filters": {
            "addresses": ["0xd071d6d6ea52f5aa34b79e47f908ee48c8215837"]
        }
    }))

L4 Order Book (REST)

import requests

resp = requests.get(
    "https://hyper.polynode.dev/v2/l4book?coin=BTC",
    headers={"x-api-key": "pn_live_YOUR_KEY"}
)
book = resp.json()

print(f"BTC: {book['bid_count']} bids, {book['ask_count']} asks")

# Top 5 bids
for order in sorted(book["bids"], key=lambda o: -float(o["limitPx"]))[:5]:
    print(f"  BID {order['limitPx']} x {order['sz']} by {order['user'][:14]}...")

L4 Summary

resp = requests.get(
    "https://hyper.polynode.dev/v2/l4book/summary",
    headers={"x-api-key": "pn_live_YOUR_KEY"}
)
data = resp.json()
print(f"{data['markets']} markets, {data['total_orders']} total orders")
for m in data["data"][:10]:
    print(f"  {m['coin']}: {m['bid_orders']} bids, {m['ask_orders']} asks")

Borrow/Lend Rates

resp = requests.get(
    "https://hyper.polynode.dev/v2/borrow-lend/reserves",
    headers={"x-api-key": "pn_live_YOUR_KEY"}
)
for token_id, state in resp.json():
    print(f"Token {token_id}: borrow={state['borrowYearlyRate']} supply={state['supplyYearlyRate']}")

Multiple filters (AND logic)

# Only BTC fills from a specific wallet
def on_open(ws):
    ws.send(json.dumps({
        "action": "subscribe",
        "filters": {
            "action_types": ["fill"],
            "assets": ["BTC"],
            "addresses": ["0xd071d6d6ea52f5aa34b79e47f908ee48c8215837"]
        }
    }))