Skip to content

REST API Reference

Base URL: https://api.trade8.xyz. All paths include /v1/.

Market lists, instrument specifications, and the exchange directory are Public. Open them directly in a browser or use the unsigned cURL examples. Other operations list their required permission scope. Node.js examples use the downloadable request helper with TRADE8_API_KEY and TRADE8_API_SECRET supplied by your server’s secret manager. Replace example account and resource IDs with values returned for your account. Running mutation examples submits the described operation.

Public market responses group native exchange contracts under one perpetual instrument. Trading prices, order quantities, account identifiers, fee rates, and capacity figures are illustrative. Monetary fields are decimal strings. Request schemas mark optional fields and conditional requirements; response fields describe units and state.

Download OpenAPI 3.1 · Authentication · WebSocket Reference

39 endpoints

GET/v1/timeRead Server Time
Market Datamarket:readHTTP 200Permalink →

Compare UTC time with your signed client. Keep the host clock synchronized with NTP.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: market:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/time'
);
console.log(result);
Response · HTTP 200
{
  "server_time": "2026-08-31T12:00:00.000Z",
  "unix_seconds": 1788177600
}
Response Fields
Read Server Time Response Fields
FieldTypeDescription
server_timeRequiredstringServer UTC time.
unix_secondsRequiredintegerUnix time in whole seconds.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/marketsList Perpetual Markets
Market DataPublicHTTP 200Permalink →

List perpetual markets with their native exchange contracts. Filter by instrument, exchange, or settlement asset. No API key is required.

  • Each instrument appears once. Its contracts contain the supported exchange mappings, settlement units, and available price and size rules.
Parameters
NameLocationRule
instrumentOptionalqueryNormalized perpetual family.
venueOptionalqueryExchange identifier.
settlement_assetOptionalqueryFilter contracts by settlement asset.
limitOptionalqueryPage size, default 10; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.
Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/markets?instrument=BTC-PERP&limit=10'
);
console.log(result);
cURL Request
curl --fail-with-body 'https://api.trade8.xyz/v1/markets?instrument=BTC-PERP&limit=10'
Response · HTTP 200
{
  "markets": [
    {
      "instrument": "BTC-PERP",
      "contract_type": "perpetual",
      "base_asset": "BTC",
      "contracts": [
        {
          "venue": "apex",
          "venue_instrument": "BTC-USDT",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDT",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.001",
          "minimum_quantity": "0.0010",
          "maximum_quantity": "50",
          "max_leverage": "100"
        },
        {
          "venue": "aster",
          "venue_instrument": "BTCU",
          "settlement_asset": "U",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "U",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.10"
          },
          "quantity_step": "0.001",
          "minimum_quantity": "0.001",
          "maximum_quantity": "1000",
          "minimum_notional": "5"
        },
        {
          "venue": "aster",
          "venue_instrument": "BTCUSD1",
          "settlement_asset": "USD1",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USD1",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.10"
          },
          "quantity_step": "0.001",
          "minimum_quantity": "0.001",
          "maximum_quantity": "1000",
          "minimum_notional": "5"
        },
        {
          "venue": "aster",
          "venue_instrument": "BTCUSDT",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDT",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.001",
          "minimum_quantity": "0.001",
          "maximum_quantity": "1000",
          "minimum_notional": "5"
        },
        {
          "venue": "binance",
          "venue_instrument": "BTCU",
          "settlement_asset": "U",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "U",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.10"
          },
          "quantity_step": "0.0001",
          "minimum_quantity": "0.0001",
          "maximum_quantity": "800",
          "minimum_notional": "5"
        },
        {
          "venue": "binance",
          "venue_instrument": "BTCUSD_PERP",
          "settlement_asset": "BTC",
          "payoff_type": "inverse",
          "quantity_unit": "contract",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "minimum_quantity": "1",
          "maximum_quantity": "1000000",
          "contract_size": "100",
          "contract_size_unit": "USD"
        },
        {
          "venue": "binance",
          "venue_instrument": "BTCUSD1",
          "settlement_asset": "USD1",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USD1",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.10"
          },
          "quantity_step": "0.0001",
          "minimum_quantity": "0.0001",
          "maximum_quantity": "800",
          "minimum_notional": "50"
        },
        {
          "venue": "binance",
          "venue_instrument": "BTCUSDC",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.001",
          "minimum_quantity": "0.001",
          "maximum_quantity": "800",
          "minimum_notional": "50"
        },
        {
          "venue": "binance",
          "venue_instrument": "BTCUSDT",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDT",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.10"
          },
          "quantity_step": "0.001",
          "minimum_quantity": "0.001",
          "maximum_quantity": "1000",
          "minimum_notional": "50"
        },
        {
          "venue": "bitget",
          "venue_instrument": "BTCPERP",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.0001",
          "minimum_quantity": "0.0001",
          "maximum_quantity": "100",
          "minimum_notional": "5",
          "max_leverage": "125"
        },
        {
          "venue": "bitget",
          "venue_instrument": "BTCUSDT",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDT",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.0001",
          "minimum_quantity": "0.0001",
          "maximum_quantity": "1200",
          "minimum_notional": "5",
          "max_leverage": "150"
        },
        {
          "venue": "bybit",
          "venue_instrument": "BTCPERP",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.10"
          },
          "quantity_step": "0.001",
          "minimum_quantity": "0.001",
          "maximum_quantity": "1000.000",
          "minimum_notional": "5",
          "max_leverage": "125.00"
        },
        {
          "venue": "bybit",
          "venue_instrument": "BTCUSD",
          "settlement_asset": "BTC",
          "payoff_type": "inverse",
          "quantity_unit": "USD",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.10"
          },
          "quantity_step": "1",
          "minimum_quantity": "1",
          "maximum_quantity": "25000000",
          "minimum_notional": "5",
          "max_leverage": "100.00"
        },
        {
          "venue": "bybit",
          "venue_instrument": "BTCUSDT",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDT",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.10"
          },
          "quantity_step": "0.001",
          "minimum_quantity": "0.001",
          "maximum_quantity": "1500.000",
          "minimum_notional": "5",
          "max_leverage": "150.00"
        },
        {
          "venue": "deribit",
          "venue_instrument": "BTC_USDC-PERPETUAL",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.0001",
          "minimum_quantity": "0.0001",
          "max_leverage": "50"
        },
        {
          "venue": "deribit",
          "venue_instrument": "BTC-PERPETUAL",
          "settlement_asset": "BTC",
          "payoff_type": "inverse",
          "quantity_unit": "USD",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.5"
          },
          "quantity_step": "10",
          "minimum_quantity": "10",
          "max_leverage": "50"
        },
        {
          "venue": "dydx",
          "venue_instrument": "BTC-USD",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "1"
          },
          "quantity_step": "0.0001"
        },
        {
          "venue": "edgex",
          "venue_instrument": "BTCUSD",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.001",
          "minimum_quantity": "0.003",
          "maximum_quantity": "22",
          "max_leverage": "100"
        },
        {
          "venue": "extended",
          "venue_instrument": "BTC-USD",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "1"
          },
          "quantity_step": "0.00001",
          "minimum_quantity": "0.0001",
          "max_leverage": "50.00"
        },
        {
          "venue": "gate",
          "venue_instrument": "BTC_USD",
          "settlement_asset": "BTC",
          "payoff_type": "inverse",
          "quantity_unit": "contract",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "minimum_quantity": "1",
          "maximum_quantity": "530000",
          "max_leverage": "100"
        },
        {
          "venue": "gate",
          "venue_instrument": "BTC_USDT",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "contract",
          "price_unit": "USDT",
          "contract_size": "0.0001",
          "contract_size_unit": "BTC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "minimum_quantity": "1",
          "maximum_quantity": "12000000",
          "max_leverage": "200"
        },
        {
          "venue": "gmx",
          "venue_instrument": "0x3ce7BCDB37Bf587d1C17B930Fa0A7000A0648D12",
          "network": "avalanche",
          "settlement_assets": [
            "BTC"
          ],
          "quantity_unit": "USD",
          "price_unit": "USD"
        },
        {
          "venue": "gmx",
          "venue_instrument": "0x47c031236e19d024b42f8AE6780E44A573170703",
          "network": "arbitrum",
          "settlement_assets": [
            "WBTC.b",
            "USDC"
          ],
          "quantity_unit": "USD",
          "price_unit": "USD"
        },
        {
          "venue": "gmx",
          "venue_instrument": "0x7C11F78Ce78768518D743E81Fdfa2F860C6b9A77",
          "network": "arbitrum",
          "settlement_assets": [
            "WBTC.b"
          ],
          "quantity_unit": "USD",
          "price_unit": "USD"
        },
        {
          "venue": "gmx",
          "venue_instrument": "0xd62068697bCc92AF253225676D618B0C9f17C663",
          "network": "arbitrum",
          "settlement_assets": [
            "tBTC"
          ],
          "quantity_unit": "USD",
          "price_unit": "USD"
        },
        {
          "venue": "gmx",
          "venue_instrument": "0xFb02132333A79C8B5Bd0b64E3AbccA5f7fAf2937",
          "network": "avalanche",
          "settlement_assets": [
            "BTC",
            "USDC"
          ],
          "quantity_unit": "USD",
          "price_unit": "USD"
        },
        {
          "venue": "grvt",
          "venue_instrument": "BTC_USDT_Perp",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USDT",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "minimum_quantity": "0.001",
          "minimum_notional": "100.0"
        },
        {
          "venue": "hyperliquid",
          "venue_instrument": "BTC",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USD",
          "price_rule": {
            "type": "significant_figures",
            "max_significant_figures": 5,
            "max_decimal_places": 1,
            "integer_prices_allowed": true
          },
          "quantity_step": "0.00001",
          "max_leverage": "40"
        },
        {
          "venue": "kraken",
          "venue_instrument": "PF_XBTUSD",
          "settlement_asset": "USD",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "1"
          },
          "quantity_step": "0.0001"
        },
        {
          "venue": "kucoin",
          "venue_instrument": "XBTUSDCM",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "contract",
          "price_unit": "USDC",
          "contract_size": "0.0001",
          "contract_size_unit": "BTC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "maximum_quantity": "1000000"
        },
        {
          "venue": "kucoin",
          "venue_instrument": "XBTUSDM",
          "settlement_asset": "BTC",
          "payoff_type": "inverse",
          "quantity_unit": "contract",
          "price_unit": "USD",
          "contract_size": "1",
          "contract_size_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "maximum_quantity": "1000000"
        },
        {
          "venue": "kucoin",
          "venue_instrument": "XBTUSDTM",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "contract",
          "price_unit": "USDT",
          "contract_size": "0.001",
          "contract_size_unit": "BTC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "maximum_quantity": "1000000"
        },
        {
          "venue": "lighter",
          "venue_instrument": "BTC",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.00001",
          "minimum_quantity": "0.00010",
          "minimum_notional": "10.000000"
        },
        {
          "venue": "mexc",
          "venue_instrument": "BTC_USD",
          "settlement_asset": "BTC",
          "quantity_unit": "contract",
          "price_unit": "USD",
          "contract_size": "100",
          "contract_size_unit": "BTC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "minimum_quantity": "1",
          "maximum_quantity": "2800",
          "max_leverage": "125"
        },
        {
          "venue": "mexc",
          "venue_instrument": "BTC_USD1",
          "settlement_asset": "USD1",
          "quantity_unit": "contract",
          "price_unit": "USD1",
          "contract_size": "0.0001",
          "contract_size_unit": "BTC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "minimum_quantity": "1",
          "maximum_quantity": "350000",
          "max_leverage": "100"
        },
        {
          "venue": "mexc",
          "venue_instrument": "BTC_USDC",
          "settlement_asset": "USDC",
          "quantity_unit": "contract",
          "price_unit": "USDC",
          "contract_size": "0.0001",
          "contract_size_unit": "BTC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "minimum_quantity": "1",
          "maximum_quantity": "1500000",
          "max_leverage": "200"
        },
        {
          "venue": "mexc",
          "venue_instrument": "BTC_USDT",
          "settlement_asset": "USDT",
          "quantity_unit": "contract",
          "price_unit": "USDT",
          "contract_size": "0.0001",
          "contract_size_unit": "BTC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "1",
          "minimum_quantity": "1",
          "maximum_quantity": "2500000",
          "max_leverage": "500"
        },
        {
          "venue": "okx",
          "venue_instrument": "BTC-USD-SWAP",
          "settlement_asset": "BTC",
          "payoff_type": "inverse",
          "quantity_unit": "contract",
          "price_unit": "USD",
          "contract_size": "100",
          "contract_size_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.1",
          "minimum_quantity": "0.1",
          "maximum_quantity": "100000000",
          "max_leverage": "100"
        },
        {
          "venue": "okx",
          "venue_instrument": "BTC-USDT-SWAP",
          "settlement_asset": "USDT",
          "payoff_type": "linear",
          "quantity_unit": "contract",
          "price_unit": "USDT",
          "contract_size": "0.01",
          "contract_size_unit": "BTC",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.01",
          "minimum_quantity": "0.01",
          "maximum_quantity": "100000000",
          "max_leverage": "100"
        },
        {
          "venue": "paradex",
          "venue_instrument": "BTC-USD-PERP",
          "settlement_asset": "USDC",
          "payoff_type": "linear",
          "quantity_unit": "BTC",
          "price_unit": "USD",
          "price_rule": {
            "type": "fixed_tick",
            "tick_size": "0.1"
          },
          "quantity_step": "0.00001",
          "maximum_quantity": "100",
          "minimum_notional": "10"
        }
      ]
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
List Perpetual Markets Response Fields
FieldTypeDescription
marketsRequiredarrayInstruments on this page.
markets[].instrumentRequiredstringNormalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract.
markets[].contract_typeRequiredstringPerpetual futures instrument family; payoff details belong to each exchange contract. Values: perpetual.
markets[].base_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
markets[].contractsRequiredarrayNative contract mappings, grouped under one perpetual instrument.
markets[].contracts[].venueRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
markets[].contracts[].venue_instrumentRequiredstringNative exchange symbol, such as BTCUSDT or BTC.
markets[].contracts[].settlement_assetstringAsset symbol, such as BTC, USDT, or USDC.
markets[].contracts[].settlement_assetsarraySettlement tokens for a pool with side-dependent collateral.
markets[].contracts[].networkstringBlockchain network for an onchain pool.
markets[].contracts[].payoff_typestringContract payoff where specified by the exchange. Values: linear, inverse.
markets[].contracts[].contract_sizestringValue represented by one native contract.
markets[].contracts[].contract_size_unitstringUnit of contract_size; multiply native contract quantity by contract_size to express face value.
markets[].contracts[].quantity_unitRequiredstringNative size unit: base asset, USD, or contract. Read contract_size for lot-based contracts.
markets[].contracts[].price_unitRequiredstringPrice quote unit.
markets[].contracts[].price_rulevalueFixed increment or significant-figure pricing rule.
markets[].contracts[].quantity_stepstringSize increment in quantity_unit.
markets[].contracts[].minimum_quantitystringExchange LOT_SIZE minimum for limit orders.
markets[].contracts[].maximum_quantitystringExchange LOT_SIZE maximum for limit orders; market-order limits may differ.
markets[].contracts[].minimum_notionalstringMinimum order value in price_unit.
markets[].contracts[].max_leveragestringPublished exchange ceiling at snapshot time; account risk tiers can lower it.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/markets/{instrument}Read Contract Specifications
Market DataPublicHTTP 200Permalink →

