> 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.

# Partner Account Lock and Unlock

> How a partner organization locks and unlocks funded subaccounts from the Admin Dashboard or the API, and how it fits into the subaccount lifecycle

## At a Glance

* When enabled for your organization, lock and unlock are two partner-controlled levers on a Live funded subaccount: **lock** holds it to closing orders only, and **unlock** clears an eligible lock.
* Locking puts the subaccount in liquidate-only mode (`LiquidateOnlyModeImmediately`), recorded with the `PartnerPayoutLock` reason code: the account can close open positions but can't open new ones.
* Unlocking clears a system risk lock (`RestrictedRiskRestriction`) or a partner lock (`PartnerPayoutLock`), but not compliance, anti-money-laundering, treasury, W-8, or account-closure locks.
* Unlocking doesn't automatically restore trading. If the condition that locked the account still applies, the risk engine re-locks it right away.
* Confirm results from the response body, not the HTTP status: a rejected lock or unlock returns an `HTTP 200` with an `errorText`. A subaccount is locked when its `adminAction` is `LockTradingImmediately`, `LiquidateOnlyModeImmediately`, or `LiquidateImmediately`, or when its `liquidateOnly` timestamp is set — check both fields. Locks differ in severity: `LiquidateOnlyModeImmediately` and a set `liquidateOnly` still allow closing orders, while `LockTradingImmediately` and `LiquidateImmediately` reject every order.

## Lock and Unlock in the Subaccount Lifecycle

A Live funded subaccount can be locked and unlocked over its life. It locks when it breaches a risk rule and auto-liquidates, holding it to closing orders only, and it's unlocked so the trader can resume. This page covers the two partner controls for that: lock and unlock.

Some of this happens automatically: the system locks a subaccount when it breaches a risk rule and auto-liquidates, and it can unlock a risk-locked subaccount automatically when you re-grant its trading permission.

These two partner controls cover what isn't automatic: use **lock** to place a payout hold the system never applies on its own, and use **unlock** to clear an eligible lock directly, such as reversing a payout hold your organization set.

## Locking or Unlocking in Bulk

In the Admin Dashboard, you can select multiple subaccounts and run lock or unlock on all of them at once. The action runs on every selected account, and the confirmation reports how many accounts it's acting on.

A server rejection is reported per account, and the run continues to the next account, so one rejected account doesn't stop the rest. Only a client-side validation error stops the run. The confirmation closes when the run finishes, even if every account was rejected, so verify the outcome by re-checking each subaccount's `adminAction` rather than assuming the run succeeded.

## Which Locks You Can Manage

You can unlock the two types of locks: a system risk lock (`RestrictedRiskRestriction`) and a partner lock (`PartnerPayoutLock`) you already set.

Compliance, anti-money-laundering, treasury, W-8, and account-closure locks are rejected, and so is a lock recorded only with the generic `Other` code. To resolve one of those locks, contact NinjaTrader Support.

## How to Lock and Unlock a Subaccount

### Prerequisites

Before you start, make sure you have the following:

* The feature enabled for your organization. NinjaTrader enables it per organization, so work with the NinjaTrader Support team to turn it on. Organization administrators can't enable it themselves.
* Organization administrator access.
* The Live funded subaccounts you want to manage, which must be in your own organization.

### Lock a Subaccount

A partner lock puts a funded subaccount in liquidate-only mode (`LiquidateOnlyModeImmediately`): the account can close open positions but can't open new ones. It's recorded with the `PartnerPayoutLock` reason code, which marks it as your organization's own lock, separate from a system risk lock or a compliance lock.

A partner lock never overrides a stronger lock. The check reads the subaccount's `adminAction`: if it's already `LockTradingImmediately` or `LiquidateImmediately`, the request is rejected with `Account has an existing lock - contact Tradovate`. Work with NinjaTrader Support to resolve it. Locking a subaccount that's already in liquidate-only mode has no further effect, and its response is indistinguishable from a successful lock — an `HTTP 200` carrying the account's risk status, with no `errorText`.

#### Admin Dashboard

1. From the Admin Dashboard (**Live** domain), click **Query Builder** on the left pane.
2. In **Repository Name**, select **accounts** from the dropdown.
3. Run the query and select the subaccounts you want to lock.
4. Click **Actions** and select **Lock (partner)**.
5. Review the current lock state, add an optional reason, and click **Submit**.

#### API

