# Hermes x402 NFT Metadata Lookup

> Hermes x402 NFT Metadata Lookup is a paid API for AI agents from api.zlovev.com, paid per call via x402, $0.02/call, status unknown (last checked 2026-10-02).

Fetches full NFT token metadata, owner, collection info, and resolves ipfs:// tokenURIs for a given contract+token on Base or Ethereum mainnet, paid per-call with USDC via x402.

## Facts

- Endpoint: GET https://api.zlovev.com/api/chain/nft/metadata?utm_source=zero.xyz
- Price: $0.02/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-02
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/hermes-x402-nft-metadata-lookup-de722d6f
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_PkGXQJxDkjhnx1Rc92yu6

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 hermes-x402-nft-metadata-lookup-de722d6f
```

Example prompt: Look up the full metadata for token ID 1 of the NFT contract 0x400b77f2ecb501fb00e7240e37f9f286cb13cabf on Base mainnet — I want the owner, the image URL, collection name, and any attributes.

## When to prefer this

Use this endpoint when you need a single, unified response combining on-chain NFT token data (owner, URI) with off-chain IPFS metadata resolution (name, image, attributes) and collection-level facts, without setting up an API key or account — paying $0.02 USDC per call via x402 on Base. Prefer this over manual on-chain reads + separate IPFS fetches when you want one call that handles both layers and resolves ipfs:// URIs through public HTTP gateways automatically.

## Known failure modes

- Invalid contract address format returns error
- Token ID does not exist on chain returns exists:false
- IPFS gateway timeout causes metadata.ok:false
- Unsupported chain value returns validation error
- Payment not received causes 402 response before data is returned
- Contract is not an NFT contract returns schema mismatch or empty collection fields

## How this service works

Pay-per-call data API for AI agents. No API key, no account, no signup — pay USDC on Base (eip155:8453) per request; free /api/meta lists all 24 endpoints. One call each: web page to LLM-ready text and link previews; China A-share quotes and limit-up pool; Chinese text and pinyin; Base/Ethereum on-chain reads (address, token, ERC-20 balances, tx, blocks, transfer history, gas price in USD); NFT records (collection, owner, and ipfs:// tokenURI resolved through public gateways); full-page screenshots; email verification without sending mail; ENS forward/reverse resolution; smart-contract due diligence (ABI, verified source, proxy); token security facts (owner, renounced ownership, paused, bytecode capability selectors); domain dossier (RDAP, DNS, TLS certificate, HTTP facts, hosting network); a one-call rule-based contract verdict (published-weights exposure score, owner/pause/proxy/capability facts, every reason with evidence); and an ERC-20 allowance risk check that returns the live allowance matrix for one wallet across up to 10 spenders (unlimited flags, contract/EOA status, exact revoke calls) with a single verdict.

## Output

Returns a JSON object with: token owner address, existence flag, URI kind (e.g. ipfs), raw token URI, whether owner is a contract; resolved metadata including NFT name, image (ipfs:// and HTTP gateway URL), total attribute count, metadata SHA-256 hash, and source IPFS gateway used; plus collection name, symbol, token standard (erc721/erc1155), and raw total supply.

## 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": {
      "chain": {
       "enum": [
        "base",
        "eth"
       ],
       "type": "string",
       "description": "base = Base mainnet (eip155:8453), eth = Ethereum mainnet (eip155:1). Default base"
      },
      "contract": {
       "type": "string",
       "description": "NFT contract address (0x + 40 hex) on the chosen chain"
      },
      "token_id": {
       "type": "string",
       "description": "Token ID as a decimal integer or 0x hex string"
      }
     }
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object"
    }
   }
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "ok": true,
  "chain": "base",
  "token": {
   "owner": "0x…",
   "exists": true,
   "uri_kind": "ipfs",
   "token_uri": "ipfs://bafybei…/1",
   "owner_is_contract": false
  },
  "network": "eip155:8453",
  "contract": "0x400b77f2ecb501fb00e7240e37f9f286cb13cabf",
  "metadata": {
   "ok": true,
   "meta": {
    "name": "Sphinx #1",
    "image": "ipfs://bafy…",
    "image_http": "https://gateway.pinata.cloud/ipfs/bafy…",
    "attributes_total": 7
   },
   "sha256": "9f2c…",
   "source_gateway": "gateway.pinata.cloud"
  },
  "token_id": "1",
  "collection": {
   "name": "ReformistSphinx",
   "symbol": "SPHINX",
   "standard": "erc721",
   "total_supply_raw": "564688"
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/hermes-x402-nft-metadata-lookup-de722d6f/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.zlovev.com](https://www.zero.xyz/host/api.zlovev.com/llms.txt)
