Skip to main content

polyflux

PyPI Python License: MIT

Official Python client for Polyflux — stream real-time Polymarket trades from the mempool over WebSocket.

See every Polymarket trade the millisecond it happens — ~3 seconds before it confirms on-chain. Build trading bots, whale alerts, and real-time signals in a few lines of Python.

You need a Polyflux API key to stream. Get one at polyflux.io → (free trial).

Install

pip install polyflux-client

Then import polyflux in your code.

Quickstart

import asyncio
from polyflux import Client

async def main():
    client = Client("YOUR_API_KEY")          # get one at https://polyflux.io
    async for trade in client.trades():
        print(trade.side, trade.size, trade.price, trade.wallet_address)

asyncio.run(main())

Each Trade gives you asset_id, wallet_address, size, price, side (buy/sell), timestamp, plus helpers like .notional (USDC value) and .time (UTC datetime). The full raw message is always on .raw.

The client handles connection, parsing, and automatic reconnection — just async for over .trades() and let it run.

Resolve markets

The feed identifies markets by asset_id (a clob token id). Use MarketCatalog to turn that into a human-readable market:

from polyflux import Client, MarketCatalog

catalog = MarketCatalog(market_fields=["question"])
await catalog.start()   # caches the active-market set under ./data

async for trade in client.trades():
    record = catalog.get(trade.asset_id)
    if record:
        print(record["market"]["question"], trade.size, trade.price)

MarketCatalog keeps an O(1) asset_id → market map with a configurable memory footprint, refreshes in the background, and can fetch unknown ids on demand. See examples/whale_alert.py for a full bot.

Beyond trades: flows & resolutions

The feed carries more than trades. Each event has an event_type; typed iterators give you just the ones you want:

# Money flows — the corrected, tx-level feed. Each event is a deposit (money in)
# or withdrawal (money out) of a Polymarket wallet, typed by where it went:
#   external     — real money crossing the Polymarket boundary (changes balances)
#   p2p          — to/from another PM wallet (surfaces as two events: the sender's
#                  withdrawal and the recipient's deposit)
#   unidentified — counterparty we could not positively classify
async for f in client.money_flows():
    print(f.op, f.type, f.amount, f.token, f.wallet_address, "cp:", f.counterparty)
# or client.deposits_v2() / client.withdrawals() for one direction.
#
# The legacy client.transfers()/deposits()/p2p_transfers() -> Transfer are
# DEPRECATED: they mislabel trade settlements as p2p and omit withdrawals.
# Prefer money_flows().

# UMA oracle resolutions — how every market ultimately settles.
async for r in client.resolutions():        # propose / dispute / settle
    if r.is_dispute:                         # rare: a proposed answer was challenged
        print("DISPUTED:", r.title, "by", r.disputer)
  • MoneyFlow — the corrected flow: op (deposit/withdrawal) x type (external/p2p/unidentified), wallet_address, counterparty, amount, token, direction, plus .is_deposit/.is_withdrawal/.is_external/.is_p2p.
  • Transfer (deprecated — use MoneyFlow) — event_type (deposit/p2p_transfer), from_address, to_address, amount (USD), token (USDC/USDC.e/USDT/pUSD), tier, pm_link_reason, plus .is_deposit / .is_p2p / .is_confirmed.
  • Resolution — event_type (propose/dispute/settle), proposer, disputer, outcome (YES/NO/50-50), market_id, ancillary_hash, proposed_price, resolved_price, plus .title, .market_key, and .is_propose / .is_dispute / .is_settle. Group by .market_key to follow a market across oracle resets — it's stable where market_id isn't.

To watch several event types over a single connection, loop client.events() and build the model per event_type (see the example below). The dedicated iterators each open their own connection, so use one per process.

Examples

POLYFLUX_API_KEY=your_key python examples/quickstart.py

Links

License

MIT

Metadata

Release files for polyflux-client 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for polyflux-client 0.3.0
File Size Uploaded
polyflux_client-0.3.0.tar.gz 20.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for polyflux-client 0.3.0
File Interpreter ABI Platform
polyflux_client-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 39.5 kB

Release files / polyflux_client-0.3.0.tar.gz

Download URL polyflux_client-0.3.0.tar.gz
Size 20.5 kB
Tags Source
SHA-256 checksum
How to use checksums
e9151065ecd2adf0641faee94adeca1e7f67df1e6ba3f9e2323b2cd171134698
BLAKE2b-256 checksum
How to use checksums
8ff45898fff6d030584436da3d68960b9b653535b376fda02f082071913676da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.0

Release files / polyflux_client-0.3.0-py3-none-any.whl

Download URL polyflux_client-0.3.0-py3-none-any.whl
Size 18.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2b36a4914fad96924669165a91c12d28d97a7c5a5f341f6d381488140d7b9cd7
BLAKE2b-256 checksum
How to use checksums
9545ee2d125560b247afe613a7cd177f7df4fe59759c498c8dfdc461119ce474
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.0

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page