Get NFT holdings (ERC-721 + ERC-1155)
https://api.triport.io/v1/eth/wallet/nfts/0x742d35Cc6634C0532925a3b844Bc9e7595f06b8b?limit=50&offset=0Returns the NFT assets held by an Ethereum address — both ERC-721 and ERC-1155 — with collection, token id, and image metadata, paginated.
Lists the non-fungible tokens currently owned by an Ethereum address, covering both the ERC-721 and ERC-1155 standards in a single response. Each asset carries its contract address, token id, name, image URI, and collection name so you can render a wallet's NFT gallery without a second metadata round-trip.
Because each asset requires a metadata lookup, this endpoint is gated to the Pro tier and higher — it costs more than the plain balance/history wallet endpoints. Use it when you need the visual + collection detail of a wallet's holdings; if you only need raw token ownership counts, prefer a cheaper call.
Results are paginated with limit/offset. Page through the full set by
incrementing offset by limit until the returned assets array is shorter
than limit (or until offset reaches pagination.total, when present).
Parameters
Path parameters
addressstringrequired0x-prefixed, 40 hex chars (^0x[0-9a-fA-F]{40}$).Query parametersobjectlimitintegeroptional1–1000. Default 50.offsetintegeroptional0. Default 0.Response
Response fields
| Field | Type | Description |
|---|---|---|
address | string | The queried address, echoed back. |
assets | array | NFT assets held by the address (EthNftSummary objects). |
assets[].contract | string | NFT contract address. |
assets[].token_id | string | Token id as a u256 decimal string (can exceed 64-bit range). |
assets[].standard | string | Token standard: ERC721 or ERC1155. |
assets[].amount | string | Quantity held — always "1" for ERC-721; the held quantity for ERC-1155. |
assets[].name | string | Token / item display name. |
assets[].image_uri | string (uri) | URI of the token image. |
assets[].collection_name | string | Name of the collection the token belongs to. |
pagination.limit | integer | Page size used for this response. |
pagination.offset | integer | Offset used for this response. |
pagination.total | integer | Total assets available; may be absent when expensive to compute. |
contract,token_id, andstandardare always present on each asset; the remaining fields are best-effort metadata and may be omitted when a token's metadata is unavailable.
Errors
| Code | Meaning | When it happens |
|---|---|---|
401 | unauthorized / trial_expired / subscription_expired | Missing/invalid key, lapsed trial, or expired subscription. |
403 | tier_insufficient / method_unknown | Key's tier is below Pro, or the method isn't part of the key's product. |
429 | rate_limited | Sustained RPS for your tier exceeded. Honor the Retry-After header. |
All errors share the standard envelope (error, message, request_id); a
403 tier_insufficient adds current_tier / required_tier and a 429 adds
retry_after_sec / limit_rps. See errors for the full
envelope and rate-limit headers (X-RateLimit-Limit, X-RateLimit-Remaining,
X-RateLimit-Reset, X-RateLimit-Category).
Example 403:
{
"error": "tier_insufficient",
"message": "This method requires the pro tier or higher.",
"request_id": "req_a1b2c3d4",
"current_tier": "basic",
"required_tier": "pro",
"category": "eth_wallet"
}Examples
JavaScript (fetch)
const address = "0x742d35Cc6634C0532925a3b844Bc9e7595f06b8b";
const params = new URLSearchParams({ limit: "50", offset: "0" });
const res = await fetch(
`https://api.triport.io/v1/eth/wallet/nfts/${address}?${params}`,
{ headers: { Authorization: `Bearer ${process.env.TRIPORT_API_KEY}` } }
);
if (!res.ok) throw new Error(`${res.status}: ${(await res.json()).message}`);
const { assets, pagination } = await res.json();
for (const nft of assets) {
console.log(`${nft.collection_name} #${nft.token_id} ×${nft.amount} (${nft.standard})`);
}TypeScript SDK (@triport/sdk)
import { Triport } from "@triport/sdk";
const triport = new Triport({ apiKey: process.env.TRIPORT_API_KEY! });
const { assets, pagination } = await triport.eth.wallet.nfts(
"0x742d35Cc6634C0532925a3b844Bc9e7595f06b8b",
{ limit: 50, offset: 0 }
);
console.log(`${assets.length} NFTs (total: ${pagination.total ?? "n/a"})`);Python (triport-sdk)
import os
from triport import Triport
client = Triport(api_key=os.environ["TRIPORT_API_KEY"])
page = client.eth.wallet.nfts(
"0x742d35Cc6634C0532925a3b844Bc9e7595f06b8b",
limit=50,
offset=0,
)
for nft in page.assets:
print(f"{nft.collection_name} #{nft.token_id} x{nft.amount} ({nft.standard})")Notes
- Pagination loop: request with
offset = 0, then keep addinglimittooffsetuntilassetscomes back with fewer thanlimitentries. Whenpagination.totalis present you can stop onceoffset + limit >= total. - Big numbers as strings:
token_idandamountare decimal strings because ERC token ids and ERC-1155 quantities are u256 and overflow JavaScriptNumber. Parse withBigIntif you need to do arithmetic. - ERC-1155 quantities: for
ERC1155assets,amountis the number of units the address holds; forERC721it is always"1". - Related wallet endpoints: ETH balance, transaction history, and ERC-20 token balances.