# Softbot EVM Check (Softbot Studio) > ERC-20 and wallet checks for Base and Ethereum, plus a multi-chain token price. Public data only. Pay per call over x402 v2 in USDC on Solana, Base, Polygon or Arbitrum. Failed calls are not charged. ## Tools - POST https://softbot-evmcheck-mainnet.softbot.workers.dev/v1/token ($0.01 USDC per call) EVM token check: verdict (safe / caution / avoid) for an ERC-20 on Base or Ethereum from contract code, GoPlus token security, and DexScreener liquidity. One contract per call. Request: JSON body {"contract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","chain":"base"} Response 200 (application/json): contract, chain, verdict, risk_score, reasons, token, market - POST https://softbot-evmcheck-mainnet.softbot.workers.dev/v1/wallet ($0.005 USDC per call) EVM wallet check: verdict (established / new / suspicious / inactive) for a 0x address on Base or Ethereum from Blockscout and a public RPC. One address per call. Request: JSON body {"address":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","chain":"base"} Response 200 (application/json): address, chain, verdict, reasons, balance, account, age - POST https://softbot-evmcheck-mainnet.softbot.workers.dev/v1/price ($0.003 USDC per call) Token price: USD price, 24h volume, liquidity, and 24h change for a Solana mint, an EVM contract, or a ticker, from DexScreener. Request: JSON body {"query":"SOL","chain":"solana"} Response 200 (application/json): query, chain, symbol, name, address, price_usd, volume_24h_usd, liquidity_usd, change_24h_pct, pair, dex, source Web search (POST /v1/search, $0.005) is not enabled on this deployment. It returns 503 not_enabled and is not listed for payment. ## Payment (x402 v2, scheme exact) - Solana: USDC, pay to 9csHbkGGeQqNxvtZw8hPnC34NCcmZoZXVTEGC1MiDNRE, facilitator PayAI (https://facilitator.payai.network). - Base, Polygon, and Arbitrum One: native USDC, pay to 0xC68F3cCa31D50208ab4C933a38288938e0B21E63, facilitator Coinbase CDP. - Flow: POST without payment -> HTTP 402 with PAYMENT-REQUIRED -> retry with PAYMENT-SIGNATURE. Or send X-Credit-Key and Idempotency-Key. ## Credit packs - Prepaid balance usable on every paid Softbot tool at the tool's existing price. Buy with x402 (USDC on Solana, Base, Polygon, or Arbitrum). No subscription and no withdrawal. - GET https://softbot-credits-mainnet.softbot.workers.dev/v1/packs lists the packs. POST https://softbot-credits-mainnet.softbot.workers.dev/v1/packs/starter pays $0.25 and receives $0.25 credit. POST https://softbot-credits-mainnet.softbot.workers.dev/v1/packs/regular pays $1 and receives $1.05. POST https://softbot-credits-mainnet.softbot.workers.dev/v1/packs/larger pays $5 and receives $5.50. - The purchase response contains credit_key once. It is a bearer secret (header X-Credit-Key). Store it. If that response is lost, POST the same PAYMENT-SIGNATURE to the same pack URL to get the same key; you are not charged again. - Tool call: header X-Credit-Key and header Idempotency-Key. GET https://softbot-credits-mainnet.softbot.workers.dev/v1/credits with X-Credit-Key returns the balance, for example {"balance_micros":247000,"balance_usdc":"0.247"} after a $0.003 call on a $0.25 pack. - Invalid key: 401, and neither x402 nor the free trial runs. Insufficient balance: 402 with error insufficient_credit and no PAYMENT-REQUIRED header. Key plus a payment or SIWX header: 400 ambiguous_credentials, nothing charged. Failed tool calls are refunded. GET and HEAD never debit. - A credit key cannot buy another pack. ## Free trial - Free trial: 3 free calls per wallet per endpoint via Sign-In-With-X - POST once without payment -> 402. Take extensions["sign-in-with-x"] from the base64 PAYMENT-REQUIRED header, sign its info as SIWE (chainId eip155:8453, type eip191) or SIWS (Solana mainnet, type ed25519), then repeat the POST with your JSON body and header SIGN-IN-WITH-X: . No funds or payment needed; success returns x-trial: free and x-trial-remaining. - Copy-paste example: ```js // npm i @x402/core @x402/extensions viem import { decodePaymentRequiredHeader } from "@x402/core/http"; import { createSIWxPayload, encodeSIWxHeader } from "@x402/extensions/sign-in-with-x"; import { privateKeyToAccount, generatePrivateKey } from "viem/accounts"; const url = "https://softbot-evmcheck-mainnet.softbot.workers.dev/v1/price", wallet = privateKeyToAccount(process.env.KEY || generatePrivateKey()); // any EVM key, no funds needed const r402 = await fetch(url, { method: "POST" }); const ext = decodePaymentRequiredHeader(r402.headers.get("payment-required")).extensions["sign-in-with-x"]; const siwx = await createSIWxPayload({ ...ext.info, chainId: "eip155:8453", type: "eip191" }, wallet, url); const res = await fetch(url, { method: "POST", headers: { "content-type": "application/json", "SIGN-IN-WITH-X": encodeSIWxHeader(siwx) }, body: JSON.stringify({"query":"SOL","chain":"solana"}) }); console.log(res.status, res.headers.get("x-trial-remaining"), await res.json()); ``` ## Links - x402 discovery: https://softbot-evmcheck-mainnet.softbot.workers.dev/.well-known/x402 - OpenAPI: https://softbot-evmcheck-mainnet.softbot.workers.dev/openapi.json - Health: https://softbot-evmcheck-mainnet.softbot.workers.dev/health - Contact: softbot@mail.grokbot.com