Read an instrument’s exchange symbols, settlement assets, price rules, and quantity increments. Public access; unknown instruments return HTTP 404.

Parameters
NameLocationRule
instrumentRequiredpathIdentifier of the resource to read or change.
Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/markets/BTC-PERP'
);
console.log(result);
cURL Request
curl --fail-with-body 'https://api.trade8.xyz/v1/markets/BTC-PERP'
Response · HTTP 200
{
  "instrument": "BTC-PERP",
  "contract_type": "perpetual",
  "base_asset": "BTC",
  "contracts": [
    {
      "venue": "apex",
      "venue_instrument": "BTC-USDT",
      "settlement_asset": "USDT",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USDT",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "0.001",
      "minimum_quantity": "0.0010",
      "maximum_quantity": "50",
      "max_leverage": "100"
    },
    {
      "venue": "aster",
      "venue_instrument": "BTCU",
      "settlement_asset": "U",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "U",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.10"
      },
      "quantity_step": "0.001",
      "minimum_quantity": "0.001",
      "maximum_quantity": "1000",
      "minimum_notional": "5"
    },
    {
      "venue": "aster",
      "venue_instrument": "BTCUSD1",
      "settlement_asset": "USD1",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USD1",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.10"
      },
      "quantity_step": "0.001",
      "minimum_quantity": "0.001",
      "maximum_quantity": "1000",
      "minimum_notional": "5"
    },
    {
      "venue": "aster",
      "venue_instrument": "BTCUSDT",
      "settlement_asset": "USDT",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USDT",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "0.001",
      "minimum_quantity": "0.001",
      "maximum_quantity": "1000",
      "minimum_notional": "5"
    },
    {
      "venue": "binance",
      "venue_instrument": "BTCU",
      "settlement_asset": "U",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "U",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.10"
      },
      "quantity_step": "0.0001",
      "minimum_quantity": "0.0001",
      "maximum_quantity": "800",
      "minimum_notional": "5"
    },
    {
      "venue": "binance",
      "venue_instrument": "BTCUSD_PERP",
      "settlement_asset": "BTC",
      "payoff_type": "inverse",
      "quantity_unit": "contract",
      "price_unit": "USD",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "1",
      "minimum_quantity": "1",
      "maximum_quantity": "1000000",
      "contract_size": "100",
      "contract_size_unit": "USD"
    },
    {
      "venue": "binance",
      "venue_instrument": "BTCUSD1",
      "settlement_asset": "USD1",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USD1",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.10"
      },
      "quantity_step": "0.0001",
      "minimum_quantity": "0.0001",
      "maximum_quantity": "800",
      "minimum_notional": "50"
    },
    {
      "venue": "binance",
      "venue_instrument": "BTCUSDC",
      "settlement_asset": "USDC",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USDC",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "0.001",
      "minimum_quantity": "0.001",
      "maximum_quantity": "800",
      "minimum_notional": "50"
    },
    {
      "venue": "binance",
      "venue_instrument": "BTCUSDT",
      "settlement_asset": "USDT",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USDT",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.10"
      },
      "quantity_step": "0.001",
      "minimum_quantity": "0.001",
      "maximum_quantity": "1000",
      "minimum_notional": "50"
    },
    {
      "venue": "bitget",
      "venue_instrument": "BTCPERP",
      "settlement_asset": "USDC",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USDC",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "0.0001",
      "minimum_quantity": "0.0001",
      "maximum_quantity": "100",
      "minimum_notional": "5",
      "max_leverage": "125"
    },
    {
      "venue": "bitget",
      "venue_instrument": "BTCUSDT",
      "settlement_asset": "USDT",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USDT",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "0.0001",
      "minimum_quantity": "0.0001",
      "maximum_quantity": "1200",
      "minimum_notional": "5",
      "max_leverage": "150"
    },
    {
      "venue": "bybit",
      "venue_instrument": "BTCPERP",
      "settlement_asset": "USDC",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USDC",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.10"
      },
      "quantity_step": "0.001",
      "minimum_quantity": "0.001",
      "maximum_quantity": "1000.000",
      "minimum_notional": "5",
      "max_leverage": "125.00"
    },
    {
      "venue": "bybit",
      "venue_instrument": "BTCUSD",
      "settlement_asset": "BTC",
      "payoff_type": "inverse",
      "quantity_unit": "USD",
      "price_unit": "USD",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.10"
      },
      "quantity_step": "1",
      "minimum_quantity": "1",
      "maximum_quantity": "25000000",
      "minimum_notional": "5",
      "max_leverage": "100.00"
    },
    {
      "venue": "bybit",
      "venue_instrument": "BTCUSDT",
      "settlement_asset": "USDT",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USDT",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.10"
      },
      "quantity_step": "0.001",
      "minimum_quantity": "0.001",
      "maximum_quantity": "1500.000",
      "minimum_notional": "5",
      "max_leverage": "150.00"
    },
    {
      "venue": "deribit",
      "venue_instrument": "BTC_USDC-PERPETUAL",
      "settlement_asset": "USDC",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USDC",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "0.0001",
      "minimum_quantity": "0.0001",
      "max_leverage": "50"
    },
    {
      "venue": "deribit",
      "venue_instrument": "BTC-PERPETUAL",
      "settlement_asset": "BTC",
      "payoff_type": "inverse",
      "quantity_unit": "USD",
      "price_unit": "USD",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.5"
      },
      "quantity_step": "10",
      "minimum_quantity": "10",
      "max_leverage": "50"
    },
    {
      "venue": "dydx",
      "venue_instrument": "BTC-USD",
      "settlement_asset": "USDC",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USD",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "1"
      },
      "quantity_step": "0.0001"
    },
    {
      "venue": "edgex",
      "venue_instrument": "BTCUSD",
      "settlement_asset": "USDT",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USD",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "0.001",
      "minimum_quantity": "0.003",
      "maximum_quantity": "22",
      "max_leverage": "100"
    },
    {
      "venue": "extended",
      "venue_instrument": "BTC-USD",
      "settlement_asset": "USDC",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USD",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "1"
      },
      "quantity_step": "0.00001",
      "minimum_quantity": "0.0001",
      "max_leverage": "50.00"
    },
    {
      "venue": "gate",
      "venue_instrument": "BTC_USD",
      "settlement_asset": "BTC",
      "payoff_type": "inverse",
      "quantity_unit": "contract",
      "price_unit": "USD",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "1",
      "minimum_quantity": "1",
      "maximum_quantity": "530000",
      "max_leverage": "100"
    },
    {
      "venue": "gate",
      "venue_instrument": "BTC_USDT",
      "settlement_asset": "USDT",
      "payoff_type": "linear",
      "quantity_unit": "contract",
      "price_unit": "USDT",
      "contract_size": "0.0001",
      "contract_size_unit": "BTC",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "1",
      "minimum_quantity": "1",
      "maximum_quantity": "12000000",
      "max_leverage": "200"
    },
    {
      "venue": "gmx",
      "venue_instrument": "0x3ce7BCDB37Bf587d1C17B930Fa0A7000A0648D12",
      "network": "avalanche",
      "settlement_assets": [
        "BTC"
      ],
      "quantity_unit": "USD",
      "price_unit": "USD"
    },
    {
      "venue": "gmx",
      "venue_instrument": "0x47c031236e19d024b42f8AE6780E44A573170703",
      "network": "arbitrum",
      "settlement_assets": [
        "WBTC.b",
        "USDC"
      ],
      "quantity_unit": "USD",
      "price_unit": "USD"
    },
    {
      "venue": "gmx",
      "venue_instrument": "0x7C11F78Ce78768518D743E81Fdfa2F860C6b9A77",
      "network": "arbitrum",
      "settlement_assets": [
        "WBTC.b"
      ],
      "quantity_unit": "USD",
      "price_unit": "USD"
    },
    {
      "venue": "gmx",
      "venue_instrument": "0xd62068697bCc92AF253225676D618B0C9f17C663",
      "network": "arbitrum",
      "settlement_assets": [
        "tBTC"
      ],
      "quantity_unit": "USD",
      "price_unit": "USD"
    },
    {
      "venue": "gmx",
      "venue_instrument": "0xFb02132333A79C8B5Bd0b64E3AbccA5f7fAf2937",
      "network": "avalanche",
      "settlement_assets": [
        "BTC",
        "USDC"
      ],
      "quantity_unit": "USD",
      "price_unit": "USD"
    },
    {
      "venue": "grvt",
      "venue_instrument": "BTC_USDT_Perp",
      "settlement_asset": "USDT",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USDT",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "minimum_quantity": "0.001",
      "minimum_notional": "100.0"
    },
    {
      "venue": "hyperliquid",
      "venue_instrument": "BTC",
      "settlement_asset": "USDC",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USD",
      "price_rule": {
        "type": "significant_figures",
        "max_significant_figures": 5,
        "max_decimal_places": 1,
        "integer_prices_allowed": true
      },
      "quantity_step": "0.00001",
      "max_leverage": "40"
    },
    {
      "venue": "kraken",
      "venue_instrument": "PF_XBTUSD",
      "settlement_asset": "USD",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USD",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "1"
      },
      "quantity_step": "0.0001"
    },
    {
      "venue": "kucoin",
      "venue_instrument": "XBTUSDCM",
      "settlement_asset": "USDC",
      "payoff_type": "linear",
      "quantity_unit": "contract",
      "price_unit": "USDC",
      "contract_size": "0.0001",
      "contract_size_unit": "BTC",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "1",
      "maximum_quantity": "1000000"
    },
    {
      "venue": "kucoin",
      "venue_instrument": "XBTUSDM",
      "settlement_asset": "BTC",
      "payoff_type": "inverse",
      "quantity_unit": "contract",
      "price_unit": "USD",
      "contract_size": "1",
      "contract_size_unit": "USD",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "1",
      "maximum_quantity": "1000000"
    },
    {
      "venue": "kucoin",
      "venue_instrument": "XBTUSDTM",
      "settlement_asset": "USDT",
      "payoff_type": "linear",
      "quantity_unit": "contract",
      "price_unit": "USDT",
      "contract_size": "0.001",
      "contract_size_unit": "BTC",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "1",
      "maximum_quantity": "1000000"
    },
    {
      "venue": "lighter",
      "venue_instrument": "BTC",
      "settlement_asset": "USDC",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USD",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "0.00001",
      "minimum_quantity": "0.00010",
      "minimum_notional": "10.000000"
    },
    {
      "venue": "mexc",
      "venue_instrument": "BTC_USD",
      "settlement_asset": "BTC",
      "quantity_unit": "contract",
      "price_unit": "USD",
      "contract_size": "100",
      "contract_size_unit": "BTC",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "1",
      "minimum_quantity": "1",
      "maximum_quantity": "2800",
      "max_leverage": "125"
    },
    {
      "venue": "mexc",
      "venue_instrument": "BTC_USD1",
      "settlement_asset": "USD1",
      "quantity_unit": "contract",
      "price_unit": "USD1",
      "contract_size": "0.0001",
      "contract_size_unit": "BTC",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "1",
      "minimum_quantity": "1",
      "maximum_quantity": "350000",
      "max_leverage": "100"
    },
    {
      "venue": "mexc",
      "venue_instrument": "BTC_USDC",
      "settlement_asset": "USDC",
      "quantity_unit": "contract",
      "price_unit": "USDC",
      "contract_size": "0.0001",
      "contract_size_unit": "BTC",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "1",
      "minimum_quantity": "1",
      "maximum_quantity": "1500000",
      "max_leverage": "200"
    },
    {
      "venue": "mexc",
      "venue_instrument": "BTC_USDT",
      "settlement_asset": "USDT",
      "quantity_unit": "contract",
      "price_unit": "USDT",
      "contract_size": "0.0001",
      "contract_size_unit": "BTC",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "1",
      "minimum_quantity": "1",
      "maximum_quantity": "2500000",
      "max_leverage": "500"
    },
    {
      "venue": "okx",
      "venue_instrument": "BTC-USD-SWAP",
      "settlement_asset": "BTC",
      "payoff_type": "inverse",
      "quantity_unit": "contract",
      "price_unit": "USD",
      "contract_size": "100",
      "contract_size_unit": "USD",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "0.1",
      "minimum_quantity": "0.1",
      "maximum_quantity": "100000000",
      "max_leverage": "100"
    },
    {
      "venue": "okx",
      "venue_instrument": "BTC-USDT-SWAP",
      "settlement_asset": "USDT",
      "payoff_type": "linear",
      "quantity_unit": "contract",
      "price_unit": "USDT",
      "contract_size": "0.01",
      "contract_size_unit": "BTC",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "0.01",
      "minimum_quantity": "0.01",
      "maximum_quantity": "100000000",
      "max_leverage": "100"
    },
    {
      "venue": "paradex",
      "venue_instrument": "BTC-USD-PERP",
      "settlement_asset": "USDC",
      "payoff_type": "linear",
      "quantity_unit": "BTC",
      "price_unit": "USD",
      "price_rule": {
        "type": "fixed_tick",
        "tick_size": "0.1"
      },
      "quantity_step": "0.00001",
      "maximum_quantity": "100",
      "minimum_notional": "10"
    }
  ]
}
Response Fields
Read Contract Specifications Response Fields
FieldTypeDescription
instrumentRequiredstringNormalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract.
contract_typeRequiredstringPerpetual futures instrument family; payoff details belong to each exchange contract. Values: perpetual.
base_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
contractsRequiredarrayNative contract mappings, grouped under one perpetual instrument.
contracts[].venueRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
contracts[].venue_instrumentRequiredstringNative exchange symbol, such as BTCUSDT or BTC.
contracts[].settlement_assetstringAsset symbol, such as BTC, USDT, or USDC.
contracts[].settlement_assetsarraySettlement tokens for a pool with side-dependent collateral.
contracts[].networkstringBlockchain network for an onchain pool.
contracts[].payoff_typestringContract payoff where specified by the exchange. Values: linear, inverse.
contracts[].contract_sizestringValue represented by one native contract.
contracts[].contract_size_unitstringUnit of contract_size; multiply native contract quantity by contract_size to express face value.
contracts[].quantity_unitRequiredstringNative size unit: base asset, USD, or contract. Read contract_size for lot-based contracts.
contracts[].price_unitRequiredstringPrice quote unit.
contracts[].price_rulevalueFixed increment or significant-figure pricing rule.
contracts[].quantity_stepstringSize increment in quantity_unit.
contracts[].minimum_quantitystringExchange LOT_SIZE minimum for limit orders.
contracts[].maximum_quantitystringExchange LOT_SIZE maximum for limit orders; market-order limits may differ.
contracts[].minimum_notionalstringMinimum order value in price_unit.
contracts[].max_leveragestringPublished exchange ceiling at snapshot time; account risk tiers can lower it.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/markets/{instrument}/orderbookRead an Order Book
Market Datamarket:readHTTP 200Permalink →

