Get Positions
List currently open futures positions.
HTTP
| Method | GET |
| Endpoint | /trade/api/v2/futures/positions |
| Rate limit | 20 requests per 60 seconds |
Request Parameters
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
exchange | string | Yes | EXCHANGE_2. |
symbol | string | Yes | Symbol, e.g. BTCUSDT. |
Example
- Python
- Java
- Go
- Node.js
import requests
headers, path = sign_request("GET", "/trade/api/v2/futures/positions",
params={"exchange": "EXCHANGE_2", "symbol": "btcusdt"})
response = requests.get(BASE_URL + path, headers=headers)
print(response.json())
HttpResponse<String> resp = client.send(
"GET", "/trade/api/v2/futures/positions",
Map.of("exchange", "EXCHANGE_2", "symbol", "btcusdt"), null);
System.out.println(resp.body());
headers, p, err := SignRequest("GET", "/trade/api/v2/futures/positions", map[string]string{"exchange": "EXCHANGE_2", "symbol": "btcusdt"})
if err != nil { panic(err) }
req, _ := http.NewRequest("GET", BaseURL+p, nil)
for k, v := range headers { req.Header.Set(k, v) }
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
const {signRequest, BASE_URL} = require('./reference-client');
const {headers, path} = signRequest('GET', '/trade/api/v2/futures/positions', {"exchange": "EXCHANGE_2", "symbol": "btcusdt"});
const r = await fetch(BASE_URL + path, {
method: 'GET',
headers,
});
console.log(await r.json());
Response
{
"data": [
{
"exchange": "EXCHANGE_2",
"position_id": "8b81b763-df36-4c93-9bc8-9a93d65b8546",
"symbol": "DOGEUSDT",
"position_side": "LONG",
"leverage": "25",
"position_size": "65",
"position_value": "25.09455",
"position_margin": "34.052117186199",
"maint_margin": "37.641825",
"avg_entry_price": "0.38607",
"mark_price": "0.38231",
"last_price": "0.38135",
"unrealised_pnl": "0.3068",
"liquidation_price": "0.129122150942",
"client_txn_id": "00000000-0000-0000-0000-000000000000",
"margin_type": "ISOLATED",
"status": "OPEN",
"created_at": 1732617093684,
"updated_at": 1732636761825
}
]
}
Response Parameters
data is an array of positions. Each entry:
| Field | Type | Description |
|---|---|---|
exchange | string | Exchange identifier. |
position_id | string | Position ID (UUID). |
symbol | string | Symbol. |
position_side | string | LONG or SHORT. |
leverage | string | Current leverage on this symbol. |
position_size | string | Position size in base asset. |
position_value | string | Notional value in USDT. |
position_margin | string | Margin currently allocated to the position (USDT). |
maint_margin | string | Minimum margin required to avoid liquidation (USDT). See Margin & Leverage. |
avg_entry_price | string | Volume-weighted average entry price. |
mark_price | string | Mark price used for liquidation and unrealised P&L. |
last_price | string | Most recent trade price. |
unrealised_pnl | string | Unrealised P&L on this position (USDT). |
liquidation_price | string | Mark price at which the position would be liquidated. |
client_txn_id | string | Client transaction ID associated with the most recent margin operation on this position. Default is the all-zeros UUID if you've never sent one. |
margin_type | string | Margin mode (ISOLATED or CROSS). |
status | string | OPEN while the position is live. Closed positions are not returned by this endpoint. |
created_at | integer | Position open time (Unix milliseconds). |
updated_at | integer | Last update time (Unix milliseconds). |
Stale snapshots
If mark_price and unrealised_pnl are both 0, treat them as transient — the system is mid-update. The other fields (position_size, avg_entry_price, etc.) remain reliable.