Skip to content

Authenticated Channels

poloniex-sdk edited this page Sep 22, 2022 · 1 revision

WS APIs to access private channels

Authentication

import asyncio
import os

from polosdk import WsClientAuthenticated

api_key = os.environ['POLO_API_KEY']
api_secret = os.environ['POLO_API_SECRET']


async def ws_authenticated_example():
    def on_message(msg):
        print(msg)

    def on_error(err):
        print(err)

    ws_client_authenticated = WsClientAuthenticated(on_message, on_error=on_error)
    await ws_client_authenticated.connect(api_key, api_secret)


def main():
    asyncio.run(ws_authenticated_example())


if __name__ == '__main__':
    main()

Orders

Real time information about client’s orders. There are three types of events: "place", "trade", and "canceled". Supports 5 connections per user.

Stream Response Field Data Type Description
symbol String symbol name
type String MARKET, LIMIT, LIMIT_MAKER, STOP_LOSS_LIMIT, TAKE_PROFIT_LIMIT
quantity String number of base units for this order
orderId String order id
tradeFee String fee amount for the trade
clientOrderId String user specified id
accountType String SPOT
feeCurrency String fee currency name
eventType String place, trade, canceled
source String WEB, APP, API, SMART, UNKNOWN
side String BUY, SELL
filledQuantity String base units filled in this order
filledAmount String quote units filled in this order
matchRole String MAKER, TAKER
state String NEW, PARTIALLY_FILLED, FILLED, PENDING_CANCEL, PARTIALLY_CANCELED, CANCELED, REJECTED, EXPIRED, FAILED
tradeTime Long time the trade was executed
tradeAmount String number of quote units for a trade
orderAmount String number of quote units for this order
createTime Long time the record was created
price String set price of the order
tradeQty String number of base units for a trade
tradePrice String price of the trade
tradeId String id of the trade
ts Long time the record was pushed

Example:

# --> Request
await ws_client_authenticated.subscribe(['orders'], ['all'])

# <-- Receipt Confirmation
{
  "channel": "orders",
  "event": "subscribe"
}

# <-- Stream
{
    "channel": "orders",
    "data": [
        {
            "symbol": "BTC_USDT",
            "type": "LIMIT",
            "quantity": "1",
            "orderId": "32471407854219264",
            "tradeFee": "0",
            "clientOrderId": "",
            "accountType": "SPOT",
            "feeCurrency": "",
            "eventType": "place",
            "source": "API",
            "side": "BUY",
            "filledQuantity": "0",
            "filledAmount": "0",
            "matchRole": "MAKER",
            "state": "NEW",
            "tradeTime": 0,
            "tradeAmount": "0",
            "orderAmount": "0",
            "createTime": 1648708186922,
            "price": "47112.1",
            "tradeQty": "0",
            "tradePrice": "0",
            "tradeId": "0",
            "ts": 1648708187469
        }
    ]
}

Balances

Real time information about all of client’s balance(s) updates. The "Symbols” field in a request does not do anything for balances (it is ignored). There are 7 different types of events: "place_order", "canceled_order","match_order", "transfer_in", "transfer_out", "deposit","withdraw"

Stream Response Field Data Type Description
changeTime Long time the change was executed
accountId String account id where the change is taking place
eventType String event type
available String currency amount available
currency String currency name
id Long id of the asset update
userId Long user id
hold String currency amount on hold
ts Long time the record was pushed

Example:

# --> Request
await ws_client_authenticated.subscribe(['balances'])

# <-- Receipt Confirmation
{
  "channel": "balances",
  "event": "subscribe"
}

# <-- Stream
{
  "channel": "balances",
  "data": [{
      "changeTime": 1657312008411,
      "accountId": "1234",
      "eventType": "place_order",
      "available": "9999999983.668",
      "currency": "BTC",
      "id": 60018450912695040,
      "userId": 12345,
      "hold": "16.332",
      "ts": 1657312008443
  }]
}

Subscribing to Multiple Channels

# --> Request
await ws_client_authenticated.subscribe(['orders', 'balances'], ['all'])

# <-- Receipt Confirmation
{
  "channel": "orders",
  "event": "subscribe",
  "symbols": ["all"]
}

# <-- Receipt Confirmation
{
  "channel": "balances",
  "event": "subscribe"
}

# <-- Stream
{
    "channel":"orders",
    "data":[
        {
            "symbol":"LINK_USDC",
            "type":"LIMIT",
            "quantity":"10",
            "orderId":"32482887660077056",
            "tradeFee":"0",
            "clientOrderId":"4436176",
            "accountType":"SPOT",
            "feeCurrency":"",
            "eventType":"place",
            "source":"API",
            "side":"SELL",
            "filledQuantity":"0",
            "filledAmount":"0",
            "state":"NEW",
            "tradeTime":0,
            "tradeAmount":"0",
            "orderAmount":"0",
            "createTime":1648710923921,
            "price":"3",
            "tradeQty":"0",
            "tradePrice":"0",
            "tradeId":"0",
            "ts":1648710923948
        }
    ]
}


# <-- Stream (continued)
{
  "channel": "balances",
  "data": [{
    "changeTime": 1657312008411,
    "accountId": "1234",
    "eventType": "place_order",
    "available": "9999999983.668",
    "currency": "BTC",
    "id": 60018450912695040,
    "userId": 12345,
    "hold": "16.332",
    "ts": 1657312008443
  }]
}
Clone this wiki locally