Python SDK for Polymarket APIs (CLOB, Gamma, Data) — powered by Rust
Project description
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.username, 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.8+.
pip install maturin
maturin develop --release
License
Licensed under either of MIT or Apache-2.0 at your option.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file polyoxide-0.15.0.tar.gz.
File metadata
- Download URL: polyoxide-0.15.0.tar.gz
- Upload date:
- Size: 219.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2d7e1208ceeb288c4a586524dc765ffabf668026defcc1359ed4950d8f75d90d
|
|
| MD5 |
ada3f55da7461912af897dfce299a9bf
|
|
| BLAKE2b-256 |
e46b63b1912915ec32ff07cde90f0b82a6b72179e0ec1fad2ff69c7563e50bbd
|
File details
Details for the file polyoxide-0.15.0-cp39-abi3-win_amd64.whl.
File metadata
- Download URL: polyoxide-0.15.0-cp39-abi3-win_amd64.whl
- Upload date:
- Size: 3.4 MB
- Tags: CPython 3.9+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
959f70ce90c9c87d46e38859333ea2f5d2819a4f8dc0e7853ed6673a5a0ea8af
|
|
| MD5 |
29ae180a42ae1e083dae0ee76d83e216
|
|
| BLAKE2b-256 |
e12565f2abadc2f5ef115125098f6956951a5e1dce34f149135c49c71c3f55de
|
File details
Details for the file polyoxide-0.15.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: polyoxide-0.15.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 3.2 MB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b8e336adb525c56c3104b015dfdb84a3cd71df0d8fbc2a8735823f33fc45f72
|
|
| MD5 |
22b7cded8243b6cee2bbf7cd406706b5
|
|
| BLAKE2b-256 |
d8d53fd293b24b672732f352affbe0498e44906fb1b3e65443598faa621bc572
|
File details
Details for the file polyoxide-0.15.0-cp39-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: polyoxide-0.15.0-cp39-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.0 MB
- Tags: CPython 3.9+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2ce676a410c87ee7b1d91ed00c10bcec15fbcb4522252ef6279989d7e00c5f5f
|
|
| MD5 |
353fce6a394558015c0432d93b2ec70e
|
|
| BLAKE2b-256 |
897ac9f84eb4c8bffd2a707f6982a6a3a58b6c443f504cef68a10adebee92bc5
|
File details
Details for the file polyoxide-0.15.0-cp39-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: polyoxide-0.15.0-cp39-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 3.1 MB
- Tags: CPython 3.9+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
83fda127265cb9b077b465015634daf01454dd4880fceee5955378c8989a2c70
|
|
| MD5 |
1604aea9e97ab4de4e39c97f5e3035e6
|
|
| BLAKE2b-256 |
af28bff535f4a44d30d88a5b39afdfdd572f3c544860833757a60afe484c2153
|