CCXT

CCXT vs the Poloniex API and official Poloniex SDKs

Poloniex splits spot and futures across separate SDKs, one archived. CCXT compared on coverage, WebSocket order entry, rate limits and errors.

Poloniex publishes two official Python SDKs and one Java SDK, listed from its own API documentation: poloniex/polo-sdk-python for spot, poloniex/polo-futures-sdk-python for futures, and poloniex/polo-sdk-java. CCXT speaks the same REST and WebSocket APIs behind method names shared with 103 other venues.

The question that decides between them: do you trade both Poloniex spot and Poloniex futures?

TL;DR

  • Pick the official SDK if you only touch spot, you want response payloads named exactly as Poloniex's docs name them, and a git clone install is acceptable in your build.
  • Pick CCXT if you need spot and futures from one client, want the futures side maintained on the same cadence as everything else, or want WebSocket order entry — the official futures SDK repository is archived.
  • CCXT is not a lowest common denominator. All 101 Poloniex endpoints are generated as implicit methods, signed and rate-limited like the unified ones.

At a glance

CCXTOfficial Poloniex SDKs
Exchanges covered104 (Poloniex is one of them)Poloniex only
LanguagesTypeScript, JavaScript, Python, PHP, C#/.NET, Go, Java — one APIPython (spot), Python (futures), Java
Installpip install ccxt / npm i ccxtgit clonepolosdk is not published on PyPI
Poloniex products in one clientspot and v3 futuresseparate packages, separate clients
Futures SDK statussame class, same release cadencepolo-futures-sdk-python is archived, last push July 2024
Unified market data + trading APIyes — same method names on every exchangeno — Poloniex's own request and response shapes
WebSocketsyes — 9 watch* methods, plus createOrderWs, cancelOrderWs, cancelOrdersWs, cancelAllOrdersWsyes — public and authenticated callback clients
Raw endpoint accessyes — 101 Poloniex endpoints as implicit methodsthe endpoints the SDK wraps
Built-in rate limiteryes, per-endpoint weights, on by default (rateLimit 5 ms)not built in
Unified error typesyes — 41 typed exceptions in one hierarchyHTTP status plus Poloniex error codes
Testnet / sandboxexchange.set_sandbox_mode(True) swaps in sand-spot-api-gateway.poloniex.comchange base URLs yourself
Popularity43.8k GitHub stars · 4.8M PyPI + 494k npm installs/month (one package, every venue)polo-sdk-python 14 stars; polo-futures-sdk-python 6 stars, archived; polo-sdk-java 1 star
LicenceMITMIT
SupportDiscord, Telegram, GitHub issues — usually same-dayGitHub, plus api-support@poloniex.com

