Turn an account back on
Turns an inactive account back on. It returns to in_progress (or not_started if it never traded) with its balance, high-water mark, drawdown floor and trading days exactly as they were when it was turned off. The daily loss baseline resets at the next session as usual.
Billing: if this trader has not been billed for the current calendar month (US Central time) yet, the month is billed now — the same charge an account that had stayed active would get. Live market data is switched back on.
Only inactive accounts are turned back on. Repeating the call on an account that is already active is safe (changed: false, no webhook). passed, failed and expired accounts return 409.
Webhook: account.status_changed with trigger: "firm_reactivated", previousAttributes.status and your reason.
Requires manage permission on traders. On 502 retry the call — it is safe to repeat.
curl -X POST "https://api.hyperprop.com/platform/v1/organization/trading-accounts/7c9e6679-7425-40de-944b-e07fc1f90ae7/reactivate" \
-H "X-API-Key: hp_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"reason": "Trader is back"}'
curl --request POST \
--url https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/reactivate \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"reason": "Trader is back"
}
'import requests
url = "https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/reactivate"
payload = { "reason": "Trader is back" }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({reason: 'Trader is back'})
};
fetch('https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/reactivate', 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}/reactivate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'reason' => 'Trader is back'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/reactivate"
payload := strings.NewReader("{\n \"reason\": \"Trader is back\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/reactivate")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"Trader is back\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/reactivate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"reason\": \"Trader is back\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Account turned back on",
"data": {
"accountId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"accountNumber": "TL-50K-000123",
"status": "in_progress",
"previousStatus": "inactive",
"changed": true,
"ordersCancelled": 0,
"positionsClosed": 0,
"reason": "Trader is back",
"monthBilled": true
}
}{
"success": false,
"statusCode": 401,
"error": "Unauthorized",
"message": "Authentication required",
"code": "UNAUTHORIZED"
}{
"statusCode": 403,
"error": "Forbidden",
"message": "This account does not belong to your organization",
"code": "ACCOUNT_NOT_IN_ORG"
}{
"statusCode": 404,
"error": "Not Found",
"message": "Trading account not found",
"code": "ACCOUNT_NOT_FOUND"
}{
"statusCode": 409,
"error": "Conflict",
"message": "Only a turned-off account can be turned back on; this account is failed",
"code": "ACCOUNT_NOT_PAUSABLE"
}{
"success": false,
"statusCode": 500,
"error": "Internal Server Error",
"message": "An unexpected error occurred",
"code": "INTERNAL_ERROR"
}{
"statusCode": 502,
"error": "Bad Gateway",
"message": "The trading engine did not confirm the change. Retry the call, it is safe to repeat.",
"code": "ENGINE_UNAVAILABLE"
}Authorizations
Organization API key. Format: "hp_live_{key}". Organization admins manage the key in the dashboard.
Path Parameters
Body
Why the account is turned back on. Recorded on the audit trail and the webhook.
200"Trader is back"
curl --request POST \
--url https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/reactivate \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"reason": "Trader is back"
}
'import requests
url = "https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/reactivate"
payload = { "reason": "Trader is back" }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({reason: 'Trader is back'})
};
fetch('https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/reactivate', 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}/reactivate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'reason' => 'Trader is back'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/reactivate"
payload := strings.NewReader("{\n \"reason\": \"Trader is back\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/reactivate")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"Trader is back\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/reactivate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"reason\": \"Trader is back\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Account turned back on",
"data": {
"accountId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"accountNumber": "TL-50K-000123",
"status": "in_progress",
"previousStatus": "inactive",
"changed": true,
"ordersCancelled": 0,
"positionsClosed": 0,
"reason": "Trader is back",
"monthBilled": true
}
}{
"success": false,
"statusCode": 401,
"error": "Unauthorized",
"message": "Authentication required",
"code": "UNAUTHORIZED"
}{
"statusCode": 403,
"error": "Forbidden",
"message": "This account does not belong to your organization",
"code": "ACCOUNT_NOT_IN_ORG"
}{
"statusCode": 404,
"error": "Not Found",
"message": "Trading account not found",
"code": "ACCOUNT_NOT_FOUND"
}{
"statusCode": 409,
"error": "Conflict",
"message": "Only a turned-off account can be turned back on; this account is failed",
"code": "ACCOUNT_NOT_PAUSABLE"
}{
"success": false,
"statusCode": 500,
"error": "Internal Server Error",
"message": "An unexpected error occurred",
"code": "INTERNAL_ERROR"
}{
"statusCode": 502,
"error": "Bad Gateway",
"message": "The trading engine did not confirm the change. Retry the call, it is safe to repeat.",
"code": "ENGINE_UNAVAILABLE"
}