Polyoxide
Python SDK for Polymarket APIs, powered by Rust via PyO3 and maturin.
Every client comes in async and sync variants. Async methods return Python awaitables; sync methods block via an internal Tokio runtime and release the GIL while waiting.
| Async | Sync | API | Description |
|---|---|---|---|
Gamma |
GammaSync |
Gamma | Market data, events, series, tags, comments, sports, search, users |
ClobClient |
ClobClientSync |
CLOB | Order book, prices, spreads, trade history, fee rates |
DataApi |
DataApiSync |
Data | User positions/trades/activity, leaderboard, holders, volume, open interest |
Installation
pip install polyoxide
Wheels are published for Linux (x86_64, aarch64), macOS (x86_64, aarch64), and Windows (x86_64).
Quick Start
Async (Gamma -- market data)
import asyncio
from polyoxide import Gamma
async def main():
gamma = Gamma()
markets = await gamma.markets().list(limit=5, open=True)
for m in markets:
print(f"{m.question} -- {m.slug}")
asyncio.run(main())
Sync (Gamma)
from polyoxide import GammaSync
gamma = GammaSync()
markets = gamma.markets().list(limit=5, open=True)
for m in markets:
print(f"{m.question} -- {m.slug}")
CLOB (order book data)
from polyoxide import ClobClientSync
clob = ClobClientSync()
book = clob.markets().order_book("TOKEN_ID")
print(book.bids, book.asks)
spread = clob.markets().spread("TOKEN_ID")
print(spread)
Data API (user positions and leaderboard)
import asyncio
from polyoxide import DataApi
async def main():
data = DataApi()
# Leaderboard
leaders = await data.leaderboard().get(limit=10, time_period="WEEK")
for t in leaders:
print(t.user_name, t.pnl)
# User positions
positions = await data.user("0xADDRESS").list_positions(limit=5)
for p in positions:
print(p.title, p.size)
asyncio.run(main())
Client API Reference
Gamma / GammaSync
Constructed with optional base_url, timeout_ms, and pool_size keyword arguments.
| Namespace | Methods |
|---|---|
.markets() |
get(id), get_by_slug(slug), list(...), tags(id) |
.events() |
get(id), get_by_slug(slug), list(...), tags(id), tweet_count(id), comment_count(id) |
.series() |
get(id), list(...) |
.tags() |
get(id), get_by_slug(slug), list(...), get_related(id), get_related_by_slug(slug) |
.comments() |
get(id), list(...), by_user(address) |
.sports() |
list(), market_types(), list_teams(...) |
.search() |
public_search(query, ...) |
.user() |
get(address) |
.health() |
ping() |
ClobClient / ClobClientSync
No arguments required (uses public/unauthenticated endpoints).
| Namespace | Methods |
|---|---|
.markets() |
get(condition_id), get_by_token_ids(token_ids), list(), order_book(token_id), price(token_id, side), midpoint(token_id), prices_history(token_id), neg_risk(token_id), fee_rate(token_id), tick_size(token_id), spread(token_id), last_trade_price(token_id), live_activity(condition_id), simplified(), sampling(), sampling_simplified(), calculate_price(token_id, side, amount) |
.health() |
ping(), server_time() |
DataApi / DataApiSync
Constructed with optional base_url, timeout_ms, and pool_size keyword arguments.
| Namespace | Methods |
|---|---|
.user(address) |
list_positions(...), positions_value(...), closed_positions(...), trades(...), activity(...), traded() |
.trades() |
list(...) |
.holders() |
list(markets, ...) |
.open_interest() |
get(...) |
.live_volume() |
get(event_id) |
.leaderboard() |
get(...) |
.builders() |
leaderboard(...), volume(...) |
.health() |
ping() |
Result Objects
All response objects expose named properties matching the upstream JSON fields, plus:
.to_dict()-- convert to a plain Pythondictstr(obj)-- JSON string representationrepr(obj)-- type-annotated representation
Error Handling
All exceptions inherit from PolyoxideError:
from polyoxide import PolyoxideError, ApiError, RateLimitError
try:
markets = gamma.markets().list()
except RateLimitError:
print("slow down")
except ApiError as e:
print(f"API error: {e}")
except PolyoxideError as e:
print(f"something else: {e}")
| Exception | When |
|---|---|
ApiError |
API returned an error response |
AuthenticationError |
Invalid or missing credentials |
ValidationError |
Request parameters failed validation |
RateLimitError |
Rate limit exceeded (HTTP 429) |
NetworkError |
Connection failure |
TimeoutError |
Request timed out |
Async Support
Async clients (Gamma, ClobClient, DataApi) use pyo3-async-runtimes to bridge Rust futures into Python awaitables. They work with asyncio.run(), await, and any asyncio-compatible event loop.
Sync clients (GammaSync, ClobClientSync, DataApiSync) execute on a shared background Tokio runtime and release the GIL while blocking, so they are safe to use from threaded Python code.
Type Stubs
A .pyi stub file is included at python/polyoxide/__init__.pyi for editor autocomplete and type checking.
Building from Source
Requires Rust and Python 3.9+.
pip install maturin
maturin develop --release
License
Licensed under either of MIT or Apache-2.0 at your option.
Release files for polyoxide 0.31.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| polyoxide-0.31.0.tar.gz | 371.2 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| polyoxide-0.31.0-cp39-abi3-win_amd64.whl | CPython 3.9 | abi3 | Windows x86-64 | Details |
| polyoxide-0.31.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.9 | abi3 | Linux glibc 2.17+ x86-64 | Details |
| polyoxide-0.31.0-cp39-abi3-macosx_11_0_arm64.whl | CPython 3.9 | abi3 | macOS 11.0+ ARM64 | Details |
| polyoxide-0.31.0-cp39-abi3-macosx_10_12_x86_64.whl | CPython 3.9 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 12.9 MB
Release files / polyoxide-0.31.0.tar.gz
| Download URL | polyoxide-0.31.0.tar.gz |
|---|---|
| Size | 371.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cc9ced32ad377333dfbcdc86fa1709e41464f92dbcbe7254c84a5519871dee05
|
|
BLAKE2b-256 checksum How to use checksums |
4be5089f15a8d4659834b1edfc4b47e5d91a24bd879a090d32f18b0f66bab998
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
maturin/1.15.0
|
Release files / polyoxide-0.31.0-cp39-abi3-win_amd64.whl
| Download URL | polyoxide-0.31.0-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
1d04ed142f11c9ce2654efb681acbccbb0688d65a0c56e8c41353e8b7cb63924
|
|
BLAKE2b-256 checksum How to use checksums |
68470fdd71dbed0b0ab22140d7dd010038a6e0e7049c6eb3a25430a9b570294e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
maturin/1.15.0
|
Release files / polyoxide-0.31.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | polyoxide-0.31.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.2 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
afc2bde7b83cb6d2c77176e6d6564fdf3c54365ddde398c8f3427bb6f18dafde
|
|
BLAKE2b-256 checksum How to use checksums |
9fcdaac91c5b69ccd735e05d990364387b4bfec9e1453d101b8a40325cf655ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
maturin/1.15.0
|
Release files / polyoxide-0.31.0-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | polyoxide-0.31.0-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.9 MB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3c0da2125a9dfd24c1e7207dc7e817c2c15cf481a9ff41757c5f93440fa3453f
|
|
BLAKE2b-256 checksum How to use checksums |
236a43c33478d0fd9706cc090e807c18278ac97a72a16ce83cdc240e416906ec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
maturin/1.15.0
|
Release files / polyoxide-0.31.0-cp39-abi3-macosx_10_12_x86_64.whl
| Download URL | polyoxide-0.31.0-cp39-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 3.1 MB |
| Tags | CPython 3.9 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
5f02b5ad27cab8338a085987347665c1e4a30044af436a1b6a6ef0871c9a9208
|
|
BLAKE2b-256 checksum How to use checksums |
890858cf37805d4a4c354b8d815d79c109e3732ac8294d65a65fcfdfda046444
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
maturin/1.15.0
|