# Get Active Listings of a Collection

To query active listings of a collection, we will need to check all listing accounts and see if the listed NFT/cNFT belongs to a pre-defined collection mint list. First thing is to have a mint list of the collection you are interested in. For the sake of this example we will use a DAS call to fetch it.

{% hint style="info" %}
You can also use our [<mark style="color:red;">MintList</mark>](https://airdrop.shyft.to/) tool to get a collection's mint list.
{% endhint %}

For Tensor cNFT, we will be checking for <mark style="color:yellow;">assetId</mark> field. For Tensor Swap program we will be using <mark style="color:yellow;">nftMint</mark> field.

The key is to use GraphQL <mark style="color:yellow;">\_in</mark> filter which checks if the NFT address is present in the mint list.

#### Active listings of a collection from Tensor cNFT

{% tabs %}
{% tab title="Code Snippet" %}
{% code overflow="wrap" %}

```typescript
import { gql, GraphQLClient } from "graphql-request";
import { Network, ShyftSdk } from '@shyft-to/js';

const endpoint = `https://programs.shyft.to/v0/graphql/?api_key=YOUR-KEY`;

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

const shyft = new ShyftSdk({ apiKey: YOUR-KEY, network: Network.Mainnet }); //Initialize Shyft SDK to use DAS


async function getAllListFromCollection(collectionAddr:string) {

    const allNftMintsforCollection = await getAllMintsofColl(collectionAddr); //getting all NFT mints from a collection
    
    const query = gql`
      query MyQuery {
        TENSOR_CNFT_listState(where: {assetId: {_in: ${JSON.stringify(allNftMintsforCollection)}}}) {
          rentPayer
          pubkey
          owner
          assetId
          amount
        }
      }
    `;

  const response = await graphQLClient.request(query);
  console.dir(response,{depth: null});
  
}

async function getAllMintsofColl(collectionAddr:string) { //get all NFTs from a specific collection
    let page = 1;
    const assets = [];

    while (page > 0) {
      const assetsByGroup = await shyft.rpc.getAssetsByGroup({
        groupKey: 'collection',
        groupValue: collectionAddr,
        page,
        limit: 1000,
      });

      assets.push(...assetsByGroup.items);
      page = assetsByGroup.total !== 1000 ? -1 : page + 1;
    }

    console.log('Total NFT ', assets.length);
    const nftAddresses = assets.map((nft) => nft.id);
    return nftAddresses;
}

getAllListFromCollection('8Hbfu77utvPYTU3ngHis81nnomFW9tQj2yC54EH9B9Q9')
//replace with your NFT collection address
```

{% endcode %}
{% endtab %}

{% tab title="Response" %}

```json
{
    TENSOR_CNFT_listState: [
      {
        rentPayer: '82CUQbRjC2XAcwGumAPDtdzTvYTJ1bpNdMHXTjiDXea',
        pubkey: '79ZwK3dqpGN9MMEFz4srdWhrh2M1QDcF2KdC6sGvSRdH',
        owner: '82CUQbRjC2XAcwGumAPDtdzTvYTJ1bpNdMHXTjiDXea',
        assetId: 'CHCd7ThcHoTE12nerNgwow1azhULh2ZchXSxSTCzBeBH',
        amount: 300000000
      },
      {
        rentPayer: 'DCcUCSp9GAB5D1i6EXNciDie9sDFuuVpn4UwrFbR7V8m',
        pubkey: '7GUKcbY1osAm6irYBtDP3otNb34egYoEcYU7TAGDXJeH',
        owner: 'DCcUCSp9GAB5D1i6EXNciDie9sDFuuVpn4UwrFbR7V8m',
        assetId: '3dDMC6BNUDuvKBffgWgKAXgtaDrpxn2FqCYFVn6VFh2i',
        amount: 340000000
      },
      {
        rentPayer: 'En9ji95Pn6WLu2WWZJKcweN6NpAA2r9ckN8yjPoDAvAJ',
        pubkey: '3sHBCmhwiiiFyVZ46xy3PBxBmPmXMAcQWaJUXiA3cf7i',
        owner: 'En9ji95Pn6WLu2WWZJKcweN6NpAA2r9ckN8yjPoDAvAJ',
        assetId: 'CtAbEwu2cqYTev7vNozHVxauPwYvLCoTBY5b8es54mVz',
        amount: 350000000
      },
      {
        rentPayer: 'FBZzrBUk5hXiHWpCRcquR1fD13ug9XTxPtf99yd2MF25',
        pubkey: '2447Xn14pe8KEbCNQMnmN6HZtrBMSemvSV14Sp5ZVTfu',
        owner: 'FBZzrBUk5hXiHWpCRcquR1fD13ug9XTxPtf99yd2MF25',
        assetId: 'BADdShUsP64nBpiDNFtooTECL3ky91CAsD9FV59yDcHT',
        amount: 320000000
      }
    ]
}
```

{% endtab %}
{% endtabs %}

#### Active Listings of a collection from Tensor Swap (normal NFTs)

{% tabs %}
{% tab title="Code Snippet" %}
{% code overflow="wrap" %}

```typescript
import { gql, GraphQLClient } from "graphql-request";
import { Network, ShyftSdk } from '@shyft-to/js';

const endpoint = `https://programs.shyft.to/v0/graphql/?api_key=YOUR-KEY`;

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

const shyft = new ShyftSdk({ apiKey: YOUR-KEY, network: Network.Mainnet }); //Initialize Shyft SDK to use DAS

async function getAllListFromCollection(collectionAddr:string) {

    const allNftMintsforCollection = await getAllMintsofColl(collectionAddr); //getting all NFT mints from a collection
    
    const query = gql`
      query MyQuery {
        Tensor_SingleListing(where: {nftMint: {_in: ${JSON.stringify(allNftMintsforCollection)}}}) {
          nftMint
          owner
          price
          pubkey
        }
      }
    `;

  const response = await graphQLClient.request(query);
  console.dir(response,{depth: null});
  
}

async function getAllMintsofColl(collectionAddr:string) { //get all NFTs from a specific collection
    let page = 1;
    const assets = [];

    while (page > 0) {
      const assetsByGroup = await shyft.rpc.getAssetsByGroup({
        groupKey: 'collection',
        groupValue: collectionAddr,
        page,
        limit: 1000,
      });

      assets.push(...assetsByGroup.items);
      page = assetsByGroup.total !== 1000 ? -1 : page + 1;
    }

    console.log('Total NFT ', assets.length);
    const nftAddresses = assets.map((nft) => nft.id);
    return nftAddresses;
}

//MadLads NFT collection
getAllListFromCollection('J1S9H3QjnRtBbbuD4HjPV6RpRhwuk4zKbxsnCHuTgh9w')

```

{% endcode %}
{% endtab %}

{% tab title="Response" %}

```json
{
  Tensor_SingleListing: [
    {
      nftMint: 'HAArUyS59aBoHWB5XPap4uauJtqwxHn2ZMqLdViyFKj6',
      owner: 'HBFxRkcjB6MTazJFSgNKXLG2mzDW9EUoeKtpNRrhWhVD',
      price: 160800000000,
      pubkey: '7gQ9HNk2NcGgn2z7spMjYUNrB5JPyRHNAZtqFfMjhrE7'
    },
    {
      nftMint: 'J4oaV9XiH4eqLaoMYBGjbw6LhXbinwakNpdR9JTMMXYr',
      owner: 'DFzWH1SUCnQv6Lq9Dxc5kh5iKztxkzhfCWSYMKfsqTzq',
      price: 196000000000,
      pubkey: 'CuJNbJNVdG4pKjiUafpLx2VtqFWdw6bPAd5o3uDDDeqk'
    },
    {
      nftMint: 'JBfGGLQ7rW9x8tfs5R4Ta9ZRBU2oxKKBSv9tD6eWvWkV',
      owner: 'DkFw7SDw7TpNrpDDbetvNoAfRbjaxJEYLV62fgLbz55M',
      price: 173700000000,
      pubkey: '659WrEpDGH4RzheAqVyZJWjpbomPgsDkTGCXNhrfpziK'
    },
    {
      nftMint: 'HeEJ7jHBynTjfNmouMsCEx6drbBsgrdYrfKbeaCjsUNc',
      owner: 'CYXPrpHMiRvUoAZzQHgth17Lb7LEbj8nh9zfrXqa3FDM',
      price: 160540000000,
      pubkey: '5uhgb9yW7P5XRDZhoSGuTkJHqdnpxHyNiD77X5SjWeEG'
    },
    {
      nftMint: 'J5Dai1wD7sMhMw8bY9jLTa2BtkQCkfnX4qeaPZzAGCKK',
      owner: 'ETN6xMmnftpcxroSinABZuAJM6XAganqRvNcbTcHV9s',
      price: 186500000000,
      pubkey: '6vrGhM7BmCMGcWQX9wSW87MkLQWqDkMsQdEAjniwsBFA'
    },
    {
      nftMint: 'HLCTwXVmi114J4nWphD2vimwCbhat9cxDmJ4Rv6rSEqr',
      owner: '2a8eghHjgRSCvGGD4XcD54sdWyJd5aX6tMWrosBzRnFD',
      price: 398000000000,
      pubkey: 'ABKceAbuoq6hb3QDd1PLHYmQijSwQEqKPh1tzGCM3iVV'
    },
    {
      nftMint: 'HetJzowAkDyJJXcwSVExmfcoEzGzwwAYHz5thbpmjrr6',
      owner: 'EJhytiNULnEZFV6nUguMpuwAuTZyMtGDLcnPzK8SCDGW',
      price: 246000000000,
      pubkey: 'Ftc3iAxEc8BR9Lc4MZFHrTSi7Vb3QixBwRMHp7Q4CQpY'
    },
    {
      nftMint: 'HwDUYXX6PoXFxMqb8CShiSWWR5bSbhHaorwY7wFhQ6wj',
      owner: 'HxaXScmaM9rTDAra2oFB5xv8VUMQMFqUwXmNvg79uADK',
      price: 195000000000,
      pubkey: 'ADUQm3PNUfmhJy9BmXBVkW6w7AFHKKtg2Ws4XHXqDHx2'
    }
  ]
}
```

{% endtab %}
{% endtabs %}


---

# 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/tensor/get-active-listings-of-a-collection.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.
