# Bybit V5

> Bybit AI Skills — trade spot, linear perpetuals, inverse contracts, and options with natural language. Covers 274 endpoints including market data, order management, position management, account operations, and more. Authentication via HMAC-SHA256 with header-based signing.

- Skill: `bybit-exchange/bybit-v5` (Agent Skill)
- Install (CLI): `npx skillmds@latest add bybit-exchange/bybit-v5`
- Raw SKILL.md: https://api.skillmd.com/api/skills/bybit-exchange/bybit-v5/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: bybit-exchange (https://skillmd.com/u/bybit-exchange)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/bybit-exchange/bybit-v5

---


# Bybit AI Skills

Unified API skill for Bybit V5 covering all product types: **spot**, **linear** (USDT/USDC perpetuals), **inverse** (inverse perpetuals/futures), and **option**. All endpoints share a common `category` parameter to specify the product type. Returns results in JSON format.

---

## Authentication

### Base URLs

| Region | Mainnet URL | Notes |
|--------|-------------|-------|
| Global (default) | `https://api.bybit.com` | Primary |
| Global (backup) | `https://api.bytick.com` | Backup |
| Netherlands | `https://api.bybit.nl` | |
| Turkey | `https://api.bybit-tr.com` | |
| Kazakhstan | `https://api.bybit.kz` | |
| Georgia | `https://api.bybitgeorgia.ge` | |
| UAE | `https://api.bybit.ae` | |
| EEA | `https://api.bybit.eu` | |
| Indonesia | `https://api.bybit.id` | |
| **Testnet** | `https://api-testnet.bybit.com` | Always this URL regardless of region |

Agent SHALL auto-select the base URL based on the account's `Region` field. If no region is set, default to `https://api.bybit.com`. Testnet accounts always use `https://api-testnet.bybit.com`.

### Required Headers

| Header | Value | Description |
|--------|-------|-------------|
| `X-BAPI-API-KEY` | Your API key | API key identifier |
| `X-BAPI-TIMESTAMP` | Unix timestamp (ms) | Current UTC time in milliseconds |
| `X-BAPI-SIGN` | HMAC-SHA256 hex string | Request signature |
| `X-BAPI-RECV-WINDOW` | `5000` (default) | Request validity window in ms |
| `Content-Type` | `application/json` | Required for POST requests |
| `User-Agent` | `bybit-v5/1.0.0 (Skill)` | Product identifier |

### Signing Process

**Step 1: Build the string to sign**

For **GET** requests:
```
{timestamp}{apiKey}{recvWindow}{queryString}
```

For **POST** requests:
```
{timestamp}{apiKey}{recvWindow}{jsonBodyString}
```

**Step 2: Generate HMAC-SHA256 signature**

```bash
echo -n "${PARAM_STR}" | openssl dgst -sha256 -hmac "${SECRET_KEY}" | cut -d' ' -f2
```

The result is a lowercase hex string.

**Step 3: Include signature in X-BAPI-SIGN header**

### Complete Examples

**GET request (authenticated):**

```bash
#!/bin/bash
API_KEY="your_api_key"
SECRET_KEY="your_secret_key"
BASE_URL="https://api.bybit.com"
RECV_WINDOW=5000
TIMESTAMP=$(date +%s000)

QUERY="category=linear&symbol=BTCUSDT"
PARAM_STR="${TIMESTAMP}${API_KEY}${RECV_WINDOW}${QUERY}"
SIGN=$(echo -n "$PARAM_STR" | openssl dgst -sha256 -hmac "$SECRET_KEY" | cut -d' ' -f2)

curl -s "${BASE_URL}/v5/position/list?${QUERY}" \
  -H "X-BAPI-API-KEY: ${API_KEY}" \
  -H "X-BAPI-TIMESTAMP: ${TIMESTAMP}" \
  -H "X-BAPI-SIGN: ${SIGN}" \
  -H "X-BAPI-RECV-WINDOW: ${RECV_WINDOW}" \
  -H "User-Agent: bybit-v5/1.0.0 (Skill)"
```

**POST request (place order):**

```bash
#!/bin/bash
API_KEY="your_api_key"
SECRET_KEY="your_secret_key"
BASE_URL="https://api.bybit.com"
RECV_WINDOW=5000
TIMESTAMP=$(date +%s000)

BODY='{"category":"spot","symbol":"BTCUSDT","side":"Buy","orderType":"Market","qty":"0.001"}'
PARAM_STR="${TIMESTAMP}${API_KEY}${RECV_WINDOW}${BODY}"
SIGN=$(echo -n "$PARAM_STR" | openssl dgst -sha256 -hmac "$SECRET_KEY" | cut -d' ' -f2)

curl -s -X POST "${BASE_URL}/v5/order/create" \
  -H "Content-Type: application/json" \
  -H "X-BAPI-API-KEY: ${API_KEY}" \
  -H "X-BAPI-TIMESTAMP: ${TIMESTAMP}" \
  -H "X-BAPI-SIGN: ${SIGN}" \
  -H "X-BAPI-RECV-WINDOW: ${RECV_WINDOW}" \
  -H "User-Agent: bybit-v5/1.0.0 (Skill)" \
  -d "${BODY}"
```

### Response Format

All Bybit V5 responses follow this structure:

```json
{
  "retCode": 0,
  "retMsg": "OK",
  "result": { },
  "retExtInfo": {},
  "time": 1672211918471
}
```

`retCode=0` means success. Non-zero indicates an error.

**Rate Limit Response Headers:**
- `X-Bapi-Limit` — Your rate limit for this endpoint
- `X-Bapi-Limit-Status` — Remaining requests in current window
- `X-Bapi-Limit-Reset-Timestamp` — When limit resets (ms)

---

## Quick Reference

### Market Data (No Authentication)

