# Get Liquidity Details of a Pool

We often want to fetch how much liquidity is present in a pool. To achieve this,&#x20;

* We fetch pool info using graphQL APIs either by pool pubkey or [<mark style="color:red;">token address</mark>](/solana-indexers/case-studies/orca-whirlpool/get-pool-by-token-address.md)<mark style="color:yellow;">.</mark>
* We fetch <mark style="color:yellow;">tokenVaultA</mark> and <mark style="color:yellow;">tokenVaultB</mark> token balances, to see how much tokens are present in the pool.
* For the pooled tokens we fetch their prices through any Pricing API of choice.

You can directly run this code in <mark style="color:yellow;">replit</mark> to see it in action

```typescript
import { Connection, PublicKey } from "@solana/web3.js";
import { gql, GraphQLClient } from "graphql-request";

const SHYFT_API_KEY = 'YOUR-KEY';

const graphQLEndpoint = `https://programs.shyft.to/v0/graphql/?api_key=${SHYFT_API_KEY}`;
const rpcEndpoint = `https://rpc.shyft.to/?api_key=${SHYFT_API_KEY}`;

const graphQLClient = new GraphQLClient(graphQLEndpoint, {
  method: `POST`,
  jsonSerializer: {
    parse: JSON.parse,
    stringify: JSON.stringify,
  },
});

async function queryOrcaPool(address:string) {
  // We only fetch fields necessary for us
  const query = gql`
    query MyQuery {
  ORCA_WHIRLPOOLS_whirlpool(
    where: {pubkey: {_eq: ${JSON.stringify(address)}}}
  ) {
    pubkey
    feeGrowthGlobalA
    feeGrowthGlobalB
    feeRate
    liquidity
    protocolFeeOwedA
    protocolFeeOwedB
    protocolFeeRate
    rewardLastUpdatedTimestamp
    sqrtPrice
    tickCurrentIndex
    tickSpacing
    tokenMintA
    tokenMintB
    tokenVaultA
    tokenVaultB
    whirlpoolsConfig
  }
}`;

  return await graphQLClient.request(query);
}

//We have to check how much tokens are present in openbook market as well
export async function parsePoolInfo(poolInfo) {

  //to load openOorders from openbook
  const connection = new Connection(rpcEndpoint, "confirmed");

  const tokenBalanceA = await connection.getTokenAccountBalance(
    new PublicKey(poolInfo.tokenVaultA)
  );
  const tokenBalanceB = await connection.getTokenAccountBalance(
    new PublicKey(poolInfo.tokenVaultB)
  );

  const tokenAmountA = tokenBalanceA.value?.uiAmount;
  const tokenAmountB = tokenBalanceB.value?.uiAmount;

  console.log(
    "Pool info:",
    "\n Token A in pool " + tokenAmountA,
    "\n Token B in pool " + tokenAmountB,
  );

  //Get the price of the tokens
  //We are using Jup pricing APIs, you can use whichever you want
  const priceInfo = await getTokenPrices(poolInfo.tokenMintA, poolInfo.tokenMintB);
  const baseLiquidity = tokenAmountA * priceInfo.basePrice;
  const quoteLiquidity = tokenAmountB * priceInfo.quotePrice;
  console.log(`Base Token liquidity: ${baseLiquidity} \n`);
  console.log(`Quote Token liquidity: ${quoteLiquidity} \n`);
  console.log(`Total liquidity in the pool: ${baseLiquidity + quoteLiquidity}`)
}

//Fetch token prices in USD using Jup pricing APIs 
async function getTokenPrices(base, quote) {
  const baseMintPrice = await (await fetch(
    `https://price.jup.ag/v4/price?ids=${base}`)).json()
  const quoteMintPrice = await (await fetch(`https://price.jup.ag/v4/price?ids=${quote}`)).json()
  console.log(quoteMintPrice)
  console.log(baseMintPrice)
  return {basePrice: baseMintPrice.data[base]?.price || 0, quotePrice: quoteMintPrice.data[quote]?.price || 0}
}

//This is bonk-usdc pool addres
const poolInfo = await queryOrcaPool('5y2jFFA3A8GNjRnVMg8LfTHbBg7y2vivopiK8LmGRP2B');
console.log(poolInfo)
console.log('Parsing Pool info')
await parsePoolInfo(poolInfo.ORCA_WHIRLPOOLS_whirlpool[0])
```


---

# Agent Instructions: 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:

```
GET https://docs.shyft.to/solana-indexers/case-studies/orca-whirlpool/get-liquidity-details-of-a-pool.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
