For developers

API Documentation

REST, WebSocket, and FIX 4.4 — everything you need to build institutional-grade trading systems on Exbit.

Quick start GitHub

REST API

Standard HTTP endpoints for account management, order placement, market data queries, and wallet operations. JSON request/response format with HMAC-SHA256 authentication.

WebSocket

Real-time streaming for order book updates, trades, ticker data, kline/candlestick feeds, and private account events. Sub-40ms latency with automatic reconnection.

FIX 4.4

Financial Information eXchange protocol for institutional clients requiring ultra-low-latency order routing, drop copies, and direct market access. Available for VIP 5+ accounts.

Quick start

Up and running in 30 seconds

Install the SDK, provide your API key, and place your first order.

python · pip install exbit
# Install the Exbit Python SDK
# $ pip install exbit

from exbit import Client

# Initialize client with your API credentials
client = Client(
    api_key="your_api_key",
    secret="your_api_secret",
    testnet=True  # Use testnet for development
)

# Get account balance
balance = client.account.balance()
print(f"USDT: {balance['USDT']['available']}")

# Place a limit buy order
order = client.order.create(
    symbol="BTCUSDT",
    side="BUY",
    type="LIMIT",
    price=94000.00,
    quantity=0.01,
    time_in_force="GTC"
)
print(f"Order ID: {order['orderId']}")

# Stream real-time ticker
async for tick in client.ws.ticker("BTCUSDT"):
    print(f"{tick.price} {tick.ch24h}%")
Endpoints

Endpoints overview

All REST endpoints use the base URL https://api.exbit.com/v3

Market Data

GET/market/ticker24hr ticker price statistics for all symbols
GET/market/depthOrder book depth (5, 10, 20, 50, 100, 500 levels)
GET/market/klinesCandlestick/kline data (1m to 1M intervals)
GET/market/tradesRecent public trades for a symbol
WSbtcusdt@tickerReal-time ticker stream
WSbtcusdt@depthReal-time order book diff stream

Trading

POST/orderPlace a new order (limit, market, stop, OCO)
DEL/order/{orderId}Cancel an existing order
GET/order/{orderId}Query order status and fills
GET/orders/openList all open orders
POST/order/batchPlace up to 10 orders in a single request

Account

GET/account/balanceCurrent balances for all assets
GET/account/tradesTrade history with pagination
POST/account/withdrawInitiate a withdrawal
GET/account/depositsDeposit history and status
Rate limits

Rate limits

Rate limits are applied per API key. Higher VIP tiers receive increased limits.

Protocol Endpoint Type Default Limit VIP 5+ Weight
RESTMarket data1,200 req/min6,000 req/min1 per call
RESTTrading600 req/min3,000 req/min1 per order
RESTAccount300 req/min1,500 req/min5 per call
RESTBatch orders60 req/min300 req/min10 per batch
WebSocketSubscriptions200 streams/conn1,000 streams/conn1 per stream
WebSocketConnections5 per IP25 per IP-
FIXOrder entry100 msg/sec500 msg/sec-
SDKs

Official SDKs

Well-documented, type-safe SDKs maintained by the Exbit engineering team. All open source on GitHub.

API key management

Create, rotate, and manage your API keys from the Exbit dashboard. Each key can be configured with granular permissions and IP whitelisting for maximum security.

HMAC-SHA256 request signing
IP whitelist (up to 30 IPs per key)
Granular permissions (read, trade, withdraw)
Expiry and auto-rotation support
Unlimited sub-account API keys
Manage API keys
bash
# Authenticate requests with HMAC-SHA256

timestamp=$(date +%s000)
message="${timestamp}GET/v3/account/balance"
signature=$(echo -n "$message" | \
  openssl dgst -sha256 -hmac "$SECRET")

curl -H "X-EXB-KEY: $API_KEY" \
     -H "X-EXB-SIGN: $signature" \
     -H "X-EXB-TS: $timestamp" \
     https://api.exbit.com/v3/account/balance
SDK examples

Place an order in your language

Five official SDKs, one consistent API. Here's how to submit a BTC-USDT limit order in each.

python · order.py
# Place a BTC-USDT limit order
from exbit import Client

client = Client(api_key="...", secret="...")
order = client.order.create(
    symbol="BTC-USDT",
    side="BUY",
    type="LIMIT",
    price=94000.00,
    quantity=0.01,
    time_in_force="GTC",
)
print(order["orderId"])
typescript · order.ts
// Place a BTC-USDT limit order
import { Client } from "@exbit/sdk";