Read one exchange book. The example uses Hyperliquid BTC settled in USDC. Subscribe to orderbook for sequenced updates.

Parameters
NameLocationRule
instrumentRequiredpathIdentifier of the resource to read or change.
venueRequiredqueryExchange identifier.
settlement_assetRequiredqueryFilter contracts by settlement asset.
depthOptionalqueryNumber of levels per side: 10, 20, or 50. Default 20.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: market:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/markets/BTC-PERP/orderbook?venue=hyperliquid&settlement_asset=USDC'
);
console.log(result);
Response · HTTP 200
{
  "instrument": "BTC-PERP",
  "venue": "hyperliquid",
  "settlement_asset": "USDC",
  "book_sequence": 1042,
  "bids": [
    {
      "price": "76999",
      "quantity": "1.25000"
    }
  ],
  "asks": [
    {
      "price": "77001",
      "quantity": "0.90000"
    }
  ],
  "updated_at": "2026-08-31T12:00:00.000Z"
}
Response Fields
Read an Order Book Response Fields
FieldTypeDescription
instrumentRequiredstringNormalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract.
venueRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
settlement_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
book_sequenceRequiredintegerMonotonic sequence for this exchange/instrument book.
bidsRequiredarrayBids, highest price first.
bids[].priceRequiredstringPrice in the contract quote asset.
bids[].quantityRequiredstringAbsolute resting quantity in the contract base unit. Zero removes a level in a delta.
asksRequiredarrayAsks, lowest price first.
asks[].priceRequiredstringPrice in the contract quote asset.
asks[].quantityRequiredstringAbsolute resting quantity in the contract base unit. Zero removes a level in a delta.
updated_atRequiredstringUTC timestamp in RFC 3339 format.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/markets/{instrument}/tickerRead Prices
Market Datamarket:readHTTP 200Permalink →

Read bid, ask, last, mark, and index prices for a specific exchange contract.

Parameters
NameLocationRule
instrumentRequiredpathIdentifier of the resource to read or change.
venueRequiredqueryExchange identifier.
settlement_assetRequiredqueryFilter contracts by settlement asset.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: market:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/markets/BTC-PERP/ticker?venue=hyperliquid&settlement_asset=USDC'
);
console.log(result);
Response · HTTP 200
{
  "instrument": "BTC-PERP",
  "venue": "hyperliquid",
  "settlement_asset": "USDC",
  "bid": "76999",
  "ask": "77001",
  "last": "77000",
  "mark_price": "77000",
  "index_price": "76998",
  "updated_at": "2026-08-31T12:00:00.000Z"
}
Response Fields
Read Prices Response Fields
FieldTypeDescription
instrumentRequiredstringNormalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract.
venueRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
settlement_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
bidRequiredstringBest bid price.
askRequiredstringBest ask price.
lastRequiredstringLast traded price.
mark_priceRequiredstringExchange mark price used for risk calculations.
index_priceRequiredstringExchange index price.
updated_atRequiredstringUTC timestamp in RFC 3339 format.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/markets/{instrument}/tradesRead Market Trades
Market Datamarket:readHTTP 200Permalink →

Read public executions in ascending executed_at order. Pair venue with trade_id when deduplicating.

