Get an account's equity and unrealized P&L
Balance, equity and unrealized P&L of one trading account right now, with the organization API key.
equity is currentBalance + unrealizedPnl, with open positions marked at the current price: the same value as equity on the real-time stream’s AccountUpdate. dailyPnl and totalPnl count closed trades only (as on the account read); dailyPnlWithUnrealized includes open positions. For the positions themselves use GET .../positions.
riskLimits gives the account’s loss floors and profit target as balances, and how far equity is from each floor. They come from the same rule check that fails the account or stops its trading day, so distanceToMaxLoss reaching 0 is the breach. The real-time stream sends changes as RiskLimitsUpdate with ?floors=1.
Requires view permission on traders. About 600 requests per minute per organization, shared with GET .../positions.
curl "https://api.hyperprop.com/platform/v1/organization/trading-accounts/7c9e6679-7425-40de-944b-e07fc1f90ae7/equity" \
-H "X-API-Key: hp_live_your_key_here"
curl --request GET \
--url https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/equity \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/equity"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/equity', 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.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/equity",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/equity"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/equity")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/equity")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"accountId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"accountNumber": "ACC-50K-000123",
"customerId": "crm-cust-4471",
"status": "in_progress",
"currentBalance": 50300,
"unrealizedPnl": 41,
"equity": 50341,
"initialBalance": 50000,
"highWaterMark": 50500,
"dailyStartingBalance": 50100,
"dailyPnl": 200,
"dailyPnlWithUnrealized": 241,
"totalPnl": 300,
"currentDrawdown": 159,
"lossFloorBalance": null,
"positionsVersion": 12,
"riskLimits": {
"maxLossFloor": 48500,
"maxLossFloorType": "trailing",
"trailingLocked": false,
"dailyLossFloor": 49100,
"dailyLossLimitActive": true,
"dailyLossLimitOff": false,
"profitTarget": 53000,
"estimatedClosingFees": 1.24,
"distanceToMaxLoss": 1838.76,
"distanceToDailyLoss": 1238.76
},
"openPositionCount": 1,
"asOf": "2026-10-30T14:41:07.118Z"
}
}{
"success": false,
"statusCode": 400,
"error": "Bad Request",
"message": "Validation failed",
"code": "VALIDATION_ERROR"
}{
"success": false,
"statusCode": 401,
"error": "Unauthorized",
"message": "Authentication required",
"code": "UNAUTHORIZED"
}{
"statusCode": 403,
"error": "Forbidden",
"message": "Your role does not have view access to \"Traders & accounts\"",
"code": "INSUFFICIENT_PERMISSIONS"
}{
"success": false,
"statusCode": 404,
"error": "Not Found",
"message": "Trading account not found",
"code": "ACCOUNT_NOT_FOUND"
}{
"success": false,
"statusCode": 429,
"error": "Too Many Requests",
"message": "Too many live state requests; retry in 12s",
"code": "RATE_LIMITED",
"retryAfterSeconds": 12
}{
"success": false,
"statusCode": 500,
"error": "Internal Server Error",
"message": "An unexpected error occurred",
"code": "INTERNAL_ERROR"
}{
"success": false,
"statusCode": 503,
"error": "Error",
"message": "Live account state is temporarily unavailable; retry shortly",
"code": "LIVE_STATE_UNAVAILABLE"
}{
"statusCode": 504,
"error": "Gateway Timeout",
"message": "The request did not complete within 25 seconds. Try again, or narrow it (for example a shorter date range).",
"code": "REQUEST_TIMEOUT"
}curl --request GET \
--url https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/equity \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/equity"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/equity', 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.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/equity",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/equity"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/equity")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/equity")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"accountId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"accountNumber": "ACC-50K-000123",
"customerId": "crm-cust-4471",
"status": "in_progress",
"currentBalance": 50300,
"unrealizedPnl": 41,
"equity": 50341,
"initialBalance": 50000,
"highWaterMark": 50500,
"dailyStartingBalance": 50100,
"dailyPnl": 200,
"dailyPnlWithUnrealized": 241,
"totalPnl": 300,
"currentDrawdown": 159,
"lossFloorBalance": null,
"positionsVersion": 12,
"riskLimits": {
"maxLossFloor": 48500,
"maxLossFloorType": "trailing",
"trailingLocked": false,
"dailyLossFloor": 49100,
"dailyLossLimitActive": true,
"dailyLossLimitOff": false,
"profitTarget": 53000,
"estimatedClosingFees": 1.24,
"distanceToMaxLoss": 1838.76,
"distanceToDailyLoss": 1238.76
},
"openPositionCount": 1,
"asOf": "2026-10-30T14:41:07.118Z"
}
}{
"success": false,
"statusCode": 400,
"error": "Bad Request",
"message": "Validation failed",
"code": "VALIDATION_ERROR"
}{
"success": false,
"statusCode": 401,
"error": "Unauthorized",
"message": "Authentication required",
"code": "UNAUTHORIZED"
}{
"statusCode": 403,
"error": "Forbidden",
"message": "Your role does not have view access to \"Traders & accounts\"",
"code": "INSUFFICIENT_PERMISSIONS"
}{
"success": false,
"statusCode": 404,
"error": "Not Found",
"message": "Trading account not found",
"code": "ACCOUNT_NOT_FOUND"
}{
"success": false,
"statusCode": 429,
"error": "Too Many Requests",
"message": "Too many live state requests; retry in 12s",
"code": "RATE_LIMITED",
"retryAfterSeconds": 12
}{
"success": false,
"statusCode": 500,
"error": "Internal Server Error",
"message": "An unexpected error occurred",
"code": "INTERNAL_ERROR"
}{
"success": false,
"statusCode": 503,
"error": "Error",
"message": "Live account state is temporarily unavailable; retry shortly",
"code": "LIVE_STATE_UNAVAILABLE"
}{
"statusCode": 504,
"error": "Gateway Timeout",
"message": "The request did not complete within 25 seconds. Try again, or narrow it (for example a shorter date range).",
"code": "REQUEST_TIMEOUT"
}