> For the complete documentation index, see [llms.txt](https://docs.j.tools/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.j.tools/tools/secure/freeze-account.md).

# Freeze Account

Last updated: June 2026 · Solana mainnet

[Freeze Account](https://j.tools/en/tools/freeze-account) locks SPL token holder accounts for one mint in bulk, straight from your browser wallet on Solana mainnet. You hold the freeze authority, load holders, select the rows, and sign each freeze. There is a flat platform fee shown before you sign, and freezing is reversible by the freeze authority at any time.

You load the holders, protect any wallets you want to keep untouched, confirm you hold the freeze authority, and freeze the rows you select. Each row reports its own status, and any that fail can be retried on their own. Freezing only blocks transfers; it never moves tokens or changes total supply (more on [authorities](/concepts/authorities.md)).

This is for issuers and operators who hold the freeze authority on a mint and need to lock many accounts at once instead of running it wallet by wallet.

{% hint style="warning" %}
**About fees.** Every action has two costs: the Solana **network fee** paid to validators, and the **J Tools platform fee**. The platform fee always shows in the app before you confirm, and nothing is charged until you sign. Fees can change over time, so trust the in-app summary rather than a number you saw once.
{% endhint %}

## When to use this

* You hold the freeze authority on a mint and need to lock holder accounts.
* A compliance or incident-response situation calls for pausing specific wallets.
* You are running a staged rollout or vesting plan where transfers must stay paused for now.
* You want to freeze many holders in one pass rather than one-off scripts.

Freezing blocks transfers for a holder until you thaw the account. To reverse it later, use [Unfreeze Account](/tools/secure/unfreeze-account.md). New to the term? The [Glossary](/getting-started/glossary.md) explains the freeze authority and how it differs from mint authority.

## Before you start

* A connected wallet that is the **current freeze authority** of the target mint. If it is not, Freeze All stays disabled and execution returns "Connected wallet is not the freeze authority."
* The mint must have a freeze authority set. Mints with no freeze authority cannot be frozen.
* The token's mint address (CA). Pick it with the built-in token selector.
* Enough SOL for the network fees plus the platform fee.
* An RPC that can enumerate holders. Very large mints need an indexed endpoint, or the scan reports `FULL_HOLDER_SCAN_UNAVAILABLE`.

{% hint style="warning" %}
Freezing locks a holder's account so they cannot transfer or interact with that token until it is thawed. Only the freeze authority can reverse it. It does **not** change balances or total supply; it only blocks transfers.
{% endhint %}

## Step by step

{% stepper %}
{% step %}

### Connect the freeze authority

Connect the wallet that holds the freeze authority for the mint. The page checks this against the chain and only enables Freeze All when it matches.
{% endstep %}

{% step %}

### Load holders

Enter the mint address (CA) and click **Load Holders**. J Tools scans on-chain token accounts, sorts them by balance, and reports the freeze authority plus whether your connected wallet holds it.
{% endstep %}

{% step %}

### Protect wallets (optional)

Paste any wallets into the **Session Whitelist**, one per line. Matching holder rows are marked protected and forced off, so they cannot be frozen. The parser shows valid, invalid and duplicate line counts.
{% endstep %}

{% step %}

### Select the rows to freeze

Use the per-row checkbox, **Select All**, or **Clear Selection**. Already-frozen and protected rows cannot be selected. Review the stats panel before you run.
{% endstep %}

{% step %}

### Freeze and confirm

Click **Freeze All**. For each selected row, the tool builds a freeze transaction (auto-detecting classic SPL Token vs Token-2022), you sign it in your wallet, and the row updates to Success or Failed. Large batches run in chunks, so expect several signatures.
{% endstep %}

{% step %}

### Retry any failures

If some rows fail, click **Retry Failed** to re-run only those rows. Successful and idle rows are skipped.
{% endstep %}
{% endstepper %}

[**Open Freeze Account in the app →**](https://j.tools/en/tools/freeze-account)

{% hint style="info" %}
**About wallet warnings.** Some tools sign more than one thing in a single step, for example creating a token and its metadata together. Phantom can show a caution banner for these multi-step transactions. The banner is expected here and does not mean something is wrong. Read what you are signing, then approve.
{% endhint %}

## The options, explained

| Field                                         | What it does                                                                                                                                                                             |
| --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Token Mint Address (CA)                       | The SPL mint to manage. The page reads holders, decimals and the freeze authority from chain for this mint. Required.                                                                    |
| Session Whitelist                             | Wallets to protect for this session, one per line. Matching rows are marked protected and deselected so they cannot be frozen. Shows total, active, valid, invalid and duplicate counts. |
| Per-row select / Select All / Clear Selection | Choose which non-frozen, non-protected rows go into the batch. Protected and already-frozen rows cannot be selected.                                                                     |
| Freeze All                                    | Runs freeze transactions for the selected eligible rows. Disabled unless your wallet is the mint's freeze authority.                                                                     |
| Retry Failed                                  | Re-runs only the rows that failed in the previous batch.                                                                                                                                 |
| Load More                                     | Appears only when the scan was truncated. Extends the scan limit in steps, up to the cap.                                                                                                |

{% hint style="info" %}
The whitelist is **per session only** and is not saved. Re-enter the wallets you want to protect on every visit before you run a batch.
{% endhint %}

## What does freezing a Solana token account do?

| Freezing             | Effect                                                                                                      |
| -------------------- | ----------------------------------------------------------------------------------------------------------- |
| The holder's account | Locked. They cannot transfer or interact with this token until it is thawed.                                |
| Balances and supply  | Unchanged. Freezing never moves tokens or alters total supply.                                              |
| Reversibility        | Only the freeze authority can thaw the account, with [Unfreeze Account](/tools/secure/unfreeze-account.md). |

The estimated fee shown in the UI combines the per-row network fee for your selected rows with the platform fee. The platform fee is charged **once per batch run**, not once per holder, so a 50-holder freeze records a single platform fee, not fifty. The exact amounts appear in the in-app fee summary and on the [Fee schedule](/reference/fee-schedule.md).

## Why freeze with J Tools instead of the CLI?

Freezing accounts by hand means scripting `spl-token freeze` per holder, tracking which ones succeeded, and re-running failures yourself. Here is how the batch tool compares.

|                 | J Tools Freeze Account                                            | Manual CLI / one-off scripts               |
| --------------- | ----------------------------------------------------------------- | ------------------------------------------ |
| Setup           | No-code, runs in your browser wallet                              | Install the SPL toolchain, manage keypairs |
| Signing         | You sign each tx in your own wallet; keys never leave the browser | You handle raw keypairs on disk            |
| Holder list     | Scans and sorts on-chain holders for you                          | You query and parse accounts yourself      |
| Protect wallets | Built-in session whitelist forces rows off                        | You filter the list by hand                |
| Failures        | Per-row status with one-click **Retry Failed**                    | You re-run failed addresses manually       |
| Token-2022      | Auto-detected per mint                                            | You pick the right program flag yourself   |
| Fee             | One flat platform fee per run, shown before you sign              | Network fees only, but all the labor       |

## If something goes wrong

* **Connected wallet is not the freeze authority.** Freeze All is disabled or execution stops. Connect the wallet that holds the freeze authority for this mint.
* **No freeze authority on the mint.** A mint with no freeze authority cannot be frozen. There is nothing to do here.
* **Holder scan truncated.** Compare **Total Found** against **Loaded** in the stats panel. If they differ, use **Load More** to extend the scan before assuming full coverage.
* **`FULL_HOLDER_SCAN_UNAVAILABLE`.** Your RPC could not enumerate all holders for a large mint. Use an indexed endpoint that supports paginated account scans.
* **Some rows failed.** Click **Retry Failed** to re-run only those rows.

For the full list, see the [Error codes reference](/reference/error-codes.md).

## FAQ

<details>

<summary>Can I undo a freeze?</summary>

Yes. Freezing is reversible by the freeze authority. Thaw any account with [Unfreeze Account](/tools/secure/unfreeze-account.md). This is different from revoking the freeze authority, which is permanent.

</details>

<details>

<summary>Does freezing take tokens away from a holder?</summary>

No. Freezing only blocks transfers. The holder keeps their balance, and the total supply does not change. When you thaw the account, transfers work again.

</details>

<details>

<summary>Why did I have to sign more than once?</summary>

Each selected row is its own signed transaction, and large batches run in chunks. The platform fee rides on the first transaction only, so you pay it once per run even across many wallets.

</details>

<details>

<summary>Will my whitelist still be there next time?</summary>

No. The whitelist protects wallets for the current session only and is not stored. Paste the wallets you want to protect again on each visit before running a batch.

</details>

<details>

<summary>Does this work with Token-2022 mints?</summary>

Yes. The tool detects the token program from the mint and builds the freeze instruction for classic SPL Token or Token-2022 accordingly. See [SPL vs Token-2022](/concepts/spl-vs-token2022.md) for what changes between the two programs.

</details>

## Related tools

Working with the freeze authority? These pair naturally with this tool.

{% content-ref url="/pages/AnXiSeLCVZ7RYJxrfzEo" %}
[Unfreeze Account](/tools/secure/unfreeze-account.md)
{% endcontent-ref %}

{% content-ref url="/pages/3mfyP8upN3tiDTB59aRi" %}
[Revoke Freeze](/tools/secure/revoke-freeze.md)
{% endcontent-ref %}

{% content-ref url="/pages/TCncJTZtkEOhZQpOjCDM" %}
[Auto Freeze](/tools/secure/auto-freeze.md)
{% endcontent-ref %}

{% content-ref url="/pages/IkDuDGRTPYj2wcjtbIre" %}
[Holder Snapshot and Analytics](/tools/utilities/token-snapshot.md)
{% endcontent-ref %}

{% hint style="success" %}
**J Tools is non-custodial.** We never hold your private keys and never ask for them. Every transaction is built in your browser and signed by your own wallet. If any page ever asks you to paste a private key, stop, close it, and let us know.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.j.tools/tools/secure/freeze-account.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
