Skip to main content

Official Python client for the Synthetix V4 perpetual futures exchange — REST + WebSocket, EIP-712 signing built in

Project description

synthetix-sdk

The official Python client for the Synthetix V4 perpetual futures exchange. Provides REST and WebSocket access for market data, trading, and account management, with EIP-712 signing built in.

Full API docs: developers.synthetix.io.

Get going in 30 seconds with Claude Code

The fastest way to try the SDK is the bundled Claude Code skill. Clone the repo, run /synthetix in a Claude Code session, and Claude will set up the environment, write and run example scripts, and explain the SDK as you go — no reading docs first.

git clone https://github.com/Synthetixio/synthetix-sdk
cd synthetix-sdk

Then in Claude Code:

/synthetix stream live prices for ETH-USDT
/synthetix place a limit order
/synthetix check my open positions
/synthetix watch my positions in real time

Claude does the wiring — .venv setup, dependency install, script generation, running, and walking you through the output. Pass any natural-language goal after the slash command.

Installation

To use the SDK in your own project:

pip install synthetix-sdk

Three runtime dependencies: requests, eth-account, websockets. Python 3.10+.

Quick Start

from synthetix import Synthetix

# Public market data — no private key needed
snx = Synthetix()
markets = snx.get_markets()
for m in markets:
    print(m["symbol"], m["description"])

# Authenticated — required for trading and account queries
snx = Synthetix(private_key="0x...")
print(snx.get_positions())
print(snx.get_portfolio())

For WebSocket streaming and async trading:

import asyncio
from synthetix import Synthetix

async def main():
    snx = Synthetix(private_key="0x...")

    # Stream real-time prices (no auth required)
    sub = await snx.subscribe(
        "marketPrices",
        lambda d: print(d),
        symbol="ETH-USDT",
    )

    # Place an order over WebSocket
    result = await snx.ws_place_order(
        symbol="BTC-USDT",
        side="buy",
        amount="0.001",
        price="90000",
    )

    await asyncio.sleep(10)
    await snx.unsubscribe(sub)
    await snx.close()

asyncio.run(main())

Features

Market data (public, no key required)

  • List markets, fees, funding rates, open interest
  • Tickers, mark prices, mids
  • Order books at multiple depths
  • Recent trades, candles, funding rate history

Trading

  • Market, limit (GTC/GTD/IOC/post-only), TWAP, stop-loss, and take-profit orders
  • Modify and cancel orders (single, batch, by client order ID, or all)
  • Update leverage per market
  • Schedule deferred cancellations as a kill-switch

Account management

  • Positions, P&L, balance, portfolio, performance history
  • Trade and order history, open orders, fills
  • Funding payments and rate-limit status
  • Sub-accounts: create, query, transfer collateral
  • Delegated signers for ops accounts

WebSocket (async)

  • Live subscriptions: prices, orderbook (snapshot/diff/managed), trades, positions, orders, fills, balances
  • WS-native trading methods (ws_place_order, ws_cancel_order, ws_modify_order, …) — same signing, lower latency than REST
  • Auto-reconnect with auth re-handshake and subscription replay
  • Per-callback error handlers; sync and async callbacks both supported

Configuration

Synthetix(
    private_key=None,        # Omit for read-only mode
    subaccount_id=None,      # Auto-discovered if not set
    timeout=None,            # Request timeout in seconds
    expires_after_ms=60000,  # Signed-message expiry window
)

Examples

The repo includes standalone scripts for every endpoint under examples/rest/ and examples/ws/. Each is runnable on its own:

# Market data (no key)
python examples/rest/fetch-markets.py
python examples/rest/fetch-orderbook.py

# Trading (requires PRIVATE_KEY env var)
python examples/rest/create-limit-gtc-order.py
python examples/rest/cancel-order.py

# WebSocket
python examples/ws/async-watch-ticker.py
python examples/ws/async-market-order.py
python examples/ws/async-watch-positions.py

API reference

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

synthetix_sdk-0.4.0.tar.gz (69.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

synthetix_sdk-0.4.0-py3-none-any.whl (46.7 kB view details)

Uploaded Python 3

File details

Details for the file synthetix_sdk-0.4.0.tar.gz.

File metadata

  • Download URL: synthetix_sdk-0.4.0.tar.gz
  • Upload date:
  • Size: 69.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for synthetix_sdk-0.4.0.tar.gz
Algorithm Hash digest
SHA256 547384e4912a7b6f45e64c78bdbc5f4a63cc83184c873237f1ae18abaf177b5f
MD5 846c10b5c545097a41f9e8f27f483a85
BLAKE2b-256 3df274108ef3fbb26bd09b03d2ecdba7ec568875bd350c115e3819da02c87cdd

See more details on using hashes here.

File details

Details for the file synthetix_sdk-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: synthetix_sdk-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 46.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for synthetix_sdk-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ace7f21bd9b800829f3fff92f0779481cb1ff9b0f7269bb679aa55611d48f253
MD5 adb6f1a22b6c7cb0c01e428ac81213aa
BLAKE2b-256 792a88b53275a541c55182047078a039a8595d859fdc7ca3f0b9eaeba3ef6d33

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page