TriportRPC

Get NFT holdings (ERC-721 + ERC-1155)

GEThttps://api.triport.io/v1/eth/wallet/nfts/0x742d35Cc6634C0532925a3b844Bc9e7595f06b8b?limit=50&offset=0

Returns the NFT assets held by an Ethereum address — both ERC-721 and ERC-1155 — with collection, token id, and image metadata, paginated.

Ethereumeth_walletPro+ · RPS-per-tier with burst (burst = 2× sustained RPS); no daily cap

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

addressstringrequired
Ethereum address, 0x-prefixed, 40 hex chars (^0x[0-9a-fA-F]{40}$).
Query parametersobject
limitintegeroptional
Page size, 11000. Default 50.
offsetintegeroptional
Number of assets to skip. Minimum 0. Default 0.

Response

Response fields

FieldTypeDescription
addressstringThe queried address, echoed back.
assetsarrayNFT assets held by the address (EthNftSummary objects).
assets[].contractstringNFT contract address.
assets[].token_idstringToken id as a u256 decimal string (can exceed 64-bit range).
assets[].standardstringToken standard: ERC721 or ERC1155.
assets[].amountstringQuantity held — always "1" for ERC-721; the held quantity for ERC-1155.
assets[].namestringToken / item display name.
assets[].image_uristring (uri)URI of the token image.
assets[].collection_namestringName of the collection the token belongs to.
pagination.limitintegerPage size used for this response.
pagination.offsetintegerOffset used for this response.
pagination.totalintegerTotal assets available; may be absent when expensive to compute.

contract, token_id, and standard are always present on each asset; the remaining fields are best-effort metadata and may be omitted when a token's metadata is unavailable.

Errors

CodeMeaningWhen it happens
401unauthorized / trial_expired / subscription_expiredMissing/invalid key, lapsed trial, or expired subscription.
403tier_insufficient / method_unknownKey's tier is below Pro, or the method isn't part of the key's product.
429rate_limitedSustained 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 adding limit to offset until assets comes back with fewer than limit entries. When pagination.total is present you can stop once offset + limit >= total.
  • Big numbers as strings: token_id and amount are decimal strings because ERC token ids and ERC-1155 quantities are u256 and overflow JavaScript Number. Parse with BigInt if you need to do arithmetic.
  • ERC-1155 quantities: for ERC1155 assets, amount is the number of units the address holds; for ERC721 it is always "1".
  • Related wallet endpoints: ETH balance, transaction history, and ERC-20 token balances.