| Endpoint | Path | Method | Required | Optional | Categories |
|----------|------|--------|----------|----------|------------|
| Kline | `/v5/market/kline` | GET | symbol, interval | category, start, end, limit | spot, linear, inverse |
| Mark Price Kline | `/v5/market/mark-price-kline` | GET | category, symbol, interval | start, end, limit | linear, inverse |
| Index Price Kline | `/v5/market/index-price-kline` | GET | category, symbol, interval | start, end, limit | linear, inverse |
| Premium Index Kline | `/v5/market/premium-index-price-kline` | GET | category, symbol, interval | start, end, limit | linear |
| Instruments Info | `/v5/market/instruments-info` | GET | category | symbol, baseCoin, limit, cursor, status | spot, linear, inverse, option |
| Orderbook | `/v5/market/orderbook` | GET | category, symbol | limit | spot, linear, inverse, option |
| Tickers | `/v5/market/tickers` | GET | category | symbol, baseCoin, expDate | spot, linear, inverse, option |
| Funding Rate History | `/v5/market/funding/history` | GET | category, symbol | startTime, endTime, limit | linear, inverse |
| Recent Trades | `/v5/market/recent-trade` | GET | category, symbol | baseCoin, limit | spot, linear, inverse, option |
| Open Interest | `/v5/market/open-interest` | GET | category, symbol, intervalTime | startTime, endTime, limit, cursor | linear, inverse |
| Historical Volatility | `/v5/market/historical-volatility` | GET | category | baseCoin, period, startTime, endTime | option |
| Insurance | `/v5/market/insurance` | GET | — | coin | — |
| Risk Limit | `/v5/market/risk-limit` | GET | category | symbol | linear, inverse |
| Delivery Price | `/v5/market/delivery-price` | GET | category | symbol, baseCoin, limit, cursor | linear, inverse, option |
| Long Short Ratio | `/v5/market/account-ratio` | GET | category, symbol, period | limit | linear, inverse |
| Price Limit | `/v5/market/price-limit` | GET | symbol | category | linear, inverse |
| Index Price Components | `/v5/market/index-price-components` | GET | indexName | — | — |
| Fee Group Info | `/v5/market/fee-group-info` | GET | productType | groupId | — |
| New Delivery Price | `/v5/market/new-delivery-price` | GET | category, baseCoin | settleCoin | linear, inverse, option |
| ADL Alert | `/v5/market/adlAlert` | GET | — | symbol | linear, inverse |
| RPI Orderbook | `/v5/market/rpi_orderbook` | GET | symbol, limit | category | spot |
| Server Time | `/v5/market/time` | GET | — | — | — |
| System Status | `/v5/system/status` | GET | — | id, state | — |
| Announcement | `/v5/announcements/index` | GET | — | locale, type, tag, page, limit | — |

### Trade (Authentication Required)

| Endpoint | Path | Method | Required | Optional | Rate Limit | Categories |
|----------|------|--------|----------|----------|------------|------------|
| Place Order | `/v5/order/create` | POST | category, symbol, side, orderType, qty | price, timeInForce, orderLinkId, triggerPrice, takeProfit, stopLoss, tpslMode, reduceOnly, positionIdx, ... | 10-20/s | spot, linear, inverse, option |
| Amend Order | `/v5/order/amend` | POST | category, symbol | orderId/orderLinkId, qty, price, takeProfit, stopLoss, triggerPrice, tpLimitPrice, slLimitPrice | 10/s | spot, linear, inverse, option |
| Cancel Order | `/v5/order/cancel` | POST | category, symbol | orderId/orderLinkId, orderFilter | 10-20/s | spot, linear, inverse, option |
| Get Open Orders | `/v5/order/realtime` | GET | category | symbol, baseCoin, orderId, orderLinkId, openOnly, orderFilter, limit, cursor | 50/s | spot, linear, inverse, option |
| Cancel All Orders | `/v5/order/cancel-all` | POST | category | symbol, baseCoin, settleCoin, orderFilter, stopOrderType | 10/s | spot, linear, inverse, option |
| Get Order History | `/v5/order/history` | GET | category | symbol, orderId, orderLinkId, orderFilter, orderStatus, startTime, endTime, limit, cursor | 50/s | spot, linear, inverse, option |
| Batch Place | `/v5/order/create-batch` | POST | category, request[] | — | per-order | spot, linear, inverse, option |
| Batch Amend | `/v5/order/amend-batch` | POST | category, request[] | — | per-order | spot, linear, inverse, option |
| Batch Cancel | `/v5/order/cancel-batch` | POST | category, request[] | — | per-order | spot, linear, inverse, option |
| Spot Borrow Check | `/v5/order/spot-borrow-check` | GET | category, symbol, side | — | — | spot |
| Pre-Check Order | `/v5/order/pre-check` | POST | (same as create) | — | — | spot, linear, inverse, option |
| DCP | `/v5/order/disconnected-cancel-all` | POST | timeWindow | — | — | option |

### Position (Authentication Required)

| Endpoint | Path | Method | Required | Optional | Categories |
|----------|------|--------|----------|----------|------------|
| Get Position | `/v5/position/list` | GET | category | symbol, baseCoin, settleCoin, limit, cursor | linear, inverse, option |
| Set Leverage | `/v5/position/set-leverage` | POST | category, symbol, buyLeverage, sellLeverage | — | linear, inverse |
| Switch Isolated/Cross | `/v5/position/switch-isolated` | POST | category, symbol, tradeMode, buyLeverage, sellLeverage | — | linear, inverse |
| Set TP/SL Mode | `/v5/position/set-tpsl-mode` | POST | category, symbol, tpSlMode | — | linear, inverse |
| Switch Position Mode | `/v5/position/switch-mode` | POST | category, mode | coin, symbol | linear, inverse |
| Set Risk Limit | `/v5/position/set-risk-limit` | POST | category, symbol, riskId | — | linear, inverse |
| Set Trading Stop | `/v5/position/trading-stop` | POST | category, symbol, tpslMode, positionIdx | takeProfit, stopLoss, trailingStop, tpTriggerBy, slTriggerBy, activePrice, tpSize, slSize, tpLimitPrice, slLimitPrice, tpOrderType, slOrderType | linear, inverse |
| Set Auto Add Margin | `/v5/position/set-auto-add-margin` | POST | category, symbol, autoAddMargin | positionIdx | linear, inverse |
| Add/Reduce Margin | `/v5/position/add-margin` | POST | category, symbol, margin | positionIdx | linear, inverse |
| Move Position | `/v5/position/move-positions` | POST | fromUid, toUid, list[] | — | linear, inverse |
| Move Position History | `/v5/position/move-history` | GET | — | category, symbol, startTime, endTime, status, blockTradeId, limit, cursor | linear, inverse |
| Get Trade History | `/v5/execution/list` | GET | category | symbol, baseCoin, orderId, orderLinkId, startTime, endTime, execType, limit, cursor | spot, linear, inverse, option |
| Get Closed PnL | `/v5/position/closed-pnl` | GET | category, symbol | startTime, endTime, limit, cursor | linear, inverse |
| Get Closed Options | `/v5/position/get-closed-positions` | GET | category | symbol, limit, cursor | option |
| Confirm Pending MMR | `/v5/position/confirm-pending-mmr` | POST | category, symbol | — | linear, inverse |

