EIP-712 signature request inspector (permits, x402) API
Inspects EIP-712 typed data before signing: kind (EIP-2612 or DAI permit, Permit2 allowance or transfer, EIP-3009 transfer authorization as used by x402, Seaport order, Safe transaction, generic), digest, chain id with mismatch check, verifying contract with token symbol and decimals, spender or recipient, raw and formatted amount, unlimited flag, deadline window in ISO time, risk level, flags with reasons, one-line summary. Sources: JSON-RPC via PublicNode, Sourcify.
$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/sign-inspect
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
typed | string | yes | EIP-712 typed data as JSON (URL-encoded in the query) or base64 of it, max 16 KB; also accepts eth_signTypedData_v4 params [address, typedData]. |
expected_chain | string | no | Chain the signature should be for (id such as 8453 or eip155:8453, or a supported name); a different domain chainId is flagged. e.g. base |
expected_spender | string | no | Address expected as spender or recipient (the payTo for an x402 payment); a different address is flagged. e.g. 0xAf8E0A8a8A0A8f65831b2dD0FFe0c1B804698D70 |
Example request
https://chain.kit-rx.com/v1/chain/sign-inspect?typed=%7B%22types%22%3A%7B%22TransferWithAuthorization%22%3A%5B%7B%22name%22%3A%22from%22%2C%22type%22%3A%22address%22%7D%2C%7B%22name%22%3A%22to%22%2C%22type%22%3A%22address%22%7D%2C%7B%22name%22%3A%22value%22%2C%22type%22%3A%22uint256%22%7D%2C%7B%22name%22%3A%22validAfter%22%2C%22type%22%3A%22uint256%22%7D%2C%7B%22name%22%3A%22validBefore%22%2C%22type%22%3A%22uint256%22%7D%2C%7B%22name%22%3A%22nonce%22%2C%22type%22%3A%22bytes32%22%7D%5D%7D%2C%22primaryType%22%3A%22TransferWithAuthorization%22%2C%22domain%22%3A%7B%22name%22%3A%22USD+Coin%22%2C%22version%22%3A%222%22%2C%22chainId%22%3A8453%2C%22verifyingContract%22%3A%220x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913%22%7D%2C%22message%22%3A%7B%22from%22%3A%220x1111111111111111111111111111111111111111%22%2C%22to%22%3A%220xAf8E0A8a8A0A8f65831b2dD0FFe0c1B804698D70%22%2C%22value%22%3A%222000%22%2C%22validAfter%22%3A%220%22%2C%22validBefore%22%3A%221893456000%22%2C%22nonce%22%3A%220x8f3c6a1e5b2d4f7a9c0e1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f1a3c5e7b9d1f3a%22%7D%7D&expected_chain=base&expected_spender=0xAf8E0A8a8A0A8f65831b2dD0FFe0c1B804698D70
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/sign-inspect?typed=%7B%22types%22%3A%7B%22TransferWithAuthorization%22%3A%5B%7B%22name%22%3A%22from%22%2C%22type%22%3A%22address%22%7D%2C%7B%22name%22%3A%22to%22%2C%22type%22%3A%22address%22%7D%2C%7B%22name%22%3A%22value%22%2C%22type%22%3A%22uint256%22%7D%2C%7B%22name%22%3A%22validAfter%22%2C%22type%22%3A%22uint256%22%7D%2C%7B%22name%22%3A%22validBefore%22%2C%22type%22%3A%22uint256%22%7D%2C%7B%22name%22%3A%22nonce%22%2C%22type%22%3A%22bytes32%22%7D%5D%7D%2C%22primaryType%22%3A%22TransferWithAuthorization%22%2C%22domain%22%3A%7B%22name%22%3A%22USD+Coin%22%2C%22version%22%3A%222%22%2C%22chainId%22%3A8453%2C%22verifyingContract%22%3A%220x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913%22%7D%2C%22message%22%3A%7B%22from%22%3A%220x1111111111111111111111111111111111111111%22%2C%22to%22%3A%220xAf8E0A8a8A0A8f65831b2dD0FFe0c1B804698D70%22%2C%22value%22%3A%222000%22%2C%22validAfter%22%3A%220%22%2C%22validBefore%22%3A%221893456000%22%2C%22nonce%22%3A%220x8f3c6a1e5b2d4f7a9c0e1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f1a3c5e7b9d1f3a%22%7D%7D&expected_chain=base&expected_spender=0xAf8E0A8a8A0A8f65831b2dD0FFe0c1B804698D70"
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/sign-inspect?typed=%7B%22types%22%3A%7B%22TransferWithAuthorization%22%3A%5B%7B%22name%22%3A%22from%22%2C%22type%22%3A%22address%22%7D%2C%7B%22name%22%3A%22to%22%2C%22type%22%3A%22address%22%7D%2C%7B%22name%22%3A%22value%22%2C%22type%22%3A%22uint256%22%7D%2C%7B%22name%22%3A%22validAfter%22%2C%22type%22%3A%22uint256%22%7D%2C%7B%22name%22%3A%22validBefore%22%2C%22type%22%3A%22uint256%22%7D%2C%7B%22name%22%3A%22nonce%22%2C%22type%22%3A%22bytes32%22%7D%5D%7D%2C%22primaryType%22%3A%22TransferWithAuthorization%22%2C%22domain%22%3A%7B%22name%22%3A%22USD+Coin%22%2C%22version%22%3A%222%22%2C%22chainId%22%3A8453%2C%22verifyingContract%22%3A%220x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913%22%7D%2C%22message%22%3A%7B%22from%22%3A%220x1111111111111111111111111111111111111111%22%2C%22to%22%3A%220xAf8E0A8a8A0A8f65831b2dD0FFe0c1B804698D70%22%2C%22value%22%3A%222000%22%2C%22validAfter%22%3A%220%22%2C%22validBefore%22%3A%221893456000%22%2C%22nonce%22%3A%220x8f3c6a1e5b2d4f7a9c0e1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f1a3c5e7b9d1f3a%22%7D%7D&expected_chain=base&expected_spender=0xAf8E0A8a8A0A8f65831b2dD0FFe0c1B804698D70");
console.log(await res.json());
Example response
{
"query": {
"typed": "TransferWithAuthorization (667 chars)",
"expected_chain": 8453,
"expected_spender": "0xAf8E0A8a8A0A8f65831b2dD0FFe0c1B804698D70"
},
"result": {
"kind": "eip3009_transfer",
"kind_label": "EIP-3009 TransferWithAuthorization (one-time transfer, x402 exact scheme)",
"primary_type": "TransferWithAuthorization",
"digest": "0x001bce51ac376ae48d55d5a36116124c831407c7d2423d92b42867785fd7d21b",
"chain_id": 8453,
"chain": "base",
"expected_chain_id": 8453,
"chain_mismatch": false,
"domain": {
"name": "USD Coin",
"version": "2",
"salt": null,
"fields": [
"name",
"version",
"chainId",
"verifyingContract"
]
},
"verifying_contract": {
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"label": null,
"is_contract": true,
"token": {
"symbol": "USDC",
"name": "USD Coin",
"decimals": 6
},
"domain_separator_match": true
},
"signer": "0x1111111111111111111111111111111111111111",
"spender": {
"address": "0xAf8E0A8a8A0A8f65831b2dD0FFe0c1B804698D70",
"role": "recipient",
"label": null,
"is_contract": false,
"delegated_to": null,
"verified_name": null,
"matches_expected": true
},
"amount": {
"token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"symbol": "USDC",
"decimals": 6,
"raw": "2000",
"formatted": "0.002",
"unlimited": false
},
"amounts": [
{
"token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"symbol": "USDC",
"decimals": 6,
"raw": "2000",
"formatted": "0.002",
"unlimited": false
}
],
"validity": {
"valid_after": null,
"deadline": "2030-01-01T00:00:00.000Z",
"deadline_unix": "1893456000",
"never_expires": false,
"seconds_remaining": 98750471,
"expired": false,
"not_yet_valid": false,
"too_long": true
},
"details": {
"nonce": "0x8f3c6a1e5b2d4f7a9c0e1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f1a3c5e7b9d1f3a"
},
"risk_level": "low",
"flags": [
{
"code": "payment_authorization",
"severity": "low",
"reason": "Signing authorizes a one-time transfer of 0.002 USDC from 0x1111111111111111111111111111111111111111 to 0xA..."
},
{
"code": "long_validity",
"severity": "low",
"reason": "The authorization end (validBefore) is 3 years away (more than 1 hour). x402 payment authorizations are nor..."
}
],
"summary": "TransferWithAuthorization of 0.002 USDC from 0x1111111111111111111111111111111111111111 to 0xAf8E0A8a8A0A8f65831b2dD0FFe0c1B804698D70 on Base, vali..."
},
"sources": [
{
"name": "Base JSON-RPC via PublicNode",
"url": "https://base-rpc.publicnode.com"
}
],
"attribution": [
"Blockchain data read through PublicNode public RPC endpoints (https://www.publicnode.com, operated by Allnodes Inc.);..."
],
"generated_at": "2026-11-15T01:18:49.923Z"
}
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.