Get all positions info
curl --request GET \
--url https://api.orderly.org/v1/positions \
--header 'orderly-account-id: <orderly-account-id>' \
--header 'orderly-key: <orderly-key>' \
--header 'orderly-signature: <orderly-signature>' \
--header 'orderly-timestamp: <orderly-timestamp>'import requests
url = "https://api.orderly.org/v1/positions"
headers = {
"orderly-timestamp": "<orderly-timestamp>",
"orderly-account-id": "<orderly-account-id>",
"orderly-key": "<orderly-key>",
"orderly-signature": "<orderly-signature>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'orderly-timestamp': '<orderly-timestamp>',
'orderly-account-id': '<orderly-account-id>',
'orderly-key': '<orderly-key>',
'orderly-signature': '<orderly-signature>'
}
};
fetch('https://api.orderly.org/v1/positions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.orderly.org/v1/positions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"orderly-account-id: <orderly-account-id>",
"orderly-key: <orderly-key>",
"orderly-signature: <orderly-signature>",
"orderly-timestamp: <orderly-timestamp>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.orderly.org/v1/positions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("orderly-timestamp", "<orderly-timestamp>")
req.Header.Add("orderly-account-id", "<orderly-account-id>")
req.Header.Add("orderly-key", "<orderly-key>")
req.Header.Add("orderly-signature", "<orderly-signature>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.orderly.org/v1/positions")
.header("orderly-timestamp", "<orderly-timestamp>")
.header("orderly-account-id", "<orderly-account-id>")
.header("orderly-key", "<orderly-key>")
.header("orderly-signature", "<orderly-signature>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orderly.org/v1/positions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["orderly-timestamp"] = '<orderly-timestamp>'
request["orderly-account-id"] = '<orderly-account-id>'
request["orderly-key"] = '<orderly-key>'
request["orderly-signature"] = '<orderly-signature>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"current_margin_ratio_with_orders": 1.2385,
"free_collateral": 450315.09115,
"initial_margin_ratio": 0.1,
"initial_margin_ratio_with_orders": 0.1,
"maintenance_margin_ratio": 0.05,
"maintenance_margin_ratio_with_orders": 0.05,
"margin_ratio": 1.2385,
"open_margin_ratio": 1.2102,
"total_collateral_value": 489865.71329,
"total_pnl_24_h": 0,
"rows": [
{
"IMR_withdraw_orders": 0.1,
"MMR_with_orders": 0.05,
"average_open_price": 27908.14386047,
"cost_position": -139329.358492,
"est_liq_price": 117335.92899428,
"fee_24_h": 0,
"imr": 0.1,
"last_sum_unitary_funding": 70.38,
"mark_price": 27794.9,
"mmr": 0.05,
"pending_long_qty": 0,
"pending_short_qty": 0,
"pnl_24_h": 0,
"position_qty": -5,
"settle_price": 27865.8716984,
"symbol": "PERP_BTC_USDC",
"seq": 1730181536341943600,
"timestamp": 1685429350571,
"updated_time": 1685429350571,
"unsettled_pnl": 354.858492,
"leverage": 10,
"margin_mode": "CROSS",
"margin": 0,
"accrued_funding_fee": 0.005202
}
],
"account_value": 40.63345663
},
"timestamp": 1702989203989
}Positions
Get all positions info
Limit: 30 requests per 10 second per user
GET /v1/positions
For a Predict position, position_qty greater than 0 is UP, less than 0 is DOWN, and margin_mode is always ISOLATED. product_type only filters rows; account-level fields such as account_value and free_collateral keep their existing basis regardless of the filter.
GET
/
v1
/
positions
Get all positions info
curl --request GET \
--url https://api.orderly.org/v1/positions \
--header 'orderly-account-id: <orderly-account-id>' \
--header 'orderly-key: <orderly-key>' \
--header 'orderly-signature: <orderly-signature>' \
--header 'orderly-timestamp: <orderly-timestamp>'import requests
url = "https://api.orderly.org/v1/positions"
headers = {
"orderly-timestamp": "<orderly-timestamp>",
"orderly-account-id": "<orderly-account-id>",
"orderly-key": "<orderly-key>",
"orderly-signature": "<orderly-signature>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'orderly-timestamp': '<orderly-timestamp>',
'orderly-account-id': '<orderly-account-id>',
'orderly-key': '<orderly-key>',
'orderly-signature': '<orderly-signature>'
}
};
fetch('https://api.orderly.org/v1/positions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.orderly.org/v1/positions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"orderly-account-id: <orderly-account-id>",
"orderly-key: <orderly-key>",
"orderly-signature: <orderly-signature>",
"orderly-timestamp: <orderly-timestamp>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.orderly.org/v1/positions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("orderly-timestamp", "<orderly-timestamp>")
req.Header.Add("orderly-account-id", "<orderly-account-id>")
req.Header.Add("orderly-key", "<orderly-key>")
req.Header.Add("orderly-signature", "<orderly-signature>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.orderly.org/v1/positions")
.header("orderly-timestamp", "<orderly-timestamp>")
.header("orderly-account-id", "<orderly-account-id>")
.header("orderly-key", "<orderly-key>")
.header("orderly-signature", "<orderly-signature>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orderly.org/v1/positions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["orderly-timestamp"] = '<orderly-timestamp>'
request["orderly-account-id"] = '<orderly-account-id>'
request["orderly-key"] = '<orderly-key>'
request["orderly-signature"] = '<orderly-signature>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"current_margin_ratio_with_orders": 1.2385,
"free_collateral": 450315.09115,
"initial_margin_ratio": 0.1,
"initial_margin_ratio_with_orders": 0.1,
"maintenance_margin_ratio": 0.05,
"maintenance_margin_ratio_with_orders": 0.05,
"margin_ratio": 1.2385,
"open_margin_ratio": 1.2102,
"total_collateral_value": 489865.71329,
"total_pnl_24_h": 0,
"rows": [
{
"IMR_withdraw_orders": 0.1,
"MMR_with_orders": 0.05,
"average_open_price": 27908.14386047,
"cost_position": -139329.358492,
"est_liq_price": 117335.92899428,
"fee_24_h": 0,
"imr": 0.1,
"last_sum_unitary_funding": 70.38,
"mark_price": 27794.9,
"mmr": 0.05,
"pending_long_qty": 0,
"pending_short_qty": 0,
"pnl_24_h": 0,
"position_qty": -5,
"settle_price": 27865.8716984,
"symbol": "PERP_BTC_USDC",
"seq": 1730181536341943600,
"timestamp": 1685429350571,
"updated_time": 1685429350571,
"unsettled_pnl": 354.858492,
"leverage": 10,
"margin_mode": "CROSS",
"margin": 0,
"accrued_funding_fee": 0.005202
}
],
"account_value": 40.63345663
},
"timestamp": 1702989203989
}Headers
Timestamp of the signed request in milliseconds.
Account ID of the authenticated account.
Public orderly key used to sign the request.
Signature of the request payload generated with the orderly key.
Query Parameters
Filter by product type. Only uppercase PERP or BINARY is accepted; omit to return all products. PERP includes all non-Predict products.
Available options:
PERP, BINARY