Skip to main content

Crate bybit

Crate bybit 

Source
Expand description

Unofficial Rust SDK for the Bybit V5 API.

The library crate is named bybit (package patisson-bybit-sdk).

Everything is async and runs on Tokio.

§REST

use bybit::{
    BASE_URL_API_MAINNET_1, Category,
    http::{Client, Config, GetTickersParams},
};

let client = Client::new(Config::new(BASE_URL_API_MAINNET_1))?;
let params = GetTickersParams {
    category: Category::Linear,
    symbol: Some(String::from("BTCUSDT")),
    base_coin: None,
    exp_date: None,
};
let tickers = client.get_tickers(&params).await?;
println!("{:?}", tickers.result);

Private endpoints need credentials. Call http::Client::sync_time once so that signed requests use the server clock even if the local clock is off:

use bybit::{
    AccountType, BASE_URL_API_DEMO,
    http::{Client, Config, GetWalletBalanceParams},
};

let client = Client::new(Config::new(BASE_URL_API_DEMO).credentials("API_KEY", "API_SECRET"))?;
client.sync_time().await?;
let params = GetWalletBalanceParams {
    account_type: AccountType::UNIFIED,
    coin: None,
};
let wallet = client.get_wallet_balance(&params).await?;

§WebSocket

The driver reconnects by itself, but subscriptions (and, on private streams, authentication) must be sent again after every ws::Event::Connected:

use bybit::{
    BASE_URL_STREAM_MAINNET_1, Path, Topic,
    ws::{self, OutgoingMessage},
};

let url = format!("{BASE_URL_STREAM_MAINNET_1}{}", Path::PublicLinear);
let (handle, mut events) = ws::Stream::new(ws::Config::new(url));
handle.connect().await?;

while let Some(event) = events.recv().await {
    match event {
        ws::Event::Connected => {
            let args = vec![Topic::Ticker(String::from("BTCUSDT"))];
            let sub = OutgoingMessage::Subscribe { req_id: None, args };
            handle.send_command(sub).await?;
        }
        ws::Event::Message(msg) => println!("{msg:?}"),
        ws::Event::Disconnected { .. } => break,
        _ => {}
    }
}

For private streams build the auth message with ws::create_outgoing_message_auth_at and http::Client::server_timestamp. See the examples, in particular account-state for AccountState and stream-orderbook for OrderBookState.

§Versioning

There are no stability guarantees yet: treat every version change as breaking and pin an exact version (patisson-bybit-sdk = "=x.y.z").

Modules§

http
ws

Structs§

AccountState
Open orders, positions and wallet balances of one account.
OrderBookState
Local order book, reconstructed from a depth snapshot and a stream of diffs.
OrderKey
Identifies an order. Order ids are unique only within a category.
PositionKey
Identifies a position: one per symbol in one-way mode, two (buy and sell) in hedge mode.
SensitiveString
Signer

Enums§

AccountType
AdlRankIndicator
AnnouncementType
ApplyOutcome
Outcome of OrderBookState::apply_snapshot, OrderBookState::apply_diff and OrderBookState::apply.
CancelType
Category
Unified Account: spot | linear | inverse | option Classic Account: linear | inverse | spot
Change
What AccountState::apply and friends changed. Updates that were older than the stored data are ignored and not reported.
ContractType
ConvertAccountType
CopyTrading
CreateType
CurAuctionPhase
DCPProduct
DataRecordingPeriod
DcpFunction
DepositStatus
DepthLevel
Env
Error
ExecType
ExtraFeeType
ExtraSubFeeType
Interval
IntervalTime
Locale
LtOrderStatus
Status of a leveraged token purchase or redemption order.
LtOrderType
Whether a leveraged token order record is a purchase or a redemption.
LtStatus
MaintainType
MarginMode
MarginTrading
OcoTriggerBy
OptionPeriod
OptionType
Option type.
OrderStatus
OrderType
Pair
Path
PlaceType
PositionIdx
PositionMode
PositionStatus
Product
RejectReason
ServiceTypes
Side
SlippageToleranceType
SmpType
SpotHedgingStatus
SpotMarginMode
Whether Spot Margin Trade (UTA) is turned on for the account.
State
Status
StopOrderType
TickDirection
TimeInForce
Topic
TpslMode
TradeMode
TransferStatus
TriggerBy
TriggerDirection
Type
UnifiedMarginStatus
UnifiedUpdateStatus
Outcome of an Upgrade to Unified Account (Pro) request.
VipLevel
WithdrawStatus

Constants§

BASE_URL_API_DEMO
BASE_URL_API_MAINNET_1
BASE_URL_API_MAINNET_2
BASE_URL_API_MAINNET_3
For Netherland users.
BASE_URL_API_MAINNET_4
For Hong Kong users.
BASE_URL_API_MAINNET_5
For Turkey users.
BASE_URL_API_MAINNET_6
For Kazakhstan users.
BASE_URL_API_TESTNET
BASE_URL_STREAM_DEMO
BASE_URL_STREAM_MAINNET_1
BASE_URL_STREAM_MAINNET_2
For Turkey users.
BASE_URL_STREAM_MAINNET_3
For Kazakhstan users.
BASE_URL_STREAM_TESTNET
DEFAULT_MAX_BUFFERED_DIFFS
Default for OrderBookState::with_max_buffered.
MAX_CLOSED_ORDERS
Maximum number of closed orders remembered to reject late stream updates and stale snapshot entries for them.

Functions§

create_stream_signature
hmac_sha256
Generates HMAC using the given key and message.
spot_fee_currency
timestamp
Return milliseconds.

Type Aliases§

Second
Timestamp