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://chain.kit-rx.com/v1/chain/calldata-decode

Parameters

NameTypeRequiredDescription
datastringyesTransaction calldata, 0x-prefixed hex with a 4-byte selector; at most 16,384 hex digits (8 KB). e.g. 0x095ea7b3000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
tostringnoContract 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
chainstringnoChain 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://chain.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://chain.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://chain.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://chain.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 EVM Gas, Token Scan & Tx Decode: Onchain tools for AI agents: multi-chain gas prices, token risk scan and DEX price, calldata and EIP-712 signature safety checks, transaction decoding, ABIs, wallet balances and ENS, paid per call over x402. Machine-readable: OpenAPI, llms.txt, /.well-known/x402, agent skills.