AgentSkillsCN

low-level-api

直接与 Orderly Network 的底层 REST API(EVM)进行交互,并通过认证信息明确区分公开端点与私有端点。

SKILL.md
--- frontmatter
name: low-level-api
description: Interact directly with Orderly Network's low-level REST API (EVM). Explicitly separates Public and Private endpoints with authentication details.
argument-hint: <command> [params]

Low Level API Skill

Use this skill to access the raw REST API. Includes full authentication details.

Overview

Orderly Network is a decentralized perpetual futures trading infrastructure that enables omnichain trading. This API provides direct access to:

  • Trading: Create, modify, and cancel orders for perpetual futures
  • Position Management: Monitor open positions, PnL, liquidation prices
  • Account Management: Handle deposits, withdrawals, leverage settings
  • Market Data: Access orderbooks, klines, funding rates, and market info
  • Risk Management: Set TP/SL orders, manage margin and collateral

When to Use Low-Level API vs SDK

Use CaseRecommendation
Building a trading botLow-Level API (full control)
Building a React trading UIJS-SDK hooks (simpler integration)
Server-side trading logicLow-Level API
Custom integrationsLow-Level API
Quick prototypingJS-SDK

Configuration

  • Testnet: https://testnet-api.orderly.org
  • Mainnet: https://api.orderly.org

Authentication & Signing

Private endpoints require the following headers.

Required Headers

HeaderDescription
orderly-account-idYour unique account ID (keccak256 hash of address + broker)
orderly-keyYour API public key (ed25519, Base58-encoded with ed25519: prefix, e.g., ed25519:5FdHdjGy1tZRWgUhKUYQUAtatuw4N2kJNhkeuKF5VvWn)
orderly-timestampCurrent timestamp in milliseconds
orderly-signatureBase64URL-encoded ed25519 signature

Generating orderly-key from Secret Key

The public key must be derived from your secret key and encoded in Base58 format with the ed25519: prefix:

typescript
import * as ed from "@noble/ed25519";

// Base58 alphabet (Bitcoin-style)
const BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';

function bytesToBase58(bytes: Uint8Array): string {
  // Count leading zeros
  let zeros = 0;
  for (let i = 0; i < bytes.length && bytes[i] === 0; i++) {
    zeros++;
  }
  
  // Convert to base58
  const digits: number[] = [0];
  for (let i = 0; i < bytes.length; i++) {
    let carry = bytes[i];
    for (let j = 0; j < digits.length; j++) {
      carry += digits[j] << 8;
      digits[j] = carry % 58;
      carry = (carry / 58) | 0;
    }
    while (carry > 0) {
      digits.push(carry % 58);
      carry = (carry / 58) | 0;
    }
  }
  
  // Build result string
  let result = '';
  for (let i = 0; i < zeros; i++) {
    result += BASE58_ALPHABET[0];
  }
  for (let i = digits.length - 1; i >= 0; i--) {
    result += BASE58_ALPHABET[digits[i]];
  }
  
  return result;
}

async function getOrderlyKey(secretKey: Uint8Array): Promise<string> {
  const publicKey = await ed.getPublicKeyAsync(secretKey);
  return 'ed25519:' + bytesToBase58(publicKey);
}

Generating orderly-signature

  1. Construct the Message:

    code
    message = timestamp + method + requestPath + bodyString
    
    • timestamp: Same as header (e.g., 1680000000000).
    • method: Uppercase (e.g., POST, GET).
    • requestPath: URL path including query params (e.g., /v1/order?symbol=PERP_ETH_USDC).
    • bodyString: JSON string of body parameters (if any). Empty string if none.
  2. Sign:

    • Use your API Secret Key (ed25519) to sign the message bytes.
  3. Encode:

    • Encode the signature in Base64URL format.

Code Example (TypeScript)

typescript
import * as ed from "@noble/ed25519";

