> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.paradex.trade/api/prod/account/get-positions/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.paradex.trade/_mcp/server. # List open positions GET https://api.prod.paradex.trade/v1/positions Get all positions owned by current user Reference: https://docs.paradex.trade/api/prod/account/get-positions ## Authentication - `Authorization` header (required) — API Key authentication via header ## Response ### 200 OK - `results` (list of responses.PositionResp, optional) — Array of results ## Types ### responses.PositionResp - `account` (string, optional) — Account ID of the position - `average_entry_price` (string, optional) — Average entry price - `average_entry_price_usd` (string, optional) — Average entry price in USD - `average_exit_price` (string, optional) — Average exit price - `cached_funding_index` (string, optional) — Position cached funding index - `closed_at` (integer, optional) — Position closed time - `cost` (string, optional) — Position cost - `cost_usd` (string, optional) — Position cost in USD - `created_at` (integer, optional) — Position creation time - `id` (string, optional) — Unique string ID for the position - `last_fill_id` (string, optional) — Last fill ID to which the position is referring - `last_updated_at` (integer, optional) — Position last update time - `leverage` (string, optional) — Leverage of the position - `liquidation_price` (string, optional) — Liquidation price of the position - `market` (string, optional) — Market for position - `realized_positional_funding_pnl` (string, optional) — Realized Funding PnL for the position. Reset to 0 when position is closed or flipped. - `realized_positional_pnl` (string, optional) — Realized PnL including both positional PnL and funding payments. Reset to 0 when position is closed or flipped. - `seq_no` (integer, optional) — Unique increasing number (non-sequential) that is assigned to this position update. Can be used to deduplicate multiple feeds - `side` (enum, optional) — Position Side : Long or Short - Allowed values: `SHORT`, `LONG` - `size` (string, optional) — Size of the position with sign (positive if long or negative if short) - `status` (enum, optional) — Status of Position : Open or Closed - Allowed values: `OPEN`, `CLOSED` - `unrealized_funding_pnl` (string, optional) — Unrealized running funding P&L for the position - `unrealized_pnl` (string, optional) — Unrealized P&L of the position in the quote asset. Includes the unrealized running funding P&L. ## Examples **Response** ```json { "results": [ { "account": "string", "average_entry_price": "29001.34", "average_entry_price_usd": "29001.34", "average_exit_price": "29001.34", "cached_funding_index": "1234.3", "closed_at": 1681493939981, "cost": "-10005.4623", "cost_usd": "-10005.4623", "created_at": 1681493939981, "id": "1234234", "last_fill_id": "1234234", "last_updated_at": 1681493939981, "leverage": "string", "liquidation_price": "string", "market": "BTC-USD-PERP", "realized_positional_funding_pnl": "12.234", "realized_positional_pnl": "-123.23", "seq_no": 1681471234972000000, "side": "SHORT", "size": "-0.345", "status": "OPEN", "unrealized_funding_pnl": "12.234", "unrealized_pnl": "-123.23" } ] } ``` **SDK Code** ```python import requests headers = { 'Accept': 'application/json', 'Authorization': 'Bearer {JWT}' } r = requests.get('https://api.prod.paradex.trade/v1/positions', headers = headers) print(r.json()) ``` ```javascript const headers = { 'Accept':'application/json', 'Authorization':'Bearer {JWT}' }; fetch('https://api.prod.paradex.trade/v1/positions', { method: 'GET', headers: headers }) .then(function(res) { return res.json(); }).then(function(body) { console.log(body); }); ``` ```go package main import ( "bytes" "net/http" ) func main() { headers := map[string][]string{ "Accept": []string{"application/json"}, "Authorization": []string{"Bearer {JWT}"}, } data := bytes.NewBuffer([]byte{jsonReq}) req, err := http.NewRequest("GET", "https://api.prod.paradex.trade/v1/positions", data) req.Header = headers client := &http.Client{} resp, err := client.Do(req) // ... } ``` ```ruby require 'uri' require 'net/http' url = URI("https://api.prod.paradex.trade/v1/positions") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["Authorization"] = '' response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://api.prod.paradex.trade/v1/positions") .header("Authorization", "") .asString(); ``` ```php request('GET', 'https://api.prod.paradex.trade/v1/positions', [ 'headers' => [ 'Authorization' => '', ], ]); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("https://api.prod.paradex.trade/v1/positions"); var request = new RestRequest(Method.GET); request.AddHeader("Authorization", ""); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let headers = ["Authorization": ""] let request = NSMutableURLRequest(url: NSURL(string: "https://api.prod.paradex.trade/v1/positions")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```