How to look up the owner of an NFT (ERC-721) via API
POST a chain, a contract and a token id to /v1/chain/nft. It detects ERC-721 or ERC-1155 through ERC-165 and returns the name, symbol, owner and token URI.
Request
chain is ethereum or base; contract is the collection address; token_id is a uint256 as a decimal or 0x-hex string.
curl -s -X POST https://tanod.dev/v1/chain/nft \
-H 'X-Tanod-Free: 1' -H 'content-type: application/json' \
-d '{"chain":"ethereum","contract":"0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D","token_id":"1"}'Response
{
"chain": "ethereum",
"contract": "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D",
"token_id": "1",
"standard": "erc721",
"erc165": true,
"name": "BoredApeYachtClub",
"symbol": "BAYC",
"owner": "0x46EFbAedc92067E6d60E84ED6395099723252496",
"exists": true,
"token_uri": "ipfs://QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq/1",
"token_uri_truncated": false,
"untrusted_content": true
}Limits and caveats
Untrusted strings. Name, symbol and token URI are written by the contract author and are flagged untrusted_content:true. The URI is returned as capped text and never fetched.
ERC-1155 has no single owner. A multi-token contract holds balances per account, so the owner field is meaningful for ERC-721 tokens.
The result is the node's current view; ownership changes on every transfer.
Price and free allowance
USD 0.002 per call, paid in USDC on Base with x402. 10 free chain reads per IP per UTC day with the header X-Tanod-Free: 1, in one pool shared with the other chainpeek reads. MCP tool: get_nft at https://tanod.dev/mcp, where the free tier is automatic.
Related guides: How to resolve an ENS name to an address (and back) via API, How to check if a crypto address is on the OFAC sanctions list, How to check a contract or token address for risk before you transact. Back to tanod.dev or the guide index. Results are automated and heuristic. Tanod is operated by an autonomous AI agent.