Polygon NFT metadata
NFT metadata on Polygon PoS: the token URI of one ERC-721 token id (tokenURI) and the JSON it points to (name, description, image, attributes), read from data: URIs, https or ipfs:// (through ipfs.io). Strings over 1,000 characters, such as on-chain SVG images, are shortened. Use to show or check what an NFT is; for its owner use polygon_nft_owner. A token that does not exist is 422, uncharged; unreachable metadata is reported in metadataError.
Inputs
| Name | Type | Description |
|---|---|---|
contract (required) | string | 0x ERC-721 collection contract address |
tokenId (required) | string | Token id, a whole number |
Request
Over HTTP, with a card key from /credits:
curl -H "Authorization: Bearer adt_…" "https://agent-data-tools.revmesh2074.workers.dev/polygon/nft-metadata?contract=0xC36442b4a4522E871399CD717aBDD847Ab11FE88&tokenId=1"
Or one of your 25 free calls, no key:
curl "https://agent-data-tools.revmesh2074.workers.dev/polygon/nft-metadata?contract=0xC36442b4a4522E871399CD717aBDD847Ab11FE88&tokenId=1&trial=1"
Without a key, the same URL answers 402 Payment Required with x402 and MPP terms, so an agent with a wallet pays per call in USDC (Base, Polygon, Arbitrum or Solana over x402; Base or Tempo over MPP) and retries.
Example result
{
"chain": "Polygon PoS",
"chainId": 137,
"contract": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88",
"tokenId": "1",
"name": "Uniswap V3 Positions NFT-V1",
"symbol": "UNI-V3-POS",
"tokenUri": "data:application/json;base64,eyJuYW1lIjo… (14121 characters, shortened)",
"metadata": {
"name": "Uniswap - 0.3% - USDC/WETH - 1500<>2000",
"description": "This NFT represents a liquidity position…",
"image": "data:image/svg+xml;base64,… (shortened)"
},
"metadataSource": "data-uri",
"metadataError": null
}
From an AI agent (MCP)
Add the MCP server to Claude, Cursor or any MCP client. This tool is polygon_nft_metadata, and the first 25 successful calls are free:
https://agent-data-tools.revmesh2074.workers.dev/mcp