# ERC721 Token List by Owner (skills.onesource.io)

> ERC721 Token List by Owner (skills.onesource.io) is a paid API for AI agents from skills.onesource.io, paid per call via x402, $0.008/call, status unknown (last checked 2026-09-15).

Lists all ERC721 NFT token IDs owned by a wallet address within a specific collection using tokenOfOwnerByIndex via eth_call

## Facts

- Endpoint: GET https://skills.onesource.io/api/chain/erc721-tokens
- Price: $0.008/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-15
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/skills-onesource-io-804bc89d
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_OMlZecCGmKiF3GnLk7dC-

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 skills-onesource-io-804bc89d
```

Example prompt: Can you list all the ERC721 token IDs that wallet 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 owns in the contract 0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D on Ethereum — up to 1000 tokens?

## When to prefer this

Use this endpoint when you need to enumerate the specific token IDs an address owns in a known ERC721 collection on Ethereum, Sepolia, Avalanche, Base, or MegaETH. It is ideal for building NFT portfolio views, gating access by token ownership, or feeding downstream metadata lookups. Prefer this over generic eth_call simulation when you specifically want the enumerated list of owned token IDs without writing raw ABI calldata.

## Known failure modes

- Invalid owner address format (must match ^0x[a-fA-F0-9]{40}$) returns validation error
- Invalid contract address format returns validation error
- Contract does not implement ERC721Enumerable / tokenOfOwnerByIndex — call may revert or return empty
- Unsupported network value returns enum validation error
- Wallet owns zero tokens in the collection — returns empty array
- max parameter out of range (must be 1–1000) returns validation error
- RPC node unavailability or timeout causes 5xx error

## How this service works

Fetches ERC-721 token data on-chain for a given chain.

## Output

An array of token IDs (integers) that the specified wallet address owns within the given ERC721 smart contract, retrieved via on-chain tokenOfOwnerByIndex calls. Results are bounded by the optional max parameter (up to 1000).

## Example request

```json
{
 "max": 100,
 "owner": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
 "network": "ethereum",
 "contract": "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D"
}
```

## 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",
      "address"
     ],
     "properties": {
      "max": {
       "type": "integer",
       "maximum": 1000,
       "minimum": 1
      },
      "address": {
       "type": "string",
       "pattern": "^0x[a-fA-F0-9]{40}$"
      },
      "network": {
       "enum": [
        "ethereum",
        "sepolia",
        "robinhood"
       ],
       "type": "string",
       "default": "ethereum"
      },
      "contract": {
       "type": "string",
       "pattern": "^0x[a-fA-F0-9]{40}$"
      }
     }
    }
   },
   "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"
        },
        "balance": {
         "type": "string"
        },
        "token_ids": {
         "type": "array",
         "items": {
          "type": "string"
         }
        },
        "is_enumerable": {
         "type": "boolean"
        },
        "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"
        }
       }
      }
     }
    }
   }
  }
 }
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/skills-onesource-io-804bc89d/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from skills.onesource.io](https://www.zero.xyz/host/skills.onesource.io/llms.txt)
