polymarket-rs
[!NOTE] This library is under active development and considered alpha quality.
- Breaking changes may occur in future updates without prior notice
- API signatures, types, and module structures are subject to change
- Not recommended for production use yet
- Use at your own risk
A modern, type-safe Rust client library for the Polymarket CLOB (Central Limit Order Book) and Data API.
This project is a complete rewrite of polymarket-rs-client with improved ergonomics, additional API methods, and removal of generic type parameters for a cleaner API surface.
Features
- Full Authentication Support - L1 (EIP-712) and L2 (HMAC) authentication
- WebSocket Streaming - Real-time market data and user events with automatic reconnection
- Builder Pattern - Fluent APIs for configuration and order creation
- Async/Await - Built on
tokiofor high-performance async operations - Decimal Precision - Accurate financial calculations with
rust_decimal - Modular Design - Separated clients for different operations
- Zero Panics - Comprehensive error handling with custom
Resulttypes
Installation
Add this to your Cargo.toml:
[]
= { = "https://github.com/pawsengineer/polymarket-rs.git" }
Quick Start
Client Types
| Client | Purpose | Authentication |
|---|---|---|
ClobClient |
CLOB market data queries | None |
AuthenticatedClient |
API key management, account operations | L1 (EIP-712) or L2 (HMAC) |
TradingClient |
Order creation, cancellation, trade queries | L2 (HMAC) |
DataClient |
Position and portfolio data | None |
Public Market Data
Query market data without authentication:
use ;
let client = new;
let token_id = new;
// Get midpoint price, order books, spreads, etc.
let midpoint = client.get_midpoint.await?;
let book = client.get_order_book.await?;
See examples/clob_data.rs and examples/public_data.rs for complete examples.
Authenticated Trading
Three-step process for authenticated trading:
use ;
// 1. Create or derive API credentials
let auth_client = new;
let api_creds = auth_client.create_or_derive_api_key.await?;
// 2. Create trading client with order builder
let order_builder = new;
let trading_client = new;
// 3. Create and post orders
let order_args = new;
trading_client.create_and_post_order.await?;
PolyProxy & PolyGnosisSafe Wallets: For proxy wallets, pass the proxy address to AuthenticatedClient and use SignatureType::PolyGnosisSafe in OrderBuilder. Proxy wallets have automatic allowance management.
See examples/authenticated_trading.rs for complete examples including proxy wallet setup.
WebSocket Streaming
Real-time market data and user events with automatic reconnection:
use ;
use StreamExt;
let client = new;
let config = default;
let mut stream = new;
while let Some = stream.next.await
See examples/websocket_market.rs and examples/websocket_user.rs for complete streaming examples.
Examples
Run examples from the examples/ directory:
# Public market data
# Authenticated trading
PRIVATE_KEY="0x..."
# WebSocket streaming
PRIVATE_KEY="0x..."
License
Licensed under either of:
- MIT license (LICENSE-MIT)
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Disclaimer
This is an unofficial library and is not affiliated with Polymarket. Use at your own risk. Always test with small amounts first on testnet before using real funds.