# NFT Owner Lookup by Token ID (ERC721)

> NFT Owner Lookup by Token ID (ERC721) is a paid API for AI agents from api.onesource.io, paid per call via x402, $0.003/call, status unknown (last checked 2026-09-14).

Returns the current owner address of a specific ERC721 NFT by calling ownerOf on-chain via eth_call

## Facts

- Endpoint: GET https://api.onesource.io/api/chain/nft-owner
- Price: $0.003/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/nft-owner-lookup-by-token-id-erc721-64bcff13
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_TZ9RKfHfvANo-ozAJ_SHj

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability nft-owner-lookup-by-token-id-erc721-64bcff13
```

Example prompt: Who currently owns token ID 42 of the ERC721 contract 0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D on Ethereum mainnet?

## When to prefer this

Use this endpoint when you need to quickly verify the current on-chain owner of a specific ERC721 NFT by token ID without needing full metadata or traits. Ideal for ownership checks, gating logic, or verifying NFT custody before an action. Prefer this over the NFT metadata endpoint when only the owner address is needed.

## Known failure modes

- Token ID does not exist or has been burned — contract may revert, returning an error
- Invalid contract address format (must be 0x-prefixed 40 hex chars) — validation error
- Contract is not an ERC721 contract — ownerOf call may revert or return unexpected result
- Network unavailable or RPC error — upstream eth_call failure
- token_id must be a non-negative integer string — malformed input rejected

## How this service works

Look up the current owner of an ERC721 NFT by token_id via ownerOf (eth_call)

## Output

Returns the Ethereum wallet address that currently owns the specified ERC721 token, resolved directly from the contract's ownerOf function via eth_call on the requested network.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET",
      "HEAD",
      "DELETE"
     ],
     "type": "string"
    },
    "queryParams": {
     "type": "object",
     "required": [
      "contract",
      "token_id"
     ],
     "properties": {
      "network": {
       "enum": [
        "ethereum",
        "sepolia",
        "robinhood"
       ],
       "type": "string",
       "default": "ethereum"
      },
      "contract": {
       "type": "string",
       "pattern": "^0x[a-fA-F0-9]{40}$"
      },
      "token_id": {
       "type": "string",
       "pattern": "^[0-9]+$"
      }
     }
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "required": [
      "data",
      "meta"
     ],
     "properties": {
      "data": {
       "type": "object",
       "properties": {
        "owner": {
         "type": "string"
        },
        "token_id": {
         "type": "string"
        },
        "contract_address": {
         "type": "string"
        }
       },
       "description": "Endpoint-specific response payload"
      },
      "meta": {
       "type": "object",
       "required": [
        "endpoint",
        "request_id"
       ],
       "properties": {
        "endpoint": {
         "type": "string"
        },
        "cost_usdc": {
         "type": "string"
        },
        "request_id": {
         "type": "string"
        },
        "payment_chain": {
         "type": "string"
        },
        "payment_token": {
         "type": "string"
        }
       }
      },
      "error": {
       "type": [
        "object",
        "null"
       ],
       "properties": {
        "code": {
         "type": "integer"
        },
        "message": {
         "type": "string"
        }
       }
      }
     }
    }
   }
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "data": {
   "owner": "0x46efbaedc92067e6d60e84ed6395099723253d67",
   "token_id": "1",
   "contract_address": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d"
  },
  "meta": {
   "endpoint": "/api/chain/nft-owner",
   "cost_usdc": "0.001",
   "request_id": "00000000abcdef01",
   "payment_chain": "base",
   "payment_token": "USDC"
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/nft-owner-lookup-by-token-id-erc721-64bcff13/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.onesource.io](https://www.zero.xyz/host/api.onesource.io/llms.txt)
