LLMs.txt: agent-readable Markdown index of this site at /llms.txt

Swapping on Tokenized Pools

Swap tokens in tokenized pools on Uniswap v4 and gate permissioned tokens in your app using the Uniswap API check permissions endpoint.

Some tokens on Uniswap v4 trade through permissioned pools, also called tokenized pools, which restrict swaps and liquidity provisioning to allowlisted addresses. Before a wallet can swap one of these tokens, your app must confirm the wallet is allowlisted. The Uniswap API exposes a check permissions endpoint for this purpose. This check is a client-side safeguard for user experience: the swap endpoints reject transactions from wallets that are not allowlisted regardless, so a token never becomes tradable just because an app skips the check.

Check Permissions Before Swapping

Send the connected wallet and the tokens it wants to trade to the check permissions endpoint. The request accepts up to two tokens.

POST https://trade-api.gateway.uniswap.org/v1/permissions
{
  "walletAddress": "0xC9bebBA9f481b12cE6f3EA54c4B182c9636ec421",
  "tokens": ["0x1111111111111111111111111111111111111111"],
  "chainId": 1
}

Handle the Response

isPermissioned describes the token, meaning whether it trades through a permissioned pool. isAllowlisted describes the connected wallet, meaning whether that wallet may trade the token. Each token returns a result with one of three shapes:

{
  "requestId": "e63f1e1e-b9e9-411a-bcc8-ff18ce4e77cf",
  "results": [
    {
      "token": "0x1111111111111111111111111111111111111111",
      "isPermissioned": true,
      "isAllowlisted": false,
      "adapterTokenAddress": "0x2222222222222222222222222222222222222222",
      "kycUrl": "https://your-kyc-provider.example/verify",
      "issuer": "Your Issuer Name"
    }
  ]
}
  • Not permissioned: isPermissioned is false. No token in the request requires permission to trade, so proceed to quoting and swapping normally.
  • Permissioned and allowlisted: isPermissioned and isAllowlisted are both true. Trade normally.
  • Permissioned and not allowlisted: isAllowlisted is false and the result includes a kycUrl. Direct the user to complete verification. The result also includes issuer, the KYC provider display name, so you can tell the user who runs the verification.

Gate Your Interface

For a wallet that is not allowlisted, let the user quote the token so they can see prices, but block transaction submission to avoid reverts and a confusing experience. Link the user to the kycUrl so they can complete verification.

Check permissions before submitting. The swap endpoints reject transactions from wallets that are not allowlisted, so a pre-check avoids failed requests and wasted gas.

Set the Universal Router Version

Quotes and swaps that involve a permissioned token must use Universal Router 2.2.0 or higher. Send the version header when any token in the request is permissioned.

x-universal-router-version: 2.2.0

Routing Behavior

Routing will not send a user through a permissioned pool they are not allowed to trade in. Permissioned tokens are matched only as the input or output of a trade, never as an intermediate hop, so a disallowed user is never routed through a restricted token. For example, a permissioned token to USDC to ETH route is supported for an allowlisted user, while an unrelated trade routed through a permissioned token is not.

Providing Liquidity

This page covers the swap path through the API. Liquidity provision is gated by the same allowlist: the permissioned hook checks LIQUIDITY_ALLOWED on beforeAddLiquidity, and positions are minted through the Permissioned Position Manager, which enforces the allowlist and issues non-transferable position NFTs. For the contract details, see Permissioned Pools Architecture and Deploy a Permissioned Pool.

Where to Go Next