### Account (Authentication Required)

| Endpoint | Path | Method | Required | Optional |
|----------|------|--------|----------|----------|
| Wallet Balance | `/v5/account/wallet-balance` | GET | accountType | coin |
| Account Info | `/v5/account/info` | GET | — | — |
| Upgrade to UTA | `/v5/account/upgrade-to-uta` | POST | — | — |
| Borrow History | `/v5/account/borrow-history` | GET | — | currency, startTime, endTime, limit, cursor |
| Set Collateral | `/v5/account/set-collateral-switch` | POST | coin, collateralSwitch | — |
| Collateral Info | `/v5/account/collateral-info` | GET | — | currency |
| Coin Greeks | `/v5/asset/coin-greeks` | GET | — | baseCoin |
| Fee Rate | `/v5/account/fee-rate` | GET | category | symbol, baseCoin |
| Transaction Log | `/v5/account/transaction-log` | GET | — | accountType, category, currency, baseCoin, type, startTime, endTime, limit, cursor |
| Contract Transaction Log | `/v5/account/contract-transaction-log` | GET | — | currency, baseCoin, type, startTime, endTime, limit, cursor |
| Set Margin Mode | `/v5/account/set-margin-mode` | POST | setMarginMode | — |
| Set MMP | `/v5/account/mmp-modify` | POST | baseCoin, window, frozenPeriod, qtyLimit, deltaLimit | — |
| Reset MMP | `/v5/account/mmp-reset` | POST | baseCoin | — |
| Get MMP State | `/v5/account/mmp-state` | GET | baseCoin | — |
| Account Instruments Info | `/v5/account/instruments-info` | GET | category | symbol, limit, cursor |
| Get DCP Info | `/v5/account/query-dcp-info` | GET | — | — |
| Get SMP Group | `/v5/account/smp-group` | GET | — | — |
| Get Trade Behaviour Config | `/v5/account/user-setting-config` | GET | — | — |
| Get Transferable Amount | `/v5/account/withdrawal` | GET | coinName | — |
| Manual Borrow | `/v5/account/borrow` | POST | coin, amount | — |
| Manual Repay | `/v5/account/repay` | POST | — | coin, amount |
| No-Convert Repay | `/v5/account/no-convert-repay` | POST | coin | amount |
| Quick Repayment | `/v5/account/quick-repayment` | POST | — | coin |
| Batch Set Collateral Coin | `/v5/account/set-collateral-switch-batch` | POST | request[] | — |
| Set Spot Hedging | `/v5/account/set-hedging-mode` | POST | setHedgingMode | — |
| Set Price Limit Behaviour | `/v5/account/set-limit-px-action` | POST | category, modifyEnable | — |
| Request Demo Funds | `/v5/account/demo-apply-money` | POST | — | adjustType, utaDemoApplyMoney |

### Asset (Authentication Required)

