> This page is for NT Prop.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://partner.ninjatrader.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://partner.ninjatrader.com/_mcp/server.

# Organization Admin Unlock Account

POST https://live.tradovateapi.com/v1/accountRiskStatus/organizationadminunlockaccount
Content-Type: application/json

### Unlock a locked Live subaccount.**Available to:** Organization administrators**Environments:** Live**[Rate Limit](/prop/overview/core-concepts/rate-limits):** No endpoint-specific limitA **partner unlock** lets a trader attempt to resume by clearing an eligible lock on a subaccount in your own organization: a system risk lock (`RestrictedRiskRestriction`, from auto-liquidation or a drawdown or evaluation breach) or a partner lock (`PartnerPayoutLock`) your organization set. Use it for the cases the automatic requalification reset on trading-permission approval doesn't cover.You can pass an optional `reason` (up to 8,192 characters), stored with the unlock and prefixed with `Partner unlock:`.A rejected request returns `HTTP 200` with `errorText` set and no `accountRiskStatus`, not an error status. Check `errorText` to determine whether the unlock succeeded.This endpoint doesn't unlock the following locks: compliance, anti-money-laundering, treasury, W-8, account-closure, or a lock recorded only with the generic `Other` code.NinjaTrader enables this feature per organization, so work with the NinjaTrader Support team to turn it on.For the subaccount lifecycle, which locks you can manage, the effect on trading, and how this differs from Change Lock, see [Partner Account Lock and Unlock](/prop/overview/prop-firm-management/partner-account-lock-and-unlock).**Common Failure Scenarios**- The account isn't a subaccount in your organization, or the feature isn't enabled for your organization. The request is denied.
- The lock is a compliance, anti-money-laundering, treasury, W-8, or account-closure lock, or a lock recorded only with the generic `Other` code, which partners can't clear.
- The account has no active lock to clear.**Error Messages**A failed request returns one of these messages:| Message                                 | Response             | Trigger                                                                                                                                                                                              |
| --------------------------------------- | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `"No active lock on this account."`     | 200 (in `errorText`) | The account has no active lock to clear.                                                                                                                                                             |
| `"Compliance lock - contact Tradovate"` | 200 (in `errorText`) | The lock is a compliance, anti-money-laundering, treasury, W-8, or account-closure lock, or any other lock recorded with a code a partner can't clear.                                               |
| `"Access is denied"`                    | 401                  | The caller isn't an organization administrator, the account isn't a subaccount in the caller's organization, or the feature isn't enabled. An account in another organization can return `HTTP 404`. |**Related Resources**- To apply a partner lock, see [`organizationAdminLockAccount`](/prop/api/rest-api-endpoints/risks/organization-admin-lock-account).
- To apply a partner lock or unlock using the Admin Dashboard, see [Partner Account Lock and Unlock](/prop/overview/prop-firm-management/partner-account-lock-and-unlock).

Reference: https://partner.ninjatrader.com/prop/api/rest-api-endpoints/risks/organization-admin-unlock-account

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Request

### Body (application/json)

This endpoint expects an OrganizationAdminUnlockAccount.

- `accountId` (long, required)
- `reason` (string, optional)

## Response

### 200

AccountRiskStatusResponse

- `errorText` (string, optional) — Non-empty if the request failed
- `accountRiskStatus` (AccountRiskStatus, optional)

## Types

### AccountRiskStatus

- `id` (long, optional)
- `adminAction` (enum, optional) — AgreedOnLiqOnlyModeByAutoLiq, AgreedOnLiquidationByAutoLiq, DisableAutoLiq, LiquidateImmediately, LiquidateOnlyModeImmediately, LockTradingImmediately, Normal, PlaceAutoLiqOnHold
  - Allowed values: `AgreedOnLiqOnlyModeByAutoLiq`, `AgreedOnLiquidationByAutoLiq`, `DisableAutoLiq`, `LiquidateImmediately`, `LiquidateOnlyModeImmediately`, `LockTradingImmediately`, `Normal`, `PlaceAutoLiqOnHold`
- `adminTimestamp` (datetime, optional)
- `liquidateOnly` (datetime, optional)
- `userTriggeredLiqOnly` (boolean, optional)
- `maxNetLiq` (double, optional) — $ Max Net Liq
- `minNetLiq` (double, optional) — $ Min Net Liq

## Examples

**Request**

```json
{
  "accountId": 1
}
```

**Response**

```json
{
  "errorText": "string",
  "accountRiskStatus": {
    "id": 1,
    "adminAction": "AgreedOnLiqOnlyModeByAutoLiq",
    "adminTimestamp": "2024-01-15T09:30:00Z",
    "liquidateOnly": "2024-01-15T09:30:00Z",
    "userTriggeredLiqOnly": true,
    "maxNetLiq": 1.1,
    "minNetLiq": 1.1
  }
}
```

**SDK Code**

```python
import requests

url = "https://live.tradovateapi.com/v1/accountRiskStatus/organizationadminunlockaccount"

payload = { "accountId": 1 }
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://live.tradovateapi.com/v1/accountRiskStatus/organizationadminunlockaccount';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"accountId":1}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://live.tradovateapi.com/v1/accountRiskStatus/organizationadminunlockaccount"

	payload := strings.NewReader("{\n  \"accountId\": 1\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://live.tradovateapi.com/v1/accountRiskStatus/organizationadminunlockaccount")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"accountId\": 1\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://live.tradovateapi.com/v1/accountRiskStatus/organizationadminunlockaccount")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"accountId\": 1\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://live.tradovateapi.com/v1/accountRiskStatus/organizationadminunlockaccount', [
  'body' => '{
  "accountId": 1
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://live.tradovateapi.com/v1/accountRiskStatus/organizationadminunlockaccount");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"accountId\": 1\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = ["accountId": 1] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://live.tradovateapi.com/v1/accountRiskStatus/organizationadminunlockaccount")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

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()
```