const client = new Client({ apiKey, secret });
const order = await client.orders.create({
  symbol: "BTC-USDT",
  side: "BUY",
  type: "LIMIT",
  price: 94000,
  quantity: 0.01,
  timeInForce: "GTC",
});
console.log(order.orderId);
go · main.go
// Place a BTC-USDT limit order
package main

import "exbit.com/sdk"

func main() {
    c := exbit.NewClient(apiKey, secret)
    o, err := c.Orders.Create(&exbit.Order{
        Symbol: "BTC-USDT",
        Side:   "BUY",
        Type:   "LIMIT",
        Price:  94000,
        Qty:    0.01,
    })
    if err != nil { panic(err) }
    fmt.Println(o.OrderID)
}
rust · src/main.rs
// Place a BTC-USDT limit order
use exbit::{Client, OrderReq, Side, OrderType};

#[tokio::main]
async fn main() -> Result<(), exbit::Error> {
    let c = Client::new(api_key, secret);
    let o = c.orders().create(OrderReq {
        symbol: "BTC-USDT".into(),
        side: Side::Buy,
        kind: OrderType::Limit,
        price: 94000.0,
        qty: 0.01,
    }).await?;
    println!("{}", o.order_id);
    Ok(())
}
java · OrderDemo.java
// Place a BTC-USDT limit order
import com.exbit.sdk.*;

public class OrderDemo {
    public static void main(String[] args) throws Exception {
        ExbitClient client = new ExbitClient(apiKey, secret);
        Order order = client.orders().create(
            new OrderRequest()
                .symbol("BTC-USDT")
                .side(Side.BUY)
                .type(OrderType.LIMIT)
                .price(94000.0)
                .quantity(0.01)
                .timeInForce(TimeInForce.GTC)
        );
        System.out.println(order.getOrderId());
    }
}
Reference

Common endpoints

The 12 REST endpoints you'll use every day, with rate limits for standard accounts.

MethodPathDescriptionRate limit
GET/v1/ticker/:symbol24h ticker stats for a single pair200/s
GET/v1/orderbook/:symbolOrder-book snapshot up to 500 levels100/s
GET/v1/trades/:symbolRecent public trade prints100/s
GET/v1/klines/:symbolCandles from 1m up to 1M intervals100/s
POST/v1/ordersSubmit a new order (limit, market, stop, OCO)100/s
DEL/v1/orders/:idCancel a specific open order200/s
GET/v1/orders/:idQuery a single order by ID200/s
GET/v1/orders/openList all currently open orders50/s
GET/v1/account/balanceSpot balances across all assets20/s
GET/v1/fillsPrivate trade fills with pagination50/s
POST/v1/withdrawalsRequest a crypto withdrawal10/s
GET/v1/deposits/addressFetch a deposit address for a coin + network20/s
Streaming

WebSocket channels

Six real-time streams cover everything from L2 order-book diffs to private fills.

book

wss://stream.exbit.com/book@BTC-USDT

Full snapshot on subscribe, followed by incremental diffs at 100 ms. Use sequence numbers to detect gaps.

{"b":[["94218.4","1.2"]],"a":[["94218.9","0.8"]],"seq":481229}

PUBLIC

trades

wss://stream.exbit.com/trades@BTC-USDT

Every public print pushed as it lands on the matching engine, typically within 3 ms of the fill.

{"p":"94218.4","q":"0.018","s":"BUY","ts":1745500800123}

PUBLIC

ticker

wss://stream.exbit.com/ticker@BTC-USDT

24h rolling stats: last, high, low, volume, quote volume and price change percent, throttled to 1 Hz.

{"last":"94218.4","h":"95102","l":"92840","ch":"2.34"}

PUBLIC

klines

wss://stream.exbit.com/kline@BTC-USDT_1m

Live candle for the current interval, with a final confirmed bar when the bucket closes.

{"o":"94100","h":"94240","l":"94080","c":"94218","v":"318.4"}

PUBLIC

account

wss://stream.exbit.com/private/account

Real-time balance deltas from trades, transfers, deposits and withdrawals for the authenticated key.

{"asset":"USDT","free":"12840.22","locked":"942.00"}

PRIVATE · AUTH

orders

wss://stream.exbit.com/private/orders

Lifecycle events for every order you own: NEW, PARTIALLY_FILLED, FILLED, CANCELED, REJECTED.

{"id":"o-9214","s":"BTC-USDT","st":"FILLED","fp":"94218.4"}

PRIVATE · AUTH