Get Instruments

List all instruments available for trading. Clients should call this on startup and refresh on a timer.

GET /instruments
GET /instruments/{symbol}

Auth: Public. No token required.

Available Symbols

All instruments are USDC-quoted linear perpetuals. Symbols follow the BASE-USDC-PERP format.

SymbolBase asset
AAVE-USDC-PERPAAVE
ADA-USDC-PERPADA
APT-USDC-PERPAPT
ARB-USDC-PERPARB
AVAX-USDC-PERPAVAX
BNB-USDC-PERPBNB
BTC-USDC-PERPBTC
DOGE-USDC-PERPDOGE
DOT-USDC-PERPDOT
ETH-USDC-PERPETH
HYPE-USDC-PERPHYPE
LINK-USDC-PERPLINK
NEAR-USDC-PERPNEAR
PEPE-USDC-PERPPEPE
POL-USDC-PERPPOL
SOL-USDC-PERPSOL
SUI-USDC-PERPSUI
TRX-USDC-PERPTRX
UNI-USDC-PERPUNI
XRP-USDC-PERPXRP

This table is a snapshot; GET /instruments below is always the source for the live set (status, tick sizes, fees, etc.).

List All Instruments

curl the REST origin/api/v1/instruments

Response

{
  "code": 0,
  "data": {
    "instruments": [
      {
        "symbol": "BTC-USDC-PERP",
        "symbol_id": 1,
        "base": "BTC",
        "quote": "USDC",
        "contract_type": "perpetual",
        "underlying": "BTC/USD",
        "index_description": "Pyth BTC/USD",
        "settlement_currency": "USDC",
        "settlement_type": "cash",
        "position_size_unit": "base",
        "status": "active",
        "tick_size": 0.1,
        "lot_size": 0.001,
        "max_order_size": 1000,
        "price_decimals": 1,
        "quantity_decimals": 3,
        "max_leverage": 10,
        "pyth_feed_id": "<64-character feed id>",
        "pyth_lazer_id": 1
      }
    ]
  },
  "timestamp": "2026-04-20T10:30:00.123Z",
  "request_id": "req_01HXYZ..."
}

Single Instrument

curl the REST origin/api/v1/instruments/BTC-USDC-PERP

Returns the same instrument object under data (not wrapped in an instruments array).

Field Reference

FieldTypeDescription
symbolstringCanonical id used on all other endpoints
symbol_idintegerNumeric instrument id used on the encrypted wire
basestringBase asset (e.g. BTC)
quotestringQuote asset (always USDC)
contract_typestringperpetual in v1
underlyingstringDisplay underlying, e.g. BTC/USD
index_descriptionstringHuman-readable index source
settlement_currencystringUSDC in v1
settlement_typestringcash in v1
position_size_unitstringbase in v1
statusstringactive, halt, or prelaunch
tick_sizenumberMinimum price increment (quote asset)
lot_sizenumberMinimum quantity increment (base asset)
max_order_sizenumberMaximum order quantity
price_decimalsintegerFractional digits in the price domain
quantity_decimalsintegerFractional digits in the quantity domain
max_leveragenumberMaximum leverage permitted on this instrument
pyth_feed_idstring, optionalPyth Hermes feed id (lowercase hex, no 0x)
pyth_lazer_idinteger, optionalPyth Pro/Lazer feed id

The launch catalog publishes max_leverage: 10; always use the returned value rather than hard-coding it because runtime listings may differ.

Use tick_size and price_decimals to validate/normalize prices, and lot_size and quantity_decimals to validate/normalize quantities. SDK inputs use native numeric types while order/fill outputs use decimal strings, so applications should preserve the original decimal intent and avoid implicit binary-float rounding.

Refresh Semantics

The current route returns a normal JSON response on every successful request. It does not publish a version, updated_at, or ETag, and it does not implement If-None-Match / 304 Not Modified.

There is no public instrument WebSocket channel. Poll GET /instruments at an interval appropriate for your client, and treat the REST response as authoritative for listings, halts, and leverage limits.