Parameters
NameLocationRule
instrumentRequiredpathIdentifier of the resource to read or change.
venueRequiredqueryExchange identifier.
settlement_assetRequiredqueryFilter contracts by settlement asset.
start_timeOptionalqueryInclusive UTC start; default 24 hours before end_time.
end_timeOptionalqueryExclusive UTC end; default request time.
limitOptionalqueryPage size, default 50; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: market:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/markets/BTC-PERP/trades?venue=hyperliquid&settlement_asset=USDC&limit=50'
);
console.log(result);
Response · HTTP 200
{
  "trades": [
    {
      "trade_id": "trade_example_01",
      "instrument": "BTC-PERP",
      "venue": "hyperliquid",
      "settlement_asset": "USDC",
      "side": "buy",
      "price": "77001",
      "quantity": "0.01000",
      "executed_at": "2026-08-31T12:00:00.000Z"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
Read Market Trades Response Fields
FieldTypeDescription
tradesRequiredarrayResults on this page.
trades[].trade_idRequiredstringExchange trade identifier; deduplicate with venue.
trades[].instrumentRequiredstringNormalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract.
trades[].venueRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
trades[].settlement_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
trades[].sideRequiredstringAggressor side. Values: buy, sell.
trades[].priceRequiredstringExecution price in the contract quote asset.
trades[].quantityRequiredstringBase quantity executed.
trades[].executed_atRequiredstringUTC timestamp in RFC 3339 format.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/venuesList Exchanges
Market DataPublicHTTP 200Permalink →

List all centralized and decentralized exchanges shown in the Trade8 integration directory, with their IDs and official websites.

Parameters
NameLocationRule
typeOptionalqueryExchange category.
limitOptionalqueryPage size, default 50; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.
Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/venues?limit=50'
);
console.log(result);
cURL Request
curl --fail-with-body 'https://api.trade8.xyz/v1/venues?limit=50'
Response · HTTP 200
{
  "venues": [
    {
      "id": "apex",
      "name": "ApeX Protocol",
      "type": "decentralized",
      "website": "https://www.apex.exchange/"
    },
    {
      "id": "aster",
      "name": "Aster",
      "type": "decentralized",
      "website": "https://www.asterdex.com/"
    },
    {
      "id": "binance",
      "name": "Binance",
      "type": "centralized",
      "website": "https://www.binance.com/"
    },
    {
      "id": "bitget",
      "name": "Bitget",
      "type": "centralized",
      "website": "https://www.bitget.com/"
    },
    {
      "id": "bybit",
      "name": "Bybit",
      "type": "centralized",
      "website": "https://www.bybit.com/"
    },
    {
      "id": "deribit",
      "name": "Deribit",
      "type": "centralized",
      "website": "https://www.deribit.com/"
    },
    {
      "id": "dydx",
      "name": "dYdX",
      "type": "decentralized",
      "website": "https://www.dydx.xyz/"
    },
    {
      "id": "edgex",
      "name": "edgeX",
      "type": "decentralized",
      "website": "https://www.edgex.exchange/"
    },
    {
      "id": "extended",
      "name": "Extended",
      "type": "decentralized",
      "website": "https://extended.exchange/"
    },
    {
      "id": "gate",
      "name": "Gate",
      "type": "centralized",
      "website": "https://www.gate.com/"
    },
    {
      "id": "gmx",
      "name": "GMX",
      "type": "decentralized",
      "website": "https://gmx.io/"
    },
    {
      "id": "grvt",
      "name": "GRVT",
      "type": "decentralized",
      "website": "https://grvt.io/"
    },
    {
      "id": "hyperliquid",
      "name": "Hyperliquid",
      "type": "decentralized",
      "website": "https://hyperliquid.xyz/"
    },
    {
      "id": "kraken",
      "name": "Kraken",
      "type": "centralized",
      "website": "https://www.kraken.com/"
    },
    {
      "id": "kucoin",
      "name": "KuCoin",
      "type": "centralized",
      "website": "https://www.kucoin.com/"
    },
    {
      "id": "lighter",
      "name": "Lighter",
      "type": "decentralized",
      "website": "https://lighter.xyz/"
    },
    {
      "id": "mexc",
      "name": "MEXC",
      "type": "centralized",
      "website": "https://www.mexc.com/"
    },
    {
      "id": "okx",
      "name": "OKX",
      "type": "centralized",
      "website": "https://www.okx.com/"
    },
    {
      "id": "paradex",
      "name": "Paradex",
      "type": "decentralized",
      "website": "https://www.paradex.trade/"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
List Exchanges Response Fields
FieldTypeDescription
venuesRequiredarrayExchanges on this page.
venues[].idRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
venues[].nameRequiredstringExchange display name.
venues[].typeRequiredstringExchange category. Values: centralized, decentralized.
venues[].websiteRequiredstringOfficial exchange website.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/fundingRead Funding Rates
Market Datamarket:readHTTP 200Permalink →

Compare rates with their settlement interval. The Binance example is an eight-hour indicative rate; other exchanges can use different intervals.

Parameters
NameLocationRule
instrumentRequiredqueryNormalized perpetual family.
venueOptionalqueryExchange identifier.
settlement_assetOptionalqueryFilter contracts by settlement asset.
limitOptionalqueryPage size, default 50; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: market:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/funding?instrument=BTC-PERP&venue=binance&settlement_asset=USDT&limit=50'
);
console.log(result);
Response · HTTP 200
{
  "funding": [
    {
      "instrument": "BTC-PERP",
      "venue": "binance",
      "settlement_asset": "USDT",
      "rate": "0.0001",
      "interval_hours": "8",
      "next_funding_at": "2026-08-31T16:00:00.000Z",
      "type": "indicative"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
Read Funding Rates Response Fields
FieldTypeDescription
fundingRequiredarrayResults on this page.
funding[].instrumentRequiredstringNormalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract.
funding[].venueRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
funding[].settlement_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
funding[].rateRequiredstringDecimal funding rate for the stated interval: 0.0001 = 0.01%.
funding[].interval_hoursRequiredstringHours covered by this rate.
funding[].next_funding_atRequiredstringUTC timestamp in RFC 3339 format.
funding[].typeRequiredstringIndicative rates can change before settlement. Values: indicative, final.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/accountsList Trading Accounts
Accounts and Keysaccounts:readHTTP 200Permalink →

Read main accounts and subaccounts available to this key, including enabled exchanges.

Parameters
NameLocationRule
limitOptionalqueryPage size, default 50; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: accounts:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/accounts?limit=50'
);
console.log(result);
Response · HTTP 200
{
  "accounts": [
    {
      "account_id": "acct_example_main",
      "name": "Main Trading",
      "type": "main",
      "status": "active",
      "reporting_asset": "USDT",
      "enabled_venues": [
        "binance",
        "okx",
        "bybit",
        "hyperliquid",
        "dydx"
      ],
      "created_at": "2026-08-31T12:00:00.000Z"
    },
    {
      "account_id": "acct_example_mm",
      "name": "Market Making",
      "type": "subaccount",
      "status": "active",
      "reporting_asset": "USDT",
      "enabled_venues": [
        "binance",
        "okx",
        "bybit",
        "hyperliquid",
        "dydx"
      ],
      "created_at": "2026-08-31T12:00:00.000Z"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
List Trading Accounts Response Fields
FieldTypeDescription
accountsRequiredarrayResults on this page.
accounts[].account_idRequiredstringTrading account identifier within the authorized account grant.
accounts[].nameRequiredstringAccount display name.
accounts[].typeRequiredstringAccount hierarchy role. Values: main, subaccount.
accounts[].statusRequiredstringAccount access state. Values: active, read_only, suspended.
accounts[].reporting_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
accounts[].enabled_venuesRequiredarrayExchanges enabled for this account.
accounts[].created_atRequiredstringUTC timestamp in RFC 3339 format.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/account/balancesRead Account Balances
Accounts and Keysaccounts:readHTTP 200Permalink →

Read each asset separately. Custody balances and collateral allocations appear in the Custody and Settlement endpoints.

Parameters
NameLocationRule
account_idRequiredqueryAuthorized trading account.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: accounts:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/account/balances?account_id=acct_example_main'
);
console.log(result);
Response · HTTP 200
{
  "balances": [
    {
      "account_id": "acct_example_main",
      "asset": "USDT",
      "total": "10000.00",
      "available": "7500.00",
      "committed": "2500.00",
      "updated_at": "2026-08-31T12:00:00.000Z"
    }
  ]
}
Response Fields
Read Account Balances Response Fields
FieldTypeDescription
balancesRequiredarrayLedger balances by asset.
balances[].account_idRequiredstringTrading account identifier within the authorized account grant.
balances[].assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
balances[].totalRequiredstringLedger balance in this asset, excluding unrealized P&L.
balances[].availableRequiredstringUncommitted ledger balance.
balances[].committedRequiredstringAmount allocated or reserved. available + committed = total.
balances[].updated_atRequiredstringUTC timestamp in RFC 3339 format.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/account/feesRead Account Trading Fees
Accounts and Keysaccounts:readHTTP 200Permalink →

Read account-specific maker, taker, and Trade8 charges by contract. Example rates illustrate the response structure.

Parameters
NameLocationRule
account_idRequiredqueryAuthorized trading account.
instrumentOptionalqueryNormalized perpetual family.
venueOptionalqueryExchange identifier.
settlement_assetOptionalqueryFilter contracts by settlement asset.
limitOptionalqueryPage size, default 50; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: accounts:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/account/fees?account_id=acct_example_main&instrument=BTC-PERP&venue=binance&settlement_asset=USDT&limit=50'
);
console.log(result);
Response · HTTP 200
{
  "fees": [
    {
      "venue": "binance",
      "instrument": "BTC-PERP",
      "settlement_asset": "USDT",
      "maker_rate": "0.0001",
      "taker_rate": "0.0003",
      "trade8_rate": "0.0000",
      "effective_at": "2026-08-31T12:00:00.000Z"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
Read Account Trading Fees Response Fields
FieldTypeDescription
feesRequiredarrayResults on this page.
fees[].venueRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
fees[].instrumentRequiredstringNormalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract.
fees[].settlement_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
fees[].maker_rateRequiredstringDecimal maker fee rate. Negative values indicate rebates.
fees[].taker_rateRequiredstringDecimal taker fee rate.
fees[].trade8_rateRequiredstringAdditional Trade8 trading charge as a decimal rate.
fees[].effective_atRequiredstringUTC timestamp in RFC 3339 format.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/account/limitsRead Account Limits
Accounts and Keysaccounts:readHTTP 200Permalink →

Read REST, order, and WebSocket budgets. Capacity depends on the account configuration; these numbers are examples.

Parameters
NameLocationRule
account_idRequiredqueryAuthorized trading account.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: accounts:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/account/limits?account_id=acct_example_main'
);
console.log(result);
Response · HTTP 200
{
  "account_id": "acct_example_main",
  "rest_requests_per_second": 100,
  "order_requests_per_second": 50,
  "websocket_connections": 5,
  "subscriptions_per_connection": 100,
  "batch_order_limit": 20,
  "effective_at": "2026-08-31T12:00:00.000Z"
}
Response Fields
Read Account Limits Response Fields
FieldTypeDescription
account_idRequiredstringTrading account identifier within the authorized account grant.
rest_requests_per_secondRequiredintegerAccount REST request budget.
order_requests_per_secondRequiredintegerShared budget for order mutations.
websocket_connectionsRequiredintegerConcurrent authenticated connection limit.
subscriptions_per_connectionRequiredintegerChannel subscriptions allowed on each connection.
batch_order_limitRequiredintegerMaximum orders in one batch.
effective_atRequiredstringUTC timestamp in RFC 3339 format.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/api-keysInspect API-Key Permissions
Accounts and Keyskeys:readHTTP 200Permalink →

Read key metadata, account grants, IP restrictions, and expiry. Secret material is supplied only during key provisioning.

Parameters
NameLocationRule
account_idRequiredqueryAuthorized trading account.
limitOptionalqueryPage size, default 50; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: keys:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/api-keys?account_id=acct_example_main&limit=50'
);
console.log(result);
Response · HTTP 200
{
  "keys": [
    {
      "key_id": "t8_example_read",
      "label": "Reconciliation",
      "scopes": [
        "accounts:read",
        "orders:read",
        "custody:read"
      ],
      "account_ids": [
        "acct_example_main"
      ],
      "ip_allowlist": [
        "192.0.2.10/32"
      ],
      "status": "active",
      "expires_at": "2027-08-31T12:00:00.000Z"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
Inspect API-Key Permissions Response Fields
FieldTypeDescription
keysRequiredarrayResults on this page.
keys[].key_idRequiredstringPublic key identifier; the secret is never returned by this endpoint.
keys[].labelRequiredstringKey display label.
keys[].scopesRequiredarrayGranted scopes.
keys[].account_idsRequiredarrayAccounts the key may access.
keys[].ip_allowlistRequiredarrayPermitted source IP ranges.
keys[].statusRequiredstringKey status. Values: active, revoked, expired.
keys[].expires_atRequiredstringUTC timestamp in RFC 3339 format.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

POST/v1/ordersCreate an Order
Orders and Executionorders:writeHTTP 202Permalink →

Submit a parent order with exchange and settlement constraints. The example posts a BTC limit order across Binance and Bybit.

  • Limit variants require limit_price. Conditional orders require trigger_price, trigger_source, and trigger_venue. See Order Lifecycle for trigger direction and linked exit workflows.
  • The allowed and excluded lists must be disjoint. Each child contract must match settlement_asset. Direct routing requires exactly one allowed exchange.
  • The same account/client_order_id identifies one order for the lifetime of the account. Duplicate submissions with a new idempotency key return CLIENT_ORDER_ID_CONFLICT; look up the existing order.
Parameters
NameLocationRule
Idempotency-KeyRequiredheaderUnique 1–64 character key per account, method, and path. Retained for 24 hours. Reuse with the exact same request when recovering an unknown outcome.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: orders:write. Authentication Guide →

Request Body Fields
FieldTypeDescription
account_idRequiredstringTrading account identifier within the authorized account grant.
client_order_idRequiredstringUnique client identifier within the account. Retain it for reconciliation.
instrumentRequiredstringNormalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract.
settlement_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
sideRequiredstringTrade direction. Values: buy, sell.
typeRequiredstringOrder type. Values: market, limit, stop_market, stop_limit, take_profit_market, take_profit_limit.
quantityRequiredstringOrder size in the market base unit.
limit_pricestringRequired for limit, stop_limit, and take_profit_limit.
trigger_pricestringRequired for stop and take-profit orders.
trigger_sourcestringPrice used by a conditional order. Values: mark, last, index.
trigger_venuestringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
time_in_forcestringLimit orders: GTC, IOC, or FOK. Market orders: IOC. Default GTC for limit variants and IOC for market variants. Values: GTC, IOC, FOK.
post_onlybooleanDefault false. Supported on ordinary GTC limit orders; crossing orders are rejected.
reduce_onlybooleanDefault false. Restricts fills to reducing the current exchange position.
routingRequiredstringAuto chooses eligible exchanges; direct requires exactly one allowed exchange. Values: auto, direct.
venue_policyobject
venue_policy.allowedarrayOnly these exchanges may receive child orders.
venue_policy.excludedarrayExchanges excluded from routing; must be disjoint from allowed.
venue_policy.max_slippage_bpsstringMaximum market-order slippage from the consolidated best price at acceptance, in basis points. Execution stops at this boundary.
self_trade_preventionstringAction when orders from the same account would match. Default cancel_newest. Values: cancel_newest, cancel_oldest, cancel_both.
Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'POST',
  '/v1/orders',
  {
    "account_id": "acct_example_main",
    "client_order_id": "strategy-a-0001",
    "instrument": "BTC-PERP",
    "settlement_asset": "USDT",
    "side": "buy",
    "type": "limit",
    "quantity": "0.100",
    "limit_price": "77000.00",
    "time_in_force": "GTC",
    "post_only": true,
    "reduce_only": false,
    "routing": "auto",
    "venue_policy": {
      "allowed": [
        "binance",
        "bybit"
      ]
    },
    "self_trade_prevention": "cancel_newest"
  },
  'request-example-0001'
);
console.log(result);
Response · HTTP 202
{
  "order_id": "ord_example_01",
  "account_id": "acct_example_main",
  "client_order_id": "strategy-a-0001",
  "instrument": "BTC-PERP",
  "settlement_asset": "USDT",
  "side": "buy",
  "type": "limit",
  "status": "accepted",
  "requested_quantity": "0.100",
  "filled_quantity": "0.000",
  "remaining_quantity": "0.100",
  "cancelled_quantity": "0.000",
  "average_fill_price": null,
  "revision": 1,
  "created_at": "2026-08-31T12:00:00.000Z",
  "updated_at": "2026-08-31T12:00:00.000Z"
}
Response Fields
Create an Order Response Fields
FieldTypeDescription
order_idRequiredstringTrade8 parent order identifier.
account_idRequiredstringTrading account identifier within the authorized account grant.
client_order_idRequiredstringUnique client identifier within the account. Retain it for reconciliation.
instrumentRequiredstringNormalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract.
settlement_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
sideRequiredstringDirection. Values: buy, sell.
typeRequiredstringOrder type.
statusRequiredstringCurrent order lifecycle state. Values: pending, accepted, trigger_pending, partially_filled, filled, cancelled, rejected, expired.
requested_quantityRequiredstringTotal requested base quantity.
filled_quantityRequiredstringCumulative executed base quantity.
remaining_quantityRequiredstringQuantity still open or awaiting execution. Zero after a terminal state.
cancelled_quantityRequiredstringQuantity cancelled, rejected, or expired without a fill.
average_fill_priceRequiredstring | nullQuantity-weighted price of actual fills; null before the first fill.
revisionRequiredintegerMonotonic order revision. Use for optimistic concurrency and event reconciliation.
created_atRequiredstringUTC timestamp in RFC 3339 format.
updated_atRequiredstringUTC timestamp in RFC 3339 format.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/ordersList Orders
Orders and Executionorders:readHTTP 200Permalink →

Read parent orders in ascending created_at order. Open-order queries include all open orders unless time filters are explicit. Use status=open for pending, accepted, trigger_pending, and partially_filled orders.

Parameters
NameLocationRule
account_idRequiredqueryAuthorized trading account.
instrumentOptionalqueryNormalized perpetual family.
statusOptionalqueryOpen, terminal, or any. Default open.
start_timeOptionalqueryInclusive UTC start; default 24 hours before end_time.
end_timeOptionalqueryExclusive UTC end; default request time.
limitOptionalqueryPage size, default 50; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: orders:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/orders?account_id=acct_example_main&instrument=BTC-PERP&status=open&limit=50'
);
console.log(result);
Response · HTTP 200
{
  "orders": [
    {
      "order_id": "ord_example_01",
      "account_id": "acct_example_main",
      "client_order_id": "strategy-a-0001",
      "instrument": "BTC-PERP",
      "settlement_asset": "USDT",
      "side": "buy",
      "type": "limit",
      "status": "partially_filled",
      "requested_quantity": "0.100",
      "filled_quantity": "0.060",
      "remaining_quantity": "0.040",
      "cancelled_quantity": "0.000",
      "average_fill_price": "77000.00",
      "revision": 2,
      "created_at": "2026-08-31T12:00:00.000Z",
      "updated_at": "2026-08-31T12:00:00.250Z"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
List Orders Response Fields
FieldTypeDescription
ordersRequiredarrayResults on this page.
orders[].order_idRequiredstringTrade8 parent order identifier.
orders[].account_idRequiredstringTrading account identifier within the authorized account grant.
orders[].client_order_idRequiredstringUnique client identifier within the account. Retain it for reconciliation.
orders[].instrumentRequiredstringNormalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract.
orders[].settlement_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
orders[].sideRequiredstringDirection. Values: buy, sell.
orders[].typeRequiredstringOrder type.
orders[].statusRequiredstringCurrent order lifecycle state. Values: pending, accepted, trigger_pending, partially_filled, filled, cancelled, rejected, expired.
orders[].requested_quantityRequiredstringTotal requested base quantity.
orders[].filled_quantityRequiredstringCumulative executed base quantity.
orders[].remaining_quantityRequiredstringQuantity still open or awaiting execution. Zero after a terminal state.
orders[].cancelled_quantityRequiredstringQuantity cancelled, rejected, or expired without a fill.
orders[].average_fill_priceRequiredstring | nullQuantity-weighted price of actual fills; null before the first fill.
orders[].revisionRequiredintegerMonotonic order revision. Use for optimistic concurrency and event reconciliation.
orders[].created_atRequiredstringUTC timestamp in RFC 3339 format.
orders[].updated_atRequiredstringUTC timestamp in RFC 3339 format.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/orders/{order_id}Read an Order
Orders and Executionorders:readHTTP 200Permalink →

Reconcile lifecycle state and cumulative quantities. Compare revision before applying an older REST result over a streamed update.

Parameters
NameLocationRule
order_idRequiredpathIdentifier of the resource to read or change.
account_idRequiredqueryAuthorized trading account.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: orders:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/orders/ord_example_01?account_id=acct_example_main'
);
console.log(result);
Response · HTTP 200
{
  "order_id": "ord_example_01",
  "account_id": "acct_example_main",
  "client_order_id": "strategy-a-0001",
  "instrument": "BTC-PERP",
  "settlement_asset": "USDT",
  "side": "buy",
  "type": "limit",
  "status": "partially_filled",
  "requested_quantity": "0.100",
  "filled_quantity": "0.060",
  "remaining_quantity": "0.040",
  "cancelled_quantity": "0.000",
  "average_fill_price": "77000.00",
  "revision": 2,
  "created_at": "2026-08-31T12:00:00.000Z",
  "updated_at": "2026-08-31T12:00:00.250Z"
}
Response Fields
Read an Order Response Fields
FieldTypeDescription
order_idRequiredstringTrade8 parent order identifier.
account_idRequiredstringTrading account identifier within the authorized account grant.
client_order_idRequiredstringUnique client identifier within the account. Retain it for reconciliation.
instrumentRequiredstringNormalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract.
settlement_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
sideRequiredstringDirection. Values: buy, sell.
typeRequiredstringOrder type.
statusRequiredstringCurrent order lifecycle state. Values: pending, accepted, trigger_pending, partially_filled, filled, cancelled, rejected, expired.
requested_quantityRequiredstringTotal requested base quantity.
filled_quantityRequiredstringCumulative executed base quantity.
remaining_quantityRequiredstringQuantity still open or awaiting execution. Zero after a terminal state.
cancelled_quantityRequiredstringQuantity cancelled, rejected, or expired without a fill.
average_fill_priceRequiredstring | nullQuantity-weighted price of actual fills; null before the first fill.
revisionRequiredintegerMonotonic order revision. Use for optimistic concurrency and event reconciliation.
created_atRequiredstringUTC timestamp in RFC 3339 format.
updated_atRequiredstringUTC timestamp in RFC 3339 format.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/orders/by-client-id/{client_order_id}Find an Order by Client ID
Orders and Executionorders:readHTTP 200Permalink →

Find the existing order after a timeout or lost acknowledgement using the identifier you saved before submission.

Parameters
NameLocationRule
client_order_idRequiredpathIdentifier of the resource to read or change.
account_idRequiredqueryAuthorized trading account.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: orders:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/orders/by-client-id/strategy-a-0001?account_id=acct_example_main'
);
console.log(result);
Response · HTTP 200
{
  "order_id": "ord_example_01",
  "account_id": "acct_example_main",
  "client_order_id": "strategy-a-0001",
  "instrument": "BTC-PERP",
  "settlement_asset": "USDT",
  "side": "buy",
  "type": "limit",
  "status": "partially_filled",
  "requested_quantity": "0.100",
  "filled_quantity": "0.060",
  "remaining_quantity": "0.040",
  "cancelled_quantity": "0.000",
  "average_fill_price": "77000.00",
  "revision": 2,
  "created_at": "2026-08-31T12:00:00.000Z",
  "updated_at": "2026-08-31T12:00:00.250Z"
}
Response Fields
Find an Order by Client ID Response Fields
FieldTypeDescription
order_idRequiredstringTrade8 parent order identifier.
account_idRequiredstringTrading account identifier within the authorized account grant.
client_order_idRequiredstringUnique client identifier within the account. Retain it for reconciliation.
instrumentRequiredstringNormalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract.
settlement_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
sideRequiredstringDirection. Values: buy, sell.
typeRequiredstringOrder type.
statusRequiredstringCurrent order lifecycle state. Values: pending, accepted, trigger_pending, partially_filled, filled, cancelled, rejected, expired.
requested_quantityRequiredstringTotal requested base quantity.
filled_quantityRequiredstringCumulative executed base quantity.
remaining_quantityRequiredstringQuantity still open or awaiting execution. Zero after a terminal state.
cancelled_quantityRequiredstringQuantity cancelled, rejected, or expired without a fill.
average_fill_priceRequiredstring | nullQuantity-weighted price of actual fills; null before the first fill.
revisionRequiredintegerMonotonic order revision. Use for optimistic concurrency and event reconciliation.
created_atRequiredstringUTC timestamp in RFC 3339 format.
updated_atRequiredstringUTC timestamp in RFC 3339 format.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

DELETE/v1/orders/{order_id}Cancel an Order
Orders and Executionorders:writeHTTP 202Permalink →

Request cancellation of the open remainder across its child orders. Track the final quantities through the orders channel or order lookup.

Parameters
NameLocationRule
order_idRequiredpathIdentifier of the resource to read or change.
account_idRequiredqueryAuthorized trading account.
Idempotency-KeyRequiredheaderUnique 1–64 character key per account, method, and path. Retained for 24 hours. Reuse with the exact same request when recovering an unknown outcome.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: orders:write. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'DELETE',
  '/v1/orders/ord_example_01?account_id=acct_example_main',
  undefined,
  'request-example-0001'
);
console.log(result);
Response · HTTP 202
{
  "order_id": "ord_example_01",
  "cancellation_status": "pending",
  "requested_at": "2026-08-31T12:00:00.000Z"
}
Response Fields
Cancel an Order Response Fields
FieldTypeDescription
order_idRequiredstringParent identifier.
cancellation_statusRequiredstringFollow the order stream or order lookup for the final quantities. Values: pending, completed.
requested_atRequiredstringUTC timestamp in RFC 3339 format.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

PATCH/v1/orders/{order_id}Amend a Limit Order
Orders and Executionorders:writeHTTP 202Permalink →

Change price or total requested quantity on an ordinary open limit order. expected_revision protects against a concurrent fill or amendment.

  • Supply quantity, limit_price, or both. A change can reset exchange queue priority. A terminal order returns ORDER_NOT_AMENDABLE.
Parameters
NameLocationRule
order_idRequiredpathIdentifier of the resource to read or change.
Idempotency-KeyRequiredheaderUnique 1–64 character key per account, method, and path. Retained for 24 hours. Reuse with the exact same request when recovering an unknown outcome.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: orders:write. Authentication Guide →

Request Body Fields
FieldTypeDescription
account_idRequiredstringAuthorized account.
expected_revisionRequiredintegerLast observed revision.
quantitystringNew total size, including fills. Must be at least the filled quantity.
limit_pricestringNew limit price.
Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'PATCH',
  '/v1/orders/ord_example_01',
  {
    "account_id": "acct_example_main",
    "expected_revision": 2,
    "quantity": "0.120",
    "limit_price": "76990.00"
  },
  'request-example-0001'
);
console.log(result);
Response · HTTP 202
{
  "order_id": "ord_example_01",
  "amendment_id": "amend_example_01",
  "status": "pending"
}
Response Fields
Amend a Limit Order Response Fields
FieldTypeDescription
order_idRequiredstringParent order.
amendment_idRequiredstringAmendment request ID.
statusRequiredstringReconcile the order revision for completion. Values: pending.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/orders/{order_id}/fillsRead Order Fills
Orders and Executionorders:readHTTP 200Permalink →

Inspect each execution, including Binance or other exchange identifiers, liquidity role, fee asset, and charge. The example fee is 0.060 × 77,000 × 0.0001 = 0.462 USDT.

Parameters
NameLocationRule
order_idRequiredpathIdentifier of the resource to read or change.
account_idRequiredqueryAuthorized trading account.
limitOptionalqueryPage size, default 50; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: orders:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/orders/ord_example_01/fills?account_id=acct_example_main&limit=50'
);
console.log(result);
Response · HTTP 200
{
  "fills": [
    {
      "fill_id": "fill_example_01",
      "order_id": "ord_example_01",
      "account_id": "acct_example_main",
      "instrument": "BTC-PERP",
      "venue": "binance",
      "venue_order_id": "bn_example_01",
      "settlement_asset": "USDT",
      "quantity": "0.060",
      "price": "77000.00",
      "fee": "0.462",
      "fee_asset": "USDT",
      "liquidity": "maker",
      "executed_at": "2026-08-31T12:00:00.250Z"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
Read Order Fills Response Fields
FieldTypeDescription
fillsRequiredarrayResults on this page.
fills[].fill_idRequiredstringUnique Trade8 fill identifier.
fills[].order_idRequiredstringParent order identifier.
fills[].account_idRequiredstringTrading account identifier within the authorized account grant.
fills[].instrumentRequiredstringNormalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract.
fills[].venueRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
fills[].venue_order_idRequiredstringNative exchange order identifier.
fills[].settlement_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
fills[].quantityRequiredstringExecuted base quantity.
fills[].priceRequiredstringExecution price in the quote asset.
fills[].feeRequiredstringTrading charge for this fill; negative indicates a rebate.
fills[].fee_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
fills[].liquidityRequiredstringLiquidity role at execution. Values: maker, taker.
fills[].executed_atRequiredstringUTC timestamp in RFC 3339 format.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/fillsRead Account Fills
Orders and Executionorders:readHTTP 200Permalink →

Recover executions across all orders in ascending executed_at order. Deduplicate on fill_id.

Parameters
NameLocationRule
account_idRequiredqueryAuthorized trading account.
instrumentOptionalqueryNormalized perpetual family.
venueOptionalqueryExchange identifier.
start_timeOptionalqueryInclusive UTC start; default 24 hours before end_time.
end_timeOptionalqueryExclusive UTC end; default request time.
limitOptionalqueryPage size, default 50; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: orders:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/fills?account_id=acct_example_main&instrument=BTC-PERP&venue=binance&limit=50'
);
console.log(result);
Response · HTTP 200
{
  "fills": [
    {
      "fill_id": "fill_example_01",
      "order_id": "ord_example_01",
      "account_id": "acct_example_main",
      "instrument": "BTC-PERP",
      "venue": "binance",
      "venue_order_id": "bn_example_01",
      "settlement_asset": "USDT",
      "quantity": "0.060",
      "price": "77000.00",
      "fee": "0.462",
      "fee_asset": "USDT",
      "liquidity": "maker",
      "executed_at": "2026-08-31T12:00:00.250Z"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
Read Account Fills Response Fields
FieldTypeDescription
fillsRequiredarrayResults on this page.
fills[].fill_idRequiredstringUnique Trade8 fill identifier.
fills[].order_idRequiredstringParent order identifier.
fills[].account_idRequiredstringTrading account identifier within the authorized account grant.
fills[].instrumentRequiredstringNormalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract.
fills[].venueRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
fills[].venue_order_idRequiredstringNative exchange order identifier.
fills[].settlement_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
fills[].quantityRequiredstringExecuted base quantity.
fills[].priceRequiredstringExecution price in the quote asset.
fills[].feeRequiredstringTrading charge for this fill; negative indicates a rebate.
fills[].fee_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
fills[].liquidityRequiredstringLiquidity role at execution. Values: maker, taker.
fills[].executed_atRequiredstringUTC timestamp in RFC 3339 format.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/orders/{order_id}/childrenInspect Exchange Routing
Orders and Executionorders:readHTTP 200Permalink →

Follow the Binance and Bybit child orders behind one parent. Each child carries its native exchange order ID.

Parameters
NameLocationRule
order_idRequiredpathIdentifier of the resource to read or change.
account_idRequiredqueryAuthorized trading account.
limitOptionalqueryPage size, default 50; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: orders:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/orders/ord_example_01/children?account_id=acct_example_main&limit=50'
);
console.log(result);
Response · HTTP 200
{
  "children": [
    {
      "child_order_id": "child_example_01",
      "order_id": "ord_example_01",
      "venue": "binance",
      "venue_order_id": "bn_example_01",
      "quantity": "0.060",
      "filled_quantity": "0.060",
      "status": "filled",
      "updated_at": "2026-08-31T12:00:00.250Z"
    },
    {
      "child_order_id": "child_example_02",
      "order_id": "ord_example_01",
      "venue": "bybit",
      "venue_order_id": "bb_example_01",
      "quantity": "0.040",
      "filled_quantity": "0.000",
      "status": "accepted",
      "updated_at": "2026-08-31T12:00:00.250Z"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
Inspect Exchange Routing Response Fields
FieldTypeDescription
childrenRequiredarrayResults on this page.
children[].child_order_idRequiredstringTrade8 child identifier.
children[].order_idRequiredstringParent identifier.
children[].venueRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
children[].venue_order_idRequiredstringExchange order identifier.
children[].quantityRequiredstringBase quantity routed to this exchange.
children[].filled_quantityRequiredstringCumulative executed base quantity.
children[].statusRequiredstringChild lifecycle state.
children[].updated_atRequiredstringUTC timestamp in RFC 3339 format.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

POST/v1/orders/batchSubmit an Order Batch
Orders and Executionorders:writeHTTP 202Permalink →

Submit independently evaluated orders for one account. Every item has its own client_order_id. Read each result even when the HTTP response succeeds.

  • Maximum 20 orders, subject to a lower account batch_order_limit. The batch consumes one order-budget unit per item. Retry only unresolved or corrected items with their original client IDs.
Parameters
NameLocationRule
Idempotency-KeyRequiredheaderUnique 1–64 character key per account, method, and path. Retained for 24 hours. Reuse with the exact same request when recovering an unknown outcome.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: orders:write. Authentication Guide →

Request Body Fields
FieldTypeDescription
account_idRequiredstringAccount shared by all items.
ordersRequiredarrayItems must use the same account_id as the envelope.
orders[].account_idRequiredstringTrading account identifier within the authorized account grant.
orders[].client_order_idRequiredstringUnique client identifier within the account. Retain it for reconciliation.
orders[].instrumentRequiredstringNormalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract.
orders[].settlement_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
orders[].sideRequiredstringTrade direction. Values: buy, sell.
orders[].typeRequiredstringOrder type. Values: market, limit, stop_market, stop_limit, take_profit_market, take_profit_limit.
orders[].quantityRequiredstringOrder size in the market base unit.
orders[].limit_pricestringRequired for limit, stop_limit, and take_profit_limit.
orders[].trigger_pricestringRequired for stop and take-profit orders.
orders[].trigger_sourcestringPrice used by a conditional order. Values: mark, last, index.
orders[].trigger_venuestringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
orders[].time_in_forcestringLimit orders: GTC, IOC, or FOK. Market orders: IOC. Default GTC for limit variants and IOC for market variants. Values: GTC, IOC, FOK.
orders[].post_onlybooleanDefault false. Supported on ordinary GTC limit orders; crossing orders are rejected.
orders[].reduce_onlybooleanDefault false. Restricts fills to reducing the current exchange position.
orders[].routingRequiredstringAuto chooses eligible exchanges; direct requires exactly one allowed exchange. Values: auto, direct.
orders[].venue_policyobject
orders[].venue_policy.allowedarrayOnly these exchanges may receive child orders.
orders[].venue_policy.excludedarrayExchanges excluded from routing; must be disjoint from allowed.
orders[].venue_policy.max_slippage_bpsstringMaximum market-order slippage from the consolidated best price at acceptance, in basis points. Execution stops at this boundary.
orders[].self_trade_preventionstringAction when orders from the same account would match. Default cancel_newest. Values: cancel_newest, cancel_oldest, cancel_both.
Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'POST',
  '/v1/orders/batch',
  {
    "account_id": "acct_example_main",
    "orders": [
      {
        "account_id": "acct_example_main",
        "client_order_id": "strategy-a-0001",
        "instrument": "BTC-PERP",
        "settlement_asset": "USDT",
        "side": "buy",
        "type": "limit",
        "quantity": "0.100",
        "limit_price": "77000.00",
        "time_in_force": "GTC",
        "post_only": true,
        "reduce_only": false,
        "routing": "auto",
        "venue_policy": {
          "allowed": [
            "binance",
            "bybit"
          ]
        },
        "self_trade_prevention": "cancel_newest"
      }
    ]
  },
  'request-example-0001'
);
console.log(result);
Response · HTTP 202
{
  "results": [
    {
      "client_order_id": "strategy-a-0001",
      "accepted": true,
      "order": {
        "order_id": "ord_example_01",
        "account_id": "acct_example_main",
        "client_order_id": "strategy-a-0001",
        "instrument": "BTC-PERP",
        "settlement_asset": "USDT",
        "side": "buy",
        "type": "limit",
        "status": "accepted",
        "requested_quantity": "0.100",
        "filled_quantity": "0.000",
        "remaining_quantity": "0.100",
        "cancelled_quantity": "0.000",
        "average_fill_price": null,
        "revision": 1,
        "created_at": "2026-08-31T12:00:00.000Z",
        "updated_at": "2026-08-31T12:00:00.000Z"
      }
    }
  ]
}
Response Fields
Submit an Order Batch Response Fields
FieldTypeDescription
resultsRequiredarrayOne result per input item, in input order.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

POST/v1/orders/cancel-allCancel Open Orders
Orders and Executionorders:writeHTTP 202Permalink →

Request cancellation for the account, optionally narrowed to an instrument. A returned order_id lets you track every cancellation.

Parameters
NameLocationRule
Idempotency-KeyRequiredheaderUnique 1–64 character key per account, method, and path. Retained for 24 hours. Reuse with the exact same request when recovering an unknown outcome.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: orders:write. Authentication Guide →

Request Body Fields
FieldTypeDescription
account_idRequiredstringAccount to cancel.
instrumentstringOptional instrument filter.
Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'POST',
  '/v1/orders/cancel-all',
  {
    "account_id": "acct_example_main",
    "instrument": "BTC-PERP"
  },
  'request-example-0001'
);
console.log(result);
Response · HTTP 202
{
  "cancellations": [
    {
      "order_id": "ord_example_01",
      "cancellation_status": "pending",
      "requested_at": "2026-08-31T12:00:00.000Z"
    }
  ]
}
Response Fields
Cancel Open Orders Response Fields
FieldTypeDescription
cancellationsRequiredarrayCancellation requests for matching open orders.
cancellations[].order_idRequiredstringParent identifier.
cancellations[].cancellation_statusRequiredstringFollow the order stream or order lookup for the final quantities. Values: pending, completed.
cancellations[].requested_atRequiredstringUTC timestamp in RFC 3339 format.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

PUT/v1/account/dead-man-switchSet the Dead-Man Switch
Orders and Executionorders:writeHTTP 200Permalink →

Arm or refresh an account-wide timer. Expiry requests cancellation of all open orders in that account. Use a dedicated subaccount for each independent strategy.

  • Refresh with a new Idempotency-Key before half the timeout elapses. A replay of the same key returns the previous result and leaves its original expiry unchanged. Exchange outages can delay cancellation acknowledgements.
Parameters
NameLocationRule
Idempotency-KeyRequiredheaderUnique 1–64 character key per account, method, and path. Retained for 24 hours. Reuse with the exact same request when recovering an unknown outcome.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: orders:write. Authentication Guide →

Request Body Fields
FieldTypeDescription
account_idRequiredstringAccount whose orders are protected.
timeout_secondsRequiredinteger0 disables the timer; otherwise 10–120 seconds. Values: 0, 10, 20, 30, 60, 90, 120.
Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'PUT',
  '/v1/account/dead-man-switch',
  {
    "account_id": "acct_example_mm",
    "timeout_seconds": 60
  },
  'request-example-0001'
);
console.log(result);
Response · HTTP 200
{
  "account_id": "acct_example_mm",
  "armed": true,
  "expires_at": "2026-08-31T12:01:00.000Z"
}
Response Fields
Set the Dead-Man Switch Response Fields
FieldTypeDescription
account_idRequiredstringProtected account.
armedRequiredbooleanWhether the timer is active.
expires_atRequiredstring | nullExpiry time; null when disabled.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/positionsRead Open Positions
Positions and Riskaccounts:readHTTP 200Permalink →

Read exposure, margin mode, leverage, P&L, and liquidation estimates separately for each exchange contract.

Parameters
NameLocationRule
account_idRequiredqueryAuthorized trading account.
instrumentOptionalqueryNormalized perpetual family.
venueOptionalqueryExchange identifier.
limitOptionalqueryPage size, default 50; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: accounts:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/positions?account_id=acct_example_main&instrument=BTC-PERP&venue=binance&limit=50'
);
console.log(result);
Response · HTTP 200
{
  "positions": [
    {
      "position_id": "pos_example_01",
      "account_id": "acct_example_main",
      "instrument": "BTC-PERP",
      "venue": "binance",
      "settlement_asset": "USDT",
      "side": "long",
      "quantity": "0.060",
      "entry_price": "77000.00",
      "mark_price": "77100.00",
      "unrealized_pnl": "6.00",
      "liquidation_price": "64000.00",
      "leverage": "5",
      "margin_mode": "isolated",
      "updated_at": "2026-08-31T12:00:00.000Z"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
Read Open Positions Response Fields
FieldTypeDescription
positionsRequiredarrayResults on this page.
positions[].position_idRequiredstringPosition identifier.
positions[].account_idRequiredstringTrading account identifier within the authorized account grant.
positions[].instrumentRequiredstringNormalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract.
positions[].venueRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
positions[].settlement_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
positions[].sideRequiredstringPosition direction. Values: long, short.
positions[].quantityRequiredstringAbsolute base quantity; zero marks a closed position update.
positions[].entry_priceRequiredstringQuantity-weighted entry price.
positions[].mark_priceRequiredstringCurrent exchange mark price.
positions[].unrealized_pnlRequiredstringUnrealized P&L in the settlement asset.
positions[].liquidation_priceRequiredstring | nullEstimated exchange liquidation price, or null when unavailable.
positions[].leverageRequiredstringConfigured leverage multiplier.
positions[].margin_modeRequiredstringExchange margin mode. Values: cross, isolated.
positions[].updated_atRequiredstringUTC timestamp in RFC 3339 format.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/account/margin-settingsRead Margin Settings
Positions and Riskaccounts:readHTTP 200Permalink →

Inspect cross or isolated margin and configured leverage by exchange and instrument.

Parameters
NameLocationRule
account_idRequiredqueryAuthorized trading account.
instrumentOptionalqueryNormalized perpetual family.
venueOptionalqueryExchange identifier.
settlement_assetOptionalqueryFilter contracts by settlement asset.
limitOptionalqueryPage size, default 50; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: accounts:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/account/margin-settings?account_id=acct_example_main&instrument=BTC-PERP&venue=binance&settlement_asset=USDT&limit=50'
);
console.log(result);
Response · HTTP 200
{
  "settings": [
    {
      "account_id": "acct_example_main",
      "instrument": "BTC-PERP",
      "venue": "binance",
      "settlement_asset": "USDT",
      "margin_mode": "isolated",
      "leverage": "5",
      "updated_at": "2026-08-31T12:00:00.000Z"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
Read Margin Settings Response Fields
FieldTypeDescription
settingsRequiredarrayResults on this page.
settings[].account_idRequiredstringTrading account identifier within the authorized account grant.
settings[].instrumentRequiredstringNormalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract.
settings[].venueRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
settings[].settlement_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
settings[].margin_modeRequiredstringCross shares eligible collateral within this exchange account; isolated reserves it for the position. Values: cross, isolated.
settings[].leverageRequiredstringRequested leverage multiplier; validated against exchange and account risk tiers.
settings[].updated_atRequiredstringUTC timestamp in RFC 3339 format.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

PUT/v1/account/margin-settingsSet Leverage and Margin Mode
Positions and Riskaccounts:writeHTTP 200Permalink →

Set leverage and cross or isolated margin for one exchange contract. Read the returned setting before submitting orders that depend on it.

  • Exchange rules can require open orders and positions to be closed before switching margin mode. An incompatible change returns MARGIN_MODE_CONFLICT.
Parameters
NameLocationRule
Idempotency-KeyRequiredheaderUnique 1–64 character key per account, method, and path. Retained for 24 hours. Reuse with the exact same request when recovering an unknown outcome.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: accounts:write. Authentication Guide →

Request Body Fields
FieldTypeDescription
account_idRequiredstringAuthorized account.
instrumentRequiredstringNormalized family.
venueRequiredstringExchange ID.
settlement_assetRequiredstringContract settlement asset.
margin_modeRequiredstringMargin mode. Values: cross, isolated.
leverageRequiredstringLeverage multiplier.
Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'PUT',
  '/v1/account/margin-settings',
  {
    "account_id": "acct_example_main",
    "instrument": "BTC-PERP",
    "venue": "binance",
    "settlement_asset": "USDT",
    "margin_mode": "isolated",
    "leverage": "5"
  },
  'request-example-0001'
);
console.log(result);
Response · HTTP 200
{
  "account_id": "acct_example_main",
  "instrument": "BTC-PERP",
  "venue": "binance",
  "settlement_asset": "USDT",
  "margin_mode": "isolated",
  "leverage": "5",
  "updated_at": "2026-08-31T12:00:00.000Z"
}
Response Fields
Set Leverage and Margin Mode Response Fields
FieldTypeDescription
account_idRequiredstringTrading account identifier within the authorized account grant.
instrumentRequiredstringNormalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract.
venueRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
settlement_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
margin_modeRequiredstringCross shares eligible collateral within this exchange account; isolated reserves it for the position. Values: cross, isolated.
leverageRequiredstringRequested leverage multiplier; validated against exchange and account risk tiers.
updated_atRequiredstringUTC timestamp in RFC 3339 format.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/account/riskRead Margin and Risk
Positions and Riskaccounts:readHTTP 200Permalink →

Read exchange-level equity, margin requirements, and available capacity. Compare assets within their own settlement denomination.

Parameters
NameLocationRule
account_idRequiredqueryAuthorized trading account.
venueOptionalqueryExchange identifier.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: accounts:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/account/risk?account_id=acct_example_main&venue=binance'
);
console.log(result);
Response · HTTP 200
{
  "risk": [
    {
      "account_id": "acct_example_main",
      "venue": "binance",
      "settlement_asset": "USDT",
      "equity": "2506.00",
      "initial_margin": "925.20",
      "maintenance_margin": "23.13",
      "available_margin": "1580.80",
      "margin_ratio": "0.009230",
      "state": "normal",
      "updated_at": "2026-08-31T12:00:00.000Z"
    }
  ]
}
Response Fields
Read Margin and Risk Response Fields
FieldTypeDescription
riskRequiredarrayRisk by exchange and settlement asset.
risk[].account_idRequiredstringTrading account identifier within the authorized account grant.
risk[].venueRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
risk[].settlement_assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
risk[].equityRequiredstringEquity in settlement_asset, including unrealized P&L.
risk[].initial_marginRequiredstringInitial margin requirement.
risk[].maintenance_marginRequiredstringMaintenance margin requirement.
risk[].available_marginRequiredstringMargin available for new positions after reservations.
risk[].margin_ratioRequiredstringMaintenance margin / equity. Rising values indicate less headroom.
risk[].stateRequiredstringExchange risk state. Values: normal, warning, reduce_only, liquidating.
risk[].updated_atRequiredstringUTC timestamp in RFC 3339 format.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/custodiansList Custody Integrations
Custody and Settlementcustody:readHTTP 200Permalink →

Read custody providers such as Ceffu, Copper, Coinbase Custody, BitGo, Komainu, and Zodia Custody. Linked custody accounts supply the eligible exchange routes.

Parameters
NameLocationRule
account_idRequiredqueryAuthorized trading account.
limitOptionalqueryPage size, default 50; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: custody:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/custodians?account_id=acct_example_main&limit=50'
);
console.log(result);
Response · HTTP 200
{
  "custodians": [
    {
      "id": "ceffu",
      "name": "Ceffu",
      "services": [
        "custody",
        "off_exchange_collateral"
      ]
    },
    {
      "id": "copper",
      "name": "Copper",
      "services": [
        "custody",
        "off_exchange_collateral"
      ]
    },
    {
      "id": "coinbase",
      "name": "Coinbase Custody",
      "services": [
        "custody"
      ]
    },
    {
      "id": "bitgo",
      "name": "BitGo",
      "services": [
        "custody"
      ]
    },
    {
      "id": "komainu",
      "name": "Komainu",
      "services": [
        "custody"
      ]
    },
    {
      "id": "zodia",
      "name": "Zodia Custody",
      "services": [
        "custody"
      ]
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
List Custody Integrations Response Fields
FieldTypeDescription
custodiansRequiredarrayResults on this page.
custodians[].idRequiredstringCustodian identifier from the integration catalog.
custodians[].nameRequiredstringCustodian display name.
custodians[].servicesRequiredarrayServices enabled for this integration.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/custody/accountsRead Custody Accounts
Custody and Settlementcustody:readHTTP 200Permalink →

Read linked balances and eligible allocation destinations. This example includes a Ceffu account for Binance and a Copper account for OKX and Bybit.

Parameters
NameLocationRule
account_idRequiredqueryAuthorized trading account.
limitOptionalqueryPage size, default 50; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: custody:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/custody/accounts?account_id=acct_example_main&limit=50'
);
console.log(result);
Response · HTTP 200
{
  "custody_accounts": [
    {
      "custody_account_id": "cust_example_ceffu",
      "account_id": "acct_example_main",
      "custodian": "ceffu",
      "asset": "USDT",
      "balance": "10000.00",
      "allocated": "2500.00",
      "available": "7500.00",
      "eligible_venues": [
        "binance"
      ],
      "updated_at": "2026-08-31T12:00:00.000Z"
    },
    {
      "custody_account_id": "cust_example_copper",
      "account_id": "acct_example_main",
      "custodian": "copper",
      "asset": "USDT",
      "balance": "10000.00",
      "allocated": "2500.00",
      "available": "7500.00",
      "eligible_venues": [
        "okx",
        "bybit"
      ],
      "updated_at": "2026-08-31T12:00:00.000Z"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
Read Custody Accounts Response Fields
FieldTypeDescription
custody_accountsRequiredarrayResults on this page.
custody_accounts[].custody_account_idRequiredstringLinked custody account identifier.
custody_accounts[].account_idRequiredstringTrading account identifier within the authorized account grant.
custody_accounts[].custodianRequiredstringCustodian identifier, such as ceffu, copper, bitgo, or coinbase.
custody_accounts[].assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
custody_accounts[].balanceRequiredstringCustody ledger balance in this asset.
custody_accounts[].allocatedRequiredstringAmount committed to exchange collateral.
custody_accounts[].availableRequiredstringUnallocated custody balance.
custody_accounts[].eligible_venuesRequiredarrayExchanges enabled for off-exchange allocation from this custody account.
custody_accounts[].updated_atRequiredstringUTC timestamp in RFC 3339 format.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/collateral/allocationsRead Collateral Allocations
Custody and Settlementcustody:readHTTP 200Permalink →

Track custody collateral committed to each exchange and its acknowledgement state.

Parameters
NameLocationRule
account_idRequiredqueryAuthorized trading account.
venueOptionalqueryExchange identifier.
limitOptionalqueryPage size, default 50; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: custody:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/collateral/allocations?account_id=acct_example_main&venue=binance&limit=50'
);
console.log(result);
Response · HTTP 200
{
  "allocations": [
    {
      "allocation_id": "alloc_example_01",
      "account_id": "acct_example_main",
      "client_allocation_id": "collateral-0001",
      "custody_account_id": "cust_example_ceffu",
      "custodian": "ceffu",
      "venue": "binance",
      "asset": "USDT",
      "amount": "2500.00",
      "status": "active",
      "updated_at": "2026-08-31T12:00:00.000Z"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
Read Collateral Allocations Response Fields
FieldTypeDescription
allocationsRequiredarrayResults on this page.
allocations[].allocation_idRequiredstringCollateral allocation identifier.
allocations[].account_idRequiredstringTrading account identifier within the authorized account grant.
allocations[].client_allocation_idRequiredstringUnique client identifier within the account. Retain it for reconciliation.
allocations[].custody_account_idRequiredstringSource custody account.
allocations[].custodianRequiredstringCustodian identifier.
allocations[].venueRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
allocations[].assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
allocations[].amountRequiredstringAmount in asset units.
allocations[].statusRequiredstringActive means the exchange has acknowledged usable collateral. Values: pending, active, releasing, released, rejected.
allocations[].updated_atRequiredstringUTC timestamp in RFC 3339 format.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

POST/v1/collateral/allocationsAllocate Off-Exchange Collateral
Custody and Settlementcustody:writeHTTP 202Permalink →

Request an allocation from a linked custody account to an eligible exchange. The example allocates Ceffu-held USDT to Binance.

  • Wait for active before counting the allocation as usable exchange collateral. The client_allocation_id is unique within the account and is retained for reconciliation.
Parameters
NameLocationRule
Idempotency-KeyRequiredheaderUnique 1–64 character key per account, method, and path. Retained for 24 hours. Reuse with the exact same request when recovering an unknown outcome.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: custody:write. Authentication Guide →

Request Body Fields
FieldTypeDescription
account_idRequiredstringAuthorized account.
client_allocation_idRequiredstringUnique client allocation ID.
custody_account_idRequiredstringLinked source custody account.
venueRequiredstringExchange in eligible_venues.
assetRequiredstringCollateral asset.
amountRequiredstringAmount in asset units.
Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'POST',
  '/v1/collateral/allocations',
  {
    "account_id": "acct_example_main",
    "client_allocation_id": "collateral-0001",
    "custody_account_id": "cust_example_ceffu",
    "venue": "binance",
    "asset": "USDT",
    "amount": "2500.00"
  },
  'request-example-0001'
);
console.log(result);
Response · HTTP 202
{
  "allocation_id": "alloc_example_01",
  "account_id": "acct_example_main",
  "client_allocation_id": "collateral-0001",
  "custody_account_id": "cust_example_ceffu",
  "custodian": "ceffu",
  "venue": "binance",
  "asset": "USDT",
  "amount": "2500.00",
  "status": "pending",
  "updated_at": "2026-08-31T12:00:00.000Z"
}
Response Fields
Allocate Off-Exchange Collateral Response Fields
FieldTypeDescription
allocation_idRequiredstringCollateral allocation identifier.
account_idRequiredstringTrading account identifier within the authorized account grant.
client_allocation_idRequiredstringUnique client identifier within the account. Retain it for reconciliation.
custody_account_idRequiredstringSource custody account.
custodianRequiredstringCustodian identifier.
venueRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
amountRequiredstringAmount in asset units.
statusRequiredstringActive means the exchange has acknowledged usable collateral. Values: pending, active, releasing, released, rejected.
updated_atRequiredstringUTC timestamp in RFC 3339 format.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/collateral/allocations/{allocation_id}Read an Allocation
Custody and Settlementcustody:readHTTP 200Permalink →

Follow a collateral request until the exchange acknowledgement makes it active or the request is rejected.

Parameters
NameLocationRule
allocation_idRequiredpathIdentifier of the resource to read or change.
account_idRequiredqueryAuthorized trading account.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: custody:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/collateral/allocations/alloc_example_01?account_id=acct_example_main'
);
console.log(result);
Response · HTTP 200
{
  "allocation_id": "alloc_example_01",
  "account_id": "acct_example_main",
  "client_allocation_id": "collateral-0001",
  "custody_account_id": "cust_example_ceffu",
  "custodian": "ceffu",
  "venue": "binance",
  "asset": "USDT",
  "amount": "2500.00",
  "status": "active",
  "updated_at": "2026-08-31T12:00:00.000Z"
}
Response Fields
Read an Allocation Response Fields
FieldTypeDescription
allocation_idRequiredstringCollateral allocation identifier.
account_idRequiredstringTrading account identifier within the authorized account grant.
client_allocation_idRequiredstringUnique client identifier within the account. Retain it for reconciliation.
custody_account_idRequiredstringSource custody account.
custodianRequiredstringCustodian identifier.
venueRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
amountRequiredstringAmount in asset units.
statusRequiredstringActive means the exchange has acknowledged usable collateral. Values: pending, active, releasing, released, rejected.
updated_atRequiredstringUTC timestamp in RFC 3339 format.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/settlementsRead Settlement Records
Custody and Settlementcustody:readHTTP 200Permalink →

Reconcile custody and exchange settlement cycles. The Copper/OKX example credits 125.50 USDT to custody.

Parameters
NameLocationRule
account_idRequiredqueryAuthorized trading account.
venueOptionalqueryExchange identifier.
start_timeOptionalqueryInclusive UTC start; default 24 hours before end_time.
end_timeOptionalqueryExclusive UTC end; default request time.
limitOptionalqueryPage size, default 50; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: custody:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/settlements?account_id=acct_example_main&venue=binance&limit=50'
);
console.log(result);
Response · HTTP 200
{
  "settlements": [
    {
      "settlement_id": "settle_example_01",
      "account_id": "acct_example_main",
      "custodian": "copper",
      "venue": "okx",
      "asset": "USDT",
      "amount": "125.50",
      "status": "completed",
      "cycle_start": "2026-08-31T08:00:00.000Z",
      "cycle_end": "2026-08-31T12:00:00.000Z",
      "updated_at": "2026-08-31T12:00:00.000Z"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
Read Settlement Records Response Fields
FieldTypeDescription
settlementsRequiredarrayResults on this page.
settlements[].settlement_idRequiredstringSettlement record identifier.
settlements[].account_idRequiredstringTrading account identifier within the authorized account grant.
settlements[].custodianRequiredstringCustodian identifier.
settlements[].venueRequiredstringExchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx.
settlements[].assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
settlements[].amountRequiredstringPositive credits the custody account; negative debits it.
settlements[].statusRequiredstringSettlement processing state. Values: pending, processing, completed, failed.
settlements[].cycle_startRequiredstringUTC timestamp in RFC 3339 format.
settlements[].cycle_endRequiredstringUTC timestamp in RFC 3339 format.
settlements[].updated_atRequiredstringUTC timestamp in RFC 3339 format.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/depositsTrack Deposits
Funding and Transferstransfers:readHTTP 200Permalink →

Follow Bitcoin or stablecoin deposits through confirmations, review, and ledger credit. The example shows a USDC deposit on Ethereum.

Parameters
NameLocationRule
account_idRequiredqueryAuthorized trading account.
start_timeOptionalqueryInclusive UTC start; default 24 hours before end_time.
end_timeOptionalqueryExclusive UTC end; default request time.
limitOptionalqueryPage size, default 50; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: transfers:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/deposits?account_id=acct_example_main&limit=50'
);
console.log(result);
Response · HTTP 200
{
  "deposits": [
    {
      "deposit_id": "dep_example_01",
      "account_id": "acct_example_main",
      "asset": "USDC",
      "network": "ethereum",
      "amount": "5000.00",
      "confirmations": 12,
      "required_confirmations": 12,
      "status": "credited",
      "updated_at": "2026-08-31T12:00:00.000Z"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
Track Deposits Response Fields
FieldTypeDescription
depositsRequiredarrayResults on this page.
deposits[].deposit_idRequiredstringDeposit identifier.
deposits[].account_idRequiredstringTrading account identifier within the authorized account grant.
deposits[].assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
deposits[].networkRequiredstringBlockchain network identifier, such as ethereum or bitcoin.
deposits[].amountRequiredstringReceived amount in asset units.
deposits[].confirmationsRequiredintegerObserved confirmations.
deposits[].required_confirmationsRequiredintegerConfirmation threshold for this deposit.
deposits[].statusRequiredstringCredited means the amount is included in the ledger balance. Values: detected, confirming, review, credited, rejected.
deposits[].updated_atRequiredstringUTC timestamp in RFC 3339 format.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

POST/v1/transfersTransfer Between Subaccounts
Funding and Transferstransfers:writeHTTP 202Permalink →

Move available ledger balance between accounts controlled by the same organization. The key needs access to both accounts.

Parameters
NameLocationRule
Idempotency-KeyRequiredheaderUnique 1–64 character key per account, method, and path. Retained for 24 hours. Reuse with the exact same request when recovering an unknown outcome.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: transfers:write. Authentication Guide →

Request Body Fields
FieldTypeDescription
client_transfer_idRequiredstringUnique identifier within the source account.
from_account_idRequiredstringSource account; also scopes the idempotency key.
to_account_idRequiredstringDestination account in the same organization.
assetRequiredstringAsset to move.
amountRequiredstringAmount in asset units.
Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'POST',
  '/v1/transfers',
  {
    "client_transfer_id": "rebalance-0001",
    "from_account_id": "acct_example_main",
    "to_account_id": "acct_example_mm",
    "asset": "USDC",
    "amount": "500.00"
  },
  'request-example-0001'
);
console.log(result);
Response · HTTP 202
{
  "transfer_id": "transfer_example_01",
  "client_transfer_id": "rebalance-0001",
  "from_account_id": "acct_example_main",
  "to_account_id": "acct_example_mm",
  "asset": "USDC",
  "amount": "500.00",
  "status": "pending",
  "created_at": "2026-08-31T12:00:00.000Z",
  "updated_at": "2026-08-31T12:00:00.000Z"
}
Response Fields
Transfer Between Subaccounts Response Fields
FieldTypeDescription
transfer_idRequiredstringInternal transfer identifier.
client_transfer_idRequiredstringUnique client identifier within the account. Retain it for reconciliation.
from_account_idRequiredstringTrading account identifier within the authorized account grant.
to_account_idRequiredstringTrading account identifier within the authorized account grant.
assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
amountRequiredstringTransfer amount in asset units.
statusRequiredstringInternal transfer processing state. Values: pending, completed, rejected.
created_atRequiredstringUTC timestamp in RFC 3339 format.
updated_atRequiredstringUTC timestamp in RFC 3339 format.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/transfersList Transfers
Funding and Transferstransfers:readHTTP 200Permalink →

Read internal transfers involving an account in ascending created_at order. Use client_transfer_id to reconcile a timed-out submission.

Parameters
NameLocationRule
account_idRequiredqueryAuthorized trading account.
client_transfer_idOptionalqueryExact client transfer ID.
start_timeOptionalqueryInclusive UTC start; default 24 hours before end_time.
end_timeOptionalqueryExclusive UTC end; default request time.
limitOptionalqueryPage size, default 50; maximum 200.
cursorOptionalqueryOpaque next_cursor from the preceding response.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: transfers:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/transfers?account_id=acct_example_main&limit=50'
);
console.log(result);
Response · HTTP 200
{
  "transfers": [
    {
      "transfer_id": "transfer_example_01",
      "client_transfer_id": "rebalance-0001",
      "from_account_id": "acct_example_main",
      "to_account_id": "acct_example_mm",
      "asset": "USDC",
      "amount": "500.00",
      "status": "pending",
      "created_at": "2026-08-31T12:00:00.000Z",
      "updated_at": "2026-08-31T12:00:00.000Z"
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  }
}
Response Fields
List Transfers Response Fields
FieldTypeDescription
transfersRequiredarrayResults on this page.
transfers[].transfer_idRequiredstringInternal transfer identifier.
transfers[].client_transfer_idRequiredstringUnique client identifier within the account. Retain it for reconciliation.
transfers[].from_account_idRequiredstringTrading account identifier within the authorized account grant.
transfers[].to_account_idRequiredstringTrading account identifier within the authorized account grant.
transfers[].assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
transfers[].amountRequiredstringTransfer amount in asset units.
transfers[].statusRequiredstringInternal transfer processing state. Values: pending, completed, rejected.
transfers[].created_atRequiredstringUTC timestamp in RFC 3339 format.
transfers[].updated_atRequiredstringUTC timestamp in RFC 3339 format.
paginationRequiredobject
pagination.next_cursorRequiredstring | nullOpaque cursor for the next page; null at the end.
pagination.has_moreRequiredbooleanTrue when another page is available.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

GET/v1/transfers/{transfer_id}Read a Transfer
Funding and Transferstransfers:readHTTP 200Permalink →

Track an internal transfer until the destination ledger is credited or the request is rejected.

Parameters
NameLocationRule
transfer_idRequiredpathIdentifier of the resource to read or change.
account_idRequiredqueryAuthorized trading account.

Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: transfers:read. Authentication Guide →

Signed Node.js Request
import { request } from './rest-client.mjs';

const result = await request(
  'GET',
  '/v1/transfers/transfer_example_01?account_id=acct_example_main'
);
console.log(result);
Response · HTTP 200
{
  "transfer_id": "transfer_example_01",
  "client_transfer_id": "rebalance-0001",
  "from_account_id": "acct_example_main",
  "to_account_id": "acct_example_mm",
  "asset": "USDC",
  "amount": "500.00",
  "status": "pending",
  "created_at": "2026-08-31T12:00:00.000Z",
  "updated_at": "2026-08-31T12:00:00.000Z"
}
Response Fields
Read a Transfer Response Fields
FieldTypeDescription
transfer_idRequiredstringInternal transfer identifier.
client_transfer_idRequiredstringUnique client identifier within the account. Retain it for reconciliation.
from_account_idRequiredstringTrading account identifier within the authorized account grant.
to_account_idRequiredstringTrading account identifier within the authorized account grant.
assetRequiredstringAsset symbol, such as BTC, USDT, or USDC.
amountRequiredstringTransfer amount in asset units.
statusRequiredstringInternal transfer processing state. Values: pending, completed, rejected.
created_atRequiredstringUTC timestamp in RFC 3339 format.
updated_atRequiredstringUTC timestamp in RFC 3339 format.

Errors use the shared error envelope. Follow pagination and retry rules when recovering results.

For AI agent access to these operations, see Connect Your AI Agent and the MCP Tool Reference.

Account access

Jurisdiction Restriction

Trade8 is not available in your jurisdiction.

You can still explore the product and read the documentation.

Explore the Docs