> 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/liquidity/liquidity-add-remove.md).

# Add or Remove Liquidity and Claim Fees

[Liquidity Add / Remove](https://j.tools/en/tools/liquidity-add-remove) is one screen for managing the liquidity positions your wallet already holds. Add capital to deepen a pool, withdraw part or all of a position, or claim the trading fees that have built up, across Raydium, Meteora, Orca, and PumpSwap. The page reads your live positions and the pool you target, then builds the exact add, remove, or claim instruction for each one. Positions run one after another, so your wallet prompts once per transaction rather than once per run.

## What it is

This tool manages an existing liquidity position end to end. Three tabs at the top decide the action: **Add**, **Remove**, and **Claim**. Add walks you through a short wizard (pick a token, pick a pool that holds it, fill the amounts). Remove and Claim run off a scan of the positions your wallet already owns, so you tick what you want to act on instead of pasting an address.

It covers Raydium (V4, CPMM, and CLMM), Meteora (DLMM), Orca (Whirlpool), and PumpSwap pools on Solana mainnet. If pools and LP tokens are new to you, the [DEXes and liquidity](/concepts/dexes-and-liquidity.md) concept page is a good primer.

## How it works (under the hood)

A liquidity pool holds a reserve of two tokens, for example SOL and your token. When you add liquidity you deposit both sides, and the pool mints you an LP token (or, on concentrated pools, records a position) that represents your share of the reserves. The current price is just the ratio of the two reserves, which is why the page auto-fills the second amount once you type the first: your deposit has to match the pool ratio or it would move the price against you. When you remove, you burn that LP token or close that position and the pool returns your share of both reserves plus the fees it earned while you were in. The amounts you get back follow the pool's current ratio, not the one you deposited at, so the split between the two tokens can differ from what you put in; that gap is impermanent loss, covered under troubleshooting below.

Pools come in two shapes, and the tool handles both:

* **Constant-product pools** (Raydium V4 and CPMM, PumpSwap) spread your liquidity across the entire price curve. You deposit both tokens at the current ratio and there is no range to set. Simple to add to, always earning across any price.
* **Concentrated pools** (Raydium CLMM, Meteora DLMM, Orca Whirlpool) let liquidity sit inside a chosen price band. DLMM goes a step further and slices the band into discrete bins. Concentrated liquidity earns more fees per dollar while price stays inside the range, and earns nothing once price leaves it. Because the range belongs to the position, adding on this screen tops up an existing position and inherits its range rather than opening a fresh one.

For Add, the page searches pools that hold the token mint you selected, surfaces the ones your wallet already has a position in first, and lets you pick. For Remove and Claim, it scans your wallet on connect and lists every position it finds with the amounts and accrued fees. Whatever you choose, the tool assembles the matching deposit, withdraw, or fee-collection instruction for that exact pool program and hands it to your wallet.

The platform fee attaches as a separate transfer inside the same transaction, so the action and the fee settle together, and the amount is shown above the Execute button before you sign.

## When to use it

* You manage post-launch LP positions across several Solana DEXs and want them on one screen instead of four.
* You want to add capital to deepen a pool, tightening the spread for traders and earning more fees.
* You want to pull capital out to take profit, rebalance, or cut exposure to a token.
* Trading fees have accrued on a position and you want to claim them without unwinding the whole thing.

## Before you start

* A connected wallet ([how to connect](/getting-started/quick-start.md)). The page blocks Execute until a wallet is connected, and Remove / Claim scan the wallet for positions the moment it connects.
* For Add: the mint of the token you want to provide. The pool search runs off that mint, so you pick the pool from a list instead of pasting an address.
* Funds for both sides of the pool you target, since adding deposits both tokens at the pool ratio.
* A small amount of SOL on hand for the network fee, any rent on new token accounts, and the platform fee shown above the Execute button.
* For concentrated pools (Raydium CLMM, Meteora DLMM, Orca Whirlpool): an existing position in that pool, since adding inherits the range from it.

## Step by step

This walks through the **Add** wizard. For Remove and Claim, connect your wallet, let the scan list your positions, tick the ones you want (set a 25 / 50 / 75 / 100% slice on Remove), and press the action button.

{% stepper %}
{% step %}

### Connect and open the Add tab

Connect your wallet, then switch to the **Add** tab. The page opens on Remove, so click Add to start the wizard.
{% endstep %}

{% step %}

### Pick the token

Paste or search the token mint in the selector. This is the standard J Tools token selector, not a free-text address field. The mint you choose drives the pool search.
{% endstep %}

{% step %}

### Pick the pool

The page lists pools that hold your token, paginated. Pools your wallet already has a position in show up first under **Your pools** (tagged so you can spot them); the rest follow with their DEX, price, 24h volume, and TVL. Use Prev / Next to page through, then click a pool to select it.
{% endstep %}

{% step %}

### Fill the amounts

Type an amount on either side and the other side auto-fills to the pool ratio. Each side shows your wallet balance with a **MAX** shortcut (MAX on the SOL side keeps a margin back for fees and rent). For concentrated pools (Raydium CLMM, Meteora DLMM, Orca Whirlpool), you need an existing position in that pool to add to, since the range is inherited from it.
{% endstep %}

{% step %}

### Tune advanced settings (optional)

Open **Advanced** to set slippage (0.5%, 1%, 2%, or 5%), transaction speed (Normal, Fast, or Turbo priority fee), and the fixed side (which token stays exact while the other flexes to the ratio). Defaults are 1% slippage, Normal speed, and the side you typed last.
{% endstep %}

{% step %}

### Execute

The platform fee shows just above the button. Press Execute. Your wallet approves each transaction in turn, then you get per-position rows with a transaction signature and a Solscan link to follow it.
{% endstep %}
{% endstepper %}

[**Open Liquidity Add / Remove in the app →**](https://j.tools/en/tools/liquidity-add-remove)

## The options, explained

These are the Add-wizard controls. Remove and Claim run off the scanned positions table instead.

* **Tab:** `Remove`, `Add`, or `Claim`. Remove and Claim list your scanned positions; Add opens the token-to-pool-to-amounts wizard.
* **Token:** the mint you want to provide, set through the standard token selector. It drives the pool search.
* **Pool:** picked from the list of pools that hold your token. Pools you already have a position in surface first under Your pools; each row shows DEX, price, 24h volume, and TVL.
* **Amounts:** one side per token. Type either side and the other auto-fills to the pool ratio. MAX fills from your wallet balance and keeps a margin on the SOL side for fees and rent.
* **Slippage:** Advanced setting of 0.5%, 1%, 2%, or 5%. Default is 1%. It is the price drift you tolerate between preview and execution.
* **Speed:** Advanced setting of Normal, Fast, or Turbo priority fee. Default is Normal. Higher speed pays more for faster inclusion when the network is busy.
* **Fixed side:** Advanced setting for which token stays exact while the other flexes to the ratio. Defaults to the side you typed last.

On Remove, the positions table adds a 25 / 50 / 75 / 100% slice control per position so you can withdraw part of it. Meteora DLMM offers a full 100% exit only.

One run carries at most 25 positions. Tick more than that and only the first 25 are prepared, so split a larger set into several runs.

## 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.05 SOL per position action (add, remove, or claim).** The amount is fixed in the app and baked into the transfer your wallet signs, and it is shown above the Execute button before you sign. Add is always billed as one position; Remove and Claim charge one fee per position you ticked.

| Cost                 | Amount                                             |
| -------------------- | -------------------------------------------------- |
| J Tools platform fee | 0.05 SOL per position action                       |
| Solana network fee   | a small amount per transaction, paid to validators |

Example: 3 position actions cost about 0.15 SOL in platform fees.

On top of the platform fee you pay the usual Solana network fees. The base transaction fee is a few thousand lamports (a tiny fraction of a SOL), and the priority fee scales with the speed you pick under Advanced. Adding to a pool may also create token accounts, which carry a small refundable rent deposit (returned to you when an account is later closed). The MAX shortcut on the SOL side leaves a margin so the action does not fail for being a hair short on lamports.

## Common mistakes and troubleshooting

* **No pools found.** The search returned nothing for that token. Check the mint, or page through with Next, since not every pool is indexed. Pools your wallet already holds still show up under Your pools even when the index misses them.
* **Position required.** Concentrated pools (Raydium CLMM, Meteora DLMM, Orca Whirlpool) only add to an existing position, since the range is inherited. Create the position on the source DEX or via [Create LP](/tools/liquidity/create-lp.md) first, then come back to top it up.
* **Amount rejected.** At least one side has to be a number greater than zero. Type a fresh value and let the other side auto-fill.
* **Out of range.** A concentrated position earns fees only while price sits inside its band. If price has moved past your range, the position stops earning and may end up all one token. Either widen or reset the range from the source DEX, or remove and redeploy around the current price.
* **Impermanent loss.** When the price ratio shifts after you deposit, the pool rebalances your two tokens, and the dollar value of your share can end up below simply holding the tokens. Fees earned offset this, but on a volatile pair the gap can be real. Weigh expected fees against likely price swings before committing capital, and treat a large remove the same way you would a sale.
* **Transaction failed or expired.** Each run is prepared against a recent Solana blockhash, and that blockhash goes stale quickly. Leave a wallet prompt sitting and the transaction comes back expired, so press Execute again for a freshly prepared run instead of re-signing the old prompt. Congestion can drop a transaction too: raise the speed under Advanced and confirm you have enough SOL for fees and rent before you retry.

For the full list and what each code means, see the [Error codes reference](/reference/error-codes.md).

## Advanced tips

* Claim accrued fees periodically instead of letting them sit. On concentrated pools, fees do not compound into your position, so collecting and redeploying them keeps your capital working.
* When topping up a concentrated position, check that price is still inside the range first. Adding to an out-of-range position just parks more capital that earns nothing until price returns.

## Related tools

{% content-ref url="/pages/QT0nYfDbGpJo4Cm5Tbs6" %}
[Create a Solana Liquidity Pool](/tools/liquidity/create-lp.md)
{% endcontent-ref %}

{% content-ref url="/pages/EySFBE8ku57pLjq1HfJQ" %}
[My Liquidity Positions](/tools/liquidity/my-pools.md)
{% endcontent-ref %}

{% content-ref url="/pages/wzTSdddfnEFKadxZXdPR" %}
[Solana Token Swap](/tools/trade/swap.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/liquidity/liquidity-add-remove.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.