async function signRequest(
  secretKey: Uint8Array,
  timestamp: number,
  method: string,
  path: string,
  body?: object
): Promise<string> {
  const bodyString = body ? JSON.stringify(body) : "";
  const message = `${timestamp}${method.toUpperCase()}${path}${bodyString}`;
  const signature = await ed.signAsync(
    new TextEncoder().encode(message),
    secretKey
  );
  return btoa(String.fromCharCode(...signature))
    .replace(/\+/g, "-")
    .replace(/\//g, "_")
    .replace(/=+$/, "");
}

Complete Authentication Example (TypeScript)

typescript
import * as ed from "@noble/ed25519";

// Base58 encoding (required for orderly-key)
const BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';

function bytesToBase58(bytes: Uint8Array): string {
  let zeros = 0;
  for (let i = 0; i < bytes.length && bytes[i] === 0; i++) zeros++;
  
  const digits: number[] = [0];
  for (let i = 0; i < bytes.length; i++) {
    let carry = bytes[i];
    for (let j = 0; j < digits.length; j++) {
      carry += digits[j] << 8;
      digits[j] = carry % 58;
      carry = (carry / 58) | 0;
    }
    while (carry > 0) {
      digits.push(carry % 58);
      carry = (carry / 58) | 0;
    }
  }
  
  let result = BASE58_ALPHABET[0].repeat(zeros);
  for (let i = digits.length - 1; i >= 0; i--) {
    result += BASE58_ALPHABET[digits[i]];
  }
  return result;
}

async function makeAuthenticatedRequest(
  baseUrl: string,
  path: string,
  accountId: string,
  secretKey: Uint8Array,
  method: string = 'GET',
  body?: object
): Promise<any> {
  const timestamp = Date.now();
  
  // Generate signature
  const bodyString = body ? JSON.stringify(body) : "";
  const message = `${timestamp}${method.toUpperCase()}${path}${bodyString}`;
  const signature = await ed.signAsync(new TextEncoder().encode(message), secretKey);
  const signatureBase64Url = btoa(String.fromCharCode(...signature))
    .replace(/\+/g, "-")
    .replace(/\//g, "_")
    .replace(/=+$/, "");
  
  // Derive public key (orderly-key) - must be Base58 with ed25519: prefix
  const publicKey = await ed.getPublicKeyAsync(secretKey);
  const orderlyKey = 'ed25519:' + bytesToBase58(publicKey);
  
  const response = await fetch(`${baseUrl}${path}`, {
    method,
    headers: {
      'Content-Type': 'application/json',
      'orderly-account-id': accountId,
      'orderly-key': orderlyKey,
      'orderly-timestamp': timestamp.toString(),
      'orderly-signature': signatureBase64Url
    },
    body: body ? JSON.stringify(body) : undefined
  });
  
  return response.json();
}

// Example usage:
// const secretKey = base58ToBytes("DmLpCDU8PMTSXfhW5UxzsYjNsg8r6HxKfLqr4scqcHxb");
// const result = await makeAuthenticatedRequest(
//   "https://testnet-api-evm.orderly.org",
//   "/v1/client/holding",
//   "0x...",
//   secretKey
// );

Response Format

Success Response

json
{
  "success": true,
  "data": { ... }
}

Error Response

json
{
  "success": false,
  "code": -1005,
  "message": "order_price must be a positive number"
}

Common Error Codes

CodeDescription
-1000Unknown error
-1001Invalid request parameters
-1002Unauthorized (invalid signature)
-1003Rate limit exceeded
-1004Order not found
-1005Invalid order parameter
-1006Insufficient balance

Rate Limits

  • General: 10 req/s per IP (unless specified otherwise)
  • HTTP 429 returned when rate limited

Symbol Format

Orderly uses PERP_<BASE>_USDC format (e.g., PERP_ETH_USDC, PERP_BTC_USDC).


Private Endpoints (Requires Auth)

These endpoints require a valid signature and API key headers.

Sub-Accounts

Use Case: Sub-accounts allow you to segregate trading activities, useful for:

  • Running multiple trading strategies separately
  • Managing risk by isolating positions
  • Operating on behalf of multiple clients (for brokers)

Only the main account can manage sub-accounts. Each sub-account has its own positions and orders but shares the main account's API keys.

POST /v1/client/add_sub_account

  • Summary: Add sub-account
  • Use Case: Create a new sub-account for isolated trading or strategy segregation
  • Limit: 10 req/s
  • Request Body:
    json
    {
      "description": "Trading sub-account"
    }
    
  • Response Data:
    FieldTypeDescription
    sub_account_idstringThe new sub-account's unique identifier

GET /v1/client/sub_account

  • Summary: Get sub-account list
  • Use Case: Retrieve all sub-accounts to display in account management UI or to iterate over for aggregate stats
  • Limit: 10 req/s
  • Parameters: None
  • Response Data:
    FieldTypeDescription
    rows[].sub_account_idstringSub-account identifier
    rows[].descriptionstringCustom description
    rows[].created_timenumberCreation timestamp (ms)

POST /v1/client/update_sub_account

  • Summary: Update sub-account
  • Use Case: Modify the description of a sub-account for better organization
  • Limit: 10 req/s
  • Request Body:
    json
    {
      "sub_account_id": "0x...",
      "description": "Updated description"
    }
    

GET /v1/client/aggregate/positions

  • Summary: Get aggregate positions (all sub-accounts)
  • Use Case: Get a consolidated view of all positions across all sub-accounts. Useful for:
    • Portfolio overview dashboards
    • Total exposure calculation
    • Cross-account risk monitoring
  • Limit: 10 req/s
  • Parameters: None

GET /v1/client/aggregate/holding

  • Summary: Get aggregate holding (all sub-accounts)
  • Limit: 10 req/s
  • Parameters: None

POST /v1/sub_account_settle_pnl

  • Summary: Settle sub-account PnL
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    orderly_account_idheaderstringYes

Positions

Use Case: Position APIs are essential for:

  • Real-time Trading UI: Display current positions, PnL, and risk metrics
  • Risk Management: Monitor liquidation prices and margin ratios
  • Portfolio Tracking: Calculate total exposure and unrealized profits
  • Trading Bots: Check position status before placing new orders

The SDK's usePositionStream hook wraps these APIs with WebSocket updates for real-time data.

GET /v1/positions

  • Summary: Get All Positions Info
  • Use Case: Core endpoint for position monitoring. Use this to:
    • Display all open positions in a trading dashboard
    • Calculate portfolio-level PnL and risk metrics
    • Check current exposure before placing new orders
  • Limit: 3 req/s
  • Parameters: None
  • Response Data:
    FieldTypeDescription
    rows[]arrayList of open positions
    rows[].symbolstringTrading pair (e.g., PERP_ETH_USDC)
    rows[].position_qtynumberPosition size (positive=long, negative=short)
    rows[].average_open_pricenumberAverage entry price
    rows[].mark_pricenumberCurrent mark price for PnL calculation
    rows[].unrealized_pnlnumberUnrealized PnL based on mark price
    rows[].unsettled_pnlnumberPnL not yet settled to balance
    rows[].est_liq_pricenumber|nullEstimated liquidation price (null if no position)
    rows[].leveragenumberCurrent leverage for this position
    rows[].mmrnumberMaintenance margin ratio
    rows[].imrnumberInitial margin ratio
    rows[].pnl_24_hnumberPnL in last 24 hours
    rows[].fee_24_hnumberFees paid in last 24 hours
    margin_rationumberAccount margin ratio (lower = higher risk)
    free_collateralnumberAvailable collateral for new positions
    total_collateral_valuenumberTotal collateral value in USDC
    total_unreal_pnlnumberTotal unrealized PnL across all positions
  • Response Example:
    json
    {
      "success": true,
      "data": {
        "margin_ratio": 15.5,
        "free_collateral": 5000.00,
        "total_collateral_value": 10000.00,
        "total_unreal_pnl": 150.50,
        "rows": [
          {
            "symbol": "PERP_ETH_USDC",
            "position_qty": 0.5,
            "cost_position": 750.00,
            "last_sum_unitary_funding": 0.0,
            "pending_long_qty": 0,
            "pending_short_qty": 0,
            "settle_price": 1500.00,
            "average_open_price": 1500.00,
            "unrealized_pnl": 10.50,
            "unsettled_pnl": 5.25,
            "mark_price": 1521.00,
            "est_liq_price": 1200.00,
            "timestamp": 1680000000000,
            "mmr": 0.025,
            "imr": 0.05,
            "leverage": 10,
            "pnl_24_h": 25.00,
            "fee_24_h": 0.75
          }
        ]
      }
    }
    

GET /v1/position/{symbol}

  • Summary: Get One Position Info
  • Use Case: Get position details for a specific symbol. More efficient than fetching all positions when you only need one:
    • Check position before closing
    • Validate TP/SL order placement
    • Display single-symbol position widget
  • Limit: 3 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolpathstringYesTrading pair (e.g., PERP_ETH_USDC)

GET /v1/position_history

  • Summary: Get Position History
  • Use Case: Retrieve historical position data for:
    • Trading performance analysis
    • Tax reporting and record keeping
    • Strategy backtesting validation
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolquerystringNoFilter by trading pair
    limitquerynumberNoMax results to return
  • Response Data:
    FieldTypeDescription
    rows[].symbolstringTrading pair
    rows[].realized_pnlnumberRealized profit/loss
    rows[].avg_entry_pricenumberAverage entry price
    rows[].avg_exit_pricenumberAverage exit price
    rows[].closed_timenumberPosition close timestamp

GET /v1/funding_fee/history

  • Summary: Get Funding Fee History
  • Use Case: Track funding fee payments for:
    • Cost analysis and optimization
    • Tax reporting
    • Strategy profitability calculation (funding is a major cost in perps)
  • Limit: 20 req/min
  • Parameters:
    NameInTypeRequiredDescription
    symbolquerystringNoFilter by trading pair
    start_tquerystringNoStart timestamp (ms)
    end_tquerystringNoEnd timestamp (ms)
    pagequerystringNoPage number
    sizequerystringNoPage size
  • Response Data:
    FieldTypeDescription
    rows[].symbolstringTrading pair
    rows[].funding_ratenumberFunding rate at payment time
    rows[].mark_pricenumberMark price at payment time
    rows[].funding_feenumberFee paid (negative = you paid, positive = you received)
    rows[].payment_typestringPAY (paid) or RECEIVE (received)
    rows[].created_timenumberPayment timestamp

GET /v1/client/liquidator_liquidations

  • Summary: Get Liquidated Positions by Liquidator
  • Use Case: For liquidator bots to track their liquidation activity and earnings
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolquerystringNoFilter by trading pair
    start_tquerynumberNoStart timestamp (ms)
    end_tquerynumberNoEnd timestamp (ms)
    pagequerynumberNoPage number
    sizequerynumberNoPage size

GET /v1/client/leverage

  • Summary: Get Leverage Setting
  • Use Case: Check current leverage setting before:
    • Displaying leverage slider in UI
    • Calculating max position size
    • Validating order parameters
  • Limit: 1 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolquerystringYesTrading pair to check leverage for
  • Response Data:
    FieldTypeDescription
    leveragenumberCurrent leverage setting (e.g., 10 for 10x)
    max_leveragenumberMaximum allowed leverage for this symbol

POST /v1/client/leverage

  • Summary: Update Leverage Setting
  • Use Case: Change leverage before placing orders. Higher leverage = larger position with less margin but higher liquidation risk
  • Limit: 5 req/min
  • Request Body:
    json
    {
      "symbol": "PERP_ETH_USDC",
      "leverage": 10
    }
    
  • Body Parameters:
    NameTypeRequiredDescription
    symbolstringYesTrading pair
    leveragenumberYesNew leverage (1-50, depends on symbol)
  • Error Cases:
    ErrorCause
    leverage exceeds maxRequested leverage > symbol's max_leverage
    position existsCannot change leverage with open position (close first)
  • Parameters: None

GET /v1/liquidations

  • Summary: Get Liquidated Positions of Account
  • Use Case: Track your own liquidation history for:
    • Risk analysis and strategy adjustment
    • Understanding what went wrong
    • Insurance fund claim eligibility
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolquerystringNoFilter by trading pair
    start_tquerynumberNoStart timestamp (ms)
    end_tquerynumberNoEnd timestamp (ms)
    pagequerynumberNoPage number
    sizequerynumberNoPage size
    sort_byquerystringNoSort field
    liquidation_idquerynumberNoSpecific liquidation ID
  • Response Data:
    FieldTypeDescription
    rows[].liquidation_idnumberUnique liquidation identifier
    rows[].symbolstringTrading pair that was liquidated
    rows[].position_qtynumberPosition size that was liquidated
    rows[].liquidator_feenumberFee paid to liquidator
    rows[].insurance_fund_feenumberFee to insurance fund
    rows[].created_timenumberLiquidation timestamp

POST /v1/liquidation

  • Summary: Claim Liquidated Positions
  • Use Case: For liquidators to claim positions being liquidated. Liquidators earn fees for providing this service.
  • Limit: 5 req/s
  • Parameters: None

Orders

Use Case: Order APIs are the core of trading functionality:

  • Trading Bots: Automated order placement and management
  • Trading UI: Manual order entry with validation
  • Order Management: View, edit, and cancel orders

The SDK's useOrderEntry hook provides order validation (max qty, est. liquidation price) before submission.

Order Types Explained:

TypeBehavior
LIMITExecute at specified price or better
MARKETExecute immediately at best available price
IOCImmediate-or-Cancel: Fill what's available, cancel rest
FOKFill-or-Kill: Fill entire order or cancel completely
POST_ONLYOnly add liquidity (maker), never take (reject if would take)
ASKLimit sell at best ask price
BIDLimit buy at best bid price

POST /v1/order

  • Summary: Create Order
  • Use Case: Place a new order. This is the primary trading endpoint used by:
    • Trading bots for automated strategies
    • UI order forms for manual trading
    • Arbitrage systems for cross-venue trading
  • Limit: 10 req/s
  • Request Body:
    json
    {
      "symbol": "PERP_ETH_USDC",
      "order_type": "LIMIT",
      "order_price": 1500.00,
      "order_quantity": 0.1,
      "side": "BUY",
      "client_order_id": "my-order-123",
      "reduce_only": false,
      "visible_quantity": 0.1
    }
    
  • Body Parameters:
    NameTypeRequiredDescription
    symbolstringYesTrading pair (e.g., PERP_ETH_USDC)
    order_typestringYesLIMIT, MARKET, IOC, FOK, POST_ONLY, ASK, BID
    sidestringYesBUY (long) or SELL (short)
    order_pricenumberNo*Price for LIMIT orders. Required for LIMIT, optional for MARKET
    order_quantitynumberNo*Order size in base currency (e.g., 0.1 ETH). Use this OR order_amount
    order_amountnumberNo*For MARKET orders, size in quote currency (e.g., 100 USDC)
    client_order_idstringNoCustom order ID (max 36 chars) for your tracking
    reduce_onlybooleanNoIf true, only reduce existing position, never increase
    visible_quantitynumberNoFor iceberg orders: visible portion (rest is hidden)
    slippagenumberNoMax slippage % for MARKET orders (e.g., 0.01 = 1%)
    order_tagstringNoCustom tag for analytics/tracking
  • Response Data:
    FieldTypeDescription
    order_idnumberOrderly's order ID (use for cancel/edit)
    client_order_idstringYour custom ID (if provided)
    order_typestringConfirmed order type
    order_pricenumberConfirmed order price
    order_quantitynumberConfirmed order quantity
  • Response:
    json
    {
      "success": true,
      "data": {
        "order_id": 12345,
        "client_order_id": "my-order-123",
        "order_type": "LIMIT",
        "order_price": 1500.00,
        "order_quantity": 0.1
      }
    }
    
  • Error Cases:
    Error CodeCause
    -1005Invalid price (negative, zero, or wrong precision)
    -1006Insufficient balance/collateral
    order_quantity too smallBelow symbol's base_min
    order_quantity too largeAbove symbol's base_max
    price out of rangePrice deviation > symbol's price_range

PUT /v1/order

  • Summary: Edit Order
  • Use Case: Modify an existing unfilled/partially filled order without cancel+recreate:
    • Adjust price to improve fill probability
    • Change quantity based on market conditions
    • Faster than cancel+new order (maintains queue position for same price)
  • Limit: 10 req/s
  • Request Body:
    json
    {
      "order_id": 12345,
      "symbol": "PERP_ETH_USDC",
      "order_price": 1510.00,
      "order_quantity": 0.2
    }
    
  • Body Parameters:
    NameTypeRequiredDescription
    order_idnumberYesOrder ID to edit
    symbolstringYesTrading pair
    order_pricenumberNoNew price
    order_quantitynumberNoNew quantity
  • Error Cases:
    ErrorCause
    order not foundOrder ID doesn't exist or already filled
    order already cancelledOrder was previously cancelled

DELETE /v1/order

  • Summary: Cancel Order
  • Use Case: Cancel a pending order:
    • Manual order management
    • Risk management (cancel before liquidation)
    • Strategy adjustment
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolquerystringYesTrading pair
    order_idquerynumberYesOrder to cancel
  • Response Data:
    FieldTypeDescription
    order_idnumberConfirmed cancelled order ID
    statusstringCANCELLED

GET /v1/order/{order_id}

  • Summary: Get Order by order_id
  • Use Case: Check status of a specific order:
    • Verify order was placed successfully
    • Check fill status and executed quantity
    • Get order details for display
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    order_idpathstringYesOrder ID to query
  • Response Data:
    FieldTypeDescription
    order_idnumberOrder identifier
    symbolstringTrading pair
    sidestringBUY or SELL
    typestringOrder type
    pricenumberOrder price
    quantitynumberOrder quantity
    executednumberFilled quantity
    average_executed_pricenumberAverage fill price
    statusstringNEW, PARTIAL_FILLED, FILLED, CANCELLED
    total_feenumberTotal fees paid
    created_timenumberOrder creation timestamp
    updated_timenumberLast update timestamp

GET /v1/orders

  • Summary: Get Orders
  • Use Case: List orders with filtering. Essential for:
    • Order management UI (show pending orders)
    • Order history display
    • Trading bot order tracking
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolquerystringNoFilter by symbol
    sidequerystringNoBUY or SELL
    order_typequerystringNoLIMIT, MARKET, etc.
    statusquerystringNoNEW, FILLED, PARTIAL_FILLED, CANCELLED
    start_tquerynumberNoStart timestamp (ms)
    end_tquerynumberNoEnd timestamp (ms)
    pagequerynumberNoPage number (default: 1)
    sizequerynumberNoPage size (default: 25, max: 500)
  • Response Data:
    FieldTypeDescription
    rows[]arrayList of orders
    meta.totalnumberTotal matching orders
    meta.current_pagenumberCurrent page number

DELETE /v1/orders

  • Summary: Cancel All Pending Orders
  • Use Case: Bulk cancel for:
    • Emergency risk management
    • Strategy reset
    • Position close preparation
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolquerystringNoCancel only for this symbol (all if omitted)

Trades

Use Case: Trade history is essential for:

  • Performance Analysis: Calculate realized PnL by trade
  • Tax Reporting: Track all executed trades for tax purposes
  • Audit Trail: Verify order execution quality
  • Strategy Analysis: Analyze entry/exit points and slippage

GET /v1/trades

  • Summary: Get Trades
  • Use Case: Retrieve executed trade history. Each order fill creates a trade record.
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolquerystringNoFilter by trading pair
    start_tquerynumberNoStart timestamp (ms)
    end_tquerynumberNoEnd timestamp (ms)
    pagequerynumberNoPage number
    sizequerynumberNoPage size
  • Response Data:
    FieldTypeDescription
    rows[].trade_idnumberUnique trade identifier
    rows[].order_idnumberParent order ID
    rows[].symbolstringTrading pair
    rows[].sidestringBUY or SELL
    rows[].executed_pricenumberActual execution price
    rows[].executed_quantitynumberFilled quantity
    rows[].feenumberTrading fee for this fill
    rows[].fee_assetstringFee token (usually USDC)
    rows[].executed_timestampnumberExecution timestamp
    rows[].is_makerbooleanTrue if you were the maker (added liquidity)

Assets

Use Case: Asset/holding APIs provide collateral and balance information:

  • Portfolio Display: Show current token balances
  • Trading Validation: Check available collateral before orders
  • Deposit/Withdraw Flow: Verify balance changes

GET /v1/client/holding

  • Summary: Get Current Holding
  • Use Case: Get all token balances in your account. The holding field shows available balance, frozen shows locked in orders/positions.
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    allquerybooleanNoIf true, include zero-balance tokens
  • Response Data:
    FieldTypeDescription
    rows[].tokenstringToken symbol (e.g., USDC)
    rows[].holdingnumberAvailable balance
    rows[].frozennumberLocked in orders or as margin
    rows[].pending_shortnumberPending withdrawal amount
    rows[].updated_timenumberLast update timestamp

Account

Use Case: Account APIs provide user-level information:

  • Fee Rates: Know your maker/taker fees for cost calculation
  • Account Settings: Max leverage, tier status
  • User Statistics: Trading volume, performance metrics

GET /v1/client/info

  • Summary: Get Account Information
  • Use Case: Core endpoint for account setup and fee calculation. Called by SDK's useAccountInfo hook.
    • Display account tier and fee rates
    • Calculate max leverage for UI
    • Check IMR (Initial Margin Rate) factors per symbol
  • Limit: 10 req/min
  • Parameters: None
  • Response Data:
    FieldTypeDescription
    account_idstringYour unique account identifier
    account_modestringAccount mode
    tierstringAccount tier (affects fees)
    futures_tierstringFutures trading tier
    taker_fee_ratenumberTaker fee (you pay when taking liquidity)
    maker_fee_ratenumberMaker fee (often rebate for adding liquidity)
    futures_taker_fee_ratenumberFutures-specific taker fee
    futures_maker_fee_ratenumberFutures-specific maker fee
    max_leveragenumberMaximum allowed leverage
    imr_factorobjectPer-symbol IMR factors {symbol: factor}
    max_notionalobjectPer-symbol max notional {symbol: max}
    maintenance_cancel_ordersbooleanAuto-cancel orders in maintenance mode

GET /v1/client/statistics

  • Summary: Get User Statistics
  • Use Case: Retrieve aggregate trading statistics:
    • Display total volume on profile
    • Calculate VIP tier progress
    • Track overall performance
  • Limit: 10 req/min
  • Parameters: None
  • Response Data:
    FieldTypeDescription
    total_volumenumberTotal trading volume (USDC)
    total_pnlnumberTotal realized PnL
    total_tradesnumberNumber of trades executed

GET /v1/asset/history

  • Summary: Get Asset History
  • Use Case: Track deposits and withdrawals for:
    • Transaction history display
    • Reconciliation
    • Audit purposes
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    tokenquerystringNoToken symbol (e.g., USDC)
    sidequerystringNoDEPOSIT or WITHDRAW
    statusquerystringNoPENDING, COMPLETED, FAILED
    start_tquerynumberNoStart timestamp (ms)
    end_tquerynumberNoEnd timestamp (ms)
    pagequerynumberNoPage number
    sizequerynumberNoPage size
  • Response Data:
    FieldTypeDescription
    rows[].idstringTransaction ID
    rows[].tx_idstringOn-chain transaction hash
    rows[].sidestringDEPOSIT or WITHDRAW
    rows[].tokenstringToken symbol
    rows[].amountnumberTransaction amount
    rows[].feenumberTransaction fee
    rows[].trans_statusstringTransaction status
    rows[].chain_idstringSource/destination chain ID
    rows[].created_timenumberCreation timestamp

POST /v1/claim_insurance_fund

  • Summary: Claim Insurance Fund
  • Use Case: After liquidation, if there's remaining collateral in the insurance fund attributable to you, claim it back.
  • Limit: 5 req/s
  • Parameters: None

POST /v1/orderly_key

  • Summary: Add Orderly Key
  • Limit: 10 req/s
  • Parameters: None

POST /v1/client/remove_orderly_key

  • Summary: Remove Orderly Key
  • Limit: 10 req/s
  • Parameters: None

POST /v1/order/cancel_all_after

  • Summary: Cancel All After
  • Limit: 10 req/s
  • Parameters: None

POST /v1/batch-order

  • Summary: Batch Create Order
  • Limit: 10 req/s
  • Parameters: None

DELETE /v1/batch-order

  • Summary: Batch Cancel Orders
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    order_idsquerystringYes

DELETE /v1/client/order

  • Summary: Cancel Order By client_order_id
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    symbolquerystringYes
    client_order_idquerystringYes

DELETE /v1/client/batch-order

  • Summary: Batch Cancel Orders By client_order_id
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    client_order_idsquerystringYes

GET /v1/client/order/{client_order_id}

  • Summary: Get Order by client_order_id
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    client_order_idpathstringYes

GET /v1/orderbook/{symbol}

  • Summary: Orderbook Snapshot
  • Use Case: Get current order book depth for:
    • Display bid/ask ladder in trading UI
    • Calculate slippage for market orders
    • Analyze liquidity distribution
    • Best bid/ask price for limit orders
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolpathstringYesTrading pair
    max_levelqueryintegerNoDepth levels to return (default: 100)
  • Response Data:
    FieldTypeDescription
    asksarraySell orders [[price, quantity], ...] ascending by price
    bidsarrayBuy orders [[price, quantity], ...] descending by price
    timestampnumberSnapshot timestamp
  • Response Example:
    json
    {
      "success": true,
      "data": {
        "asks": [[1501.50, 2.5], [1502.00, 5.0], [1503.00, 10.0]],
        "bids": [[1500.00, 3.0], [1499.50, 7.5], [1499.00, 15.0]],
        "timestamp": 1680000000000
      }
    }
    

GET /v1/kline

  • Summary: Get Kline (Candlestick Data)
  • Use Case: Get OHLCV data for charting:
    • Display candlestick charts
    • Technical analysis indicators
    • Historical price analysis
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolquerystringYesTrading pair
    typequerystringYesInterval: 1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w, 1M
    limitquerynumberNoNumber of candles (default: 100, max: 1000)
  • Response Data:
    FieldTypeDescription
    rows[].opennumberOpening price
    rows[].highnumberHighest price
    rows[].lownumberLowest price
    rows[].closenumberClosing price
    rows[].volumenumberTrading volume
    rows[].start_timestampnumberCandle start time (ms)

GET /v1/order/{order_id}/trades

  • Summary: Get All Trades of Specific Order
  • Use Case: See all fills for a specific order (an order may fill in multiple trades)
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    order_idpathnumberYesOrder ID to query trades for

GET /v1/trade/{trade_id}

  • Summary: Get Trade
  • Use Case: Get details of a specific trade by ID
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    trade_idpathnumberYesTrade ID to query

POST /v1/client/maintenance_config

  • Summary: Set Maintenance Config
  • Limit: 10 req/min
  • Parameters: None

GET /v1/volume/user/stats

  • Summary: Get User Volume Statistics
  • Limit: 10 req/s
  • Parameters: None

GET /v1/volume/user/daily

  • Summary: Get User Daily Volume
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    start_datequerystringYes
    end_datequerystringYes

GET /v1/withdraw_nonce

  • Summary: Get Withdrawal Nonce
  • Use Case: Get the next nonce for withdrawal requests. Nonces prevent replay attacks.
  • Limit: 10 req/s
  • Parameters: None
  • Response Data:
    FieldTypeDescription
    withdraw_noncenumberNext nonce for withdrawal signature

GET /v1/settle_nonce

  • Summary: Get Settle PnL Nonce
  • Use Case: Get nonce for PnL settlement request (required for signature)
  • Limit: 10 req/s
  • Parameters: None

POST /v1/withdraw_request

  • Summary: Create Withdraw Request
  • Use Case: Withdraw funds from Orderly to your wallet:
    • Transfer USDC back to wallet
    • Must have sufficient available balance (not in positions)
    • Requires nonce from /v1/withdraw_nonce
  • Limit: 10 req/s
  • Request Body:
    json
    {
      "token": "USDC",
      "amount": "100.00",
      "chain_id": 42161,
      "receiver": "0x...",
      "nonce": 1,
      "signature": "..."
    }
    
  • Parameters: None

POST /v1/settle_pnl

  • Summary: Request PnL Settlement
  • Use Case: Settle realized PnL to your account balance:
    • Convert unrealized PnL to available balance
    • Required before withdrawing profits
    • Happens automatically periodically, but can request manually
  • Limit: 1 req/s
  • Parameters: None

GET /v1/pnl_settlement/history

  • Summary: Get PnL Settlement History
  • Use Case: Track PnL settlement events for accounting
  • Limit: 20 req/s
  • Parameters:
    NameInTypeRequiredDescription
    start_tqueryintegerNoStart timestamp
    end_tqueryintegerNoEnd timestamp
    pagequeryintegerNoPage number
    sizequeryintegerNoPage size

POST /v1/internal_transfer

  • Summary: Create Internal Transfer
  • Use Case: Transfer funds between sub-accounts or to other Orderly accounts
  • Limit: 10 req/s
  • Request Body:
    json
    {
      "token": "USDC",
      "amount": "100.00",
      "to_account_id": "0x..."
    }
    
  • Parameters: None

GET /v1/transfer_nonce

  • Summary: Get Transfer Nonce
  • Use Case: Get nonce for internal transfer signature
  • Limit: 10 req/s
  • Parameters: None

GET /v1/internal_transfer_history

  • Summary: Get Internal Transfer History
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    statusquerystringNo
    start_tquerystringNo
    end_tquerystringNo
    pagequerynumberNo
    sizequerynumberNo
    sidequerystringYes
    from_account_idquerystringNo
    to_account_idquerystringNo
    main_sub_onlyquerybooleanNo

GET /v1/client/key_info

  • Summary: Get Current Orderly Key Info
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    key_statusquerystringNo

GET /v1/client/orderly_key_ip_restriction

  • Summary: Get Orderly Key IP Restriction
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    orderly_keyquerystringYes

POST /v1/client/set_orderly_key_ip_restriction

  • Summary: Set Orderly Key IP Restriction
  • Limit: 10 req/min
  • Parameters:
    NameInTypeRequired
    orderly_keyquerystringYes
    ip_restriction_listquerystringYes

POST /v1/client/reset_orderly_key_ip_restriction

  • Summary: Reset Orderly Key IP Restriction
  • Limit: 10 req/min
  • Parameters:
    NameInTypeRequired
    orderly_keyquerystringYes
    reset_modequerystringYes

GET /v1/notification/inbox/notifications

  • Summary: Get All Notifications
  • Limit: 10 req/min
  • Parameters:
    NameInTypeRequired
    typequerystringNo
    pagequerynumberNo
    sizequerynumberNo

GET /v1/notification/inbox/unread

  • Summary: Get Unread Notifications
  • Limit: 10 req/min
  • Parameters: None

POST /v1/notification/inbox/mark_read

  • Summary: Set Read Status of Notifications
  • Limit: 10 req/min
  • Parameters:
    NameInTypeRequired
    flagquerynumberYes
    idsqueryarrayYes

POST /v1/notification/inbox/mark_read_all

  • Summary: Set Read Status of All Notifications
  • Limit: 10 req/min
  • Parameters:
    NameInTypeRequired
    flagquerynumberYes

Algo Orders (TP/SL, Stop Orders)

Use Case: Algo orders are conditional orders that execute when a trigger price is reached:

  • Take-Profit (TP): Automatically close position at profit target
  • Stop-Loss (SL): Limit losses by closing position at specified price
  • Stop Orders: Enter or exit positions based on price triggers
  • Bracket Orders: Combine entry with TP/SL in one order

Algo Order Types:

TypeUse Case
STOPBasic stop order: triggers when price reaches level
TP_SLTake-Profit or Stop-Loss for reducing position
POSITIONAL_TP_SLTP/SL tied to specific position (auto-cancels if position closes)
BRACKETEntry order with attached TP and SL

The SDK's usePositionStream hook returns positions with TP/SL info attached via full_tp_sl and partial_tp_sl fields.

POST /v1/algo/order

  • Summary: Create Algo Order (Stop-Loss, Take-Profit, etc.)
  • Use Case: Set up conditional orders for risk management:
    • Protect profits with take-profit
    • Limit losses with stop-loss
    • Enter positions at breakout levels
  • Limit: 5 req/s
  • Request Body:
    json
    {
      "symbol": "PERP_ETH_USDC",
      "algo_type": "STOP",
      "side": "SELL",
      "order_type": "MARKET",
      "quantity": 0.1,
      "trigger_price": 1400.00,
      "trigger_price_type": "MARK_PRICE",
      "reduce_only": true
    }
    
  • Body Parameters:
    NameTypeRequiredDescription
    symbolstringYesTrading pair
    algo_typestringYesSTOP, TP_SL, POSITIONAL_TP_SL, BRACKET
    sidestringYesBUY or SELL
    order_typestringYesMARKET (immediate fill at trigger) or LIMIT
    quantitynumberYesOrder quantity
    trigger_pricenumberYesPrice that activates the order
    trigger_price_typestringNoMARK_PRICE (default, safer) or LAST_PRICE
    order_pricenumberNoRequired for LIMIT orders
    reduce_onlybooleanNoOnly reduce position (recommended for TP/SL)
  • Response Data:
    FieldTypeDescription
    algo_order_idnumberUnique algo order identifier
    client_order_idstringYour custom ID (if provided)
  • Trigger Price Types:
    • MARK_PRICE: Based on mark price (prevents manipulation, recommended)
    • LAST_PRICE: Based on last traded price (may be more volatile)

PUT /v1/algo/order

  • Summary: Edit Algo Order
  • Use Case: Modify trigger price or quantity of existing algo order
  • Limit: 5 req/s
  • Request Body:
    json
    {
      "algo_order_id": 12345,
      "trigger_price": 1450.00,
      "quantity": 0.2
    }
    

DELETE /v1/algo/order

  • Summary: Cancel Algo Order
  • Use Case: Remove pending algo order (e.g., remove outdated TP/SL)
  • Limit: 5 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolquerystringYesTrading pair
    order_idquerynumberYesAlgo order ID to cancel

DELETE /v1/algo/client/order

  • Summary: Cancel Algo Order By client_order_id
  • Use Case: Cancel using your custom order ID
  • Limit: 5 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolquerystringYesTrading pair
    client_order_idquerystringYesYour custom order ID

GET /v1/algo/orders

  • Summary: Get Algo Orders
  • Use Case: List all algo orders for display and management
  • Limit: 5 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolquerystringNoFilter by symbol
    algo_typequerystringNoSTOP, TP_SL, etc.
    statusquerystringNoNEW, FILLED, CANCELLED, TRIGGERED
    sidequerystringNoBUY or SELL
    is_triggeredquerystringNotrue (already triggered) or false (waiting)
    start_tquerynumberNoStart timestamp (ms)
    end_tquerynumberNoEnd timestamp (ms)
    pagequerynumberNoPage number
    sizequerynumberNoPage size
  • Response Data:
    FieldTypeDescription
    rows[].algo_order_idnumberAlgo order identifier
    rows[].symbolstringTrading pair
    rows[].algo_typestringOrder type
    rows[].sidestringBUY/SELL
    rows[].trigger_pricenumberTrigger price
    rows[].is_triggeredbooleanWhether trigger has fired
    rows[].is_activatedbooleanWhether order is active
    rows[].algo_statusstringNEW, TRIGGERED, FILLED, CANCELLED
    rows[].quantitynumberOrder quantity
    rows[].created_timenumberCreation timestamp

DELETE /v1/algo/orders

  • Summary: Cancel All Pending Algo Orders
  • Limit: 5 req/s
  • Parameters:
    NameInTypeRequired
    symbolquerystringNo
    algo_typequerystringNo

GET /v1/algo/order/{order_id}

  • Summary: Get Algo Order by order_id
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    order_idpathstringYes

GET /v1/algo/client/order/{client_order_id}

  • Summary: Get Algo Order by client_order_id
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    client_order_idpathstringYes

GET /v1/algo/order/{order_id}/trades

  • Summary: Get All Trades of Specific Algo Order
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    order_idpathnumberYes

Builder/Broker APIs

GET /v1/volume/broker/daily

  • Summary: Get Builder's Users' Volumes
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    start_datequerystringYes
    end_datequerystringYes
    pagequerynumberNo
    sizequerynumberNo
    addressquerystringNo
    order_tagquerystringNo
    aggregateByquerystringNo
    sortquerystringNo

GET /v1/broker/leaderboard/daily

  • Summary: Get Builder's Leaderboard
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    start_datequerystringYes
    end_datequerystringYes
    pagequerynumberNo
    sizequerynumberNo
    order_tagquerystringNo
    broker_idquerystringNo
    sortquerystringNo
    addressquerystringNo
    aggregateByquerystringNo

GET /v1/client/statistics/daily

  • Summary: Get User Daily Statistics
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    start_datequerystringYes
    end_datequerystringYes
    pagequerynumberNo
    sizequerynumberNo
    include_historical_dataquerybooleanNo

GET /v1/broker/user_info

  • Summary: Get User Fee Rates
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    account_idquerystringNo
    addressquerystringNo
    pagequerystringNo
    sizequerystringNo

POST /v1/broker/fee_rate/set

  • Summary: Update User Fee Rate
  • Limit: 1 req/s
  • Parameters: None

POST /v1/broker/fee_rate/set_default

  • Summary: Reset User Fee Rate
  • Limit: 1 req/s
  • Parameters: None

GET /v1/broker/fee_rate/default

  • Summary: Get Default Builder Fee
  • Limit: 1 req/s
  • Parameters: None

POST /v1/broker/fee_rate/default

  • Summary: Update Default Builder Fee
  • Limit: 1 req/s
  • Parameters: None

POST /v1/referral/create

  • Summary: Create Referral Code
  • Limit: 1 req/s
  • Parameters: None

GET /v1/referral/admin_info

  • Summary: Get Referral Code Info
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    pagequerystringNo
    sizequerystringNo
    user_addressquerystringNo
    account_idquerystringNo
    sort_byquerystringNo

POST /v1/referral/update

  • Summary: Update Referral Code
  • Limit: 1 req/s
  • Parameters: None

POST /v1/referral/bind

  • Summary: Bind Referral Code
  • Limit: 1 req/s
  • Parameters: None

GET /v1/referral/info

  • Summary: Get Referral Info
  • Limit: 10 req/s
  • Parameters: None

GET /v1/referral/referral_history

  • Summary: Get Referral History
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    start_datequerystringNo
    end_datequerystringNo
    pagequeryintegerNo
    sizequeryintegerNo

GET /v1/referral/rebate_summary

  • Summary: Get Referral Rebate Summary
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    start_datequerystringNo
    end_datequerystringNo
    pagequeryintegerNo
    sizequeryintegerNo

GET /v1/referral/referee_history

  • Summary: Get Referee History
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    start_datequerystringNo
    end_datequerystringNo
    pagequeryintegerNo
    sizequeryintegerNo

GET /v1/referral/referee_info

  • Summary: Get Referee Info
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    pagequeryintegerNo
    sizequeryintegerNo
    sortquerystringNo

GET /v1/referral/referee_rebate_summary

  • Summary: Get Referee Rebate Summary
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    start_datequerystringYes
    end_datequerystringYes

POST /v1/referral/edit_split

  • Summary: Edit Referral Code Split
  • Limit: 1 req/s
  • Parameters: None

POST /v1/referral/auto_referral/update

  • Summary: Builder admin update auto referral
  • Limit: 1 req/s
  • Parameters: None

GET /v1/referral/auto_referral/info

  • Summary: Builder admin get auto referral info
  • Limit: 1 req/s
  • Parameters: None

GET /v1/referral/auto_referral/progress

  • Summary: Get auto referral progress
  • Limit: 1 req/s
  • Parameters: None

POST /v1/referral/edit_referral_code

  • Summary: Edit Referral Code
  • Limit: 10 req/s
  • Parameters: None

GET /v1/client/points

  • Summary: Get User's Merits
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    addressquerystringYes

GET /v1/client/points/user_statistics

  • Summary: Get User Statistics
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    stagequerynumberYes

GET /v1/admin/points/stage

  • Summary: Get Stage Parameters
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    stage_idquerynumberNo

POST /v1/admin/points/stage

  • Summary: Create/Update Stage Parameters
  • Limit: 10 req/s
  • Parameters: None

POST /v1/delegate_withdraw_request

  • Summary: Delegate Signer Withdraw Request
  • Limit: 1 req/s
  • Parameters: None

POST /v1/delegate_settle_pnl

  • Summary: Delegate Signer Settle PnL
  • Limit: 1 req/s
  • Parameters: None

GET /v1/client/distribution_history

  • Summary: Get Distribution History
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    statusquerystringNo
    typequerystringNo
    start_tquerystringNo
    end_tquerystringNo
    pagequeryintegerNo
    sizequeryintegerNo

POST /v1/client/campaign/sign_up

  • Summary: Sign Up Campaign
  • Limit: 10 req/s
  • Parameters: None

GET /v1/staking/balance

  • Summary: Get Wallet's Current Staked Balance
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    addressquerystringYes

GET /v1/staking/unstake_details

  • Summary: Get Unstaking ORDER Details
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    addressquerystringYes

GET /v1/staking/valor2/redeem

  • Summary: Get Valor2 Redeem Info
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    addressquerystringYes

GET /v1/staking/valor/redeem

  • Summary: Get Valor Redeem Info
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    addressquerystringYes

GET /v1/staking/esorder/vesting_list

  • Summary: Get esORDER vesting list
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    addressquerystringYes
    is_vestingquerybooleanYes

POST /v1/sv/sp_orderly_key

  • Summary: Add SP Orderly Key
  • Limit: 10 req/s
  • Parameters: None

POST /v1/sv/sp_settle_pnl

  • Summary: Request SP PnL Settlement
  • Limit: 10 req/s
  • Parameters: None

POST /v1/sv/manual_period_delivery

  • Summary: Trigger Manual Period Delivery
  • Limit: 10 req/s
  • Parameters: None

Public Endpoints (No Auth Required)

These endpoints can be called without authentication headers.

Market Data

Use Case: Market data endpoints provide trading information:

  • Trading UI: Display prices, volumes, price changes
  • Strategy Analysis: Analyze market trends and liquidity
  • Price Discovery: Get current prices for order placement

The SDK's useMarkets, useMarkPrice, useIndexPrice hooks wrap these endpoints.

GET /v1/public/futures

  • Summary: Get Market Info for All Symbols
  • Use Case: Core endpoint for initializing a trading app:
    • Get all available trading pairs
    • Load trading rules (min/max qty, tick sizes)
    • Display market overview table
  • Limit: 10 req/s
  • Parameters: None
  • Response Data:
    FieldTypeDescription
    rows[].symbolstringTrading pair (e.g., PERP_ETH_USDC)
    rows[].quote_minnumberMinimum quote amount
    rows[].quote_maxnumberMaximum quote amount
    rows[].quote_ticknumberPrice tick size (precision)
    rows[].base_minnumberMinimum order quantity
    rows[].base_maxnumberMaximum order quantity
    rows[].base_ticknumberQuantity tick size (precision)
    rows[].min_notionalnumberMinimum order value in USDC
    rows[].price_rangenumberMax price deviation from mark (e.g., 0.02 = 2%)
    rows[].base_mmrnumberBase maintenance margin rate
    rows[].base_imrnumberBase initial margin rate
    rows[].imr_factornumberIMR scaling factor
    rows[].funding_periodnumberFunding interval in hours
    rows[].cap_fundingnumberMax funding rate cap
    rows[].floor_fundingnumberMin funding rate floor
  • Response:
    json
    {
      "success": true,
      "data": {
        "rows": [
          {
            "symbol": "PERP_ETH_USDC",
            "quote_min": 0,
            "quote_max": 100000,
            "quote_tick": 0.01,
            "base_min": 0.001,
            "base_max": 1000,
            "base_tick": 0.001,
            "min_notional": 1,
            "price_range": 0.02,
            "created_time": 1680000000000,
            "updated_time": 1680000000000,
            "base_mmr": 0.05,
            "base_imr": 0.1,
            "imr_factor": 0.0001
          }
        ]
      }
    }
    

GET /v1/public/market_trades

  • Summary: Get Recent Market Trades
  • Use Case: Display recent trade feed (time & sales):
    • Show recent executions for a symbol
    • Analyze trade velocity and size distribution
    • Detect large trades
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolquerystringYesTrading pair (e.g., PERP_ETH_USDC)
    limitqueryintegerNoNumber of trades (default: 10, max: 100)
  • Response Data:
    FieldTypeDescription
    rows[].symbolstringTrading pair
    rows[].pricenumberTrade execution price
    rows[].sizenumberTrade size
    rows[].sidestringBUY or SELL
    rows[].tsnumberTrade timestamp (ms)

GET /v1/public/market_info/price_changes

  • Summary: Get Price Info for All Symbols
  • Use Case: Display price change statistics across all markets:
    • Market overview with 24h change %
    • Sorted leaderboard by gainers/losers
    • Price comparison across symbols
  • Limit: 10 req/s
  • Parameters: None
  • Response Data:
    FieldTypeDescription
    rows[].symbolstringTrading pair
    rows[].24h_opennumberOpening price 24h ago
    rows[].24h_closenumberCurrent/latest price
    rows[].24h_highnumber24h high
    rows[].24h_lownumber24h low
    rows[].24h_volumenumber24h trading volume (base)
    rows[].24h_amountnumber24h trading volume (quote/USDC)
    rows[].changenumber24h price change %

GET /v1/public/market_info/traders_open_interests

  • Summary: Get Open Interests for All Symbols
  • Use Case: Analyze market positioning and liquidity:
    • See total open interest per symbol
    • Identify most active markets
    • Gauge market liquidity
  • Limit: 10 req/s
  • Parameters: None
  • Response Data:
    FieldTypeDescription
    rows[].symbolstringTrading pair
    rows[].open_interestnumberTotal open interest (contracts)

GET /v1/public/market_info/history_charts

  • Summary: Get Historical Price List for All Symbols
  • Use Case: Display mini price charts on market overview page
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    time_intervalquerystringNoInterval for chart data

Funding Rates

Use Case: Funding rate endpoints are critical for perpetual futures trading:

  • Cost Estimation: Funding payments are a major cost/income in perps
  • Strategy Selection: High funding = expensive to hold position
  • Arbitrage: Compare funding between exchanges

Funding Rate Basics:

  • Paid every 8 hours (or as configured per symbol)
  • Positive rate: Longs pay shorts
  • Negative rate: Shorts pay longs
  • Formula: funding_fee = position_size × mark_price × funding_rate

GET /v1/public/funding_rates

  • Summary: Get Predicted Funding Rates for All Markets
  • Use Case: Display funding rates across all markets for comparison
  • Limit: 10 req/s
  • Parameters: None
  • Response Data:
    FieldTypeDescription
    rows[].symbolstringTrading pair
    rows[].est_funding_ratenumberPredicted next funding rate
    rows[].last_funding_ratenumberLast settled funding rate
    rows[].next_funding_timenumberNext funding timestamp (ms)
    rows[].sum_unitary_fundingnumberCumulative funding since position open

GET /v1/public/funding_rate/{symbol}

  • Summary: Get Predicted Funding Rate for One Market
  • Use Case: Get detailed funding info for a specific symbol before trading
  • Limit: 30 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolpathstringYesTrading pair (e.g., PERP_ETH_USDC)

GET /v1/public/funding_rate_history

  • Summary: Get Funding Rate History for One Market
  • Use Case: Analyze historical funding patterns:
    • Calculate average funding cost over time
    • Identify funding rate trends
    • Backtest funding-based strategies
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolquerystringYesTrading pair
    start_tquerynumberNoStart timestamp (ms)
    end_tquerynumberNoEnd timestamp (ms)
    pagequerynumberNoPage number
    sizequerynumberNoPage size
  • Response Data:
    FieldTypeDescription
    rows[].symbolstringTrading pair
    rows[].funding_ratenumberFunding rate at that period
    rows[].funding_timestampnumberTimestamp of funding

GET /v1/public/futures/{symbol}

  • Summary: Get Market Info for One Symbol
  • Use Case: Get detailed trading rules for a specific symbol before placing orders
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolpathstringYesTrading pair (e.g., PERP_ETH_USDC)

GET /v1/public/liquidation

  • Summary: Get Positions Under Liquidation
  • Use Case: For liquidator bots to find claimable liquidated positions
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    start_tquerynumberNoStart timestamp (ms)
    end_tquerynumberNoEnd timestamp (ms)
    pagequeryintegerNoPage number
    sizequeryintegerNoPage size

GET /v1/public/liquidated_positions

  • Summary: Get Liquidated Positions Info
  • Use Case: View history of liquidated positions across the platform
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolquerystringNoFilter by symbol
    start_tquerystringNoStart timestamp
    end_tquerystringNoEnd timestamp
    pagequerystringNoPage number
    sizequerystringNoPage size

GET /v1/public/info/{symbol}

  • Summary: Get Order Rules per Symbol
  • Use Case: Get detailed order constraints for a symbol:
    • Price tick size for order validation
    • Quantity precision
    • Min/max order sizes
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    symbolpathstringYesTrading pair
  • Response Data:
    FieldTypeDescription
    symbolstringTrading pair
    quote_minnumberMinimum quote amount
    quote_maxnumberMaximum quote amount
    quote_ticknumberPrice tick size
    base_minnumberMinimum order size
    base_maxnumberMaximum order size
    base_ticknumberQuantity tick size
    min_notionalnumberMinimum order value

GET /v1/public/token

  • Summary: Get Supported Collateral Info
  • Use Case: Get information about supported tokens for:
    • Deposit UI (show which tokens can be deposited)
    • Collateral value calculation
    • Multi-collateral support
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    chain_idquerystringNoFilter by chain ID
  • Response Data:
    FieldTypeDescription
    rows[].tokenstringToken symbol
    rows[].token_hashstringToken hash identifier
    rows[].decimalsnumberToken decimals
    rows[].minimum_withdraw_amountnumberMinimum withdrawal
    rows[].is_collateralbooleanCan be used as collateral
    rows[].discount_factornumberCollateral discount (haircut)
    rows[].chain_detailsarrayPer-chain contract addresses

GET /v1/public/info

  • Summary: Get Available Symbols
  • Use Case: Get list of all tradeable symbols with their trading rules
  • Limit: 10 req/s
  • Parameters: None

GET /v1/public/index_price_source

  • Summary: Get Index Price Source
  • Limit: 10 req/s
  • Parameters: None

GET /v1/public/insurancefund

  • Summary: Get Insurance Fund Info
  • Limit: 10 req/s
  • Parameters: None

GET /v1/tv/config

  • Summary: Get TradingView Localized Config Info
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    localequerystringYes

GET /v1/tv/history

  • Summary: Get TradingView History Bars
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    symbolquerystringYes
    resolutionquerystringYes
    fromquerystringYes
    toquerystringYes

GET /v1/tv/symbol_info

  • Summary: Get TradingView Symbol Info
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    groupquerystringYes

GET /v1/public/leverage

  • Summary: Get Max Leverage Setting
  • Limit: 10 req/s
  • Parameters: None

GET /v1/public/system_info

  • Summary: Get System Maintenance Status
  • Limit: 1 req/s
  • Parameters: None

Account Registration

GET /v1/registration_nonce

  • Summary: Get Registration Nonce
  • Limit: 10 req/s
  • Parameters: None
  • Response:
    json
    {
      "success": true,
      "data": {
        "registration_nonce": "123456789"
      }
    }
    

GET /v1/get_account

  • Summary: Check if Wallet is Registered
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequiredDescription
    addressquerystringYesWallet address
    broker_idquerystringYesBuilder/broker ID
    chain_typequerystringNoEVM or SOLANA

GET /v1/get_all_accounts

  • Summary: Check Account Details of an Address
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    addressquerystringYes
    broker_idquerystringYes
    chain_typequerystringNo

GET /v1/get_broker

  • Summary: Check if Address is Registered
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    addressquerystringYes
    chain_typequerystringNo

POST /v1/register_account

  • Summary: Register Account
  • Limit: 10 req/s
  • Request Body:
    json
    {
      "message": {
        "brokerId": "demo",
        "chainId": 421614,
        "timestamp": 1680000000000,
        "registrationNonce": "123456789"
      },
      "signature": "0x...",
      "userAddress": "0x..."
    }
    

GET /v1/get_orderly_key

  • Summary: Get Orderly Key
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    account_idquerystringYes
    orderly_keyquerystringYes

System Configuration

GET /v1/public/config

  • Summary: Get Leverage Configuration
  • Limit: 10 req/s
  • Parameters: None

GET /v1/public/chain_info

  • Summary: Get Supported Chains per Builder
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    broker_idquerystringNo

GET /v1/tv/kline_history

  • Summary: Get Kline History
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    symbolquerystringYes
    resolutionquerystringYes
    fromquerystringNo
    toquerystringNo
    limitquerynumberNo

GET /v1/public/vault_balance

  • Summary: Get Vault Balance
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    chain_idquerystringNo
    tokenquerystringNo

POST /v1/faucet/usdc

  • Summary: Get Faucet USDC(Testnet Only)
  • Limit: 10 req/s
  • Parameters: None

GET /v1/public/account

  • Summary: Check if Account Exists
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    account_idquerystringNo

GET /v1/public/announcement

  • Summary: Get Announcements
  • Limit: 10 req/s
  • Parameters: None

GET /v1/public/referral/check_ref_code

  • Summary: Check Referral Code
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    account_idquerystringYes

GET /v1/public/referral/verify_ref_code

  • Summary: Verify Referral Code
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    referral_codequerystringYes

GET /v1/public/points/leaderboard

  • Summary: Get Merits Leaderboard
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    start_rqueryintegerNo
    end_rqueryintegerNo
    epoch_idqueryintegerNo
    pagequeryintegerNo
    sizequeryintegerNo

GET /v1/public/points/epoch_dates

  • Summary: Get Start and End Date of All Epochs
  • Limit: 10 req/s
  • Parameters: None

GET /v1/public/points/rankings

  • Summary: Get Stage Rankings
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    stagequerynumberYes
    pagequerynumberNo
    sizequerynumberNo
    periodquerystringYes

GET /v1/public/points/epoch

  • Summary: Get Number of Merits for Distribution
  • Limit: 10 req/s
  • Parameters: None

GET /v1/public/points/stages

  • Summary: Get Information About Stages
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    stage_idquerynumberNo
    statusquerystringNo
    broker_idquerystringYes

DELETE /v1/admin/points/stage

  • Summary: Delete Stage
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    stage_idquerynumberYes

POST /v1/delegate_signer

  • Summary: Delegate Signer
  • Limit: 1 req/s
  • Parameters: None

POST /v1/delegate_orderly_key

  • Summary: Add Delegate Signer Orderly Key
  • Limit: 1 req/s
  • Parameters: None

GET /v1/public/campaigns

  • Summary: Get List of Campaigns
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    start_tqueryintegerNo
    end_tqueryintegerNo
    only_show_alivequerystringNo
    addressquerystringNo

GET /v1/public/campaign/stats

  • Summary: Get Campaign Statistics
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    campaign_idqueryintegerYes
    broker_idquerystringNo
    symbolquerystringNo

GET /v1/public/campaign/stats/details

  • Summary: Get Detailed Campaign Info
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    campaign_idqueryintegerYes
    broker_idquerystringNo
    symbolsquerystringNo
    group_byquerystringNo

GET /v1/public/campaign/ranking

  • Summary: Get Campaign Ranking
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    campaign_idqueryintegerYes
    broker_idquerystringNo
    pagequeryintegerNo
    sizequeryintegerNo
    sort_byquerystringNo
    min_pnlqueryintegerNo
    min_volumequeryintegerNo
    aggregate_byquerystringNo

GET /v1/public/campaign/user

  • Summary: Get Campaign User Info
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    campaign_idqueryintegerYes
    account_idquerystringNo
    addressquerystringNo
    broker_idquerystringNo
    symbolqueryarrayNo
    order_tagquerystringNo

GET /v1/public/campaign/check

  • Summary: Get Campaign Verification
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    campaign_idquerynumberYes
    typequerystringYes
    addressquerystringYes
    lower_boundaryquerynumberYes
    cmpquerystringNo

GET /v1/staking/overview

  • Summary: Get Staking Overview
  • Limit: 10 req/s
  • Parameters: None

GET /v1/staking/valor/batch_info

  • Summary: Get Valor Batch Info
  • Limit: 10 req/s
  • Parameters: None

GET /v1/staking/valor/pool_info

  • Summary: Get Valor Pool Info
  • Limit: 10 req/s
  • Parameters: None

GET /v1/staking/valor2/pool_info

  • Summary: Get Valor2 Pool Info
  • Limit: 10 req/s
  • Parameters: None

GET /v1/staking/valor2/batch_info

  • Summary: Get Valor2 Batch Info
  • Limit: 10 req/s
  • Parameters: None

GET /v1/staking/valor2/revenue_buyback

  • Summary: Get Valor2 Revenue Buyback
  • Limit: 10 req/s
  • Parameters: None

GET /v1/public/trading_rewards/epoch_info

  • Summary: Get Parameters of Each Epoch for All Epochs
  • Limit: 10 req/s
  • Parameters: None

GET /v1/public/trading_rewards/epoch_data

  • Summary: Get Epochs Data
  • Limit: 10 req/s
  • Parameters: None

GET /v1/public/trading_rewards/broker_allocation_history

  • Summary: Get Broker Allocation History
  • Limit: 10 req/s
  • Parameters: None

GET /v1/public/trading_rewards/wallet_rewards_history

  • Summary: Get Wallet Trading Rewards History
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    addressquerystringYes
    chain_typequerystringNo

GET /v1/public/trading_rewards/account_rewards_history

  • Summary: Get Account Trading Rewards History
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    addressquerystringYes
    chain_typequerystringNo

GET /v1/public/trading_rewards/status

  • Summary: Get the Status of Trading Rewards Programme
  • Limit: 10 req/s
  • Parameters: None

GET /v1/public/trading_rewards/symbol_category

  • Summary: Get Symbol Rewards Category
  • Limit: 10 req/s
  • Parameters: None

GET /v1/public/market_making_rewards/epoch_info

  • Summary: Get Parameters of Each Epoch
  • Limit: 10 req/s
  • Parameters: None

GET /v1/public/market_making_rewards/status

  • Summary: Get the Status of Market Making Rewards Programme
  • Limit: 10 req/s
  • Parameters: None

GET /v1/public/market_making_rewards/symbol_params

  • Summary: Get Symbol Rewards Parameters
  • Limit: 10 req/s
  • Parameters: None

GET /v1/public/market_making_rewards/leaderboard

  • Summary: Leaderboard for market maker rewards
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    epochquerynumberYes
    marketquerystringNo

GET /v1/public/market_making_rewards/current_epoch_estimate

  • Summary: Get Market Maker Current Epoch Estimate
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    addressquerystringYes
    chain_typequerystringNo

GET /v1/public/trading_rewards/current_epoch_broker_estimate

  • Summary: Get Current Epoch Estimate by Broker
  • Limit: 10 req/s
  • Parameters: None

GET /v1/public/trading_rewards/current_epoch_estimate

  • Summary: Get Current Epoch Estimate
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    addressquerystringYes

GET /v1/public/market_making_rewards/group_rewards_history

  • Summary: Get Wallet Group Market Making Rewards History
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    addressquerystringYes
    symbolquerystringNo

GET /v1/public/sv_nonce

  • Summary: Get Strategy Vault Nonce for Account Transaction
  • Limit: 10 req/s
  • Parameters: None

GET /v1/account_sv_transaction_history

  • Summary: Get Account’s Strategy Vault Transaction history
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    vault_idquerystringNo
    start_tquerystringNo
    end_tquerystringNo
    pagequerystringNo
    sizequerystringNo
    typequerystringNo

POST /v1/sv_operation_request

  • Summary: Create Strategy Vault Deposit/Withdrawal Request with Account
  • Limit: 10 req/s
  • Parameters: None

GET /v1/sv/venue_transfer_history

  • Summary: Get Fund Inflow Allocation
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    period_numberquerynumberNo
    pagequerynumberNo
    sizequerynumberNo

GET /v1/sv/venue_withdrawal_history

  • Summary: Get Fund Outflow Allocation
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    period_numberquerynumberNo
    pagequerynumberNo
    sizequerynumberNo

GET /v1/sv/protocol_revenue_share_history

  • Summary: Get Orderly Protocol Revenue Sharing History
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    pagequerynumberNo
    sizequerynumberNo

GET /v1/sv/liquidation_fees_share_history

  • Summary: Get Liquidation Fees Sharing History
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    pagequerynumberNo
    sizequerynumberNo

GET /v1/sv/internal_transfer_history

  • Summary: Get Internal Transfer History
  • Limit: 10 req/s
  • Parameters:
    NameInTypeRequired
    pagequerynumberNo
    sizequerynumberNo

Common Workflows

Workflow 1: Initialize Trading App

  1. GET /v1/public/futures - Load all available symbols and trading rules
  2. GET /v1/public/token - Get supported collateral tokens
  3. GET /v1/client/info - Get account fee rates and leverage limits (requires auth)
  4. GET /v1/client/holding - Get current balances (requires auth)
  5. GET /v1/positions - Get current positions (requires auth)

Workflow 2: Place a Trade

  1. GET /v1/public/info/{symbol} - Get order constraints (min qty, tick size)
  2. GET /v1/orderbook/{symbol} - Get current bid/ask prices
  3. GET /v1/positions - Check current position (if any)
  4. POST /v1/order - Place the order
  5. GET /v1/order/{order_id} - Verify order status

Workflow 3: Set Up TP/SL After Opening Position

  1. GET /v1/positions - Confirm position is open
  2. POST /v1/algo/order with algo_type: "POSITIONAL_TP_SL" - Create take-profit
  3. POST /v1/algo/order with algo_type: "POSITIONAL_TP_SL" - Create stop-loss
  4. GET /v1/algo/orders - Verify algo orders are active

Workflow 4: Close Position

  1. GET /v1/position/{symbol} - Get current position size
  2. POST /v1/order with opposite side and reduce_only: true - Close position
  3. DELETE /v1/algo/orders?symbol=... - Cancel any TP/SL orders

Workflow 5: Withdraw Funds

  1. GET /v1/client/holding - Check available balance
  2. POST /v1/settle_pnl - Settle any unrealized PnL to balance
  3. GET /v1/withdraw_nonce - Get nonce for signature
  4. POST /v1/withdraw_request - Submit withdrawal

Workflow 6: Monitor Portfolio (Real-time)

For real-time updates, use WebSocket subscriptions instead of polling:

  • Private WebSocket: wss://ws.orderly.org/v2/ws/private/stream/{accountId}
    • Subscribe to: executionreport, position, balance
  • Public WebSocket: wss://ws.orderly.org/ws/stream/{brokerId}
    • Subscribe to: orderbook, trade, tickers

API to SDK Hook Mapping

API EndpointSDK HookPurpose
GET /v1/positionsusePositionStreamReal-time position monitoring
GET /v1/orderbook/{symbol}useOrderbookStreamReal-time orderbook
POST /v1/orderuseOrderEntryOrder placement with validation
GET /v1/client/infouseAccountInfoAccount details and fees
GET /v1/client/holdinguseCollateralBalance and collateral
GET /v1/ordersuseOrderStreamOrder list and updates
GET /v1/public/futuresuseMarketsMarket info and symbols
GET /v1/public/funding_rate/{symbol}useFundingRateFunding rate data
POST /v1/client/leverageuseLeverageLeverage management
GET /v1/klineTradingView integrationChart data

Best Practices

Rate Limiting

  • Implement exponential backoff when receiving 429 errors
  • Cache responses where appropriate (market info, symbol info)
  • Use WebSocket for real-time data instead of polling

Order Management

  • Always use client_order_id for idempotency and tracking
  • Check reduce_only flag to prevent accidental position increase
  • Validate order parameters against symbol constraints before submission

Error Handling

typescript
try {
  const response = await fetch('/v1/order', { ... });
  const data = await response.json();
  
  if (!data.success) {
    switch (data.code) {
      case -1006:
        // Insufficient balance - show deposit prompt
        break;
      case -1005:
        // Invalid order params - show validation error
        break;
      case -1003:
        // Rate limited - retry with backoff
        break;
      default:
        // Unknown error
    }
  }
} catch (error) {
  // Network error - retry
}

Security

  • Never expose private keys in client-side code
  • Use server-side signing for production applications
  • Implement IP restrictions via /v1/client/set_orderly_key_ip_restriction
  • Rotate API keys periodically