The Liquidity Pools API enables monitoring of new pool creation events and liquidity additions and removals across DeFi protocols including Raydium, Orca, and Meteora on Solana.

WebSocket Endpoint

wss://api.nolimitnodes.com/socket?apikey=YOUR_API_KEY

Subscribe

{
  "method": "dataSubscribe",
  "params": {
    "referenceId": "LIQUIDITY_POOLS",
    "streams": [
      {
        "stream": "liquidityPoolsSubscribe",
        "params": {
          "amm": "Raydium",
          "token1": "So11111111111111111111111111111111111111112",
          "token2": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
        }
      }
    ]
  },
  "id": 1
}

Filter Parameters

amm
string
Filter by AMM/protocol name (e.g., "Raydium", "Orca", "Meteora", "PumpSwap").
token1
string
Filter by first token mint address.
token2
string
Filter by second token mint address.
pool
string
Filter by specific pool address.
creator
string
Filter by pool creator wallet address.
program_id
string
Filter by AMM program ID.
All filter parameters are optional. Omit all to receive every liquidity pool event.

Subscription Confirmation

{
  "status": "Subscribed to liquidityPools",
  "subscription_id": "8fe99234-3b7d-40e4-af71-19edc85fb0cc",
  "stream": "liquidityPoolsSubscribe",
  "reference_id": "LIQUIDITY_POOLS"
}

Pool Event Response

{
  "method": "liquidityPoolsSubscribe",
  "subscription_id": "8fe99234-3b7d-40e4-af71-19edc85fb0cc",
  "result": {
    "amm": "PumpSwap",
    "token1": "So11111111111111111111111111111111111111112",
    "token2": "7Pnqg1S6MYrL6AP1ZXcToTHfdBbTB77ze6Y33qBBpump",
    "pool": "FBZSQpAYGQJpmRT8L33QnGwv6bCaTx6XCjmTPVCw3gdZ",
    "creator": "2FMmrPvtxiRmxWYbBBrMUoXDcgQ1hmgsnHDtfDCnvunLBmafRRPjSjqbnywdxpMDU9Bdzq5md41uPF71ntvFqtvT",
    "transaction_signature": "2FMmrPvtxiRmxWYbBBrMUoXDcgQ1hmgsnHDtfDCnvunLBmafRRPjSjqbnywdxpMDU9Bdzq5md41uPF71ntvFqtvT",
    "block_num": 366963118,
    "block_time": 1757930744,
    "program_id": "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA",
    "type": "liquidity_pool_creation"
  }
}

Response Fields

result
object

Pool Information

  • amm — The DeFi protocol that created the pool (Raydium, Orca, Meteora, PumpSwap).
  • pool — The on-chain address of the liquidity pool.
  • creator — The wallet address that initiated the pool creation transaction.

Token Pair

  • token1 / token2 — The two token mint addresses that form the trading pair in the pool.

Transaction Details

  • transaction_signature — The full Solana transaction signature for on-chain verification.
  • block_num / block_time — Block number and timestamp for ordering and time-based analysis.
  • program_id — The program ID of the AMM, useful for filtering by protocol.

Unsubscribe

Request

{
  "method": "dataUnsubscribe",
  "params": {
    "subscriptionIds": ["8fe99234-3b7d-40e4-af71-19edc85fb0cc"],
    "referenceId": "UNSUB_REF"
  }
}

Response

{
  "status": "Unsubscribed",
  "unsubscribed_ids": ["8fe99234-3b7d-40e4-af71-19edc85fb0cc"],
  "reference_id": "UNSUB_REF"
}

Code Examples

const WebSocket = require("ws");

class LiquidityPoolMonitor {
  constructor(apiKey) {
    this.apiKey = apiKey;
    this.ws = null;
    this.pools = {};
    this.ammStats = {};
  }

  connect() {
    this.ws = new WebSocket(
      `wss://api.nolimitnodes.com/socket?apikey=${this.apiKey}`
    );
    this.setupHandlers();
  }

  setupHandlers() {
    this.ws.on("open", () => {
      console.log("Connected to Liquidity Pool stream");
      this.subscribe();
    });

    this.ws.on("message", (data) => {
      const message = JSON.parse(data);
      if (message.method === "liquidityPoolsSubscribe") {
        this.processPoolEvent(message.result);
      } else {
        console.log("Info:", JSON.stringify(message));
      }
    });

    this.ws.on("error", (error) => {
      console.error("WebSocket error:", error.message);
    });

    this.ws.on("close", () => {
      console.log("Connection closed. Reconnecting in 5s...");
      setTimeout(() => this.connect(), 5000);
    });
  }

  subscribe(filters = {}) {
    this.ws.send(
      JSON.stringify({
        method: "dataSubscribe",
        params: {
          referenceId: "LIQUIDITY_POOLS",
          streams: [
            {
              stream: "liquidityPoolsSubscribe",
              params: filters,
            },
          ],
        },
        id: 1,
      })
    );
  }

  processPoolEvent(pool) {
    // Track pools by AMM
    if (!this.ammStats[pool.amm]) {
      this.ammStats[pool.amm] = { count: 0, pools: [] };
    }
    this.ammStats[pool.amm].count++;
    this.ammStats[pool.amm].pools.push(pool.pool);

    // Store pool data
    this.pools[pool.pool] = {
      amm: pool.amm,
      token1: pool.token1,
      token2: pool.token2,
      creator: pool.creator,
      block: pool.block_num,
      time: pool.block_time,
      type: pool.type,
    };

    const timestamp = new Date(pool.block_time * 1000).toISOString();
    console.log(`\n[${timestamp}] New Pool [${pool.amm}]`);
    console.log(`  Pool: ${pool.pool}`);
    console.log(`  Token1: ${pool.token1.slice(0, 12)}...`);
    console.log(`  Token2: ${pool.token2.slice(0, 12)}...`);
    console.log(`  Creator: ${pool.creator.slice(0, 12)}...`);
    console.log(`  Block: ${pool.block_num} | Program: ${pool.program_id}`);
    console.log(`  Type: ${pool.type}`);

    // Show AMM stats
    console.log(`  [${pool.amm} total pools: ${this.ammStats[pool.amm].count}]`);
  }
}

// Usage
const monitor = new LiquidityPoolMonitor("YOUR_API_KEY");
monitor.connect();

Best Practices

Risk Assessment & Due Diligence

  • Verify the token pair addresses before interacting with newly created pools.
  • Check whether pool creators have a history of creating and abandoning pools.
  • Be cautious of pools with unknown or unverified tokens — cross-reference with token metadata.
  • Monitor for pools created by the same creator in rapid succession, which may indicate automated activity.

Yield & Performance Analysis

  • Track pool creation frequency per AMM to understand protocol growth and adoption trends.
  • Monitor which token pairs are most commonly paired to identify market demand.
  • Compare pool creation patterns across Raydium, Orca, Meteora, and PumpSwap for protocol-level analysis.
  • Use block_time to build time-series data for pool creation rates.

Real-time Monitoring & Alerts

  • Set up alerts for pools containing tokens on your watchlist using token1 and token2 filters.
  • Monitor specific creators using the creator filter to track known deployers.
  • Use the amm filter to focus on specific protocols when building protocol-specific dashboards.
  • Implement reconnection logic with exponential backoff to ensure continuous monitoring.