Permissioned pools are only open to "addresses verified by the issuer." Regular Uniswap users cannot directly trade or add liquidity. If you try to interact with a permissioned pool on Uniswap and your address is not on the whitelist, the transaction will simply fail and you may waste gas. This article breaks down how to get whitelisted, how the trading path works, and what exit restrictions exist.

A leading global cryptocurrency platform,suitable for both beginners and experienced traders.
New user benefit: 20% off trading fees upon registration!!
First, understand which type of "permission" you are dealing with
Uniswap v4 permissioned pools are built on the hook mechanism. The pool itself is registered under Uniswap v4's PoolManager, but it also has a PermissionedHooks contract attached. Before every swap and liquidity addition, this hook checks whether your address holds the required permission.
There are two independent permission flags:
| Permission Flag | Meaning | Related Operation |
|---|---|---|
SWAP_ALLOWED | Allows swapping tokens in the pool | Buying/Selling |
LIQUIDITY_ALLOWED | Allows providing liquidity | Adding/Increasing LP positions |
The two flags are set separately. An address can have swap permission but not liquidity permission. If you plan to be a market maker, you need to confirm you have LIQUIDITY_ALLOWED, not just assume that "if I can trade, I can be an LP."
If an address is not on the whitelist, any operation will be rejected by the hook. Uniswap's official documentation clearly states: beforeSwap checks SWAP_ALLOWED, and beforeAddLiquidity checks LIQUIDITY_ALLOWED. Transactions without the required permission will revert. This is not a frontend block; it is a rejection at the on-chain contract level. You cannot bypass it by switching to another interface.
Where does the whitelist come from, and how do you know if you are on it
The whitelist is maintained by the issuer (or an operator designated by the issuer), not by Uniswap officially. The issuer deploys an IAllowlistChecker contract that returns permission flags for a given address through a standard interface. The Uniswap protocol itself does not handle identity verification or KYC documents.
You cannot "apply" for the whitelist on-chain. Permission is granted through an off-chain process — the issuer or its designated KYC service provider completes verification and then writes your address into the checker contract. Uniswap's API provides a check permissions endpoint that you can use before trading to query whether a wallet has permission for a specific token. If you are using an app that integrates the Uniswap API, the frontend may already include this pre-check. If the pre-check returns isAllowlisted: false, the result will include a kycUrl pointing to the verification portal designated by the issuer.
If you don't know whether your address is on the whitelist, the most direct way is to find the issuer's page or announcement for that permissioned pool, get the allowlist checker contract address, and then call checkAllowlist(your address) on a block explorer to see the return value. Permissions are represented as bit flags: 1 means SWAP_ALLOWED, and 2 means LIQUIDITY_ALLOWED.
Trading path: why you cannot just use the standard Uniswap interface
Swaps on permissioned pools cannot be completed directly through the standard PoolManager. In the whole process, what actually enters the pool for trading is not the underlying token you hold, but a "virtual token" created by a PermissionsAdapter contract.
The flow is roughly as follows:
You initiate a swap through the Universal Router (must be version 2.2.0 or higher);
The Router transfers your underlying permissioned token into the
PermissionsAdapter;The Adapter holds the underlying token and creates a virtual balance in the PoolManager;
The PoolManager uses this virtual balance to execute the swap;
PermissionedHooks.beforeSwapchecks whether your address hasSWAP_ALLOWED;After the trade is complete, the virtual token is converted back to the underlying token and sent to you.
You do not need to manually manage virtual tokens; the Router handles everything automatically. But this also means you must operate through an interface or contract that supports permissioned pool routing. If the standard Uniswap interface has not integrated the pre-check and routing logic for permissioned pools, your transaction will simply revert.
Exit restrictions: positions cannot be transferred, but you can always withdraw yourself
LP positions in permissioned pools are represented as NFTs, and these NFTs are non-transferable. Calling transferFrom or safeTransferFrom will revert with the error TransferDisabled. The design goal is to prevent verified addresses from transferring positions to unverified addresses and bypassing the whitelist.
But "non-transferable" does not mean "cannot exit." Decreasing liquidity and burning positions are never subject to permission checks. Even if you later lose LIQUIDITY_ALLOWED permission, or the issuer removes the hook, you can still call DECREASE_LIQUIDITY or BURN_POSITION to withdraw your assets. Uniswap's documentation explicitly states this: decreases and burns are never gated, so you can always withdraw.
The issuer has the power to force-close your position. The administrator of PermissionsAdapter (usually the issuer or its operator) can call unwindPosition(tokenId) to forcibly close any LP position. This operation destroys the NFT, removes liquidity, and returns the assets to the holder. If the holder is no longer able to receive a certain asset, that portion of the assets will be returned to the issuer of that asset, not to another issuer.
This means as an LP you need to accept one premise: you may be forcibly exited from your position by the issuer at any time, even if you are still on the whitelist. This is not a bug but a deliberate design choice for regulated assets. Before deciding to provide liquidity, you should read the issuer's allowlist policy like you would read fund terms, and confirm the trigger conditions for an unwind.

A leading global cryptocurrency platform,suitable for both beginners and experienced traders.
New user benefit: 20% off trading fees upon registration!!
Common pain points
Trading keeps failing with "insufficient permission." Your address does not have SWAP_ALLOWED, or the issuer has paused trading (updateSwappingEnabled set to false). First confirm your whitelist status, then check whether the issuer is in a paused state.
You want to add liquidity to a permissioned pool, but the transaction reverts. The most common reason is that you only have SWAP_ALLOWED but not LIQUIDITY_ALLOWED. Another possible reason is that the pool's PermissionedHooks has not yet been added to the allowed list by the Adapter administrator through updateAllowedHook. In that case, any mint will revert.
You cannot see your LP position in your wallet. Position NFTs in permissioned pools are managed by PermissionedPositionManager, not the standard PositionManager. If your wallet or portfolio tracker only indexes the standard PositionManager contract, it may not automatically show this NFT. You need to manually add the contract address to view it.
Where do assets go after being unwound? If the issuer forcibly closes your position, the underlying assets will be returned directly to your address. You can check the transfer records of the unwindPosition transaction on a block explorer to confirm receipt. If assets are not returned normally, check whether you still have the right to receive that asset — if the issuer has removed you from the allowlist, the assets will be returned to the issuer.