| Endpoint | Path | Method | Required | Optional |
|----------|------|--------|----------|----------|
| Coin Exchange Records | `/v5/asset/exchange/order-record` | GET | — | fromCoin, toCoin, limit, cursor |
| Delivery Record | `/v5/asset/delivery-record` | GET | category | symbol, expDate, limit, cursor |
| USDC Settlement Record | `/v5/asset/settlement-record` | GET | category | symbol, limit, cursor |
| Internal Transfer Records | `/v5/asset/transfer/query-inter-transfer-list` | GET | — | transferId, coin, status, startTime, endTime, limit, cursor |
| Asset Info (Spot) | `/v5/asset/transfer/query-asset-info` | GET | accountType | coin |
| All Coins Balance | `/v5/asset/transfer/query-account-coins-balance` | GET | accountType | memberId, coin, withBonus |
| Single Coin Balance | `/v5/asset/transfer/query-account-coin-balance` | GET | accountType, coin | memberId, toAccountType, toMemberId, withBonus, withTransferSafeAmount |
| Transferable Coins | `/v5/asset/transfer/query-transfer-coin-list` | GET | fromAccountType, toAccountType | — |
| Internal Transfer | `/v5/asset/transfer/inter-transfer` | POST | transferId, coin, amount, fromAccountType, toAccountType | — |
| Sub UID List | `/v5/asset/transfer/query-sub-member-list` | GET | — | — |
| Universal Transfer | `/v5/asset/transfer/universal-transfer` | POST | transferId, coin, amount, fromMemberId, toMemberId, fromAccountType, toAccountType | — |
| Universal Transfer Records | `/v5/asset/transfer/query-universal-transfer-list` | GET | — | transferId, coin, status, startTime, endTime, limit, cursor |
| Allowed Deposit List | `/v5/asset/deposit/query-allowed-list` | GET | — | coin, chain, cursor, limit |
| Set Deposit Account | `/v5/asset/deposit/deposit-to-account` | POST | accountType | — |
| Deposit Records | `/v5/asset/deposit/query-record` | GET | — | coin, startTime, endTime, limit, cursor |
| Sub Deposit Records | `/v5/asset/deposit/query-sub-member-record` | GET | subMemberId | coin, startTime, endTime, limit, cursor |
| Internal Deposit Records | `/v5/asset/deposit/query-internal-record` | GET | — | startTime, endTime, coin, cursor, limit |
| Master Deposit Address | `/v5/asset/deposit/query-address` | GET | coin | chainType |
| Sub Deposit Address | `/v5/asset/deposit/query-sub-member-address` | GET | coin, chainType, subMemberId | — |
| Coin Info | `/v5/asset/coin/query-info` | GET | — | coin |
| Withdrawal Records | `/v5/asset/withdraw/query-record` | GET | — | withdrawID, coin, withdrawType, startTime, endTime, limit, cursor |
| Withdrawable Amount | `/v5/asset/withdraw/withdrawable-amount` | GET | coin | — |
| Withdraw | `/v5/asset/withdraw/create` | POST | coin, chain, address, tag, amount, timestamp, forceChain, accountType | — |
| Cancel Withdrawal | `/v5/asset/withdraw/cancel` | POST | id | — |
| Withdrawal Address List | `/v5/asset/withdraw/query-address` | GET | — | coin, chain, addressType, limit, cursor |
| Available VASPs | `/v5/asset/withdraw/vasp/list` | GET | — | — |
| Internal Transfer Records (v2) | `/v5/asset/transfer/inter-transfer-list-query` | GET | — | coin, limit |
| Small Balance Coin List | `/v5/asset/covert/small-balance-list` | GET | accountType | fromCoin |
| Small Balance Quote | `/v5/asset/covert/get-quote` | POST | accountType, fromCoinList, toCoin | — |
| Small Balance Execute | `/v5/asset/covert/small-balance-execute` | POST | quoteId | — |
| Small Balance History | `/v5/asset/covert/small-balance-history` | GET | — | accountType, quoteId, startTime, endTime, cursor, size |
| Convert Coin List | `/v5/asset/exchange/query-coin-list` | GET | accountType | coin, side |
| Convert Request Quote | `/v5/asset/exchange/quote-apply` | POST | accountType, fromCoin, toCoin, requestCoin, requestAmount | fromCoinType, toCoinType |
| Convert Execute | `/v5/asset/exchange/convert-execute` | POST | quoteTxId | — |
| Convert Result Query | `/v5/asset/exchange/convert-result-query` | GET | quoteTxId, accountType | — |
| Convert History | `/v5/asset/exchange/query-convert-history` | GET | — | accountType, index, limit |

### User (Authentication Required)

| Endpoint | Path | Method | Required | Optional |
|----------|------|--------|----------|----------|
| Create Sub Account | `/v5/user/create-sub-member` | POST | username, memberType | switch, isUta, note |
| Create Sub API Key | `/v5/user/create-sub-api` | POST | subuid, readOnly, permissions | note, ips |
| Get Sub UID List | `/v5/user/query-sub-members` | GET | — | — |
| Freeze/Unfreeze Sub | `/v5/user/frozen-sub-member` | POST | subuid, frozen | — |
| Get API Key Info | `/v5/user/query-api` | GET | — | — |
| Get Member Type | `/v5/user/get-member-type` | GET | — | — |
| Modify Master API Key | `/v5/user/update-api` | POST | — | readOnly, ips, permissions |
| Modify Sub API Key | `/v5/user/update-sub-api` | POST | apikey | readOnly, ips, permissions |
| Delete Master API Key | `/v5/user/delete-api` | POST | — | — |
| Delete Sub API Key | `/v5/user/delete-sub-api` | POST | apikey | — |
| Get Affiliate User Info | `/v5/user/aff-customer-info` | GET | uid | — |
| Get Sub UID List (Unlimited) | `/v5/user/submembers` | GET | — | pageSize, nextCursor |
| Get Sub All API Keys | `/v5/user/sub-apikeys` | GET | subMemberId | limit, cursor |
| Get Custodial Sub Accts | `/v5/user/escrow_sub_members` | GET | — | pageSize, nextCursor |
| Delete Sub UID | `/v5/user/del-submember` | POST | subMemberId | — |
| Create Demo Account | `/v5/user/create-demo-member` | POST | — | — |
| Get Affiliate User List | `/v5/affiliate/aff-user-list` | GET | — | size, cursor, need365, need30, needDeposit, startDate, endDate |

### Spot Margin — Unified Account (Authentication Required)

| Endpoint | Path | Method | Required | Optional |
|----------|------|--------|----------|----------|
| Switch Margin Mode | `/v5/spot-margin-trade/switch-mode` | POST | spotMarginMode | — |
| Set Spot Leverage | `/v5/spot-margin-trade/set-leverage` | POST | leverage | — |
| Get VIP Margin Data | `/v5/spot-margin-trade/data` | GET | — | — |
| Interest Rate History | `/v5/spot-margin-trade/interest-rate-history` | GET | currency | startTime, endTime, vipLevel |
| Get Margin State | `/v5/spot-margin-trade/state` | GET | — | — |
| Cross Margin Loan Info | `/v5/spot-cross-margin-trade/loan-info` | GET | — | coin |
| Cross Margin Account | `/v5/spot-cross-margin-trade/account` | GET | — | — |
| Borrow | `/v5/spot-cross-margin-trade/loan` | POST | coin, qty | — |
| Repay | `/v5/spot-cross-margin-trade/repay` | POST | coin, qty | — |
| Cross Margin Switch | `/v5/spot-cross-margin-trade/switch` | POST | switch | — |
| Coin State | `/v5/spot-margin-trade/coinstate` | GET | — | currency |
| Tiered Collateral Ratio | `/v5/spot-margin-trade/collateral` | GET | — | currency |
| Get Auto Repay Mode | `/v5/spot-margin-trade/get-auto-repay-mode` | GET | — | — |
| Set Auto Repay Mode | `/v5/spot-margin-trade/set-auto-repay-mode` | POST | — | — |
| Max Borrowable | `/v5/spot-margin-trade/max-borrowable` | GET | — | coin |
| Position Tiers | `/v5/spot-margin-trade/position-tiers` | GET | — | — |
| Repayment Available Amount | `/v5/spot-margin-trade/repayment-available-amount` | GET | — | — |