1. Call [`organizationAdminLockAccount`](/eval/api/rest-api-endpoints/risks/organization-admin-lock-account).
2. Enter the `accountId` of the account you want to lock.
3. (Optional) Enter a reason (up to 8,192 characters) to be recorded with the action.

**Production**: `https://live.tradovateapi.com/v1/accountRiskStatus/organizationadminlockaccount`\

**Development**: `https://live-api.staging.ninjatrader.dev/v1/accountRiskStatus/organizationadminlockaccount`

Send a POST request with this JSON body:

```json
{
  "accountId": 131838,
  "reason": "Payout hold pending review"
}
```

### Unlock a Subaccount

A partner unlock clears an eligible lock so the trader can attempt to resume. It clears two kinds of locks:

* A **system risk lock** (`RestrictedRiskRestriction`), applied by auto-liquidation or a drawdown or evaluation breach, and
* A **partner lock** (`PartnerPayoutLock`) that your organization set itself.

It doesn't clear compliance, anti-money-laundering, treasury, W-8, or account-closure locks. A request against one of those is rejected, and you contact NinjaTrader Support to resolve it. Unlocking a subaccount that has no active lock reports that there's no active lock rather than failing.

> **Info**
>
> Unlocking doesn't by itself restore trading. If the risk condition that locked the account still applies, the risk engine re-locks the account immediately, and the trader may still need trading permission and funding.

#### Admin Dashboard

1. From the Admin Dashboard (**Live** domain), click **Query Builder** on the left pane.
2. In **Repository Name**, select **accounts** from the dropdown.
3. Run the query and select the subaccounts you want to unlock.
4. Click **Actions** and select **Unlock (partner)**.
5. Review the current lock state, add an optional reason, and click **Submit**.

After you confirm, the Admin Dashboard reports whether the unlock was submitted and repeats that unlocking alone doesn't restore trading.

#### API

1. Call [`organizationAdminUnlockAccount`](/eval/api/rest-api-endpoints/risks/organization-admin-unlock-account).
2. Enter the `accountId` of the account you want to unlock.
3. (Optional) Enter a reason (up to 8,192 characters) to be recorded with the action.

**Production**: `https://live.tradovateapi.com/v1/accountRiskStatus/organizationadminunlockaccount`\

**Development**: `https://live-api.staging.ninjatrader.dev/v1/accountRiskStatus/organizationadminunlockaccount`

Send a POST request with this JSON body:

```json
{
  "accountId": 131838,
  "reason": "Unlock after manual review"
}
```

### Confirming the Result

A rejected lock or unlock request doesn't come back as an error: it returns an `HTTP 200` with an `errorText` field explaining why, and leaves the account's risk status unchanged.

> **Warning**
>
> Since a rejected lock or unlock comes back as an `HTTP 200` instead of an error, check the response body for `errorText` rather than relying on the HTTP status. A `200` alone doesn't confirm the action succeeded.

To confirm a subaccount's current lock state, read the account risk status the lock and unlock responses return, or fetch it with [`accountRiskStatusList`](/eval/api/rest-api-endpoints/risks/account-risk-status-list). Two fields carry it, and you need both:

* `adminAction` — the subaccount carries an admin or partner lock when this is `LockTradingImmediately`, `LiquidateOnlyModeImmediately`, or `LiquidateImmediately`. Every other value, including `Normal`, `PlaceAutoLiqOnHold`, and `DisableAutoLiq`, and an empty `adminAction`, mean no such lock is in place.
* `liquidateOnly` — a timestamp the risk engine sets when it holds the account to closing orders. It works independently of `adminAction`: while it's set, new orders are rejected even if `adminAction` reads `Normal`, and a partner unlock doesn't clear it.

The reason codes that identify where a lock came from — `PartnerPayoutLock`, `RestrictedRiskRestriction`, and the compliance codes — are recorded with the action and visible in the Admin Dashboard, but the API doesn't return them, so you can't use them to determine lock state.

## Related Account Controls

Partner lock and unlock are the self-service actions for Live funded subaccounts. They're separate from two other controls:

* **Change Lock** ([`setAdminAutoLiqAction`](/eval/api/rest-api-endpoints/risks/set-admin-auto-liq-action)) is the account-lock action in Demo. For the Change Lock steps, see [Lock and Halt Individual Accounts](/eval/overview/prop-firm-management/halt-trading/immediate-trading-halts#lock-and-halt-individual-accounts).
* [Manual lockouts](/eval/overview/prop-firm-management/risk-management-setup#manual-lockouts) are a trader's self-lockout, not a partner action.