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
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 →
import { request } from './rest-client.mjs';
const result = await request(
'GET',
'/v1/time'
);
console.log(result);{
"server_time": "2026-08-31T12:00:00.000Z",
"unix_seconds": 1788177600
}Response Fields
| Field | Type | Description |
|---|---|---|
server_timeRequired | string | Server UTC time. |
unix_secondsRequired | integer | Unix time in whole seconds. |
Errors use the shared error envelope. Follow pagination and retry rules when recovering results.
GET/v1/marketsList Perpetual Markets
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.
| Name | Location | Rule |
|---|---|---|
instrumentOptional | query | Normalized perpetual family. |
venueOptional | query | Exchange identifier. |
settlement_assetOptional | query | Filter contracts by settlement asset. |
limitOptional | query | Page size, default 10; maximum 200. |
cursorOptional | query | Opaque next_cursor from the preceding response. |
import { request } from './rest-client.mjs';
const result = await request(
'GET',
'/v1/markets?instrument=BTC-PERP&limit=10'
);
console.log(result);curl --fail-with-body 'https://api.trade8.xyz/v1/markets?instrument=BTC-PERP&limit=10'{
"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
| Field | Type | Description |
|---|---|---|
marketsRequired | array | Instruments on this page. |
markets[].instrumentRequired | string | Normalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract. |
markets[].contract_typeRequired | string | Perpetual futures instrument family; payoff details belong to each exchange contract. Values: perpetual. |
markets[].base_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
markets[].contractsRequired | array | Native contract mappings, grouped under one perpetual instrument. |
markets[].contracts[].venueRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
markets[].contracts[].venue_instrumentRequired | string | Native exchange symbol, such as BTCUSDT or BTC. |
markets[].contracts[].settlement_asset | string | Asset symbol, such as BTC, USDT, or USDC. |
markets[].contracts[].settlement_assets | array | Settlement tokens for a pool with side-dependent collateral. |
markets[].contracts[].network | string | Blockchain network for an onchain pool. |
markets[].contracts[].payoff_type | string | Contract payoff where specified by the exchange. Values: linear, inverse. |
markets[].contracts[].contract_size | string | Value represented by one native contract. |
markets[].contracts[].contract_size_unit | string | Unit of contract_size; multiply native contract quantity by contract_size to express face value. |
markets[].contracts[].quantity_unitRequired | string | Native size unit: base asset, USD, or contract. Read contract_size for lot-based contracts. |
markets[].contracts[].price_unitRequired | string | Price quote unit. |
markets[].contracts[].price_rule | value | Fixed increment or significant-figure pricing rule. |
markets[].contracts[].quantity_step | string | Size increment in quantity_unit. |
markets[].contracts[].minimum_quantity | string | Exchange LOT_SIZE minimum for limit orders. |
markets[].contracts[].maximum_quantity | string | Exchange LOT_SIZE maximum for limit orders; market-order limits may differ. |
markets[].contracts[].minimum_notional | string | Minimum order value in price_unit. |
markets[].contracts[].max_leverage | string | Published exchange ceiling at snapshot time; account risk tiers can lower it. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True 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
Read an instrument’s exchange symbols, settlement assets, price rules, and quantity increments. Public access; unknown instruments return HTTP 404.
| Name | Location | Rule |
|---|---|---|
instrumentRequired | path | Identifier of the resource to read or change. |
import { request } from './rest-client.mjs';
const result = await request(
'GET',
'/v1/markets/BTC-PERP'
);
console.log(result);curl --fail-with-body 'https://api.trade8.xyz/v1/markets/BTC-PERP'{
"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
| Field | Type | Description |
|---|---|---|
instrumentRequired | string | Normalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract. |
contract_typeRequired | string | Perpetual futures instrument family; payoff details belong to each exchange contract. Values: perpetual. |
base_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
contractsRequired | array | Native contract mappings, grouped under one perpetual instrument. |
contracts[].venueRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
contracts[].venue_instrumentRequired | string | Native exchange symbol, such as BTCUSDT or BTC. |
contracts[].settlement_asset | string | Asset symbol, such as BTC, USDT, or USDC. |
contracts[].settlement_assets | array | Settlement tokens for a pool with side-dependent collateral. |
contracts[].network | string | Blockchain network for an onchain pool. |
contracts[].payoff_type | string | Contract payoff where specified by the exchange. Values: linear, inverse. |
contracts[].contract_size | string | Value represented by one native contract. |
contracts[].contract_size_unit | string | Unit of contract_size; multiply native contract quantity by contract_size to express face value. |
contracts[].quantity_unitRequired | string | Native size unit: base asset, USD, or contract. Read contract_size for lot-based contracts. |
contracts[].price_unitRequired | string | Price quote unit. |
contracts[].price_rule | value | Fixed increment or significant-figure pricing rule. |
contracts[].quantity_step | string | Size increment in quantity_unit. |
contracts[].minimum_quantity | string | Exchange LOT_SIZE minimum for limit orders. |
contracts[].maximum_quantity | string | Exchange LOT_SIZE maximum for limit orders; market-order limits may differ. |
contracts[].minimum_notional | string | Minimum order value in price_unit. |
contracts[].max_leverage | string | Published 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
Read one exchange book. The example uses Hyperliquid BTC settled in USDC. Subscribe to orderbook for sequenced updates.
| Name | Location | Rule |
|---|---|---|
instrumentRequired | path | Identifier of the resource to read or change. |
venueRequired | query | Exchange identifier. |
settlement_assetRequired | query | Filter contracts by settlement asset. |
depthOptional | query | Number 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 →
import { request } from './rest-client.mjs';
const result = await request(
'GET',
'/v1/markets/BTC-PERP/orderbook?venue=hyperliquid&settlement_asset=USDC'
);
console.log(result);{
"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
| Field | Type | Description |
|---|---|---|
instrumentRequired | string | Normalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract. |
venueRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
settlement_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
book_sequenceRequired | integer | Monotonic sequence for this exchange/instrument book. |
bidsRequired | array | Bids, highest price first. |
bids[].priceRequired | string | Price in the contract quote asset. |
bids[].quantityRequired | string | Absolute resting quantity in the contract base unit. Zero removes a level in a delta. |
asksRequired | array | Asks, lowest price first. |
asks[].priceRequired | string | Price in the contract quote asset. |
asks[].quantityRequired | string | Absolute resting quantity in the contract base unit. Zero removes a level in a delta. |
updated_atRequired | string | UTC 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
Read bid, ask, last, mark, and index prices for a specific exchange contract.
| Name | Location | Rule |
|---|---|---|
instrumentRequired | path | Identifier of the resource to read or change. |
venueRequired | query | Exchange identifier. |
settlement_assetRequired | query | Filter contracts by settlement asset. |
Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: market:read. Authentication Guide →
import { request } from './rest-client.mjs';
const result = await request(
'GET',
'/v1/markets/BTC-PERP/ticker?venue=hyperliquid&settlement_asset=USDC'
);
console.log(result);{
"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
| Field | Type | Description |
|---|---|---|
instrumentRequired | string | Normalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract. |
venueRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
settlement_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
bidRequired | string | Best bid price. |
askRequired | string | Best ask price. |
lastRequired | string | Last traded price. |
mark_priceRequired | string | Exchange mark price used for risk calculations. |
index_priceRequired | string | Exchange index price. |
updated_atRequired | string | UTC 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
Read public executions in ascending executed_at order. Pair venue with trade_id when deduplicating.
| Name | Location | Rule |
|---|---|---|
instrumentRequired | path | Identifier of the resource to read or change. |
venueRequired | query | Exchange identifier. |
settlement_assetRequired | query | Filter contracts by settlement asset. |
start_timeOptional | query | Inclusive UTC start; default 24 hours before end_time. |
end_timeOptional | query | Exclusive UTC end; default request time. |
limitOptional | query | Page size, default 50; maximum 200. |
cursorOptional | query | Opaque 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 →
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);{
"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
| Field | Type | Description |
|---|---|---|
tradesRequired | array | Results on this page. |
trades[].trade_idRequired | string | Exchange trade identifier; deduplicate with venue. |
trades[].instrumentRequired | string | Normalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract. |
trades[].venueRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
trades[].settlement_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
trades[].sideRequired | string | Aggressor side. Values: buy, sell. |
trades[].priceRequired | string | Execution price in the contract quote asset. |
trades[].quantityRequired | string | Base quantity executed. |
trades[].executed_atRequired | string | UTC timestamp in RFC 3339 format. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True when another page is available. |
Errors use the shared error envelope. Follow pagination and retry rules when recovering results.
GET/v1/venuesList Exchanges
List all centralized and decentralized exchanges shown in the Trade8 integration directory, with their IDs and official websites.
| Name | Location | Rule |
|---|---|---|
typeOptional | query | Exchange category. |
limitOptional | query | Page size, default 50; maximum 200. |
cursorOptional | query | Opaque next_cursor from the preceding response. |
import { request } from './rest-client.mjs';
const result = await request(
'GET',
'/v1/venues?limit=50'
);
console.log(result);curl --fail-with-body 'https://api.trade8.xyz/v1/venues?limit=50'{
"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
| Field | Type | Description |
|---|---|---|
venuesRequired | array | Exchanges on this page. |
venues[].idRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
venues[].nameRequired | string | Exchange display name. |
venues[].typeRequired | string | Exchange category. Values: centralized, decentralized. |
venues[].websiteRequired | string | Official exchange website. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True when another page is available. |
Errors use the shared error envelope. Follow pagination and retry rules when recovering results.
GET/v1/fundingRead Funding Rates
Compare rates with their settlement interval. The Binance example is an eight-hour indicative rate; other exchanges can use different intervals.
| Name | Location | Rule |
|---|---|---|
instrumentRequired | query | Normalized perpetual family. |
venueOptional | query | Exchange identifier. |
settlement_assetOptional | query | Filter contracts by settlement asset. |
limitOptional | query | Page size, default 50; maximum 200. |
cursorOptional | query | Opaque 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 →
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);{
"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
| Field | Type | Description |
|---|---|---|
fundingRequired | array | Results on this page. |
funding[].instrumentRequired | string | Normalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract. |
funding[].venueRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
funding[].settlement_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
funding[].rateRequired | string | Decimal funding rate for the stated interval: 0.0001 = 0.01%. |
funding[].interval_hoursRequired | string | Hours covered by this rate. |
funding[].next_funding_atRequired | string | UTC timestamp in RFC 3339 format. |
funding[].typeRequired | string | Indicative rates can change before settlement. Values: indicative, final. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True when another page is available. |
Errors use the shared error envelope. Follow pagination and retry rules when recovering results.
GET/v1/accountsList Trading Accounts
Read main accounts and subaccounts available to this key, including enabled exchanges.
| Name | Location | Rule |
|---|---|---|
limitOptional | query | Page size, default 50; maximum 200. |
cursorOptional | query | Opaque 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 →
import { request } from './rest-client.mjs';
const result = await request(
'GET',
'/v1/accounts?limit=50'
);
console.log(result);{
"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
| Field | Type | Description |
|---|---|---|
accountsRequired | array | Results on this page. |
accounts[].account_idRequired | string | Trading account identifier within the authorized account grant. |
accounts[].nameRequired | string | Account display name. |
accounts[].typeRequired | string | Account hierarchy role. Values: main, subaccount. |
accounts[].statusRequired | string | Account access state. Values: active, read_only, suspended. |
accounts[].reporting_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
accounts[].enabled_venuesRequired | array | Exchanges enabled for this account. |
accounts[].created_atRequired | string | UTC timestamp in RFC 3339 format. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True 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
Read each asset separately. Custody balances and collateral allocations appear in the Custody and Settlement endpoints.
| Name | Location | Rule |
|---|---|---|
account_idRequired | query | Authorized trading account. |
Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: accounts:read. Authentication Guide →
import { request } from './rest-client.mjs';
const result = await request(
'GET',
'/v1/account/balances?account_id=acct_example_main'
);
console.log(result);{
"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
| Field | Type | Description |
|---|---|---|
balancesRequired | array | Ledger balances by asset. |
balances[].account_idRequired | string | Trading account identifier within the authorized account grant. |
balances[].assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
balances[].totalRequired | string | Ledger balance in this asset, excluding unrealized P&L. |
balances[].availableRequired | string | Uncommitted ledger balance. |
balances[].committedRequired | string | Amount allocated or reserved. available + committed = total. |
balances[].updated_atRequired | string | UTC 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
Read account-specific maker, taker, and Trade8 charges by contract. Example rates illustrate the response structure.
| Name | Location | Rule |
|---|---|---|
account_idRequired | query | Authorized trading account. |
instrumentOptional | query | Normalized perpetual family. |
venueOptional | query | Exchange identifier. |
settlement_assetOptional | query | Filter contracts by settlement asset. |
limitOptional | query | Page size, default 50; maximum 200. |
cursorOptional | query | Opaque 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 →
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);{
"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
| Field | Type | Description |
|---|---|---|
feesRequired | array | Results on this page. |
fees[].venueRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
fees[].instrumentRequired | string | Normalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract. |
fees[].settlement_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
fees[].maker_rateRequired | string | Decimal maker fee rate. Negative values indicate rebates. |
fees[].taker_rateRequired | string | Decimal taker fee rate. |
fees[].trade8_rateRequired | string | Additional Trade8 trading charge as a decimal rate. |
fees[].effective_atRequired | string | UTC timestamp in RFC 3339 format. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True 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
Read REST, order, and WebSocket budgets. Capacity depends on the account configuration; these numbers are examples.
| Name | Location | Rule |
|---|---|---|
account_idRequired | query | Authorized trading account. |
Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: accounts:read. Authentication Guide →
import { request } from './rest-client.mjs';
const result = await request(
'GET',
'/v1/account/limits?account_id=acct_example_main'
);
console.log(result);{
"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
| Field | Type | Description |
|---|---|---|
account_idRequired | string | Trading account identifier within the authorized account grant. |
rest_requests_per_secondRequired | integer | Account REST request budget. |
order_requests_per_secondRequired | integer | Shared budget for order mutations. |
websocket_connectionsRequired | integer | Concurrent authenticated connection limit. |
subscriptions_per_connectionRequired | integer | Channel subscriptions allowed on each connection. |
batch_order_limitRequired | integer | Maximum orders in one batch. |
effective_atRequired | string | UTC 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
Read key metadata, account grants, IP restrictions, and expiry. Secret material is supplied only during key provisioning.
| Name | Location | Rule |
|---|---|---|
account_idRequired | query | Authorized trading account. |
limitOptional | query | Page size, default 50; maximum 200. |
cursorOptional | query | Opaque 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 →
import { request } from './rest-client.mjs';
const result = await request(
'GET',
'/v1/api-keys?account_id=acct_example_main&limit=50'
);
console.log(result);{
"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
| Field | Type | Description |
|---|---|---|
keysRequired | array | Results on this page. |
keys[].key_idRequired | string | Public key identifier; the secret is never returned by this endpoint. |
keys[].labelRequired | string | Key display label. |
keys[].scopesRequired | array | Granted scopes. |
keys[].account_idsRequired | array | Accounts the key may access. |
keys[].ip_allowlistRequired | array | Permitted source IP ranges. |
keys[].statusRequired | string | Key status. Values: active, revoked, expired. |
keys[].expires_atRequired | string | UTC timestamp in RFC 3339 format. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True when another page is available. |
Errors use the shared error envelope. Follow pagination and retry rules when recovering results.
POST/v1/ordersCreate an Order
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.
| Name | Location | Rule |
|---|---|---|
Idempotency-KeyRequired | header | Unique 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 →
| Field | Type | Description |
|---|---|---|
account_idRequired | string | Trading account identifier within the authorized account grant. |
client_order_idRequired | string | Unique client identifier within the account. Retain it for reconciliation. |
instrumentRequired | string | Normalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract. |
settlement_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
sideRequired | string | Trade direction. Values: buy, sell. |
typeRequired | string | Order type. Values: market, limit, stop_market, stop_limit, take_profit_market, take_profit_limit. |
quantityRequired | string | Order size in the market base unit. |
limit_price | string | Required for limit, stop_limit, and take_profit_limit. |
trigger_price | string | Required for stop and take-profit orders. |
trigger_source | string | Price used by a conditional order. Values: mark, last, index. |
trigger_venue | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
time_in_force | string | Limit orders: GTC, IOC, or FOK. Market orders: IOC. Default GTC for limit variants and IOC for market variants. Values: GTC, IOC, FOK. |
post_only | boolean | Default false. Supported on ordinary GTC limit orders; crossing orders are rejected. |
reduce_only | boolean | Default false. Restricts fills to reducing the current exchange position. |
routingRequired | string | Auto chooses eligible exchanges; direct requires exactly one allowed exchange. Values: auto, direct. |
venue_policy | object | |
venue_policy.allowed | array | Only these exchanges may receive child orders. |
venue_policy.excluded | array | Exchanges excluded from routing; must be disjoint from allowed. |
venue_policy.max_slippage_bps | string | Maximum market-order slippage from the consolidated best price at acceptance, in basis points. Execution stops at this boundary. |
self_trade_prevention | string | Action when orders from the same account would match. Default cancel_newest. Values: cancel_newest, cancel_oldest, cancel_both. |
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);{
"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
| Field | Type | Description |
|---|---|---|
order_idRequired | string | Trade8 parent order identifier. |
account_idRequired | string | Trading account identifier within the authorized account grant. |
client_order_idRequired | string | Unique client identifier within the account. Retain it for reconciliation. |
instrumentRequired | string | Normalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract. |
settlement_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
sideRequired | string | Direction. Values: buy, sell. |
typeRequired | string | Order type. |
statusRequired | string | Current order lifecycle state. Values: pending, accepted, trigger_pending, partially_filled, filled, cancelled, rejected, expired. |
requested_quantityRequired | string | Total requested base quantity. |
filled_quantityRequired | string | Cumulative executed base quantity. |
remaining_quantityRequired | string | Quantity still open or awaiting execution. Zero after a terminal state. |
cancelled_quantityRequired | string | Quantity cancelled, rejected, or expired without a fill. |
average_fill_priceRequired | string | null | Quantity-weighted price of actual fills; null before the first fill. |
revisionRequired | integer | Monotonic order revision. Use for optimistic concurrency and event reconciliation. |
created_atRequired | string | UTC timestamp in RFC 3339 format. |
updated_atRequired | string | UTC timestamp in RFC 3339 format. |
Errors use the shared error envelope. Follow pagination and retry rules when recovering results.
GET/v1/ordersList Orders
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.
| Name | Location | Rule |
|---|---|---|
account_idRequired | query | Authorized trading account. |
instrumentOptional | query | Normalized perpetual family. |
statusOptional | query | Open, terminal, or any. Default open. |
start_timeOptional | query | Inclusive UTC start; default 24 hours before end_time. |
end_timeOptional | query | Exclusive UTC end; default request time. |
limitOptional | query | Page size, default 50; maximum 200. |
cursorOptional | query | Opaque 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 →
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);{
"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
| Field | Type | Description |
|---|---|---|
ordersRequired | array | Results on this page. |
orders[].order_idRequired | string | Trade8 parent order identifier. |
orders[].account_idRequired | string | Trading account identifier within the authorized account grant. |
orders[].client_order_idRequired | string | Unique client identifier within the account. Retain it for reconciliation. |
orders[].instrumentRequired | string | Normalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract. |
orders[].settlement_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
orders[].sideRequired | string | Direction. Values: buy, sell. |
orders[].typeRequired | string | Order type. |
orders[].statusRequired | string | Current order lifecycle state. Values: pending, accepted, trigger_pending, partially_filled, filled, cancelled, rejected, expired. |
orders[].requested_quantityRequired | string | Total requested base quantity. |
orders[].filled_quantityRequired | string | Cumulative executed base quantity. |
orders[].remaining_quantityRequired | string | Quantity still open or awaiting execution. Zero after a terminal state. |
orders[].cancelled_quantityRequired | string | Quantity cancelled, rejected, or expired without a fill. |
orders[].average_fill_priceRequired | string | null | Quantity-weighted price of actual fills; null before the first fill. |
orders[].revisionRequired | integer | Monotonic order revision. Use for optimistic concurrency and event reconciliation. |
orders[].created_atRequired | string | UTC timestamp in RFC 3339 format. |
orders[].updated_atRequired | string | UTC timestamp in RFC 3339 format. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True 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
Reconcile lifecycle state and cumulative quantities. Compare revision before applying an older REST result over a streamed update.
| Name | Location | Rule |
|---|---|---|
order_idRequired | path | Identifier of the resource to read or change. |
account_idRequired | query | Authorized trading account. |
Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: orders:read. Authentication Guide →
import { request } from './rest-client.mjs';
const result = await request(
'GET',
'/v1/orders/ord_example_01?account_id=acct_example_main'
);
console.log(result);{
"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
| Field | Type | Description |
|---|---|---|
order_idRequired | string | Trade8 parent order identifier. |
account_idRequired | string | Trading account identifier within the authorized account grant. |
client_order_idRequired | string | Unique client identifier within the account. Retain it for reconciliation. |
instrumentRequired | string | Normalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract. |
settlement_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
sideRequired | string | Direction. Values: buy, sell. |
typeRequired | string | Order type. |
statusRequired | string | Current order lifecycle state. Values: pending, accepted, trigger_pending, partially_filled, filled, cancelled, rejected, expired. |
requested_quantityRequired | string | Total requested base quantity. |
filled_quantityRequired | string | Cumulative executed base quantity. |
remaining_quantityRequired | string | Quantity still open or awaiting execution. Zero after a terminal state. |
cancelled_quantityRequired | string | Quantity cancelled, rejected, or expired without a fill. |
average_fill_priceRequired | string | null | Quantity-weighted price of actual fills; null before the first fill. |
revisionRequired | integer | Monotonic order revision. Use for optimistic concurrency and event reconciliation. |
created_atRequired | string | UTC timestamp in RFC 3339 format. |
updated_atRequired | string | UTC 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
Find the existing order after a timeout or lost acknowledgement using the identifier you saved before submission.
| Name | Location | Rule |
|---|---|---|
client_order_idRequired | path | Identifier of the resource to read or change. |
account_idRequired | query | Authorized trading account. |
Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: orders:read. Authentication Guide →
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);{
"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
| Field | Type | Description |
|---|---|---|
order_idRequired | string | Trade8 parent order identifier. |
account_idRequired | string | Trading account identifier within the authorized account grant. |
client_order_idRequired | string | Unique client identifier within the account. Retain it for reconciliation. |
instrumentRequired | string | Normalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract. |
settlement_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
sideRequired | string | Direction. Values: buy, sell. |
typeRequired | string | Order type. |
statusRequired | string | Current order lifecycle state. Values: pending, accepted, trigger_pending, partially_filled, filled, cancelled, rejected, expired. |
requested_quantityRequired | string | Total requested base quantity. |
filled_quantityRequired | string | Cumulative executed base quantity. |
remaining_quantityRequired | string | Quantity still open or awaiting execution. Zero after a terminal state. |
cancelled_quantityRequired | string | Quantity cancelled, rejected, or expired without a fill. |
average_fill_priceRequired | string | null | Quantity-weighted price of actual fills; null before the first fill. |
revisionRequired | integer | Monotonic order revision. Use for optimistic concurrency and event reconciliation. |
created_atRequired | string | UTC timestamp in RFC 3339 format. |
updated_atRequired | string | UTC 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
Request cancellation of the open remainder across its child orders. Track the final quantities through the orders channel or order lookup.
| Name | Location | Rule |
|---|---|---|
order_idRequired | path | Identifier of the resource to read or change. |
account_idRequired | query | Authorized trading account. |
Idempotency-KeyRequired | header | Unique 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 →
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);{
"order_id": "ord_example_01",
"cancellation_status": "pending",
"requested_at": "2026-08-31T12:00:00.000Z"
}Response Fields
| Field | Type | Description |
|---|---|---|
order_idRequired | string | Parent identifier. |
cancellation_statusRequired | string | Follow the order stream or order lookup for the final quantities. Values: pending, completed. |
requested_atRequired | string | UTC 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
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.
| Name | Location | Rule |
|---|---|---|
order_idRequired | path | Identifier of the resource to read or change. |
Idempotency-KeyRequired | header | Unique 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 →
| Field | Type | Description |
|---|---|---|
account_idRequired | string | Authorized account. |
expected_revisionRequired | integer | Last observed revision. |
quantity | string | New total size, including fills. Must be at least the filled quantity. |
limit_price | string | New limit price. |
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);{
"order_id": "ord_example_01",
"amendment_id": "amend_example_01",
"status": "pending"
}Response Fields
| Field | Type | Description |
|---|---|---|
order_idRequired | string | Parent order. |
amendment_idRequired | string | Amendment request ID. |
statusRequired | string | Reconcile 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
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.
| Name | Location | Rule |
|---|---|---|
order_idRequired | path | Identifier of the resource to read or change. |
account_idRequired | query | Authorized trading account. |
limitOptional | query | Page size, default 50; maximum 200. |
cursorOptional | query | Opaque 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 →
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);{
"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
| Field | Type | Description |
|---|---|---|
fillsRequired | array | Results on this page. |
fills[].fill_idRequired | string | Unique Trade8 fill identifier. |
fills[].order_idRequired | string | Parent order identifier. |
fills[].account_idRequired | string | Trading account identifier within the authorized account grant. |
fills[].instrumentRequired | string | Normalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract. |
fills[].venueRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
fills[].venue_order_idRequired | string | Native exchange order identifier. |
fills[].settlement_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
fills[].quantityRequired | string | Executed base quantity. |
fills[].priceRequired | string | Execution price in the quote asset. |
fills[].feeRequired | string | Trading charge for this fill; negative indicates a rebate. |
fills[].fee_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
fills[].liquidityRequired | string | Liquidity role at execution. Values: maker, taker. |
fills[].executed_atRequired | string | UTC timestamp in RFC 3339 format. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True when another page is available. |
Errors use the shared error envelope. Follow pagination and retry rules when recovering results.
GET/v1/fillsRead Account Fills
Recover executions across all orders in ascending executed_at order. Deduplicate on fill_id.
| Name | Location | Rule |
|---|---|---|
account_idRequired | query | Authorized trading account. |
instrumentOptional | query | Normalized perpetual family. |
venueOptional | query | Exchange identifier. |
start_timeOptional | query | Inclusive UTC start; default 24 hours before end_time. |
end_timeOptional | query | Exclusive UTC end; default request time. |
limitOptional | query | Page size, default 50; maximum 200. |
cursorOptional | query | Opaque 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 →
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);{
"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
| Field | Type | Description |
|---|---|---|
fillsRequired | array | Results on this page. |
fills[].fill_idRequired | string | Unique Trade8 fill identifier. |
fills[].order_idRequired | string | Parent order identifier. |
fills[].account_idRequired | string | Trading account identifier within the authorized account grant. |
fills[].instrumentRequired | string | Normalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract. |
fills[].venueRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
fills[].venue_order_idRequired | string | Native exchange order identifier. |
fills[].settlement_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
fills[].quantityRequired | string | Executed base quantity. |
fills[].priceRequired | string | Execution price in the quote asset. |
fills[].feeRequired | string | Trading charge for this fill; negative indicates a rebate. |
fills[].fee_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
fills[].liquidityRequired | string | Liquidity role at execution. Values: maker, taker. |
fills[].executed_atRequired | string | UTC timestamp in RFC 3339 format. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True 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
Follow the Binance and Bybit child orders behind one parent. Each child carries its native exchange order ID.
| Name | Location | Rule |
|---|---|---|
order_idRequired | path | Identifier of the resource to read or change. |
account_idRequired | query | Authorized trading account. |
limitOptional | query | Page size, default 50; maximum 200. |
cursorOptional | query | Opaque 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 →
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);{
"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
| Field | Type | Description |
|---|---|---|
childrenRequired | array | Results on this page. |
children[].child_order_idRequired | string | Trade8 child identifier. |
children[].order_idRequired | string | Parent identifier. |
children[].venueRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
children[].venue_order_idRequired | string | Exchange order identifier. |
children[].quantityRequired | string | Base quantity routed to this exchange. |
children[].filled_quantityRequired | string | Cumulative executed base quantity. |
children[].statusRequired | string | Child lifecycle state. |
children[].updated_atRequired | string | UTC timestamp in RFC 3339 format. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True 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
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.
| Name | Location | Rule |
|---|---|---|
Idempotency-KeyRequired | header | Unique 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 →
| Field | Type | Description |
|---|---|---|
account_idRequired | string | Account shared by all items. |
ordersRequired | array | Items must use the same account_id as the envelope. |
orders[].account_idRequired | string | Trading account identifier within the authorized account grant. |
orders[].client_order_idRequired | string | Unique client identifier within the account. Retain it for reconciliation. |
orders[].instrumentRequired | string | Normalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract. |
orders[].settlement_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
orders[].sideRequired | string | Trade direction. Values: buy, sell. |
orders[].typeRequired | string | Order type. Values: market, limit, stop_market, stop_limit, take_profit_market, take_profit_limit. |
orders[].quantityRequired | string | Order size in the market base unit. |
orders[].limit_price | string | Required for limit, stop_limit, and take_profit_limit. |
orders[].trigger_price | string | Required for stop and take-profit orders. |
orders[].trigger_source | string | Price used by a conditional order. Values: mark, last, index. |
orders[].trigger_venue | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
orders[].time_in_force | string | Limit orders: GTC, IOC, or FOK. Market orders: IOC. Default GTC for limit variants and IOC for market variants. Values: GTC, IOC, FOK. |
orders[].post_only | boolean | Default false. Supported on ordinary GTC limit orders; crossing orders are rejected. |
orders[].reduce_only | boolean | Default false. Restricts fills to reducing the current exchange position. |
orders[].routingRequired | string | Auto chooses eligible exchanges; direct requires exactly one allowed exchange. Values: auto, direct. |
orders[].venue_policy | object | |
orders[].venue_policy.allowed | array | Only these exchanges may receive child orders. |
orders[].venue_policy.excluded | array | Exchanges excluded from routing; must be disjoint from allowed. |
orders[].venue_policy.max_slippage_bps | string | Maximum market-order slippage from the consolidated best price at acceptance, in basis points. Execution stops at this boundary. |
orders[].self_trade_prevention | string | Action when orders from the same account would match. Default cancel_newest. Values: cancel_newest, cancel_oldest, cancel_both. |
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);{
"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
| Field | Type | Description |
|---|---|---|
resultsRequired | array | One 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
Request cancellation for the account, optionally narrowed to an instrument. A returned order_id lets you track every cancellation.
| Name | Location | Rule |
|---|---|---|
Idempotency-KeyRequired | header | Unique 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 →
| Field | Type | Description |
|---|---|---|
account_idRequired | string | Account to cancel. |
instrument | string | Optional instrument filter. |
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);{
"cancellations": [
{
"order_id": "ord_example_01",
"cancellation_status": "pending",
"requested_at": "2026-08-31T12:00:00.000Z"
}
]
}Response Fields
| Field | Type | Description |
|---|---|---|
cancellationsRequired | array | Cancellation requests for matching open orders. |
cancellations[].order_idRequired | string | Parent identifier. |
cancellations[].cancellation_statusRequired | string | Follow the order stream or order lookup for the final quantities. Values: pending, completed. |
cancellations[].requested_atRequired | string | UTC 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
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.
| Name | Location | Rule |
|---|---|---|
Idempotency-KeyRequired | header | Unique 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 →
| Field | Type | Description |
|---|---|---|
account_idRequired | string | Account whose orders are protected. |
timeout_secondsRequired | integer | 0 disables the timer; otherwise 10–120 seconds. Values: 0, 10, 20, 30, 60, 90, 120. |
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);{
"account_id": "acct_example_mm",
"armed": true,
"expires_at": "2026-08-31T12:01:00.000Z"
}Response Fields
| Field | Type | Description |
|---|---|---|
account_idRequired | string | Protected account. |
armedRequired | boolean | Whether the timer is active. |
expires_atRequired | string | null | Expiry time; null when disabled. |
Errors use the shared error envelope. Follow pagination and retry rules when recovering results.
GET/v1/positionsRead Open Positions
Read exposure, margin mode, leverage, P&L, and liquidation estimates separately for each exchange contract.
| Name | Location | Rule |
|---|---|---|
account_idRequired | query | Authorized trading account. |
instrumentOptional | query | Normalized perpetual family. |
venueOptional | query | Exchange identifier. |
limitOptional | query | Page size, default 50; maximum 200. |
cursorOptional | query | Opaque 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 →
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);{
"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
| Field | Type | Description |
|---|---|---|
positionsRequired | array | Results on this page. |
positions[].position_idRequired | string | Position identifier. |
positions[].account_idRequired | string | Trading account identifier within the authorized account grant. |
positions[].instrumentRequired | string | Normalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract. |
positions[].venueRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
positions[].settlement_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
positions[].sideRequired | string | Position direction. Values: long, short. |
positions[].quantityRequired | string | Absolute base quantity; zero marks a closed position update. |
positions[].entry_priceRequired | string | Quantity-weighted entry price. |
positions[].mark_priceRequired | string | Current exchange mark price. |
positions[].unrealized_pnlRequired | string | Unrealized P&L in the settlement asset. |
positions[].liquidation_priceRequired | string | null | Estimated exchange liquidation price, or null when unavailable. |
positions[].leverageRequired | string | Configured leverage multiplier. |
positions[].margin_modeRequired | string | Exchange margin mode. Values: cross, isolated. |
positions[].updated_atRequired | string | UTC timestamp in RFC 3339 format. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True 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
Inspect cross or isolated margin and configured leverage by exchange and instrument.
| Name | Location | Rule |
|---|---|---|
account_idRequired | query | Authorized trading account. |
instrumentOptional | query | Normalized perpetual family. |
venueOptional | query | Exchange identifier. |
settlement_assetOptional | query | Filter contracts by settlement asset. |
limitOptional | query | Page size, default 50; maximum 200. |
cursorOptional | query | Opaque 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 →
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);{
"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
| Field | Type | Description |
|---|---|---|
settingsRequired | array | Results on this page. |
settings[].account_idRequired | string | Trading account identifier within the authorized account grant. |
settings[].instrumentRequired | string | Normalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract. |
settings[].venueRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
settings[].settlement_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
settings[].margin_modeRequired | string | Cross shares eligible collateral within this exchange account; isolated reserves it for the position. Values: cross, isolated. |
settings[].leverageRequired | string | Requested leverage multiplier; validated against exchange and account risk tiers. |
settings[].updated_atRequired | string | UTC timestamp in RFC 3339 format. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True 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
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.
| Name | Location | Rule |
|---|---|---|
Idempotency-KeyRequired | header | Unique 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 →
| Field | Type | Description |
|---|---|---|
account_idRequired | string | Authorized account. |
instrumentRequired | string | Normalized family. |
venueRequired | string | Exchange ID. |
settlement_assetRequired | string | Contract settlement asset. |
margin_modeRequired | string | Margin mode. Values: cross, isolated. |
leverageRequired | string | Leverage multiplier. |
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);{
"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
| Field | Type | Description |
|---|---|---|
account_idRequired | string | Trading account identifier within the authorized account grant. |
instrumentRequired | string | Normalized perpetual family, for example BTC-PERP. Select a settlement asset and exchange to identify a contract. |
venueRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
settlement_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
margin_modeRequired | string | Cross shares eligible collateral within this exchange account; isolated reserves it for the position. Values: cross, isolated. |
leverageRequired | string | Requested leverage multiplier; validated against exchange and account risk tiers. |
updated_atRequired | string | UTC 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
Read exchange-level equity, margin requirements, and available capacity. Compare assets within their own settlement denomination.
| Name | Location | Rule |
|---|---|---|
account_idRequired | query | Authorized trading account. |
venueOptional | query | Exchange identifier. |
Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: accounts:read. Authentication Guide →
import { request } from './rest-client.mjs';
const result = await request(
'GET',
'/v1/account/risk?account_id=acct_example_main&venue=binance'
);
console.log(result);{
"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
| Field | Type | Description |
|---|---|---|
riskRequired | array | Risk by exchange and settlement asset. |
risk[].account_idRequired | string | Trading account identifier within the authorized account grant. |
risk[].venueRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
risk[].settlement_assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
risk[].equityRequired | string | Equity in settlement_asset, including unrealized P&L. |
risk[].initial_marginRequired | string | Initial margin requirement. |
risk[].maintenance_marginRequired | string | Maintenance margin requirement. |
risk[].available_marginRequired | string | Margin available for new positions after reservations. |
risk[].margin_ratioRequired | string | Maintenance margin / equity. Rising values indicate less headroom. |
risk[].stateRequired | string | Exchange risk state. Values: normal, warning, reduce_only, liquidating. |
risk[].updated_atRequired | string | UTC timestamp in RFC 3339 format. |
Errors use the shared error envelope. Follow pagination and retry rules when recovering results.
GET/v1/custodiansList Custody Integrations
Read custody providers such as Ceffu, Copper, Coinbase Custody, BitGo, Komainu, and Zodia Custody. Linked custody accounts supply the eligible exchange routes.
| Name | Location | Rule |
|---|---|---|
account_idRequired | query | Authorized trading account. |
limitOptional | query | Page size, default 50; maximum 200. |
cursorOptional | query | Opaque 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 →
import { request } from './rest-client.mjs';
const result = await request(
'GET',
'/v1/custodians?account_id=acct_example_main&limit=50'
);
console.log(result);{
"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
| Field | Type | Description |
|---|---|---|
custodiansRequired | array | Results on this page. |
custodians[].idRequired | string | Custodian identifier from the integration catalog. |
custodians[].nameRequired | string | Custodian display name. |
custodians[].servicesRequired | array | Services enabled for this integration. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True 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
Read linked balances and eligible allocation destinations. This example includes a Ceffu account for Binance and a Copper account for OKX and Bybit.
| Name | Location | Rule |
|---|---|---|
account_idRequired | query | Authorized trading account. |
limitOptional | query | Page size, default 50; maximum 200. |
cursorOptional | query | Opaque 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 →
import { request } from './rest-client.mjs';
const result = await request(
'GET',
'/v1/custody/accounts?account_id=acct_example_main&limit=50'
);
console.log(result);{
"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
| Field | Type | Description |
|---|---|---|
custody_accountsRequired | array | Results on this page. |
custody_accounts[].custody_account_idRequired | string | Linked custody account identifier. |
custody_accounts[].account_idRequired | string | Trading account identifier within the authorized account grant. |
custody_accounts[].custodianRequired | string | Custodian identifier, such as ceffu, copper, bitgo, or coinbase. |
custody_accounts[].assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
custody_accounts[].balanceRequired | string | Custody ledger balance in this asset. |
custody_accounts[].allocatedRequired | string | Amount committed to exchange collateral. |
custody_accounts[].availableRequired | string | Unallocated custody balance. |
custody_accounts[].eligible_venuesRequired | array | Exchanges enabled for off-exchange allocation from this custody account. |
custody_accounts[].updated_atRequired | string | UTC timestamp in RFC 3339 format. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True 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
Track custody collateral committed to each exchange and its acknowledgement state.
| Name | Location | Rule |
|---|---|---|
account_idRequired | query | Authorized trading account. |
venueOptional | query | Exchange identifier. |
limitOptional | query | Page size, default 50; maximum 200. |
cursorOptional | query | Opaque 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 →
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);{
"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
| Field | Type | Description |
|---|---|---|
allocationsRequired | array | Results on this page. |
allocations[].allocation_idRequired | string | Collateral allocation identifier. |
allocations[].account_idRequired | string | Trading account identifier within the authorized account grant. |
allocations[].client_allocation_idRequired | string | Unique client identifier within the account. Retain it for reconciliation. |
allocations[].custody_account_idRequired | string | Source custody account. |
allocations[].custodianRequired | string | Custodian identifier. |
allocations[].venueRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
allocations[].assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
allocations[].amountRequired | string | Amount in asset units. |
allocations[].statusRequired | string | Active means the exchange has acknowledged usable collateral. Values: pending, active, releasing, released, rejected. |
allocations[].updated_atRequired | string | UTC timestamp in RFC 3339 format. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True 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
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.
| Name | Location | Rule |
|---|---|---|
Idempotency-KeyRequired | header | Unique 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 →
| Field | Type | Description |
|---|---|---|
account_idRequired | string | Authorized account. |
client_allocation_idRequired | string | Unique client allocation ID. |
custody_account_idRequired | string | Linked source custody account. |
venueRequired | string | Exchange in eligible_venues. |
assetRequired | string | Collateral asset. |
amountRequired | string | Amount in asset units. |
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);{
"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
| Field | Type | Description |
|---|---|---|
allocation_idRequired | string | Collateral allocation identifier. |
account_idRequired | string | Trading account identifier within the authorized account grant. |
client_allocation_idRequired | string | Unique client identifier within the account. Retain it for reconciliation. |
custody_account_idRequired | string | Source custody account. |
custodianRequired | string | Custodian identifier. |
venueRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
amountRequired | string | Amount in asset units. |
statusRequired | string | Active means the exchange has acknowledged usable collateral. Values: pending, active, releasing, released, rejected. |
updated_atRequired | string | UTC 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
Follow a collateral request until the exchange acknowledgement makes it active or the request is rejected.
| Name | Location | Rule |
|---|---|---|
allocation_idRequired | path | Identifier of the resource to read or change. |
account_idRequired | query | Authorized trading account. |
Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: custody:read. Authentication Guide →
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);{
"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
| Field | Type | Description |
|---|---|---|
allocation_idRequired | string | Collateral allocation identifier. |
account_idRequired | string | Trading account identifier within the authorized account grant. |
client_allocation_idRequired | string | Unique client identifier within the account. Retain it for reconciliation. |
custody_account_idRequired | string | Source custody account. |
custodianRequired | string | Custodian identifier. |
venueRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
amountRequired | string | Amount in asset units. |
statusRequired | string | Active means the exchange has acknowledged usable collateral. Values: pending, active, releasing, released, rejected. |
updated_atRequired | string | UTC timestamp in RFC 3339 format. |
Errors use the shared error envelope. Follow pagination and retry rules when recovering results.
GET/v1/settlementsRead Settlement Records
Reconcile custody and exchange settlement cycles. The Copper/OKX example credits 125.50 USDT to custody.
| Name | Location | Rule |
|---|---|---|
account_idRequired | query | Authorized trading account. |
venueOptional | query | Exchange identifier. |
start_timeOptional | query | Inclusive UTC start; default 24 hours before end_time. |
end_timeOptional | query | Exclusive UTC end; default request time. |
limitOptional | query | Page size, default 50; maximum 200. |
cursorOptional | query | Opaque 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 →
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);{
"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
| Field | Type | Description |
|---|---|---|
settlementsRequired | array | Results on this page. |
settlements[].settlement_idRequired | string | Settlement record identifier. |
settlements[].account_idRequired | string | Trading account identifier within the authorized account grant. |
settlements[].custodianRequired | string | Custodian identifier. |
settlements[].venueRequired | string | Exchange identifier from GET /v1/venues, such as binance, okx, bybit, hyperliquid, or dydx. |
settlements[].assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
settlements[].amountRequired | string | Positive credits the custody account; negative debits it. |
settlements[].statusRequired | string | Settlement processing state. Values: pending, processing, completed, failed. |
settlements[].cycle_startRequired | string | UTC timestamp in RFC 3339 format. |
settlements[].cycle_endRequired | string | UTC timestamp in RFC 3339 format. |
settlements[].updated_atRequired | string | UTC timestamp in RFC 3339 format. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True when another page is available. |
Errors use the shared error envelope. Follow pagination and retry rules when recovering results.
GET/v1/depositsTrack Deposits
Follow Bitcoin or stablecoin deposits through confirmations, review, and ledger credit. The example shows a USDC deposit on Ethereum.
| Name | Location | Rule |
|---|---|---|
account_idRequired | query | Authorized trading account. |
start_timeOptional | query | Inclusive UTC start; default 24 hours before end_time. |
end_timeOptional | query | Exclusive UTC end; default request time. |
limitOptional | query | Page size, default 50; maximum 200. |
cursorOptional | query | Opaque 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 →
import { request } from './rest-client.mjs';
const result = await request(
'GET',
'/v1/deposits?account_id=acct_example_main&limit=50'
);
console.log(result);{
"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
| Field | Type | Description |
|---|---|---|
depositsRequired | array | Results on this page. |
deposits[].deposit_idRequired | string | Deposit identifier. |
deposits[].account_idRequired | string | Trading account identifier within the authorized account grant. |
deposits[].assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
deposits[].networkRequired | string | Blockchain network identifier, such as ethereum or bitcoin. |
deposits[].amountRequired | string | Received amount in asset units. |
deposits[].confirmationsRequired | integer | Observed confirmations. |
deposits[].required_confirmationsRequired | integer | Confirmation threshold for this deposit. |
deposits[].statusRequired | string | Credited means the amount is included in the ledger balance. Values: detected, confirming, review, credited, rejected. |
deposits[].updated_atRequired | string | UTC timestamp in RFC 3339 format. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True when another page is available. |
Errors use the shared error envelope. Follow pagination and retry rules when recovering results.
POST/v1/transfersTransfer Between Subaccounts
Move available ledger balance between accounts controlled by the same organization. The key needs access to both accounts.
| Name | Location | Rule |
|---|---|---|
Idempotency-KeyRequired | header | Unique 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 →
| Field | Type | Description |
|---|---|---|
client_transfer_idRequired | string | Unique identifier within the source account. |
from_account_idRequired | string | Source account; also scopes the idempotency key. |
to_account_idRequired | string | Destination account in the same organization. |
assetRequired | string | Asset to move. |
amountRequired | string | Amount in asset units. |
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);{
"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
| Field | Type | Description |
|---|---|---|
transfer_idRequired | string | Internal transfer identifier. |
client_transfer_idRequired | string | Unique client identifier within the account. Retain it for reconciliation. |
from_account_idRequired | string | Trading account identifier within the authorized account grant. |
to_account_idRequired | string | Trading account identifier within the authorized account grant. |
assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
amountRequired | string | Transfer amount in asset units. |
statusRequired | string | Internal transfer processing state. Values: pending, completed, rejected. |
created_atRequired | string | UTC timestamp in RFC 3339 format. |
updated_atRequired | string | UTC timestamp in RFC 3339 format. |
Errors use the shared error envelope. Follow pagination and retry rules when recovering results.
GET/v1/transfersList Transfers
Read internal transfers involving an account in ascending created_at order. Use client_transfer_id to reconcile a timed-out submission.
| Name | Location | Rule |
|---|---|---|
account_idRequired | query | Authorized trading account. |
client_transfer_idOptional | query | Exact client transfer ID. |
start_timeOptional | query | Inclusive UTC start; default 24 hours before end_time. |
end_timeOptional | query | Exclusive UTC end; default request time. |
limitOptional | query | Page size, default 50; maximum 200. |
cursorOptional | query | Opaque 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 →
import { request } from './rest-client.mjs';
const result = await request(
'GET',
'/v1/transfers?account_id=acct_example_main&limit=50'
);
console.log(result);{
"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
| Field | Type | Description |
|---|---|---|
transfersRequired | array | Results on this page. |
transfers[].transfer_idRequired | string | Internal transfer identifier. |
transfers[].client_transfer_idRequired | string | Unique client identifier within the account. Retain it for reconciliation. |
transfers[].from_account_idRequired | string | Trading account identifier within the authorized account grant. |
transfers[].to_account_idRequired | string | Trading account identifier within the authorized account grant. |
transfers[].assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
transfers[].amountRequired | string | Transfer amount in asset units. |
transfers[].statusRequired | string | Internal transfer processing state. Values: pending, completed, rejected. |
transfers[].created_atRequired | string | UTC timestamp in RFC 3339 format. |
transfers[].updated_atRequired | string | UTC timestamp in RFC 3339 format. |
paginationRequired | object | |
pagination.next_cursorRequired | string | null | Opaque cursor for the next page; null at the end. |
pagination.has_moreRequired | boolean | True 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
Track an internal transfer until the destination ledger is credited or the request is rejected.
| Name | Location | Rule |
|---|---|---|
transfer_idRequired | path | Identifier of the resource to read or change. |
account_idRequired | query | Authorized trading account. |
Sign with X-Trade8-API-Key, X-Trade8-Timestamp, and X-Trade8-Signature. Required scope: transfers:read. Authentication Guide →
import { request } from './rest-client.mjs';
const result = await request(
'GET',
'/v1/transfers/transfer_example_01?account_id=acct_example_main'
);
console.log(result);{
"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
| Field | Type | Description |
|---|---|---|
transfer_idRequired | string | Internal transfer identifier. |
client_transfer_idRequired | string | Unique client identifier within the account. Retain it for reconciliation. |
from_account_idRequired | string | Trading account identifier within the authorized account grant. |
to_account_idRequired | string | Trading account identifier within the authorized account grant. |
assetRequired | string | Asset symbol, such as BTC, USDT, or USDC. |
amountRequired | string | Transfer amount in asset units. |
statusRequired | string | Internal transfer processing state. Values: pending, completed, rejected. |
created_atRequired | string | UTC timestamp in RFC 3339 format. |
updated_atRequired | string | UTC timestamp in RFC 3339 format. |
Errors use the shared error envelope. Follow pagination and retry rules when recovering results.
No matching endpoints. Try “orders” or clear the category.
For AI agent access to these operations, see Connect Your AI Agent and the MCP Tool Reference.