List wallet NFTs
Every NFT a wallet owns — standard, programmable, and compressed — with images and collection info.
GET /wallets/{address}/nftsCompressed NFTs (cNFTs) don't exist in regular token accounts and are invisible to standard RPC calls — reading them normally requires an indexer with a separate API. This endpoint returns standard, programmable, and compressed NFTs in one list with one shape.
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
address | path | string | Yes | The wallet's base58 address. |
limit | query | number | No | 1–1000, default 100. |
cursor | query | string | No | Pagination cursor. |
collection | query | string | No | Only NFTs from this collection address. |
includeAttributes | query | boolean | No | Default false. Adds the attributes array to each item. |
Example
curl "https://api.sarg.am/v1/solana/wallets/9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM/nfts?limit=2" \
-H "Authorization: Bearer $MAINLY_API_KEY"{
"address": "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
"items": [
{
"id": "F9Lw3ki3hJ7PF9HQXsBzoY8GyE6sPoEZZdXJBsTTD2rk",
"name": "Mad Lads #8420",
"image": "https://cdn.mainly.dev/assets/F9Lw3ki3hJ7PF9HQXsBzoY8GyE6sPoEZZdXJBsTTD2rk.png",
"standard": "programmable",
"compressed": false,
"collection": {
"address": "J1S9H3QjnRtBbbuD4HjPV6RpRhwuk4zKbxsnCHuTgh9w",
"name": "Mad Lads",
"verified": true
}
},
{
"id": "8vw5tCePkTQ4zLmVzRvXBt5V6YyCBcAgLKOgFmQ7cPvv",
"name": "Drip Drop #102",
"image": "https://cdn.mainly.dev/assets/8vw5tCePkTQ4zLmVzRvXBt5V6YyCBcAgLKOgFmQ7cPvv.png",
"standard": "standard",
"compressed": true,
"collection": null
}
],
"nextCursor": "eyJwYWdlIjoyfQ"
}Response fields
| Field | Type | Description |
|---|---|---|
items[].id | string | The asset's address (mint for regular NFTs, asset ID for compressed). |
items[].name | string | Display name from metadata. |
items[].image | string | null | CDN-cached image URL. |
items[].standard | string | standard, programmable, or edition. |
items[].compressed | boolean | Whether this is a compressed NFT. |
items[].collection | object | null | Collection address, name, and whether membership is cryptographically verified. |
items[].attributes | array | Only with includeAttributes=true: [{ "traitType": "...", "value": "..." }]. |
For everything about a single NFT — description, royalties, delegation state — follow up with Get an NFT.
Check
collection.verifiedbefore trusting collection names. Anyone can mint an NFT that claims to belong to a famous collection; only verified membership is proof. This is the most common NFT scam vector.
Errors
code | When |
|---|---|
invalid_address | The path parameter isn't valid base58. |
Under the hood
Replaces a DAS-style indexer query (getAssetsByOwner), normalizes its
snake_case response to these docs' conventions, resolves off-chain JSON
metadata, and merges compressed and uncompressed assets into one shape.