### Leverage Token (Authentication for Purchase/Redeem)

| Endpoint | Path | Method | Required | Optional | Auth |
|----------|------|--------|----------|----------|------|
| LT Info | `/v5/spot-lever-token/info` | GET | — | ltCoin | No |
| LT Market | `/v5/spot-lever-token/reference` | GET | ltCoin | — | No |
| Purchase | `/v5/spot-lever-token/purchase` | POST | ltCoin, ltAmount | serialNo | Yes |
| Redeem | `/v5/spot-lever-token/redeem` | POST | ltCoin, ltAmount | serialNo | Yes |
| Order Records | `/v5/spot-lever-token/order-record` | GET | — | ltCoin, orderId, startTime, endTime, limit, ltOrderType, serialNo | Yes |

### Broker (Authentication Required)

| Endpoint | Path | Method | Required | Optional |
|----------|------|--------|----------|----------|
| Earnings Info | `/v5/broker/earnings-info` | GET | — | bizType, startTime, endTime, limit, cursor |
| Account Info | `/v5/broker/account-info` | GET | — | — |
| Sub Deposit Records | `/v5/broker/asset/query-sub-member-deposit-record` | GET | — | subMemberId, coin, startTime, endTime, limit, cursor |
| Voucher Spec | `/v5/broker/award/info` | GET | awardId | — |
| Distribute Voucher | `/v5/broker/award/distribute-award` | POST | uid, awardId, amount, specCode | — |
| Voucher Distribution Records | `/v5/broker/award/distribution-record` | GET | — | awardId, startTime, endTime, limit, cursor |
| Get All Rate Limits | `/v5/broker/apilimit/query-all` | GET | — | limit, cursor, uids |
| Get Rate Limit Cap | `/v5/broker/apilimit/query-cap` | GET | — | — |
| Set Rate Limit | `/v5/broker/apilimit/set` | POST | list | — |

### Earn (Authentication Required)

| Endpoint | Path | Method | Required | Optional |
|----------|------|--------|----------|----------|
| Product Info | `/v5/earn/product-info` | GET | — | category, coin |
| Stake / Redeem | `/v5/earn/create-order` | POST | productId, amount, orderType | serialNo, accountType |
| Staked Position | `/v5/earn/position` | GET | — | productId, coin, category |
| Order History | `/v5/earn/order-history` | GET | — | productId, orderId, startTime, endTime, limit, cursor |
| Yield History | `/v5/earn/yield-history` | GET | — | productId, coin, startTime, endTime, limit, cursor |
| Get Product (v2) | `/v5/earn/product` | GET | category | coin |
| Place Order (v2) | `/v5/earn/place-order` | POST | category, coin, amount | orderLinkId |
| Get Order (v2) | `/v5/earn/order` | GET | category | orderId, orderLinkId, productId, startTime, endTime, limit, cursor |
| Get Yield (v2) | `/v5/earn/yield` | GET | category | productId, startTime, endTime, limit, cursor |
| Hourly Yield | `/v5/earn/hourly-yield` | GET | category | productId, startTime, endTime, limit, cursor |

### Crypto Loan

| Endpoint | Path | Method | Required | Optional | Auth |
|----------|------|--------|----------|----------|------|
| Borrowable Coins | `/v5/crypto-loan/loan-coin` | GET | — | coin | No |
| Collateral Coins | `/v5/crypto-loan/collateral-coin` | GET | — | coin | No |
| Flexible Borrow | `/v5/crypto-loan/flexible/borrow` | POST | loanCoin | loanAmount, collateralCoin, collateralAmount | Yes |
| Flexible Repay | `/v5/crypto-loan/flexible/repay` | POST | orderId, amount | — | Yes |
| Flexible Loans | `/v5/crypto-loan/flexible/ongoing-orders` | GET | — | orderId, loanCoin, collateralCoin, limit, cursor | Yes |
| Adjust Collateral | `/v5/crypto-loan/adjust-collateral` | POST | orderId, amount, direction | — | Yes |
| Fixed Borrow | `/v5/crypto-loan/fixed/borrow` | POST | loanCoin, loanAmount, collateralCoin, termId | — | Yes |
| Fixed Repay | `/v5/crypto-loan/fixed/repay` | POST | orderId, amount | — | Yes |
| Max Loan Amount | `/v5/crypto-loan/max-loan-amount` | GET | loanCoin, collateralCoin | collateralAmount, loanAmount | Yes |
| LTV Adjust History | `/v5/crypto-loan/ltv-adjust-history` | GET | — | orderId, startTime, endTime, limit, cursor | Yes |
| Borrow (v2) | `/v5/crypto-loan/borrow` | POST | loanCoin, collateralCoin, loanAmount | — | Yes |
| Repay (v2) | `/v5/crypto-loan/repay` | POST | orderId, repayAmount | — | Yes |
| Adjust LTV (v2) | `/v5/crypto-loan/adjust-ltv` | POST | currency, amount, direction | — | Yes |
| Get Ongoing Orders (v2) | `/v5/crypto-loan/ongoing-orders` | GET | — | orderId, limit, cursor | Yes |
| Borrow History (v2) | `/v5/crypto-loan/borrow-history` | GET | — | currency, limit, cursor | Yes |
| Repayment History (v2) | `/v5/crypto-loan/repayment-history` | GET | — | orderId, limit, cursor | Yes |
| Adjustment History (v2) | `/v5/crypto-loan/adjustment-history` | GET | — | currency, limit, cursor | Yes |
| Loanable Data (v2) | `/v5/crypto-loan/loanable-data` | GET | — | — | No |
| Collateral Data (v2) | `/v5/crypto-loan/collateral-data` | GET | — | — | No |
| Max Collateral Amount (v2) | `/v5/crypto-loan/max-collateral-amount` | GET | currency | — | Yes |
| Borrowable & Collateralizable Num | `/v5/crypto-loan/borrowable-collateralisable-number` | GET | — | — | Yes |

