> 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/unfreeze-account.md).

# Unfreeze Solana Token Accounts in Batch

[Unfreeze Token Account](https://j.tools/en/tools/unfreeze-account) thaws frozen holder accounts for a single mint, in bulk, from one terminal. You load the frozen holders, optionally protect specific wallets with a session whitelist, select who to thaw, and sign each thaw with the wallet that holds the [freeze authority](/concepts/authorities.md). It turns transfers back on for accounts you froze earlier, on your schedule, row by row.

## What it is

Unfreeze Token Account is a batch thaw tool for one SPL or [Token-2022](/concepts/spl-vs-token2022.md) mint. It sends a separate thaw transaction for each account you select, and each row carries its own status, so a partial run is normal and you can rerun only the failures. After a thaw lands, that account can send and receive the token again.

It is the exact reverse of [Freeze Account](/tools/secure/freeze-account.md). Freeze disables transfers on a holder account; unfreeze re-enables them. Neither one touches the authority itself, so you keep the power to freeze again later.

## Why use this tool

If you froze a batch of holders during a launch, a migration, or an incident, you eventually need to give those accounts their tokens back. Doing that one wallet at a time means hunting down every frozen account, building a thaw for each, and signing them by hand. That is slow and easy to get wrong, especially when you froze dozens or hundreds of accounts at once.

This tool is for teams and individual issuers who hold the freeze authority and need controlled recovery. You scan the mint once, see only the accounts that are actually frozen, protect the wallets that should stay frozen (treasury, team, anything still under review), and thaw the rest in batches.

## How it works (under the hood)

For each selected row, the tool builds one **thaw-account instruction** against the SPL Token program (or the Token-2022 program, depending on which one owns the mint). A thaw instruction names a single token account and reverses the freeze on it, restoring that account's ability to transfer. The mint's freeze authority is the required signer for that instruction, which is why the connected wallet has to be the freeze authority for the run to go through.

Before scanning, the page reads the mint to learn its token program and its current freeze authority, then checks whether your connected wallet matches. When it loads holders, it lists only accounts whose state is frozen, sorted by token amount. Each thaw is its own transaction, one account per transaction, so a batch is a series of transactions rather than a single packed one.

The platform fee is attached as a separate instruction inside the first thaw transaction of the run that actually confirms, so the fee is charged once per batch, not once per row. If the first row fails the fee moves to the next attempt, and if no row confirms, no platform fee is collected. Retry Failed reuses the collected state instead of charging a second time.

## When to use it (and when not to)

Use it when:

* You froze holder accounts earlier and now need to restore transfers in bulk.
* You hold the freeze authority for the mint and want controlled, row-by-row recovery instead of thawing each wallet by hand.
* You want to unfreeze most holders while keeping treasury, team, or operational wallets excluded.

Skip it when:

* You do not hold the freeze authority. Only the authority can thaw, so the run is blocked without it.
* You want to give up freeze power for good. That is [Revoke Freeze](/tools/secure/revoke-freeze.md), which permanently removes the authority so no account on the mint can ever be frozen again.
* You are trying to freeze accounts, not thaw them. Use [Freeze Account](/tools/secure/freeze-account.md) for that.

## Before you start

* A connected wallet that is the mint's **freeze authority**. Without it, Unfreeze All is blocked.
* A valid SPL or Token-2022 mint address (the CA) that currently has frozen holder accounts. Pick it with the built-in token selector.
* Enough SOL in the signing wallet for the platform fee plus a small network fee per thaw transaction.
* At least one selected, non-whitelisted frozen row before you run.

{% hint style="warning" %}
Only the freeze authority can thaw accounts. If the connected wallet is not the authority, execution is blocked with **"Connected wallet is not the freeze authority."** Connect the wallet that holds it.
{% endhint %}

## Step by step

{% stepper %}
{% step %}

### Connect the freeze authority

Connect your wallet through the wallet source selector at the top of the page. This wallet signs every thaw, so it must be the one that holds the mint's freeze authority.
{% endstep %}

{% step %}

### Enter the mint and load holders

Enter or pick the token mint (CA) with the selector, then click **Load Holders**. The page scans the mint and shows only the holder accounts that are currently frozen, sorted by token amount. It also reads the freeze authority and whether your wallet holds it.
{% endstep %}

{% step %}

### Protect wallets you want to keep frozen

Paste any wallet addresses into the **Session Whitelist**, one per line. Those owners are marked **protected** and are excluded from selection and execution for this session. The stats panel shows total, active, valid, invalid, and duplicate lines as you type.
{% endstep %}

{% step %}

### Review and select

Check the stats panel (Loaded, Total Found, Protected, Selected, Success, Failed, Estimated Fee, Freeze Authority). Use **Select All** or **Clear Selection**, or tick rows one by one. Protected rows cannot be selected.
{% endstep %}

{% step %}

### Unfreeze and sign

Click **Unfreeze All**. Sending starts the moment you click, with no extra confirm step, so check your selection and protect list first. Each selected row builds its own thaw transaction, you sign with the active wallet, the tool confirms it, and the row updates to **SUCCESS** or **FAILED** on its own. Each selected row is its own transaction, so a set of N rows means N wallet approvals.
{% endstep %}

{% step %}

### Retry anything that failed

If some rows show **FAILED**, click **Retry Failed** to rerun only those. If the holder set was truncated, use **Load More** to scan further before retrying.
{% endstep %}
{% endstepper %}

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

{% hint style="info" %}
**About wallet warnings.** Some tools bundle several instructions into one transaction, for example creating a token and its metadata together. Phantom can show a caution banner for these transactions. The banner is expected here and does not mean something is wrong. Read what you are signing, then approve.
{% endhint %}

## The options, explained

* **Token Mint Address (CA):** The SPL or Token-2022 mint whose frozen holder accounts you want to thaw. Entered through the shared token selector and validated as a base58 address before the scan runs.
* **Session Whitelist:** Optional protect list. One wallet address per line. Whitelisted owners are marked protected and left out of both selection and execution for this session only. It clears on refresh.
* **Frozen Holder Rows:** Load Holders shows only accounts that are currently frozen, sorted by amount. Each row has its own checkbox and its own SUCCESS or FAILED status. Protected rows cannot be picked.
* **Active wallet (signer):** The connected wallet that signs each thaw. It must be the freeze authority, or Unfreeze All stays disabled.
* **Select All / Clear Selection:** Bulk toggles for the loaded rows. Select All skips any protected rows, so it only ever selects accounts you are allowed to thaw.
* **Unfreeze All:** Thaws every selected, non-protected row, building and signing one thaw transaction per account.
* **Retry Failed:** Reruns only the rows that ended in FAILED, leaving the ones that already succeeded untouched.
* **Load More:** Appears when the scan was truncated. The first Load Holders returns up to 500 token accounts; each Load More adds another 500, up to a hard ceiling of 2,000, after which the button is disabled. This ceiling is much lower than Freeze Account's 50,000, so a mint with more than 2,000 holders can only ever be scanned down to its 2,000 largest.

## Fees and costs

{% 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 %}

**Current platform fee: 0.01 SOL.**

| Cost                 | Amount                                                                     |
| -------------------- | -------------------------------------------------------------------------- |
| J Tools platform fee | 0.01 SOL                                                                   |
| Solana network fee   | a small amount paid to validators, plus rent for any new on-chain accounts |

On top of the platform fee, each thaw pays a small Solana network fee, charged per transaction. Because every account is its own transaction, the network portion scales with how many rows you thaw in a run. A thaw does not allocate any new account, so there is no extra rent to pay here. Read the in-app fee summary before you run, since it combines the per-row network fee with the platform fee for the rows you selected.

## Common mistakes and troubleshooting

* **Connected wallet is not the freeze authority.** Only the authority can thaw. Connect the wallet that holds it, or double-check the mint address.
* **No rows loaded.** The mint may have no frozen holders right now, or the scan was truncated. Try Load More if the set looked cut off.
* **Some rows failed.** Each row is independent. Click Retry Failed to rerun only those without touching the ones that already succeeded.
* **Protected wallet got thawed by mistake.** Re-add it to the whitelist before the next run. The whitelist is session-only, so it clears on refresh.

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

## Advanced tips

* Sequence it with [Freeze Account](/tools/secure/freeze-account.md) for staged launches: freeze the whole holder set at mint, then thaw in waves as wallets clear your checks.
* Build your protect list before you click Load Holders, then paste it in one go. Since the whitelist is session-only, keep the addresses in a note so you can re-paste them after a refresh.
* For larger holder sets, run in passes: Load Holders, Select All, Unfreeze All, then Load More and repeat. Retry Failed cleans up stragglers without re-thawing accounts that already succeeded. Be aware of the ceiling: the scan tops out at 2,000 token accounts and keeps the largest balances, so frozen accounts outside the 2,000 biggest holders will not appear. For a mint that big, thaw in waves as balances change, or work from a known address list you kept when you froze.

## Related tools

{% content-ref url="/pages/AJII3m16ZBzG4vCxHzTz" %}
[Freeze Token Accounts](/tools/secure/freeze-account.md)
{% endcontent-ref %}

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

{% content-ref url="/pages/gbx1RbByQOVKZzt0PQkP" %}
[Make a Token Immutable](/tools/secure/make-immutable.md)
{% endcontent-ref %}

{% hint style="success" %}
**J Tools is non-custodial.** We never store or transmit your private keys and never ask for your seed phrase. Every transaction is signed in your own browser, and nothing about a key ever reaches our servers. A few multi-wallet tools do let you paste private keys for throwaway hot wallets, which stay in your browser tab and are used only to sign locally. Never paste a key tied to long-term holdings, and if a page ever asks for your seed phrase, stop and close it.
{% 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/unfreeze-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.
