Get Instruments
List all instruments available for trading. Clients should call this once on startup and refresh on a timer or when an If-None-Match request indicates a new version.
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.
| Symbol | Base asset |
|---|---|
AAVE-USDC-PERP | AAVE |
ADA-USDC-PERP | ADA |
APT-USDC-PERP | APT |
ARB-USDC-PERP | ARB |
AVAX-USDC-PERP | AVAX |
BNB-USDC-PERP | BNB |
BTC-USDC-PERP | BTC |
DOGE-USDC-PERP | DOGE |
DOT-USDC-PERP | DOT |
ETH-USDC-PERP | ETH |
HYPE-USDC-PERP | HYPE |
LINK-USDC-PERP | LINK |
NEAR-USDC-PERP | NEAR |
PEPE-USDC-PERP | PEPE |
POL-USDC-PERP | POL |
SOL-USDC-PERP | SOL |
SUI-USDC-PERP | SUI |
TRX-USDC-PERP | TRX |
UNI-USDC-PERP | UNI |
XRP-USDC-PERP | XRP |
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 https://api.godarkdex.com/api/v1/instruments
Response
{
"code": 0,
"data": {
"version": 842,
"updated_at": "2026-04-20T00:00:00Z",
"instruments": [
{
"symbol": "BTC-USDC-PERP",
"base_asset": "BTC",
"quote_asset": "USDC",
"type": "perp",
"status": "trading",
"tick_size": 0.1,
"step_size": 0.001,
"min_qty": 0.001,
"max_qty": 1000,
"min_notional": 25,
"contract_size": 1,
"margin_asset": "USDC",
"max_leverage": 20,
"maker_fee_bps": 2,
"taker_fee_bps": 5,
"initial_margin_ratio": 0.05,
"maintenance_margin_ratio": 0.025,
"listed_at": "2026-01-01T00:00:00Z",
"expires_at": null
}
]
},
"timestamp": "2026-04-20T10:30:00.123Z",
"request_id": "req_01HXYZ..."
}
Single Instrument
curl https://api.godarkdex.com/api/v1/instruments/BTC-USDC-PERP
Returns the same instrument object under data (not wrapped in an instruments array).
Field Reference
| Field | Type | Description |
|---|---|---|
symbol | string | Canonical id used on all other endpoints |
base_asset | string | Base asset (e.g. BTC) |
quote_asset | string | Quote asset (always USDC) |
type | string | perp (currently the only type) |
status | string | trading, halted, pre-open, or delisted |
tick_size | number | Minimum price increment (quote asset) |
step_size | number | Minimum quantity increment (base asset) |
min_qty | number | Minimum order quantity |
max_qty | number | Maximum order quantity |
min_notional | number | Minimum order notional (USDC) |
contract_size | number | Contract multiplier (1 for linear perps) |
margin_asset | string | Collateral asset (always USDC) |
max_leverage | number | Maximum leverage permitted on this instrument |
maker_fee_bps | number | Default maker fee (negative = rebate). See caveat below. |
taker_fee_bps | number | Default taker fee. See caveat below. |
initial_margin_ratio | number | Initial margin requirement (see Margin & Liquidation) |
maintenance_margin_ratio | number | Maintenance margin requirement (see Margin & Liquidation) |
listed_at | string | Listing timestamp (RFC 3339) |
expires_at | string | null | Expiry timestamp (always null for perps) |
Fee Authority
maker_fee_bps and taker_fee_bps on this endpoint are instrument-level defaults, not your effective fees. Your actual fees are driven by your VIP tier and always live at GET /account/vip. When they differ, /account/vip wins.
Cache Semantics
The list response carries:
version— monotonically increasing integer, bumped whenever any field on any instrument changes.updated_at— RFC 3339 timestamp of the last change.
Responses include an ETag header matching version. Clients should cache the list and pass If-None-Match: "<etag>" on subsequent calls; unchanged lists return 304 Not Modified with an empty body.
Instrument Status Changes
Intraday status changes (halts, new listings) are pushed on the public instruments WebSocket channel — subscribe to receive snapshot on connect and update on each change. Clients that don't need reactivity can just refresh on a timer instead.