### Crypto Loan — Common (Authentication Required)

| Endpoint | Path | Method | Required | Optional |
|----------|------|--------|----------|----------|
| Get Position | `/v5/crypto-loan-common/position` | GET | — | — |
| Get Collateral Data | `/v5/crypto-loan-common/collateral-data` | GET | — | — |
| Get Loanable Data | `/v5/crypto-loan-common/loanable-data` | GET | — | — |
| Get Max Collateral Amount | `/v5/crypto-loan-common/max-collateral-amount` | GET | currency | — |
| Get Max Loan | `/v5/crypto-loan-common/max-loan` | GET | currency | — |
| Adjust LTV | `/v5/crypto-loan-common/adjust-ltv` | POST | currency, amount, direction | — |
| Adjustment History | `/v5/crypto-loan-common/adjustment-history` | GET | — | currency, limit, cursor |

### Crypto Loan — Fixed Term (Authentication Required)

| Endpoint | Path | Method | Required | Optional |
|----------|------|--------|----------|----------|
| Borrow Contract Info | `/v5/crypto-loan-fixed/borrow-contract-info` | GET | orderCurrency | — |
| Borrow Order Quote | `/v5/crypto-loan-fixed/borrow-order-quote` | GET | orderCurrency | orderBy |
| Borrow | `/v5/crypto-loan-fixed/borrow` | POST | orderCurrency, loanAmount, collateralCoin, termId | — |
| Borrow Order Info | `/v5/crypto-loan-fixed/borrow-order-info` | GET | — | orderId |
| Cancel Borrow Order | `/v5/crypto-loan-fixed/borrow-order-cancel` | POST | orderId | — |
| Fully Repay | `/v5/crypto-loan-fixed/fully-repay` | POST | orderId | — |
| Repay Collateral | `/v5/crypto-loan-fixed/repay-collateral` | POST | orderId | — |
| Repayment History | `/v5/crypto-loan-fixed/repayment-history` | GET | — | repayId |
| Renew Info | `/v5/crypto-loan-fixed/renew-info` | GET | orderId | — |
| Renew | `/v5/crypto-loan-fixed/renew` | POST | orderId | — |
| Supply Contract Info | `/v5/crypto-loan-fixed/supply-contract-info` | GET | supplyCurrency | — |
| Supply Order Quote | `/v5/crypto-loan-fixed/supply-order-quote` | GET | orderCurrency | orderBy |
| Supply | `/v5/crypto-loan-fixed/supply` | POST | supplyCurrency, supplyAmount, termId | — |
| Supply Order Info | `/v5/crypto-loan-fixed/supply-order-info` | GET | — | orderId |
| Cancel Supply Order | `/v5/crypto-loan-fixed/supply-order-cancel` | POST | orderId | — |

### Crypto Loan — Flexible (Authentication Required)

| Endpoint | Path | Method | Required | Optional |
|----------|------|--------|----------|----------|
| Borrow | `/v5/crypto-loan-flexible/borrow` | POST | loanCoin, loanAmount | — |
| Repay | `/v5/crypto-loan-flexible/repay` | POST | loanCoin, repayAmount | — |
| Repay Collateral | `/v5/crypto-loan-flexible/repay-collateral` | POST | orderId | — |
| Ongoing Coins | `/v5/crypto-loan-flexible/ongoing-coin` | GET | — | loanCurrency |
| Borrow History | `/v5/crypto-loan-flexible/borrow-history` | GET | — | limit |
| Repayment History | `/v5/crypto-loan-flexible/repayment-history` | GET | — | loanCurrency |

### Institutional Loan (Authentication Required)

| Endpoint | Path | Method | Required | Optional |
|----------|------|--------|----------|----------|
| Product Info | `/v5/ins-loan/product-infos` | GET | — | productId |
| Margin Coin Info | `/v5/ins-loan/ensure-tokens-convert` | GET | — | loanOrderId |
| Loan Orders | `/v5/ins-loan/loan-order` | GET | — | orderId, startTime, endTime, limit |
| Repay History | `/v5/ins-loan/repaid-history` | GET | — | startTime, endTime, limit |
| LTV | `/v5/ins-loan/ltv-convert` | GET | — | — |
| Get Margin Coin Info | `/v5/ins-loan/ensure-tokens` | GET | — | productId |
| Get LTV | `/v5/ins-loan/ltv` | GET | — | — |
| Bind/Unbind UID | `/v5/ins-loan/association-uid` | POST | uid, operate | — |
| Repay Loan | `/v5/ins-loan/repay-loan` | POST | — | — |

### RFQ — Block Trading (Authentication Required, 50/s)

| Endpoint | Path | Method | Required | Optional |
|----------|------|--------|----------|----------|
| Create RFQ | `/v5/rfq/create-rfq` | POST | baseCoin, legs[] | rfqId, quoteExpiry |
| Cancel RFQ | `/v5/rfq/cancel-rfq` | POST | rfqId | — |
| Cancel All RFQs | `/v5/rfq/cancel-all-rfq` | POST | — | — |
| Create Quote | `/v5/rfq/create-quote` | POST | rfqId, legs[] | — |
| Execute Quote | `/v5/rfq/execute-quote` | POST | rfqId, quoteId | — |
| Cancel Quote | `/v5/rfq/cancel-quote` | POST | quoteId | — |
| Cancel All Quotes | `/v5/rfq/cancel-all-quotes` | POST | — | — |
| RFQ Realtime | `/v5/rfq/rfq-realtime` | GET | — | rfqId, baseCoin, side, limit |
| RFQ History | `/v5/rfq/rfq-list` | GET | — | rfqId, startTime, endTime, limit, cursor |
| Quote Realtime | `/v5/rfq/quote-realtime` | GET | — | quoteId, rfqId, baseCoin, limit |
| Quote History | `/v5/rfq/quote-list` | GET | — | quoteId, startTime, endTime, limit, cursor |
| Trade List | `/v5/rfq/trade-list` | GET | — | rfqId, startTime, endTime, limit, cursor |
| Public Trades | `/v5/rfq/public-trades` | GET | — | baseCoin, category, limit |
| Config | `/v5/rfq/config` | GET | — | — |
| Accept Non-LP Quote | `/v5/rfq/accept-other-quote` | POST | rfqId | — |

