Pre-sign risk check with explanation ($0.03 via x402)
presign_check_explainRead-only
Paid ($0.03 USDC via x402 on Base or Solana): the same verdict and reason codes as presign_check, plus a 3 to 5 sentence plain-language explanation a person can read before approving (lang en or nl). Same as POST /v1/check/explain. The answer carries a signed receipt (EIP-191, bound to your arguments) that proves later which verdict you got.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | transaction: the target contract | |
| tx | No | xrpl: the unsigned transaction JSON (TransactionType, Account, Destination, Amount, …) | |
| data | No | transaction: 0x-prefixed calldata | |
| from | No | transaction or message, optional: your wallet address; the transaction is then simulated (what really leaves and arrives; orange HIDDEN_APPROVAL, SIMULATION_NFT_OUT, SIMULATION_FAILS) and its recipients are compared with who this wallet paid before (red ADDRESS_POISONING for a look-alike) | |
| lang | No | Language of the explanation (default en) | |
| type | Yes | What the agent is about to sign; message = a plain personal_sign / eth_sign message in message; solana = a Solana transaction in transaction; xrpl = an unsigned XRP Ledger transaction in tx; algorand = an Algorand transaction in transaction, or a group in transactions | |
| x402 | No | optional, EIP-3009 payments only: the x402 payment requirements you are paying ({ accepted: { scheme, network, amount, asset, payTo, maxTimeoutSeconds, extra } }, one entry of the 402's accepts); red when the signature pays more, someone else, another token or chain | |
| token | No | approval: the token contract | |
| value | No | transaction: native value in wei | |
| amount | No | approval: amount in base units (0 = revoke) | |
| intent | No | optional: what you are trying to do, in one sentence (e.g. "swap 10 USDC for ETH on Uniswap"); orange INTENT_MISMATCH when signing would do more or something else | |
| method | No | message: how it is signed (default personal_sign); eth_sign is always red | |
| origin | No | optional: the site asking for the signature or transaction (URL or hostname); a domain under 30 days old is orange | |
| chainId | No | EVM chain id, required for approval, transaction and signature: 1, 10, 56, 137, 8453, 42161 (8453 = Base); optional for message | |
| message | No | message: the text or 0x-hex about to be signed; a Sign-In with Ethereum message for another site than origin is red, unreadable bytes are orange | |
| network | No | xrpl: xrpl:0 (mainnet, default) or xrpl:1 (testnet) | |
| spender | No | approval: who gets the allowance | |
| typedData | No | signature: the exact eth_signTypedData_v4 payload (Permit, Permit2, EIP-3009 x402 payment, Seaport) | |
| transaction | No | solana: the base64 wire transaction about to be signed; decoded and simulated (red SOLANA_TOKEN_ACCOUNT_TAKEOVER, SOLANA_ACCOUNT_ASSIGN; orange SOLANA_UNLIMITED_DELEGATE, SOLANA_DURABLE_NONCE, HIDDEN_APPROVAL, SIMULATION_FAILS). algorand: one base64 msgpack transaction (unsigned or signed); red ALGORAND_REKEY, ALGORAND_CLOSE_ACCOUNT, ALGORAND_ASSET_CLOSE, ALGORAND_FAKE_STABLECOIN; simulated | |
| transactions | No | algorand: an atomic group, each a base64 msgpack transaction; send the whole group so every transaction is checked |
Output Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| accepts | No | Only on an unpaid call: the x402 payment options | |
| reasons | No | Why the verdict is what it is | |
| receipt | No | Signed receipt (EIP-191) binding the verdict to your arguments | |
| verdict | No | green: go ahead; orange: ask the user; red: do not sign or buy (absent on the payment requirement) | |
| version | No | ||
| explanation | No | Plain-language explanation for a person |