Turn an account off (pause)
Turns a trading account off — for example when a trader has not traded for a couple of weeks and a new month is about to start. In one call:
- Every working order is cancelled and every open position is closed at market. The closing orders carry reason
Admin flatten: <who> — Account turned off: <your reason>(triggeradmin_flatten). - The account moves to status
inactive. The trader can no longer place orders on it. - Balance, high-water mark, drawdown floor and trading days stay exactly as they are. Your rules still apply to the balance: if closing the positions breaches a limit, the account fails as it otherwise would.
Billing: an inactive account does not count as an active trader. The current calendar month (US Central time) is already billed and is not refunded; an account that is still inactive when the next calendar month starts is not billed for that month. If it was the trader’s last active account, their live market data is switched off.
Only in_progress and not_started accounts can be turned off; passed, failed and expired accounts return 409. Repeating the call on an inactive account is safe: the status does not change (changed: false, no webhook) and any order or position left over is closed.
Webhook: account.status_changed with trigger: "firm_deactivated", previousAttributes.status and your reason. Turn the account back on with POST /trading-accounts/{accountId}/reactivate; PATCH and bulk updates cannot move an inactive account back to a live status.
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/deactivate" \
-H "X-API-Key: hp_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"reason": "No trades for 14 days"}'
curl --request POST \
--url https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/deactivate \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"reason": "No trades for 14 days"
}
'import requests
url = "https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/deactivate"
payload = { "reason": "No trades for 14 days" }
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: 'No trades for 14 days'})
};
fetch('https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/deactivate', 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}/deactivate",
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' => 'No trades for 14 days'
]),
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}/deactivate"
payload := strings.NewReader("{\n \"reason\": \"No trades for 14 days\"\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}/deactivate")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"No trades for 14 days\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/deactivate")
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\": \"No trades for 14 days\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Account turned off",
"data": {
"accountId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"accountNumber": "TL-50K-000123",
"status": "inactive",
"previousStatus": "in_progress",
"changed": true,
"ordersCancelled": 1,
"positionsClosed": 1,
"reason": "No trades for 14 days",
"marketDataStopped": 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 active accounts can be turned off; 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 off. Recorded on the closing orders, the audit trail and the webhook.
200"No trades for 14 days"
curl --request POST \
--url https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/deactivate \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"reason": "No trades for 14 days"
}
'import requests
url = "https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/deactivate"
payload = { "reason": "No trades for 14 days" }
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: 'No trades for 14 days'})
};
fetch('https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/deactivate', 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}/deactivate",
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' => 'No trades for 14 days'
]),
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}/deactivate"
payload := strings.NewReader("{\n \"reason\": \"No trades for 14 days\"\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}/deactivate")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"No trades for 14 days\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperprop.com/platform/v1/organization/trading-accounts/{accountId}/deactivate")
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\": \"No trades for 14 days\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Account turned off",
"data": {
"accountId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"accountNumber": "TL-50K-000123",
"status": "inactive",
"previousStatus": "in_progress",
"changed": true,
"ordersCancelled": 1,
"positionsClosed": 1,
"reason": "No trades for 14 days",
"marketDataStopped": 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 active accounts can be turned off; 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"
}