List positions
curl --request GET \
--url https://tradingapi.dev/v1/positions \
--header 'Authorization: Bearer <token>'import requests
url = "https://tradingapi.dev/v1/positions"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://tradingapi.dev/v1/positions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://tradingapi.dev/v1/positions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"object": "list",
"data": [
{
"object": "position",
"market": "<string>",
"direction": "long",
"size": "<string>",
"value": "<string>",
"entry_price": "<string>",
"price": "<string>",
"unrealized_pnl": "<string>",
"liquidation_price": "<string>",
"funding_since_open": "<string>",
"summary": "<string>"
}
]
}{
"error": {
"type": "authentication",
"code": "invalid_api_key",
"message": "This API key is not valid. It may have been revoked.",
"param": null,
"hint": "Send a current key as Authorization: Bearer tapi_…. Keys are created and revoked on the account page.",
"details": {},
"errors": [],
"retryable": false,
"doc_url": "https://docs.tradingapi.dev/api-reference/errors#invalid_api_key"
}
}{
"error": {
"type": "rate_limited",
"code": "rate_limited",
"message": "This key made too many requests; retry in 1 s.",
"param": null,
"hint": "Slow down: each key may make 10 requests at once, then 5 a second.",
"details": {},
"errors": [],
"retryable": true,
"retry_after": "2026-09-28T14:05:12.000Z",
"doc_url": "https://docs.tradingapi.dev/api-reference/errors#rate_limited"
}
}{
"error": {
"type": "unavailable",
"code": "unavailable",
"message": "The exchange could not be reached.",
"param": null,
"hint": "Retry the same request with the same client_order_id; an order may already have been recorded.",
"details": {},
"errors": [],
"retryable": true,
"doc_url": "https://docs.tradingapi.dev/api-reference/errors#unavailable"
}
}Positions
List positions
Returns your open positions, read live from the exchange. The list is not paged.
GET
/
v1
/
positions
List positions
curl --request GET \
--url https://tradingapi.dev/v1/positions \
--header 'Authorization: Bearer <token>'import requests
url = "https://tradingapi.dev/v1/positions"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://tradingapi.dev/v1/positions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://tradingapi.dev/v1/positions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"object": "list",
"data": [
{
"object": "position",
"market": "<string>",
"direction": "long",
"size": "<string>",
"value": "<string>",
"entry_price": "<string>",
"price": "<string>",
"unrealized_pnl": "<string>",
"liquidation_price": "<string>",
"funding_since_open": "<string>",
"summary": "<string>"
}
]
}{
"error": {
"type": "authentication",
"code": "invalid_api_key",
"message": "This API key is not valid. It may have been revoked.",
"param": null,
"hint": "Send a current key as Authorization: Bearer tapi_…. Keys are created and revoked on the account page.",
"details": {},
"errors": [],
"retryable": false,
"doc_url": "https://docs.tradingapi.dev/api-reference/errors#invalid_api_key"
}
}{
"error": {
"type": "rate_limited",
"code": "rate_limited",
"message": "This key made too many requests; retry in 1 s.",
"param": null,
"hint": "Slow down: each key may make 10 requests at once, then 5 a second.",
"details": {},
"errors": [],
"retryable": true,
"retry_after": "2026-09-28T14:05:12.000Z",
"doc_url": "https://docs.tradingapi.dev/api-reference/errors#rate_limited"
}
}{
"error": {
"type": "unavailable",
"code": "unavailable",
"message": "The exchange could not be reached.",
"param": null,
"hint": "Retry the same request with the same client_order_id; an order may already have been recorded.",
"details": {},
"errors": [],
"retryable": true,
"doc_url": "https://docs.tradingapi.dev/api-reference/errors#unavailable"
}
}Authorizations
An API key from the account page, sent as Authorization: Bearer tapi_….
Response
Your open positions; an empty list when you have none.
Allowed value:
"list"Hide child attributes
Hide child attributes
Allowed value:
"position"Available options:
long, short Always positive; direction gives the side.
size × price, in USD.
The average price of the position.
The current mark price.
Profit or loss if the position closed at price, in USD.
The price at which the position would be liquidated. Positions are 1×, so it is far away.
Funding paid (negative) or received (positive) since the position opened, in USD.