How to check who holds an NFT: ERC-721 and ERC-1155
An NFT picture or collection count does not identify the holder of an exact token. Choose the read-only check that matches its standard.
For an existing ERC-721 token, read ownerOf(tokenId) on the correct collection contract to find its current recorded holder. For ERC-1155, read balanceOf(account, id) to find how many units of that ID an account holds. These are different questions: an ERC-1155 type can have units in several accounts.
Start with the network, full collection contract address and token ID. Keep those three identifiers together while checking a familiar explorer or contract reader. A matching picture, collection name or total NFT count is not enough to identify an exact holding.
This guide checks public token records. It does not establish the identity of the person behind an address, the authenticity or price of an artwork, or your rights under a custody service. No transfer or wallet connection is part of the procedure.
Choose the query for the token standard
The ERC-721 interface provides both an account count and a lookup for an individual token. For ERC-1155, the standard interface asks for an account and a token-type ID together.
| Standard and read | What you supply | What the result means |
|---|---|---|
ERC-721 ownerOf(tokenId) |
One token ID | The holder address for that existing token |
ERC-721 balanceOf(account) |
One account address | How many NFTs from this contract it holds |
ERC-1155 balanceOf(account, id) |
Account and token-type ID | How many units of that ID it holds |
Suppose a hypothetical ERC-721 collection has tokens with IDs 42 and 43. Account A holds 42; Account B holds 43. Both account counts are 1. The counts cannot tell you which account holds 42; the ID-specific lookup can.
Now consider a separate hypothetical ERC-1155 contract. Account A holds 3 units of ID 42 and Account B holds 2. Both balances can be positive at the same snapshot. Calling Account A the sole owner of ID 42 would ignore the units held by Account B. These examples explain the reads; they are not results from a live collection.
Identify the collection and ID before trusting a match
A token ID belongs to a particular contract. ID 42 in one collection does not identify ID 42 in another. The ERC-721 identifier rules describe the contract-and-ID pair on a chain; do not assume IDs follow a consecutive pattern.
Find the collection’s official deployment information through a trusted route, or use a known transaction record, to confirm the network and full contract address. A copycat contract can use a familiar name and image. A standard-looking function response from that copy does not make it the intended collection.
Take the ID from the item details rather than guessing from its name. Preserve the value exactly. If one interface shows a hexadecimal ID and another a decimal ID, establish that they encode the same integer before comparing them. The contract address identifies the collection, while the account address is the holder you are checking. The address and contract guide explains that distinction.
For an unexpected item, follow the spam NFT safety guide before interacting with any link embedded in its description. You can inspect public records through a route you already trust without following a claim link.
Make a read-only check and keep the result
The steps below describe how to inspect public records. They were not tested on a live wallet for this article. The primary documentation for these methods was checked on 24 October 2026.
- Write down the complete identity. Record the network, collection contract and exact token ID. Add the account address if you are checking one particular wallet.
- Confirm the standard and select its public read method. Use the trusted explorer’s contract details and verified interface. Interface labels differ. For ERC-721 use
ownerOfwith the ID; for ERC-1155 usebalanceOfwith the account and ID. A missing or unsupported interface is a reason to investigate, not to assume the other standard. - Read the current state and record when it was observed. Save the returned address or unit count and the block number where available. Compare calls at the same block if possible; separate latest-state queries can observe a transfer between reads.
- Interpret the answer at the right scope. Compare the full ERC-721 returned address with the account you intended. For ERC-1155, a positive count confirms units recorded for that account, while a valid zero response records none there at that snapshot. Neither result enumerates every other holder.
- Mark failed or unavailable reads as unknown. Keep the error or unavailable result in your record. Check the ID, contract, network and reader before concluding the token is absent. Do not convert a failed query into a zero balance.
The OpenZeppelin ERC721 reference requires an existing token for the public ownerOf method. A nonexistent or burned ID can therefore fail rather than return a useful holder. That failure alone does not diagnose whether you mistyped an ID, selected another contract or queried an invalid token.
Do not confuse this public function with an internal helper whose name starts with an underscore. You are inspecting the documented public interface. These reads need no signature, approval or recovery phrase. If a site requests one merely to reveal the holder, stop using that flow.
When the recorded holder is a contract
An NFT can be held by a contract account. The address returned by a holder lookup may therefore belong to a vault, escrow, staking arrangement or other service rather than your signing wallet. That does not, by itself, settle who has the economic claim or whether an item is recoverable.
If you knowingly deposited the NFT into a service, check that service’s official records and the known deposit transaction. Link your account’s claim to the exact collection and ID. Do not transfer or withdraw assets simply to make a wallet gallery match an expected picture.
For a liquidity position, checking the holder only tells you which address holds the NFT. The Uniswap v3 NFT guide covers the separate task of checking the underlying position’s assets and fees. An NFT holder address alone supplies neither of those amounts.
Finish with an identified holding, not a thumbnail
The OpenZeppelin ERC1155 reference describes the result as units of a particular type held by an account. Keep that quantity with the account and ID. Do not replace it with an ERC-721-style single-owner label or divide it using an unrelated ERC-20 decimal scale.
Your record is complete when it contains the network, contract, token ID, standard, returned holder or per-account units, and the observation block or time. Add a custody note when the recorded holder is a service contract. If an essential field remains unresolved, mark the holding unverified.
A gallery is useful for browsing; this record answers the narrower question of what the chosen contract reports for the exact token. It does not certify the collection, grant transfer permission, identify a person or calculate a sale value.
Frequently asked questions
Does an ERC-721 balance of 1 prove that this wallet holds my exact NFT?
No. balanceOf counts the account's NFTs in that contract. Use ownerOf with the specific token ID to identify that token's current recorded holder. Check the same network and collection contract.
Can more than one wallet hold the same ERC-1155 token ID?
Yes. An ERC-1155 ID can represent multiple units. balanceOf takes both an account and an ID and reports that account's units of that type. A positive result does not establish that the account is the only holder.
Do I need to connect or sign to check the holder?
No wallet signature, approval or recovery phrase is needed for these public read-only queries. A result identifies recorded holdings, not the person controlling an address or a separate custody claim.