> For the complete documentation index, see [llms.txt](https://dev.plyr.network/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dev.plyr.network/api-reference/assets/nfts-erc-721/list-nfts.md).

# List NFTs

{% hint style="info" %}
Retrieves a list of NFTs owned by a specified PLYR ID, with optional filtering by NFT contract address and game ID.
{% endhint %}

**Endpoint:** `/game/nft/list`\
**Method:** GET

{% tabs %}
{% tab title="Request Parameters" %}

```typescript
{
    plyrId: string;        // The PLYR ID of the user
    chainId: string;       // Chain ID (required)
    nft?: string;          // Optional NFT contract address to filter by
    gameId?: string;       // Optional game ID
}
```

{% endtab %}

{% tab title="Success Response" %}

```typescript
{
  tokens: [
    {
      contract: string;    // NFT contract address
      tokenId: string;     // Token ID
      owner: string;       // Owner address
      uri: string;         // Metadata URI
      metadata?: {         // Optional parsed metadata if available
        name: string;
        description: string;
        image: string;
        attributes: Array<{
          trait_type: string;
          value: string | number;
        }>;
        [key: string]: any; // Other metadata fields
      }
    }
  ]
}
```

{% endtab %}

{% tab title="Error Response" %}

```typescript
{
  error: string;
  details?: any;
}
```

{% endtab %}
{% endtabs %}

## Example Usage

```javascript
// Setup request parameters
const timestamp = Date.now().toString();
const plyrId = 'player123';
const chainId = '43114'; // Avalanche C-Chain
const nftAddress = '0x1234567890123456789012345678901234567890'; // Optional
const gameId = 'game456'; // Optional

// For GET requests with no body, pass null as the body for HMAC
const hmac = generateHmacSignature(timestamp, null, secretKey);

// Make the API request with optional filters
let url = apiEndpoint + `/game/nft/list?plyrId=${plyrId}&chainId=${chainId}&gameId=${gameId}&nft=${nftAddress}`;

const response = await axios.get(url, {
	headers: {
		apikey: apiKey,
		signature: hmac,
		timestamp: timestamp
	}
});

// Process the response
console.log(`User has ${response.data.tokens.length} NFTs`);
response.data.tokens.forEach((token) => {
	console.log(`NFT Contract: ${token.contract}`);
	console.log(`Token ID: ${token.tokenId}`);
	if (token.metadata) {
		console.log(`Name: ${token.metadata.name}`);
		console.log(`Description: ${token.metadata.description}`);
		console.log(`Image: ${token.metadata.image}`);
	}
	console.log('---');
});
```
