Skip to main content

Python3 Apexpro omni HTTP/WebSocket API Connector

Project description

apex omni

Official Python3 API connector for Apex omni's HTTP and WebSockets APIs.
You can get Api information from OpenApi-SDK

About

Put simply, apex omni is the official lightweight one-stop-shop module for the Apex omni HTTP and WebSocket APIs.

Development

  • apex omni is being actively developed, and new API changes should arrive on apex omni very quickly. apex omni uses requests and websocket for its methods, alongside other built-in modules. Anyone is welcome to branch/fork the repository and add their own upgrades. If you think you've made substantial improvements to the module, submit a pull request and we'll gladly take a look.

Installation

apex omni supports Python versions from 3.6 to 3.12. The module can be installed manually or via apexomni with pip:

pip3 install apexomni

Configuration

from apexomni.http_private_v3 import HttpPrivateSign
from apexomni.constants import APEX_OMNI_HTTP_TEST, NETWORKID_OMNI_TEST_BNB

key = 'your apiKey-key from register'
secret = 'your apiKey-secret from register'
passphrase = 'your apiKey-passphrase from register'

seeds = 'your zk seeds from register'
l2Key = 'your l2Key seeds from register'  # optional; can be ''

client = HttpPrivateSign(
    APEX_OMNI_HTTP_TEST,
    network_id=NETWORKID_OMNI_TEST_BNB,
    zk_seeds=seeds,
    zk_l2Key=l2Key,
    api_key_credentials={'key': key, 'secret': secret, 'passphrase': passphrase},
)

New Basic Usage V3

You can create an HTTP session for Inverse on APEX_OMNI_HTTP_TEST or APEX_OMNI_HTTP_MAIN:

from apexomni.constants import APEX_OMNI_HTTP_TEST
from apexomni.http_public import HttpPublic

client = HttpPublic(APEX_OMNI_HTTP_TEST)

Public endpoints V3

You can get no authentication information from public endpoints.
Please refer to demo_public_v3

The V3 version supports USDT symbols. Users need to request the configs_v3() interface to obtain the configuration of symbols.

client = HttpPublic(APEX_OMNI_HTTP_MAIN)
print(client.configs_v3())
print(client.klines_v3(symbol="ETHUSDT",interval=5,start=1718358480, end=1718950620, limit=5))
print(client.depth_v3(symbol="BTCUSDT"))
print(client.trades_v3(symbol="BTCUSDT"))
print(client.klines_v3(symbol="BTCUSDT",interval="15"))
print(client.ticker_v3(symbol="BTCUSDT"))
print(client.history_funding_v3(symbol="BTC-USDT"))

Register OMNI method V3

  • You can get zkKeys from client.derive_zk_key(), for regiter-user, create-order or transfer and withdraw.
  • If the user wants to trade OMNI's symbols, needs to call the register_user_v3() interface to register a OMNI account.
  • If the user has previously registered a pro apex account using the v1 or v2 interface, you also need to use the register_user_v3()
    interface to register again.
  • You need to call client.configs_v3() after init client.
  • You can get apiKey and accountId for private Api
  • After call register_user_v3(), the user must call change_pub_key_v3() to complete register v3 account.
  • Since the register_user_v3 is a non-blocking process, you need to sleep for 10 sec before call the change_pub_key_v3() action. Please refer to demo_register_v3
from apexomni.constants import APEX_OMNI_HTTP_MAIN, NETWORKID_OMNI_MAIN_ARB, NETWORKID_MAIN

print("Hello, Apex Omni")
priKey = "your eth private key"

client = HttpPrivate_v3(APEX_OMNI_HTTP_MAIN, network_id=NETWORKID_MAIN, eth_private_key=priKey)
configs = client.configs_v3()

zkKeys = client.derive_zk_key(client.default_address)
print(zkKeys)

nonceRes = client.generate_nonce_v3(refresh="false", l2Key=zkKeys['l2Key'], ethAddress=client.default_address,
                                    chainId=NETWORKID_OMNI_MAIN_ARB)

regRes = client.register_user_v3(nonce=nonceRes['data']['nonce'], l2Key=zkKeys['l2Key'], seeds=zkKeys['seeds'],
                                 ethereum_address=client.default_address)

key = regRes['data']['apiKey']['key']
secret = regRes['data']['apiKey']['secret']
passphrase = regRes['data']['apiKey']['passphrase']

time.sleep(10)
accountRes = client.get_account_v3()
print(accountRes)

# back zkKeys, apiKey,and accountId for private Api or create-oreder transfer or withdraw

print(regRes['data']['account']['id'])
print(regRes['data']['apiKey'])

changeRes = client.change_pub_key_v3(chainId=NETWORKID_OMNI_MAIN_ARB, seeds=zkKeys.get('seeds'), ethPrivateKey=priKey,
                                     zkAccountId=accountRes.get('spotAccount').get('zkAccountId'),
                                     subAccountId=accountRes.get('spotAccount').get('defaultSubAccountId'),
                                     newPkHash=zkKeys.get('pubKeyHash'),
                                     nonce=accountRes.get('spotAccount').get('nonce'), l2Key=zkKeys.get('l2Key'))
