> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dexutils.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Pools API: Liquidity Pool Data, TVL, and Statistics

> Use GET /networks/{network}/pools to list and filter pools by TVL, volume, and DEX. Retrieve full stats and trust scores for any individual pool address.

The Pools API gives you access to real-time liquidity pool data across every DEX and network that DexUtils indexes. You can list pools on a network with flexible filters — by DEX, token, TVL range, and sort order — or drill down into a specific pool address to retrieve its full statistics, LP holder count, and DexUtils trust score. Both endpoints are designed for building pool explorers, screeners, and liquidity dashboards.

## List Pools on a Network

```http theme={null}
GET /networks/{network}/pools
```

Returns a paginated list of liquidity pools on the specified network. Apply query parameters to filter and sort results to your needs.

### Path Parameters

<ParamField path="network" type="string" required>
  The network to query (e.g. `ethereum`, `bsc`, `solana`). Retrieve valid network IDs from `GET /networks`.
</ParamField>

### Query Parameters

<ParamField query="dex" type="string">
  Filter results to pools belonging to a specific DEX. Use the DEX `id` values returned by `GET /networks/{network}/dexes` (e.g. `uniswap_v3`, `sushiswap`).
</ParamField>

<ParamField query="token" type="string">
  Filter to pools that contain this token's contract address as either `token0` or `token1`.
</ParamField>

<ParamField query="min_liquidity" type="number">
  Return only pools with TVL (in USD) greater than or equal to this value. Useful for excluding low-liquidity pools from your results.
</ParamField>

<ParamField query="max_liquidity" type="number">
  Return only pools with TVL (in USD) less than or equal to this value.
</ParamField>

<ParamField query="sort" type="string" default="liquidity">
  Field to sort results by. Accepted values:

  * `liquidity` — total value locked in USD
  * `volume_24h` — 24-hour trading volume in USD
  * `created_at` — pool creation timestamp
  * `fee_24h` — fees collected in the past 24 hours
</ParamField>

<ParamField query="order" type="string" default="desc">
  Sort direction. Accepted values: `desc` (highest first) or `asc` (lowest first).
</ParamField>

<ParamField query="limit" type="integer" default="20">
  Number of pools to return per page. Maximum value is `100`.
</ParamField>

<ParamField query="page" type="integer" default="1">
  Page number for paginated results. Combine with `limit` to traverse large result sets.
</ParamField>

### Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  # Top 5 Uniswap V3 pools by 24h volume, minimum $1M TVL
  # Replace the token below with your actual API key from the DexUtils dashboard
  curl "https://api.dexutils.io/v1/networks/ethereum/pools?dex=uniswap_v3&min_liquidity=1000000&sort=volume_24h&limit=5" \
    -H "Authorization: Bearer dxu_sk_live_4f8a2bcd9e1f3a7056c8d2e94b0f1c63"
  ```

  ```python Python theme={null}
  import requests

  # Replace with your actual API key from the DexUtils dashboard
  url = "https://api.dexutils.io/v1/networks/ethereum/pools"
  headers = {"Authorization": "Bearer dxu_sk_live_4f8a2bcd9e1f3a7056c8d2e94b0f1c63"}
  params = {
      "dex": "uniswap_v3",
      "min_liquidity": 1_000_000,
      "sort": "volume_24h",
      "limit": 5,
  }

  response = requests.get(url, headers=headers, params=params)
  data = response.json()

  for pool in data["pools"]:
      print(f"{pool['name']} — TVL: ${pool['liquidity_usd']}")

  print(f"Total matching pools: {data['total']}")
  ```

  ```javascript JavaScript theme={null}
  // Replace with your actual API key from the DexUtils dashboard
  const params = new URLSearchParams({
    dex: "uniswap_v3",
    min_liquidity: 1_000_000,
    sort: "volume_24h",
    limit: 5,
  });

  const response = await fetch(
    `https://api.dexutils.io/v1/networks/ethereum/pools?${params}`,
    {
      headers: {
        Authorization: "Bearer dxu_sk_live_4f8a2bcd9e1f3a7056c8d2e94b0f1c63",
      },
    }
  );

  const data = await response.json();

  data.pools.forEach((pool) => {
    console.log(`${pool.name} — TVL: $${pool.liquidity_usd}`);
  });

  console.log(`Total matching pools: ${data.total}`);
  ```
</CodeGroup>

### Response Fields

<ResponseField name="pools" type="array" required>
  Array of pool objects matching your filter criteria.

  <Expandable title="Pool object">
    <ResponseField name="address" type="string" required>
      Pool contract address on the network.
    </ResponseField>

    <ResponseField name="name" type="string" required>
      Human-readable pool name, typically formatted as `TOKEN0 / TOKEN1 FEE%` (e.g. `USDC / WETH 0.05%`).
    </ResponseField>

    <ResponseField name="network" type="string" required>
      Network ID where this pool is deployed.
    </ResponseField>

    <ResponseField name="dex" type="string" required>
      DEX ID this pool belongs to (e.g. `uniswap_v3`).
    </ResponseField>

    <ResponseField name="token0" type="object" required>
      The first token in the pair.

      <Expandable title="token0 object">
        <ResponseField name="address" type="string" required>
          Contract address of token0.
        </ResponseField>

        <ResponseField name="symbol" type="string" required>
          Ticker symbol of token0.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="token1" type="object" required>
      The second token in the pair.

      <Expandable title="token1 object">
        <ResponseField name="address" type="string" required>
          Contract address of token1.
        </ResponseField>

        <ResponseField name="symbol" type="string" required>
          Ticker symbol of token1.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="fee_tier" type="integer" required>
      Pool fee tier in basis points (e.g. `500` = 0.05%, `3000` = 0.3%). For non-tiered AMMs this reflects the static swap fee.
    </ResponseField>

    <ResponseField name="liquidity_usd" type="string" required>
      Current total value locked (TVL) in USD.
    </ResponseField>

    <ResponseField name="volume_24h_usd" type="string" required>
      Total USD trading volume in the past 24 hours.
    </ResponseField>

    <ResponseField name="fee_24h_usd" type="string" required>
      Total fees collected by liquidity providers in the past 24 hours, in USD.
    </ResponseField>

    <ResponseField name="created_at" type="string" required>
      ISO 8601 timestamp of when the pool contract was deployed on-chain.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="total" type="integer" required>
  Total number of pools matching your filter criteria, across all pages.
</ResponseField>

<ResponseField name="page" type="integer" required>
  The current page number.
</ResponseField>

<ResponseField name="limit" type="integer" required>
  The number of results per page used for this response.
</ResponseField>

### Example Response

```json Example Response theme={null}
{
  "pools": [
    {
      "address": "0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640",
      "name": "USDC / WETH 0.05%",
      "network": "ethereum",
      "dex": "uniswap_v3",
      "token0": {
        "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
        "symbol": "USDC"
      },
      "token1": {
        "address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
        "symbol": "WETH"
      },
      "fee_tier": 500,
      "liquidity_usd": "182341204.12",
      "volume_24h_usd": "441238910.55",
      "fee_24h_usd": "220619.45",
      "created_at": "2021-05-05T21:30:02Z"
    }
  ],
  "total": 14823,
  "page": 1,
  "limit": 20
}
```

***

## Get Pool Details

```http theme={null}
GET /networks/{network}/pools/{address}
```

Returns the full statistics for a single liquidity pool, including additional fields for locked liquidity, LP holder count, 24-hour price change, and the DexUtils trust score.

### Path Parameters

<ParamField path="network" type="string" required>
  The network the pool is deployed on (e.g. `ethereum`).
</ParamField>

<ParamField path="address" type="string" required>
  The pool's contract address. EVM addresses are case-insensitive; the API normalises them automatically.
</ParamField>

### Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  # Replace the token below with your actual API key from the DexUtils dashboard
  curl "https://api.dexutils.io/v1/networks/ethereum/pools/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640" \
    -H "Authorization: Bearer dxu_sk_live_4f8a2bcd9e1f3a7056c8d2e94b0f1c63"
  ```

  ```python Python theme={null}
  import requests

  # Replace with your actual API key from the DexUtils dashboard
  network = "ethereum"
  pool_address = "0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640"
  url = f"https://api.dexutils.io/v1/networks/{network}/pools/{pool_address}"
  headers = {"Authorization": "Bearer dxu_sk_live_4f8a2bcd9e1f3a7056c8d2e94b0f1c63"}

  response = requests.get(url, headers=headers)
  pool = response.json()

  print(f"Pool: {pool['name']}")
  print(f"TVL: ${pool['liquidity_usd']}")
  print(f"Locked liquidity: {pool['locked_liquidity_pct']}%")
  print(f"Trust score: {pool['dext_score']}")
  ```

  ```javascript JavaScript theme={null}
  // Replace with your actual API key from the DexUtils dashboard
  const network = "ethereum";
  const poolAddress = "0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640";

  const response = await fetch(
    `https://api.dexutils.io/v1/networks/${network}/pools/${poolAddress}`,
    {
      headers: {
        Authorization: "Bearer dxu_sk_live_4f8a2bcd9e1f3a7056c8d2e94b0f1c63",
      },
    }
  );

  const pool = await response.json();

  console.log(`Pool: ${pool.name}`);
  console.log(`TVL: $${pool.liquidity_usd}`);
  console.log(`Locked liquidity: ${pool.locked_liquidity_pct}%`);
  console.log(`Trust score: ${pool.dext_score}`);
  ```
</CodeGroup>

### Additional Response Fields

This endpoint returns all fields from the list endpoint plus the following:

<ResponseField name="locked_liquidity_pct" type="number" required>
  Percentage of pool liquidity that is locked via a time-lock or burn mechanism. Higher values indicate reduced rug-pull risk.
</ResponseField>

<ResponseField name="lp_holder_count" type="integer" required>
  Number of unique addresses holding LP tokens for this pool.
</ResponseField>

<ResponseField name="price_change_24h_pct" type="number" required>
  Percentage change in the pool's price ratio over the past 24 hours, expressed as `token1` per `token0`.
</ResponseField>

<ResponseField name="dext_score" type="integer" required>
  DexUtils trust score from 0 to 100. Factors include locked liquidity percentage, LP distribution, token verification status, and contract audit results. Scores above 70 are generally considered low risk.
</ResponseField>

### Example Response

```json Example Response theme={null}
{
  "address": "0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640",
  "name": "USDC / WETH 0.05%",
  "network": "ethereum",
  "dex": "uniswap_v3",
  "token0": {
    "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
    "symbol": "USDC"
  },
  "token1": {
    "address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
    "symbol": "WETH"
  },
  "fee_tier": 500,
  "liquidity_usd": "182341204.12",
  "volume_24h_usd": "441238910.55",
  "fee_24h_usd": "220619.45",
  "created_at": "2021-05-05T21:30:02Z",
  "locked_liquidity_pct": 84.3,
  "lp_holder_count": 3241,
  "price_change_24h_pct": 1.87,
  "dext_score": 91
}
```

<Warning>
  A high `dext_score` reduces but does not eliminate risk. Always perform your own due diligence before making investment decisions based on on-chain data.
</Warning>
