EVM calldata decoder with pre-signing risk flags API
Decodes EVM calldata before signing: function signature, selector, named arguments, candidate signatures for ambiguous selectors, one level of bundled calls (multicall, Multicall3, ERC-4337 execute, Safe execTransaction, multiSend), token symbol and decimals, and risk flags with reasons for unlimited approvals, setApprovalForAll, permits, transferFrom, admin calls and delegatecall. Sources: Sourcify ABIs and 4byte signatures, 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/calldata-decode
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
data | string | yes | Transaction calldata, 0x-prefixed hex with a 4-byte selector; at most 16,384 hex digits (8 KB). e.g. 0x095ea7b3000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
to | string | no | Contract the transaction is sent to. When given, its Sourcify-verified ABI (following a proxy to its implementation) decodes the call, and token symbol, decimals and contract-code checks are added. e.g. 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
chain | string | no | Chain of the transaction by name or id: base (8453), ethereum (1), arbitrum (42161), optimism (10), polygon (137), avalanche (43114). Default base when to is given. e.g. base |
Example request
https://api.kit-rx.com/v1/chain/calldata-decode?data=0x095ea7b3000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff&to=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&chain=base
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/calldata-decode?data=0x095ea7b3000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff&to=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&chain=base"
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/calldata-decode?data=0x095ea7b3000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff&to=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&chain=base");
console.log(await res.json());
Example response
{
"query": {
"data": "0x095ea7b3000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3... (68 bytes)",
"to": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"chain": "base"
},
"result": {
"selector": "0x095ea7b3",
"function": "approve(address,uint256)",
"name": "approve",
"decoded_with": "sourcify_abi",
"signature_verified": true,
"args": [
{
"name": "spender",
"type": "address",
"value": "0x000000000022D473030F116dDEE9F6B43aC78BA3"
},
{
"name": "value",
"type": "uint256",
"value": "115792089237316195423570985008687907853269984665640564039457584007913129639935"
}
],
"exact_encoding": true,
"target": {
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"chain": "base",
"chain_id": 8453,
"label": null,
"is_contract": true,
"delegated_to": null,
"verified": true,
"contract_name": "FiatTokenProxy",
"proxy_type": "ZeppelinOSProxy",
"implementation": {
"address": "0x2Ce6311ddAE708829bc0784C967b7d77D19FD779",
"name": "FiatTokenV2_2"
},
"token": {
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6
}
},
"nested": null,
"addresses": [
{
"address": "0x000000000022D473030F116dDEE9F6B43aC78BA3",
"role": "spender",
"label": "Uniswap Permit2",
"is_contract": true,
"delegated_to": null,
"verified_name": null
}
],
"risk_level": "high",
"flags": [
{
"code": "unlimited_approval",
"severity": "high",
"reason": "Grants 0x000000000022D473030F116dDEE9F6B43aC78BA3 (Uniswap Permit2) an unlimited allowance on USDC (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913): it can move all of the sender's balance of this token, now and later, until the allowance is revoked."
}
],
"summary": "Approves 0x000000000022D473030F116dDEE9F6B43aC78BA3 (Uniswap Permit2) to spend an unlimited amount of USDC (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913). Risk: high (unlimited_approval)."
},
"sources": [
{
"name": "Sourcify verified contract repository",
"url": "https://sourcify.dev/"
},
{
"name": "Base JSON-RPC via PublicNode",
"url": "https://base-rpc.publicnode.com"
}
],
"attribution": [
"Contract metadata and function/event signatures from Sourcify (https://sourcify.dev), the open-source smart contract ...",
"Blockchain data read through PublicNode public RPC endpoints (https://www.publicnode.com, operated by Allnodes Inc.);..."
],
"generated_at": "2026-11-15T01:18:49.839Z"
}
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.