print(changeRes)

time.sleep(10)
accountRes = client.get_account_v3()
print(accountRes)

Private endpoints V3

Users need to request the configs_v3() and get_account_v3() interface to obtain the configuration of Account.

some authentication information is required to access private endpoints.
Please refer to demo_private_v3

from apexomni.constants import APEX_OMNI_HTTP_MAIN,
    NETWORKID_OMNI_MAIN_ARB

print("Hello, Apex Omni")
# need api_key_credentials={'key': key,'secret': secret, 'passphrase': passphrase} for private api

key = 'your apiKey-key from register V3'
secret = 'your apiKey-secret from register  V3'
passphrase = 'your apiKey-passphrase from register  V3'

client = HttpPrivate_v3(APEX_OMNI_HTTP_MAIN, network_id=NETWORKID_OMNI_MAIN_ARB,
                        api_key_credentials={'key': key, 'secret': secret, 'passphrase': passphrase})
configs = client.configs_v3()

userRes = client.get_user_v3()
print(userRes)

accountRes = client.get_account_v3()
print(accountRes)

accountBalanceRes = client.get_account_balance_v3()
print(accountBalanceRes)

fillsRes = client.fills_v3(limit=100, page=0, symbol="BTC-USDT", side="BUY", token="USDT")
print(fillsRes)

transfersRes = client.transfers_v3(limit=100)
print(transfersRes)

transferRes = client.transfer_v3(ids='586213648326721628')
print(transferRes)

transfersRes = client.contract_transfers_v3(limit=100)
print(transfersRes)

transferRes = client.contract_transfer_v3(ids='588301879870489180')
print(transferRes)

# deleteOrderRes = client.delete_order_v3(id="588302655921587036")
# print(deleteOrderRes)

# deleteOrderRes = client.delete_order_by_client_order_id_v3(id="123456")
# print(deleteOrderRes)

openOrdersRes = client.open_orders_v3()
print(openOrdersRes)

deleteOrdersRes = client.delete_open_orders_v3(symbol="BTC-USDT", )
print(deleteOrdersRes)

historyOrdersRes = client.history_orders_v3(token='USDT')
print(historyOrdersRes)

getOrderRes = client.get_order_v3(id="123456")
print(getOrderRes)

getOrderRes = client.get_order_by_client_order_id_v3(id="123456")
print(getOrderRes)

fundingRes = client.funding_v3(limit=100)
print(fundingRes)

historicalPnlRes = client.historical_pnl_v3(limit=100)
print(historicalPnlRes)

yesterdayPnlRes = client.yesterday_pnl_v3()
print(yesterdayPnlRes)

historyValueRes = client.history_value_v3()
print(historyValueRes)

setInitialMarginRateRes = client.set_initial_margin_rate_v3(symbol="BTC-USDT", initialMarginRate="0.05")
print(setInitialMarginRateRes)

zkKey sign withdraw or transfer method

Users need to request the configs_v3() and get_account_v3() interface to obtain the configuration of Account.

Several endpoints require a seeds and l2Key signature authentication, namely as following:

  • create_withdrawal_v3() to withdraw or fast withdraw
  • create_transfer_out_v3() to transfer asset from spot account to contract account
  • create_contract_transfer_out_v3() to transfer asset from contract account to spot account

Please refer to demo_transfer_v3

key = 'your apiKey-key from register'
secret = 'your apiKey-secret from register'
passphrase = 'your apiKey-passphrase from register'

seeds = 'your zk seeds from register'
l2Key = 'your l2Key seeds from register'

client = HttpPrivateSign(APEX_OMNI_HTTP_TEST, network_id=NETWORKID_TEST,
                          zk_seeds=seeds,zk_l2Key=l2Key,
                          api_key_credentials={'key': key, 'secret': secret, 'passphrase': passphrase})
configs = client.configs_v3()
accountData = client.get_account_v3()

#smple1 withdraw
#createWithdrawRes = client.create_withdrawal_v3(amount='3',asset='USDT', toChainId=3)
#print(createWithdrawRes)

#smple2 fast withdraw
#withdraw_feeRes = client.withdraw_fee_v3(amount="3",chainIds="3",tokenId='140')
#print(withdraw_feeRes)
#createWithdrawRes = client.create_withdrawal_v3(amount='3',asset='USDT', toChainId=3, fee=withdraw_feeRes.get('data').get('withdrawFeeAndPoolBalances')[0].get('fee'), isFastWithdraw=True)
#print(createWithdrawRes)

#smple3 transfer_out
#createTransferRes = client.create_transfer_out_v3(amount='3.4359738368',asset='USDT')
#print(createTransferRes)

#smple4 contract transfer_out
createContractTransferRes = client.create_contract_transfer_out_v3(amount='3.4359738368',asset='USDT')
print(createContractTransferRes)

zkKey sign create order method

