bybit-rust-api

Crates.iobybit-rust-api
lib.rsbybit-rust-api
version0.3.0
created_at2025-12-21 13:29:48.650777+00
updated_at2025-12-28 08:09:27.717926+00
descriptionComplete Rust SDK for Bybit API V5 with all endpoints, comprehensive type safety and full test coverage
homepagehttps://github.com/cafercangundogdu/bybit.rust.api
repositoryhttps://github.com/cafercangundogdu/bybit.rust.api
max_upload_size
id1997968
size811,943
Cafer Can Gündoğdu (cafercangundogdu)

documentation

https://docs.rs/bybit-rust-api

README

Bybit Rust SDK

Crates.io Docs License

A Rust SDK for the Bybit API V5, providing easy access to market data and trading functionality.

Features

  • ✅ Market Data API (public endpoints)
  • ✅ Order Management (private endpoints)
  • ✅ Account Management
  • ✅ Position Management
  • ✅ Asset Management (deposits, withdrawals, transfers)
  • ✅ User Management (sub-accounts, API keys)
  • ✅ Spot Leverage Token
  • ✅ Comprehensive error handling
  • ✅ Type-safe request/response structures
  • ✅ Authentication and request signing
  • 🚧 WebSocket support (coming soon)

Installation

Add this to your Cargo.toml:

[dependencies]
bybit_rust_api = "0.3.0"

Quick Start

Market Data (Public)

use bybit_rust_api::{ApiKeyPair, Category, MarketClient, RestClient};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    // Create API key pair (empty for public endpoints)
    let api_key_pair = ApiKeyPair::new(
        "default".to_string(),
        "".to_string(),
        "".to_string(),
    );

    // Create REST client
    let rest_client = RestClient::new(
        api_key_pair,
        "https://api.bybit.com".to_string(),
    );

    // Create Market client
    let market_client = MarketClient::new(rest_client);

    // Get server time
    let server_time = market_client.get_server_time().await?;
    println!("Server time: {:?}", server_time.result);

    Ok(())
}

Trading (Private)

use bybit_rust_api::{ApiKeyPair, Category, OrderClient, OrderType, RestClient, Side, TimeInForce};
use bybit_rust_api::dto::PlaceOrderRequest;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    // Get API credentials from environment
    let api_key = std::env::var("BYBIT_API_KEY")?;
    let api_secret = std::env::var("BYBIT_API_SECRET")?;

    // Create API key pair
    let api_key_pair = ApiKeyPair::new(
        "trading".to_string(),
        api_key,
        api_secret,
    );

    // Create REST client
    let rest_client = RestClient::new(
        api_key_pair,
        "https://api.bybit.com".to_string(),
    );

    // Create Order client
    let order_client = OrderClient::new(rest_client);

    // Place a limit order
    let order_request = PlaceOrderRequest {
        category: Category::Spot,
        symbol: "BTCUSDT".to_string(),
        side: Side::Buy,
        order_type: OrderType::Limit,
        qty: "0.001".to_string(),
        price: Some("40000".to_string()),
        time_in_force: Some(TimeInForce::GTC),
        // ... other optional fields
    };

    let response = order_client.place_order(order_request).await?;
    println!("Order placed: {}", response.result.order_id);

    Ok(())
}

API Coverage

Market Data

  • Server Time
  • Kline/Candlestick
  • Mark Price Kline
  • Index Price Kline
  • Premium Index Price Kline
  • Orderbook
  • Instruments Info
  • Tickers
  • Funding Rate History
  • Risk Limit
  • Open Interest
  • Insurance
  • Recent Trades
  • Delivery Price
  • Long/Short Ratio
  • Historical Volatility

Order Management

  • Place Order
  • Batch Place Orders
  • Amend Order
  • Batch Amend Orders
  • Cancel Order
  • Batch Cancel Orders
  • Cancel All Orders
  • Get Open Orders
  • Get Order History
  • Get Trade History

Account Management

  • Get Wallet Balance
  • Get Fee Rate
  • Get Account Info
  • Get Transaction Log
  • Set Margin Mode
  • Set/Reset MMP
  • Get MMP State
  • Get Collateral Info
  • Get Borrow History
  • Upgrade to Unified Account

Position Management

  • Get Position Info
  • Set Leverage
  • Switch Margin Mode
  • Switch Position Mode
  • Set Trading Stop (TP/SL)
  • Set Auto Add Margin
  • Get Closed PnL
  • Set Risk Limit
  • Move Positions
  • Add/Reduce Margin

Asset Management

  • Deposit/Withdrawal Operations
  • Internal & Universal Transfers
  • Get Asset Info
  • Convert Operations (Quote/Execute)
  • Get Coin Info
  • Delivery & Settlement Records

User Management

  • Create/Manage Sub Members
  • Create/Manage API Keys
  • Get Member Type
  • Freeze/Delete Sub Members

Spot Leverage Token

  • Get Leverage Token Info
  • Purchase/Redeem Operations
  • Get Order Records

Environment Variables

For private endpoints, set these environment variables:

export BYBIT_API_KEY="your-api-key"
export BYBIT_API_SECRET="your-api-secret"

Examples

Run the examples:

# Market data example
cargo run --example market

# Trading example (requires API credentials)
cargo run --example trading

Testing

For testing, use the Bybit testnet:

let rest_client = RestClient::new(
    api_key_pair,
    "https://api-testnet.bybit.com".to_string(),
);

License

MIT

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Development Setup

This project uses a pre-commit hook to verify code quality before committing. This hook is automatically installed when you run cargo build.

It runs:

  • cargo fmt
  • cargo check
  • cargo check --examples
  • cargo check --tests
  • cargo test

Disclaimer

This is an unofficial SDK. Please use at your own risk.

Commit count: 0

cargo fmt