Contract ABI, verified contract: ABI and source
The verified ABI of a smart contract on Ethereum, Base, Arbitrum, Optimism or Polygon from Sourcify's open verification repository: contract name, compiler, match quality, every function and event signature, the full ABI, and for proxies the implementation contract with its ABI. Optional source=true adds the main source file (up to 20,000 characters). Unverified contracts are an uncharged 404. Use before calling or decoding a contract.
Inputs
| Name | Type | Description |
|---|---|---|
address (required) | string | Contract 0x address |
chain | string | ethereum (default), base, arbitrum, optimism or polygon |
source | string | true to include the main source file |
Request
Over HTTP, with a card key from /credits:
curl -H "Authorization: Bearer adt_…" "https://agent-data-tools.revmesh2074.workers.dev/contract/abi?address=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
Or one of your 25 free calls, no key:
curl "https://agent-data-tools.revmesh2074.workers.dev/contract/abi?address=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&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": "Ethereum",
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"name": "FiatTokenProxy",
"match": "exact_match",
"compiler": "0.6.12+commit.27d51765",
"proxy": {
"type": "ZeppelinOSProxy",
"implementation": "0x2Ce6311ddAE708829bc0784C967b7d77D19FD779",
"implementationName": "FiatTokenV2_2"
},
"functions": [
{
"signature": "transfer(address,uint256)",
"stateMutability": "nonpayable"
}
],
"events": [
"Transfer(address,address,uint256)"
],
"errors": [],
"abi": [],
"source": "Sourcify (sourcify.dev)"
}
From an AI agent (MCP)
Add the MCP server to Claude, Cursor or any MCP client. This tool is contract_abi, and the first 25 successful calls are free:
https://agent-data-tools.revmesh2074.workers.dev/mcp