### Spread Trade (Authentication Required)

| Endpoint | Path | Method | Required | Optional |
|----------|------|--------|----------|----------|
| Place Order | `/v5/spread/order/create` | POST | symbol, side, orderType, qty | price, orderLinkId, timeInForce |
| Amend Order | `/v5/spread/order/amend` | POST | symbol | orderId, orderLinkId, qty, price |
| Cancel Order | `/v5/spread/order/cancel` | POST | — | orderId, orderLinkId |
| Cancel All Orders | `/v5/spread/order/cancel-all` | POST | — | symbol, cancelAll |
| Get Open Orders | `/v5/spread/order/realtime` | GET | — | symbol, baseCoin, orderId, orderLinkId, limit, cursor |
| Get Order History | `/v5/spread/order/history` | GET | — | symbol, baseCoin, orderId, orderLinkId, startTime, endTime, limit, cursor |
| Get Trade History | `/v5/spread/execution/list` | GET | — | symbol, orderId, orderLinkId, startTime, endTime, limit, cursor |
| Get Instruments | `/v5/spread/instrument` | GET | — | symbol, baseCoin, limit, cursor |
| Get Orderbook | `/v5/spread/orderbook` | GET | symbol, limit | — |
| Get Tickers | `/v5/spread/tickers` | GET | symbol | — |
| Get Recent Trades | `/v5/spread/recent-trade` | GET | symbol | limit |

### Fiat (Authentication Required)

| Endpoint | Path | Method | Required | Optional |
|----------|------|--------|----------|----------|
| Get Balance | `/v5/fiat/balance-query` | GET | — | currency |
| Get Trading Pair List | `/v5/fiat/query-coin-list` | GET | — | side |
| Get Reference Price | `/v5/fiat/reference-price` | GET | symbol | — |
| Request Quote | `/v5/fiat/quote-apply` | POST | fromCoin, fromCoinType, toCoin, toCoinType, requestAmount | requestCoinType |
| Execute Trade | `/v5/fiat/trade-execute` | POST | quoteTxId, subUserId | webhookUrl, MerchantRequestId |
| Get Trade Status | `/v5/fiat/trade-query` | GET | — | tradeNo, merchantRequestId |
| Get Trade History | `/v5/fiat/trade-query-history` | GET | — | — |

### Lending (Authentication Required)

| Endpoint | Path | Method | Required | Optional |
|----------|------|--------|----------|----------|
| Get Lending Coin Info | `/v5/lending/info` | GET | — | coin |
| Get Lending Account | `/v5/lending/account` | GET | coin | — |
| Deposit Funds | `/v5/lending/purchase` | POST | coin, quantity | serialNo |
| Redeem Funds | `/v5/lending/redeem` | POST | coin, quantity | serialNo |
| Cancel Redeem | `/v5/lending/redeem-cancel` | POST | orderId | — |
| Get Order History | `/v5/lending/history-order` | GET | — | coin, orderId, startTime, endTime, limit, orderType |

### API Rate Limit (Authentication Required)

| Endpoint | Path | Method | Required | Optional |
|----------|------|--------|----------|----------|
| Get Rate Limit | `/v5/apilimit/query` | GET | uids | — |
| Get All Rate Limits | `/v5/apilimit/query-all` | GET | — | limit, cursor, uids |
| Get Rate Limit Cap | `/v5/apilimit/query-cap` | GET | — | — |
| Set Rate Limit | `/v5/apilimit/set` | POST | list | — |

---

## Parameters

### Common Parameters

* **category**: Product type — `spot`, `linear`, `inverse`, `option`
* **symbol**: Trading pair symbol, uppercase (e.g., `BTCUSDT`, `ETH-25DEC22-1400-C`)
* **side**: `Buy`, `Sell`
* **orderType**: `Market`, `Limit`
* **qty**: Order quantity (string)
* **price**: Order price (string, required for Limit orders)
* **timeInForce**: `GTC` (default), `IOC`, `FOK`, `PostOnly`, `RPI`
* **orderLinkId**: Custom order ID (max 36 chars, unique among open orders)
* **positionIdx**: `0` (one-way mode), `1` (hedge-mode buy side), `2` (hedge-mode sell side)
* **triggerPrice**: Conditional order trigger price (string)
* **triggerBy**: Trigger price type — `LastPrice`, `IndexPrice`, `MarkPrice`
* **reduceOnly**: `true` = reduce position only
* **closeOnTrigger**: `true` = close order behavior
* **isLeverage**: `0` (no borrow, default), `1` (margin trading, spot only)
* **orderFilter**: Spot only — `Order` (default), `tpslOrder`, `StopOrder`
* **marketUnit**: Spot market orders — `baseCoin`, `quoteCoin`. **Tip:** For spot market Buy orders, prefer `marketUnit=quoteCoin` with qty as the USDT amount (e.g., `"qty":"7000","marketUnit":"quoteCoin"`) for more reliable execution. Using `baseCoin` qty may hit "Order value exceeded lower limit" on some environments.

### TP/SL Parameters

Used on `/v5/order/create`, `/v5/order/amend`, and `/v5/position/trading-stop`:

* **takeProfit**: Take profit price (pass `"0"` to cancel)
* **stopLoss**: Stop loss price (pass `"0"` to cancel)
* **tpTriggerBy**: TP trigger price type — `LastPrice` (default), `IndexPrice`, `MarkPrice`
* **slTriggerBy**: SL trigger price type — `LastPrice` (default), `IndexPrice`, `MarkPrice`
* **tpslMode**: `Full` (entire position), `Partial` (specify size)
* **tpSize**: TP quantity for partial mode
* **slSize**: SL quantity for partial mode
* **tpLimitPrice**: Limit price when TP is triggered (partial mode, Limit order)
* **slLimitPrice**: Limit price when SL is triggered (partial mode, Limit order)
* **tpOrderType**: `Market` (default), `Limit`
* **slOrderType**: `Market` (default), `Limit`
* **trailingStop**: Trailing stop distance (pass `"0"` to cancel, position only)
* **activePrice**: Trailing stop activation price (position only)