Figures verified September 2026 against CCXT v4.5.77, the poloniex/* GitHub repositories and Poloniex's published spot API documentation.

CCXT implements 54 unified capabilities for Poloniex, 23 of them fetch* methods.

The same job, written both ways

Fetch a ticker

import ccxt

exchange = ccxt.poloniex()
ticker = exchange.fetch_ticker('BTC/USDT')
print(ticker['last'], ticker['baseVolume'])

CCXT returns a unified ticker structure — the same keys, types and units on Poloniex as on Kraken or Bybit. The SDK returns Poloniex's payload, which you parse yourself.

Place a limit order

import ccxt

exchange = ccxt.poloniex({'apiKey': '...', 'secret': '...'})
order = exchange.create_order('BTC/USDT', 'limit', 'buy', 0.00025, 20000)
print(order['id'], order['status'])

To place the same order on a Poloniex perpetual with the official SDKs you install the second package — the archived one — and learn a second client. In CCXT the symbol carries the product:

order = exchange.create_order('BTC/USDT:USDT', 'limit', 'buy', 0.001, 60000)

Stream an order book

import ccxt.pro
import asyncio

async def main():
    exchange = ccxt.pro.poloniex()
    while True:
        orderbook = await exchange.watch_order_book('BTC/USDT')
        print(orderbook['bids'][0], orderbook['asks'][0])

asyncio.run(main())

These do not do the same thing. CCXT hands you a merged, depth-limited order book on every update. The SDK hands you raw channel messages — snapshot then deltas — and the merge, the sequence-gap detection, the re-seed after a drop and the bounded cache are yours to write.

Where the differences actually bite

Spot and futures in one class

ccxt.poloniex covers Poloniex spot and its v3 futures endpoints from one instance. Unified symbols keep them apart: 'BTC/USDT' for spot, 'BTC/USDT:USDT' for the linear perpetual. options.defaultType sets the default. The official SDKs split that across two packages, and the futures repository is archived — so the two halves of a hedged strategy have different maintenance stories.

Order entry over the WebSocket

CCXT Pro implements createOrderWs, cancelOrderWs, cancelOrdersWs and cancelAllOrdersWs for Poloniex alongside the nine watch* methods. You place and cancel over the already-open socket instead of paying a fresh HTTP handshake per order, and the call signature is the same as the REST version:

order = await exchange.create_order_ws('BTC/USDT', 'limit', 'buy', 0.00025, 20000)

WebSockets that look like REST

watch_order_book returns the same structure as fetch_order_book; watch_orders the same as fetch_orders. Swapping polling for streaming is a one-word change, and the code downstream does not know which produced the value. Underneath, CCXT handles connection pooling per URL, ping/pong keep-alive with miss detection, automatic reconnect and resubscribe, and bounded caches for trades and candles.

Rate limits you do not have to model

Poloniex meters per endpoint, and the cost differs — markets and markets/{symbol}/trades are far more expensive than markets/{symbol}/price. CCXT encodes those weights in the exchange definition and ships a token-bucket throttler that is on by default (enableRateLimit = True, rateLimit = 5 ms). You call methods in a loop; the library paces them.

Signing

Poloniex signs with HMAC-SHA256 over a newline-delimited string of the HTTP method, the path and either the sorted query parameters or the JSON body, all with a signTimestamp, base64-encoded and sent as key, signTimestamp and signature headers. The GET form sorts parameters; the POST form does not. CCXT builds both.

Precision, rounding and string math

Poloniex rejects orders that violate a symbol's tick size, step size or minimum notional. CCXT loads that metadata with the markets and gives you amount_to_precision, price_to_precision and cost_to_precision, backed by the Precise string-arithmetic class so quantities do not drift through float rounding.

amount = exchange.amount_to_precision('BTC/USDT', 0.0012345678)
price = exchange.price_to_precision('BTC/USDT', 61234.56789)

One error hierarchy

CCXT maps Poloniex's numeric codes onto a typed exception treeInsufficientFunds, InvalidOrder, OrderNotFound, RateLimitExceeded, AuthenticationError, NetworkError and 35 more, all descending from BaseError. You write except ccxt.InsufficientFunds once instead of matching on 21709 and hoping the string never changes.

Nothing is hidden — the implicit API

Alongside the 54 unified capabilities, all 101 Poloniex endpoints are generated as callable implicit methods, with signing, rate-limit accounting and error mapping applied. Browse them on the Poloniex implicit API page.

What the official Poloniex SDKs do better

An honest list:

  • The payloads match the docs one-for-one. client.markets().get_price('BTC_USDT') returns exactly what api-docs.poloniex.com shows for that endpoint. When you are reading the vendor reference while debugging, that is one less hop than a unified structure.
  • A vendor support channel. Poloniex's API docs publish api-support@poloniex.com for API questions. CCXT's support is excellent but it is community and maintainer support for the library, not for your exchange account.
  • A first-party Java SDK. polo-sdk-java gives Poloniex-shaped types on the JVM. CCXT has a Java build too, but its types are unified rather than Poloniex-literal.
  • The callback WebSocket model suits recorders. SpotWsClientPublic pushes every raw message into your handler. For a process whose job is to write every message to disk or Kafka, push shape is a better fit than CCXT's await-a-value shape.
  • A smaller install. If all you do is read spot prices, one small module is less than all of CCXT.

If Poloniex spot is the only thing you touch and you value literal fidelity to the vendor docs over portability, the official spot SDK is a reasonable choice.

Migrating from the Poloniex SDK to CCXT

What you are doingPoloniex SDKCCXT
Symbols'BTC_USDT', 'BTC_USDT_PERP''BTC/USDT', 'BTC/USDT:USDT'
Product selectiona different packageoptions.defaultType = spot / swap, or the symbol
Marketsclient.get_markets()load_markets()
Tickerclient.markets().get_ticker24h()fetch_ticker() / fetch_tickers()
Order bookclient.markets().get_orderbook()fetch_order_book()
Candlesclient.markets().get_candles()fetch_ohlcv()
New orderclient.orders().create()create_order()
Cancel orderclient.orders().cancel_by_id()cancel_order()
Open ordersclient.orders().get_all()fetch_open_orders()
Balanceclient.accounts().get_balances()fetch_balance()
StreamsSpotWsClientPublic + subscribe()watch_* on ccxt.pro.poloniex
Anything not listedthe endpointthe same endpoint as an implicit method

FAQ

Does Poloniex have an official Python SDK? Yes, two: polo-sdk-python for spot, which is MIT-licensed and was last pushed in February 2025, and polo-futures-sdk-python for futures, which is archived and was last pushed in July 2024. Neither is published on PyPI — both are installed by cloning the repository.

Does CCXT cover Poloniex futures? Yes. Poloniex spot and its v3 futures endpoints live in the same ccxt.poloniex class. Use 'BTC/USDT:USDT' for the linear perpetual, or set options.defaultType to 'swap'.

Can I place orders over the Poloniex WebSocket with CCXT? Yes. CCXT Pro implements create_order_ws, cancel_order_ws, cancel_orders_ws and cancel_all_orders_ws for Poloniex, with the same arguments as their REST counterparts.

Does CCXT support the Poloniex sandbox? Yes. exchange.set_sandbox_mode(True) swaps in sand-spot-api-gateway.poloniex.com.

Do I need CCXT Pro separately for WebSockets? No. CCXT Pro is included in the ccxt package. Use ccxt.pro.poloniex and call watch* methods — Poloniex has 9 of them.

Is CCXT free? Yes. MIT-licensed, including the WebSocket support.

Next steps

On this page