Get Wallet NFTs
Retrieve wallet NFT information and calculated multipliers for a specific drop.
Endpoint
GET /api/v2/drop/{id}/walletNFTs
Authentication
This endpoint is public and does not require authentication.
Description
This endpoint retrieves NFT ownership information for a specific wallet address within a drop, including owned NFT counts by rarity, calculated multipliers, and user level. For drops with multiple contracts, a project ID may be required.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Unique drop identifier |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
walletAddress | string | Yes | Wallet address to query for NFT ownership |
projectId | string | No | Project identifier (required for drops with multiple contracts) |
Note: The projectId parameter is only required for drops that have hasMultipleContracts: true.
Request Examples
Basic Request
GET /api/v2/drop/drop-123/walletNFTs?walletAddress=0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6
With Project ID (for multi-contract drops)
GET /api/v2/drop/drop-123/walletNFTs?walletAddress=0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6&projectId=project-456
Response
Success Response (200)
{
"drop": {
"id": "drop-123",
"name": "Gaming NFT Collection",
"isActive": true,
"startDate": 1704110400000,
"endDate": 1704715200000,
"contractAddress": "0x1234567890123456789012345678901234567890",
"hasMultipleContracts": false,
"isVIP": false,
"whitelistEnabled": true,
"chain": "ethereum",
"chainId": 1,
"network": "mainnet",
"description": "Exclusive gaming NFT collection",
"moreInfoUrl": "https://example.com/more-info",
"logo": "https://example.com/logo.jpg",
"numberOfRarities": 3,
"hasDailyCheckIn": false,
"magicEdenGoldTokenName": null,
"slug": "gaming-nft-collection",
"cards": [
{
"rarity": 1,
"image": "https://example.com/common.jpg",
"burnThreshold": 100,
"name": "Common Card",
"base": 50,
"stack": 10,
"maximum": 1000
},
{
"rarity": 2,
"image": "https://example.com/rare.jpg",
"burnThreshold": 200,
"name": "Rare Card",
"base": 20,
"stack": 5,
"maximum": 500
}
],
"marketplaces": [
{
"name": "OpenSea",
"url": "https://opensea.io/collection/gaming-nft",
"icon": "https://opensea.io/favicon.ico"
}
],
"phases": [
{
"name": "Public Sale",
"price": 0.1,
"currency": "ETH"
}
]
},
"cards": [
{
"count": 5,
"rarity": 1,
"image": "https://example.com/common.jpg",
"burnThreshold": 100,
"name": "Common Card",
"base": 50,
"stack": 10,
"maximum": 1000
},
{
"count": 2,
"rarity": 2,
"image": "https://example.com/rare.jpg",
"animation": "https://example.com/rare-animation.mp4",
"burnThreshold": 200,
"name": "Rare Card",
"base": 20,
"stack": 5,
"maximum": 500
}
],
"multiplier": 1.5,
"level": 3
}
Error Response (400)
{
"message": "Invalid wallet address",
"status": 400
}
Error Response (404)
{
"message": "Drop not found",
"status": 404
}
Response Fields
Main Response Fields
| Field | Type | Description |
|---|---|---|
drop | object | Complete drop information |
cards | array | Array of owned NFT cards with counts |
multiplier | number | Calculated multiplier based on NFT ownership |
level | number | User level based on NFT holdings |
Drop Object Fields
| Field | Type | Description |
|---|---|---|
drop.id | string | Unique drop identifier |
drop.name | string | Drop name |
drop.isActive | boolean | Whether the drop is currently active |
drop.startDate | number | Drop start date (Unix timestamp in ms) |
drop.endDate | number | Drop end date (Unix timestamp in ms) |
drop.contractAddress | string | Smart contract address |
drop.hasMultipleContracts | boolean | Whether the drop has multiple contracts |
drop.chain | string | Blockchain network name |
drop.chainId | number | Blockchain network ID |
drop.description | string | Drop description |
drop.slug | string | URL-friendly identifier |
Cards Array Fields
| Field | Type | Description |
|---|---|---|
cards[].count | number | Number of NFTs owned for this rarity |
cards[].rarity | number | Rarity level |
cards[].image | string | Card image URL |
cards[].animation | string | Card animation URL (optional) |
cards[].name | string | Card name |
cards[].burnThreshold | number | Burn threshold value |
cards[].base | number | Base value |
cards[].stack | number | Stack value |
cards[].maximum | number | Maximum value |
Usage Example
Basic Usage
const response = await fetch(
"https://api.intraverse.io/api/v2/drop/drop-123/walletNFTs?walletAddress=0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6",
);
const result = await response.json();
console.log(`Drop: ${result.drop.name}`);
console.log(`Multiplier: ${result.multiplier}`);
console.log(`Level: ${result.level}`);
result.cards.forEach((card) => {
console.log(`${card.name}: ${card.count} owned (Rarity: ${card.rarity})`);
});
With Project ID (for multi-contract drops)
const response = await fetch(
"https://api.intraverse.io/api/v2/drop/drop-123/walletNFTs?walletAddress=0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6&projectId=project-456",
);
const result = await response.json();
console.log(`Project-specific data for ${result.drop.name}`);
console.log(`User multiplier: ${result.multiplier}`);
console.log(`Total card types owned: ${result.cards.length}`);
Multiple Contracts
Some drops have hasMultipleContracts: true, which means they span multiple projects or contracts. For these drops:
- The
projectIdquery parameter becomes required - Different project IDs may return different NFT counts and multipliers
- Each project within the drop may have different rarity structures
Error Handling
| Error | Description | Solution |
|---|---|---|
| Invalid wallet address | Wallet address format is invalid | Use valid blockchain address |
| Drop not found | Drop ID doesn't exist | Verify the drop ID |
| Missing project ID | Project ID required but missing | Add projectId for multi-contract drops |