### Enums

* **category**: `spot` | `linear` | `inverse` | `option`
* **side**: `Buy` | `Sell`
* **orderType**: `Market` | `Limit`
* **timeInForce**: `GTC` | `IOC` | `FOK` | `PostOnly` | `RPI`
* **triggerBy**: `LastPrice` | `IndexPrice` | `MarkPrice`
* **positionIdx**: `0` (one-way) | `1` (hedge-buy) | `2` (hedge-sell)
* **accountType**: `UNIFIED` | `FUND`
* **tpslMode**: `Full` | `Partial`
* **tradeMode**: `0` (cross margin) | `1` (isolated margin)
* **positionMode**: `0` (MergedSingle / one-way) | `3` (BothSide / hedge)
* **orderStatus (open)**: `New` | `PartiallyFilled` | `Untriggered`
* **orderStatus (closed)**: `Rejected` | `PartiallyFilledCanceled` | `Filled` | `Cancelled` | `Triggered` | `Deactivated`
* **execType**: `Trade` | `AdlTrade` | `Funding` | `BustTrade` | `Delivery` | `Settle` | `BlockTrade` | `MovePosition`
* **stopOrderType**: `TakeProfit` | `StopLoss` | `TrailingStop` | `Stop` | `PartialTakeProfit` | `PartialStopLoss` | `tpslOrder` | `OcoOrder`
* **cancelType**: `CancelByUser` | `CancelByReduceOnly` | `CancelByPrepareLiq` | `CancelByPrepareAdl` | `CancelByAdmin` | `CancelBySettle` | `CancelByTpSlTsClear` | `CancelBySmp` | `CancelByDCP`
* **interval** (kline): `1` | `3` | `5` | `15` | `30` | `60` | `120` | `240` | `360` | `720` | `D` | `W` | `M`
* **intervalTime** (open interest): `5min` | `15min` | `30min` | `1h` | `4h` | `1d`
* **period** (long/short ratio): `5min` | `15min` | `30min` | `1h` | `4h` | `1d`
* **setMarginMode**: `ISOLATED_MARGIN` | `REGULAR_MARGIN` | `PORTFOLIO_MARGIN`
* **collateralSwitch**: `ON` | `OFF`
* **autoAddMargin**: `0` (off) | `1` (on)
* **frozen** (sub account): `0` (unfreeze) | `1` (freeze)
* **memberType** (sub account): `1` (normal) | `6` (custodial)
* **spotMarginMode**: `0` (off) | `1` (on)
* **direction** (collateral adjust): `ADD` | `REDUCE`
* **earnOrderType**: `Stake` | `Redeem`

---

## WebSocket Reference

For agents that need real-time push notifications (e.g., always-on assistants).

### Public Streams

**URL:** `wss://stream.bybit.com/v5/public/{category}`
**Testnet:** `wss://stream-testnet.bybit.com/v5/public/{category}`

Where `{category}` = `spot`, `linear`, `inverse`, `option`

| Topic | Format | Description |
|-------|--------|-------------|
| Orderbook | `orderbook.{depth}.{symbol}` | Depth: 1, 50, 200, 500 |
| Public Trade | `publicTrade.{symbol}` | Real-time trades |
| Tickers | `tickers.{symbol}` | Ticker updates |
| Kline | `kline.{interval}.{symbol}` | Candlestick updates |
| Liquidation | `liquidation.{symbol}` | Liquidation events |
| LT Kline | `kline_lt.{interval}.{symbol}` | Leveraged token kline |
| LT Ticker | `tickers_lt.{symbol}` | Leveraged token ticker |
| LT NAV | `lt.{symbol}` | Leveraged token NAV |

### Private Streams

**URL:** `wss://stream.bybit.com/v5/private`
**Testnet:** `wss://stream-testnet.bybit.com/v5/private`

| Topic | Description |
|-------|-------------|
| `position` | Position updates |
| `execution` | Trade execution updates |
| `execution.fast` | Fast execution updates (lower latency) |
| `order` | Order status updates |
| `wallet` | Wallet balance changes |
| `greeks` | Option greeks updates |
| `dcp` | Disconnect cancel-all protection |

### Subscription Format

```json
{"op": "subscribe", "args": ["orderbook.50.BTCUSDT", "publicTrade.BTCUSDT"]}
```

**Unsubscribe:**
```json
{"op": "unsubscribe", "args": ["orderbook.50.BTCUSDT"]}
```

**Heartbeat:** Send `{"op": "ping"}` every 20 seconds.

### Private Stream Authentication

```json
{"op": "auth", "args": ["<apiKey>", "<expires>", "<signature>"]}
```

Where:
- `expires` = future timestamp in milliseconds
- `signature` = HMAC-SHA256 of `GET/realtime{expires}` using secret key

---

## Security

### Share Credentials

Users can provide Bybit API credentials by sending a file:

```
abc123...xyz
secret123...key
```

### Never Display Full Secrets

When showing credentials to users:
- **API Key:** Show first 5 + last 4 characters: `su1Qc...8akf`
- **Secret Key:** Always mask, show only last 5: `***...aws1`

Example:
```
Account: main
API Key: su1Qc...8akf
Secret: ***...aws1
Environment: Mainnet
Region: Global
```

### Listing Accounts

Show names, environment, and region only — never keys:
```
Bybit Accounts:
* main (Mainnet, Global)
* testnet-dev (Testnet)
* uae-trading (Mainnet, UAE)
```

### Mainnet Confirmation Rules

**Not all requests need confirmation.** Only **mainnet write operations** require user to type "CONFIRM":

| Request Type | Example | Confirmation |
|-------------|---------|-------------|
| Public 

…(truncated)
