EVM contract ABI, proxy info and signatures (6 chains) API
ABI and metadata for an EVM contract on Base, Ethereum, Arbitrum, OP Mainnet, Polygon or Avalanche: Sourcify verification match, contract name, compiler, proxy type and implementations (implementation ABI merged), function, event and error signatures with selectors and topics, and read vs write function lists. Unverified contracts get a best-effort function list from bytecode selectors named via the Sourcify 4byte database. Sources: Sourcify, chain JSON-RPC via PublicNode.
$0.002 per call USDC over x402 v2 on Base, Polygon, Arbitrum, Avalanche or Sei. No signup, no API key. Requests that fail or match nothing are not charged.
Endpoint
GET https://api.kit-rx.com/v1/chain/contract-abi
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
chain | string | yes | Chain by name, alias or chain id: base (8453), ethereum (1), arbitrum (42161), optimism (10), polygon (137), avalanche (43114). e.g. base |
address | string | yes | Contract address (0x + 40 hex characters, any letter case). e.g. 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
format | string: json, human | no | json (default) adds the JSON ABI (up to 500 KB); human returns only the signature lists and metadata. e.g. json |
Example request
https://api.kit-rx.com/v1/chain/contract-abi?chain=base&address=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
Without payment the server answers 402 Payment Required with the price (2000 atomic USDC) in the PAYMENT-REQUIRED header. Any x402 v2 client pays and retries automatically. A request with no parameters runs this example.
curl -i "https://api.kit-rx.com/v1/chain/contract-abi?chain=base&address=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
Pay from an agent
AgentCash: fetch the URL. OpenDexter MCP: x402_fetch. Kit Rx MCP server: https://api.kit-rx.com/mcp. Code:
import { x402Client } from "@x402/core/client";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { wrapFetchWithPayment } from "@x402/fetch";
import { privateKeyToAccount } from "viem/accounts";
const client = new x402Client();
registerExactEvmScheme(client, { signer: privateKeyToAccount(process.env.BUYER_KEY) });
const pay = wrapFetchWithPayment(fetch, client);
const res = await pay("https://api.kit-rx.com/v1/chain/contract-abi?chain=base&address=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913");
console.log(await res.json());
Example response
{
"query": {
"chain": "base",
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"format": "json"
},
"result": {
"chain": "base",
"chain_id": 8453,
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"verified": true,
"name": "FiatTokenProxy",
"verification": {
"match": "exact_match",
"creation_match": "exact_match",
"runtime_match": "exact_match",
"verified_at": "2024-08-08T13:59:29Z"
},
"compiler": {
"language": "Solidity",
"compiler_version": "0.6.12+commit.27d51765",
"evm_version": "istanbul",
"optimizer": {
"enabled": true,
"runs": 10000000
},
"source_file": "FiatTokenProxy.sol"
},
"bytecode_size": 1852,
"proxy": {
"is_proxy": true,
"type": "ZeppelinOSProxy",
"implementations": [
{
"address": "0x2Ce6311ddAE708829bc0784C967b7d77D19FD779",
"name": "FiatTokenV2_2"
}
]
},
"implementation": {
"address": "0x2Ce6311ddAE708829bc0784C967b7d77D19FD779",
"name": "FiatTokenV2_2",
"verified": true,
"verification": {
"match": "exact_match",
"creation_match": "exact_match",
"runtime_match": "exact_match",
"verified_at": "2026-09-13T14:12:39Z"
},
"compiler": {
"language": "Solidity",
"compiler_version": "0.6.12+commit.27d51765",
"evm_version": "istanbul",
"optimizer": {
"enabled": true,
"runs": 10000000
},
"source_file": "FiatTokenV2_2.sol"
}
},
"counts": {
"functions": 60,
"read": 26,
"write": 34,
"events": 19,
"errors": 0,
"abi_entries": 81
},
"constructor": "constructor(address implementationContract)",
"fallback": true,
"receive": false,
"functions": {
"read": [
{
"selector": "0x70a08231",
"signature": "balanceOf(address)",
"human": "function balanceOf(address account) view returns (uint256)",
"state_mutability": "view"
}
],
"write": [
{
"selector": "0xa9059cbb",
"signature": "transfer(address,uint256)",
"human": "function transfer(address to, uint256 value) returns (bool)",
"state_mutability": "nonpayable"
}
],
"unclassified": []
},
"events": [
{
"topic0": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"signature": "Transfer(address,address,uint256)",
"human": "event Transfer(address indexed from, address indexed to, uint256 value)"
}
],
"errors": [],
"abi": [
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
}
],
"truncated": {
"summary": false,
"abi": false
},
"abi_source": "sourcify_verified_proxy_and_implementation"
},
"sources": [
{
"name": "Sourcify verified contract repository",
"url": "https://sourcify.dev/"
},
{
"name": "Base JSON-RPC via PublicNode",
"url": "https://base-rpc.publicnode.com"
}
],
"notes": [
"Selectors are the first 4 bytes of keccak256 of the canonical signature; event topic0 is the full hash. Read functions are view or pure."
],
"attribution": [
"Contract metadata and function/event signatures from Sourcify (https://sourcify.dev), the open-source smart contract verification service. Kit Rx is not affiliated with or endorsed by Sourcify.",
"Blockchain data read through PublicNode public RPC endpoints (https://www.publicnode.com, operated by Allnodes Inc.); figures are derived by Kit Rx (aggregated, decoded or converted), not a raw RPC feed. Not affiliated with or endorsed by PublicNode or Allnodes."
],
"generated_at": "2026-11-15T01:14:47.893Z"
}
Kit Rx: Pay-per-call data and safety tools for AI agents, paid in USDC over x402. No signup, no API key. Machine-readable: OpenAPI, llms.txt, /.well-known/x402, agent skills.