Users need to request the configs_v3() and get_account_v3() interface to obtain the configuration of Account.
Several endpoints require a seeds and l2Key signature authentication, namely as following:

  • create_order_v3() to create order
from apexomni.constants import NETWORKID_TEST, APEX_OMNI_HTTP_TEST

print("Hello, Apex omni")

key = 'your apiKey-key from register'
secret = 'your apiKey-secret from register'
passphrase = 'your apiKey-passphrase from register'

seeds = 'your zk seeds from register'
l2Key = 'your l2Key seeds from register'

client = HttpPrivateSign(APEX_OMNI_HTTP_TEST, network_id=NETWORKID_TEST,
                         zk_seeds=seeds, zk_l2Key=l2Key,
                         api_key_credentials={'key': key, 'secret': secret, 'passphrase': passphrase})
configs = client.configs_v3()
accountData = client.get_account_v3()

currentTime = time.time()
createOrderRes = client.create_order_v3(symbol="BTC-USDT", side="SELL",
                                        type="MARKET", size="0.001", timestampSeconds=currentTime,
                                        price="60000")
print(createOrderRes)

# sample6
# Create a  TP/SL order
# first, Set a slippage to get an acceptable slPrice or tpPrice
#slippage is recommended to be greater than 0.1
# when buying, the price = price*(1 + slippage). when selling, the price = price*(1 - slippage)
slippage = decimal.Decimal("-0.1")
slPrice = decimal.Decimal("58000") * (decimal.Decimal("1") + slippage)
tpPrice = decimal.Decimal("79000") * (decimal.Decimal("1") - slippage)

createOrderRes = client.create_order_v3(symbol="BTC-USDT", side="BUY",
                                        type="LIMIT", size="0.01",
                                        price="65000",
                                        isOpenTpslOrder=True,
                                        isSetOpenSl=True,
                                        slPrice=slPrice,
                                        slSide="SELL",
                                        slSize="0.01",
                                        slTriggerPrice="58000",
                                        isSetOpenTp=True,
                                        tpPrice=tpPrice,
                                        tpSide="SELL",
                                        tpSize="0.01",
                                        tpTriggerPrice="79000",
                                        )
print(createOrderRes)

print("end, Apexomni")

WebSocket

To see comprehensive examples of how to subscribe topics from websockets. Please refer to demo_ws_v3

from time import sleep

from apexomni.constants import APEX_OMNI_WS_MAIN
from apexomni.websocket_api import WebSocket

key = 'your apiKey-key from register V3'
secret = 'your apiKey-secret from register  V3'
passphrase = 'your apiKey-passphrase from register  V3'


# Connect with authentication!
# APEX_OMNI_WS_MAIN for mainnet, APEX_OMNI_WS_TEST for testnet
ws_client = WebSocket(
    endpoint=APEX_OMNI_WS_MAIN,
    api_key_credentials={'key': key, 'secret': secret, 'passphrase': passphrase},
)

def handle_account(message):
    print(message)
    contents_data = message["contents"]
    print(len(contents_data))

def h1(message):
    print(1, message)
def h2(message):
    print(2, message)
def h3(message):
    print(3, message)
def h4(message):
    print(4, message)

#ws_client.depth_stream(h1,'BTCUSDT',25)
#ws_client.ticker_stream(h2,'BTCUSDT')
ws_client.trade_stream(h3,'BTCUSDT')
ws_client.klines_stream(h4,'BTCUSDT',1)
ws_client.account_info_stream_v3(handle_account)


while True:
    # Run your main trading logic here.
    sleep(1)

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

apexomni-3.1.6.tar.gz (6.6 MB view details)

Uploaded Source

Built Distribution

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

apexomni-3.1.6-py2.py3-none-any.whl (6.7 MB view details)

Uploaded Python 2Python 3

File details

Details for the file apexomni-3.1.6.tar.gz.

File metadata

  • Download URL: apexomni-3.1.6.tar.gz
  • Upload date:
  • Size: 6.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.22

File hashes

Hashes for apexomni-3.1.6.tar.gz
Algorithm Hash digest
SHA256 39401091592e7532bece534a3839999e6f532f9c3ad34e4c2fc87fbb53cbfd4d
MD5 611fc42a5dc368a09ebea9b5ff0ce164
BLAKE2b-256 6f73cc57ed25ca4870a5b352866e554228369fc65f45b17ab0da038d5e0a9895

See more details on using hashes here.

File details

Details for the file apexomni-3.1.6-py2.py3-none-any.whl.

File metadata

  • Download URL: apexomni-3.1.6-py2.py3-none-any.whl
  • Upload date:
  • Size: 6.7 MB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.22

File hashes

Hashes for apexomni-3.1.6-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 60e4d73f81fb95fd8bffe2684ea328372e9c67047a8c3293795da4f766759ae9
MD5 77143c4607a7f7766c0857b34f270cb3
BLAKE2b-256 98d38d4ce32ae06f28feb9d91cbb9e50f863718d11b6fd651c8e874f68d87b85

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