Key takeaways
- Solana token accounts opened before the rent reduction hold more SOL than they now need, because accounts keep the lamports they were created with and the rate fell from 6,960 to 5,080 lamports per byte.
- Excess rent on a Solana account opened at the old rate is (128 + data bytes) x 1,880 lamports, which is 0.00055084 SOL for a standard 165-byte SPL token account.
- The token programs' WithdrawExcessLamports instruction sends a token account's SOL above the rent-exempt minimum to the owner without closing the account or changing its token balance.
- WithdrawExcessLamports also works on token mints and multisig accounts, signed by the mint authority or the multisig signers, but not on wrapped SOL accounts.
- The SOLTidy Token Account Closer withdraws excess rent automatically from the token accounts you keep, for 5% of the SOL withdrawn, alongside closing empty accounts.
The short answer
Yes: if your token accounts were opened before Solana lowered rent, each one holds more SOL than it now needs, and you can withdraw the difference without closing it. For a standard SPL token account the surplus is 0.00055084 SOL; for a typical Token-2022 account it is about 0.00056 to 0.00059 SOL. The token programs' WithdrawExcessLamports instruction sends that surplus to you, while the account, its tokens and its address stay exactly as they were.
Why do older token accounts hold more SOL than they need?
Older token accounts hold more SOL because they were funded at the old rent rate, and Solana never takes a deposit back down. The rent-exempt minimum is (128 + data bytes) x lamports per byte. For years that rate was 6,960 lamports per byte; Solana has since lowered it to 5,080. A 165-byte SPL token account therefore needed 2,039,280 lamports when it was opened and needs 1,488,440 today.
An account keeps the lamports it was created with. Lowering the rate changed what new accounts must hold, not what existing accounts contain, so every token account opened before the change still carries the old deposit. The difference is 1,880 lamports per byte, which gives a simple formula:
Excess rent = (128 + data bytes) x 1,880 lamports
The deposit itself is explained in what Solana rent is. This post is about the surplus on accounts you are not ready to close.
How much excess rent does each account type hold?
Each account type holds a fixed surplus that depends only on its size. The figures below apply to accounts funded at the old rate; accounts opened after the change have none.
| Account type | Size | Funded at old rate | Minimum today | Excess you can withdraw |
|---|---|---|---|---|
| SPL token account | 165 bytes | 0.00203928 SOL | 0.00148844 SOL | 0.00055084 SOL |
| Token-2022 associated token account (typical) | 170 bytes | 0.00207408 SOL | 0.00151384 SOL | 0.00056024 SOL |
| Token-2022 account for a transfer-fee token | 182 bytes | 0.0021576 SOL | 0.0015748 SOL | 0.0005828 SOL |
| SPL token mint | 82 bytes | 0.0014616 SOL | 0.0010668 SOL | 0.0003948 SOL |
| SPL multisig account | 355 bytes | 0.00336168 SOL | 0.00245364 SOL | 0.00090804 SOL |
| Wrapped SOL account | 165 bytes | not applicable | not applicable | none; unwrap instead |
Token-2022 accounts vary with the extensions their mint uses, so treat the two Token-2022 rows as typical cases; the formula covers any other size, and the free Solana rent calculator gives today's minimum for any byte count, and the rent-exempt minimum for every account type lists the sizes of stake, NFT and program accounts too. If someone ever sent SOL directly to one of your token accounts, that is excess too, and the same instruction recovers it.
In wallet terms:
- 20 older accounts kept: about 0.011 SOL
- 100 older accounts kept: about 0.055 SOL
- 300 older accounts kept: about 0.165 SOL
Those are multiplication, not survey data. Closing an empty account returns far more, 0.00148844 or 0.00203928 SOL, so excess rent is for the accounts you are keeping, not a substitute for closing the ones you are done with. How much SOL you can recover from token accounts covers the closing side.
What does WithdrawExcessLamports actually do?
WithdrawExcessLamports moves every lamport above an account's rent-exempt minimum to a destination the authority chooses, and changes nothing else. It is instruction 38 in both the SPL Token program and Token-2022. Per Solana's documentation it works on three kinds of accounts owned by the token program, each with its own signer:
| Account | Who signs |
|---|---|
| Token account | The token account's owner, or its multisig signers |
| Mint with a mint authority | The mint authority |
| Mint whose authority was revoked | The mint account itself |
| Multisig account | The configured M-of-N signers |
The instruction will not take an account below its rent-exempt minimum, and it leaves token balances and mint supply untouched. Native wrapped SOL accounts are rejected with NativeNotSupported, because their extra lamports are the wrapped balance rather than rent; the Wrap & Unwrap SOL tool is the way to get those back.
For token creators, the mint row matters. A mint created before the rent change holds 0.0003948 SOL of excess, more if it uses Token-2022 extensions such as on-chain metadata. The mint authority can withdraw it with the same instruction. If you revoked the mint authority, as most launches should, the mint account itself has to sign, which is only possible where a program controls the mint or you still hold the mint's keypair.
How do you withdraw excess rent with the spl-token CLI?
The SPL Token CLI has a withdraw-excess-lamports command, and it costs nothing beyond the network fee. The usage, from the CLI source at the time of writing:
spl-token withdraw-excess-lamports <SOURCE_ACCOUNT_ADDRESS> <REFUND_ACCOUNT_ADDRESS>
The steps:
- Install a recent version of the SPL Token CLI; older builds do not have the command.
- Run
spl-token accounts --verboseto list your token accounts with their addresses. - For each account opened before the rent change, run the command above with the token account as the source and your wallet as the refund address.
- For Token-2022 accounts, add
--program-2022. In the CLI source I checked, this command does not detect the program from the account and defaults to the classic SPL Token program. - For a mint, use the mint's address as the source and sign as the mint authority with
--owner.
The CLI is the cheapest route, and if you already keep a keypair file I would use it; the companion commands for closing accounts are in closing token accounts with the spl-token CLI. The catch is the one that applies to every CLI cleanup: it is one account per command, it needs your key on disk or a hardware wallet configured in the terminal, and you have to work out which accounts are old yourself.
How does SOLTidy withdraw excess rent automatically?
The SOLTidy Token Account Closer includes excess rent in the same scan that finds empty accounts. After you connect a wallet, it reads every SPL Token and Token-2022 account, compares each one's balance with today's minimum for its size, and lists the surplus on the accounts you are not closing in an option under the summary, ticked by default. In practice:
- Accounts you keep get a
WithdrawExcessLamportsinstruction; tokens stay where they are. - Accounts you close do not need one, because closing returns the whole balance, surplus included.
- Wrapped SOL accounts are skipped, matching the program's own rule.
- Tiny surpluses below 10,000 lamports are left alone, since they are not worth an instruction.
Up to 12 items go into each transaction, mixing closes and withdrawals, and every batch is simulated before you sign, with any account that changed since the scan dropped. The fee is 5% of the SOL actually withdrawn or recovered, taken inside each transaction, and nothing when a transaction recovers nothing. On 100 older accounts that is about 0.0028 SOL of a 0.055 SOL withdrawal. The closer requests no token approvals and works with any Solana wallet.
One limit to be clear about: SOLTidy currently withdraws excess only from token accounts your wallet owns. It does not withdraw excess from mints or multisig accounts; for those, use the CLI as the mint authority.
Is it safe to withdraw excess rent?
Yes, and it is lower risk than closing. Nothing is burned, closed or transferred except lamports above the minimum, and the program itself enforces that the account stays rent-exempt. The usual safety rules still apply to whoever builds the transaction: check that the wallet preview shows SOL arriving and nothing leaving, and never give a website your key. Is it safe to close Solana token accounts covers how to judge a cleanup site.
Bottom line
Solana lowered rent from 6,960 to 5,080 lamports per byte, and every account funded before the change still holds the difference: 0.00055084 SOL per SPL token account, about 0.00056 to 0.00059 SOL per Token-2022 account, and 0.0003948 SOL per older SPL mint. WithdrawExcessLamports returns it without closing anything. Use spl-token withdraw-excess-lamports if you work in a terminal, or let the Token Account Closer withdraw excess rent for the accounts you keep while it closes the empty ones. I added it to SOLTidy because it is the one piece of rent you can recover from tokens you still hold.
Questions & answers
Can I get SOL back from a token account without closing it?
Yes, if the account was opened before Solana lowered rent. Such an account still holds the old deposit, which is more than today's minimum, and the WithdrawExcessLamports instruction sends the difference to you while the account stays open. For a standard SPL token account that is 0.00055084 SOL. An account opened after the change holds exactly the minimum, so there is nothing to withdraw.
Does withdrawing excess rent affect my tokens?
No. WithdrawExcessLamports moves only lamports above the account's rent-exempt minimum. The token balance, the mint, delegates and every other field stay as they were, and the account remains rent-exempt and open. You can keep holding, sending and trading the token exactly as before.
How do I know if my token accounts have excess rent?
Compare each account's lamport balance with the rent-exempt minimum for its size. A 165-byte SPL token account holding 2,039,280 lamports was funded at the old rate and has 550,840 lamports of excess; one holding 1,488,440 has none. A block explorer shows the balance, and the Solana rent calculator gives today's minimum. A closing tool that supports excess rent shows the total after a scan.
Can I withdraw excess rent from a token mint I created?
Yes, with the mint authority's signature. WithdrawExcessLamports accepts a mint account, and an 82-byte SPL mint created at the old rate holds 0.0003948 SOL above today's minimum. If the mint authority has been revoked, the instruction instead needs a signature from the mint account itself. The SOLTidy closer currently withdraws excess only from token accounts you own, not from mints.
Why can't I withdraw excess rent from wrapped SOL?
Because the extra lamports in a wSOL account are the wrapped SOL itself, not rent. The token program rejects WithdrawExcessLamports on native wSOL accounts with a NativeNotSupported error. To get SOL out of a wSOL account, unwrap it by closing the account, which returns both the wrapped balance and the rent deposit.
Is it worth withdrawing excess rent?
It depends on how many older accounts you keep. One account returns 0.00055084 SOL, which is not worth a separate effort. A wallet keeping 100 older token accounts holds about 0.055 SOL of excess, which is worth collecting while you are already closing empty accounts. The network fee is 5,000 lamports per transaction, small against several accounts per transaction.