{"openapi":"3.1.0","info":{"title":"SendCheck","version":"1.0.0","description":"Pre-send verification for EVM addresses. One paid HTTP call (x402, USDC on Base, no account, no API key) tells your agent whether an address is safe to send to: EIP-55 checksum, wallet-vs-contract, outgoing activity, native/USDC/USDT balances, and a leveled verdict (ok/caution/warn/danger) with reasons and a next action. Free checksum-only pre-check at GET /validate so you never pay for a malformed address.","contact":{"name":"Pennyforge","email":"pennyforge@emalupe.com","url":"https://sendcheck.surge.sh"},"x-guidance":"Pay per call via x402 (USDC on Base, EIP-3009, no account or key): POST without payment -> HTTP 402 with the payment requirements; sign an EIP-3009 USDC transfer to payTo and resend with the X-Payment header. /check = one chain, /deep = all five chains. GET /validate?address=0x… is a free checksum pre-check. Example: POST /check {\"address\":\"0x…\",\"chain\":\"base\"}.","x-attestation":{"jws":"eyJhbGciOiJFUzI1NiIsImtpZCI6InNlbmRjaGVjay0yMDI2LTA5In0.eyJhc3NldCI6IjB4ODMzNTg5ZkNENmVEYjZFMDhmNGM3QzMyRDRmNzFiNTRiZEEwMjkxMyIsImV4cCI6MTgyMDQ5MjI3NywiaWF0IjoxNzg4OTU2Mjc3LCJuZXR3b3JrIjoiZWlwMTU1Ojg0NTMiLCJwYXlUbyI6IjB4OTUwNEE1OTM5QUI1YmUyQjJCMUY4YmVBN0Q3ZWJlQ2NkOTZjNDg1RCIsInJvdXRlcyI6W3sibWF4UHJpY2UiOiIwLjAxIiwicmVzb3VyY2UiOiIvY2hlY2sifSx7Im1heFByaWNlIjoiMC4wNSIsInJlc291cmNlIjoiL2RlZXAifV0sInNlcnZpY2UiOiJodHRwczovL2FwaS5wZW5ueWZvcmdlLm9yZyIsInYiOjF9.OLEa8wa3oOd82zB80vakPhqA7nNuSG_1igfLkjGYIG_CMUQHE-NYTqSyNkViFXtryH4fRvZQSibR8Pg16Hak-Q","key":{"kty":"EC","x":"byHMSJi37KTtQRTkxSj1dNRUppDNKCMqj_W7dfC45Us","y":"mTV7jNFab5gU3P77chUHrdbnm3pegzrOjWdLXL3WRvs","crv":"P-256","kid":"sendcheck-2026-09","alg":"ES256","use":"sig"},"note":"ES256 JWS over the payTo + per-route maxPrice (signed per deploy, kid sendcheck-2026-09). Pin the public key once (first contact = trust-on-first-use) and verify the 402 challenge's payTo against it before paying."}},"servers":[{"url":"https://api.pennyforge.org"}],"tags":[{"name":"verification","description":"Pre-send EVM address verification"}],"paths":{"/check":{"post":{"operationId":"check","tags":["verification"],"summary":"Verify one EVM address on one chain","description":"Pre-send verification of one EVM address on one chain: EIP-55 checksum status, wallet-vs-contract, outgoing transaction count, native/USDC/USDT balances, and a leveled verdict (ok/caution/warn/danger) with reasons and next action. Run it before your agent sends funds to an address it pulled from an LLM answer, a message, or a scraped page.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"EVM address to verify (0x + 40 hex chars)","example":"0x9504A5939AB5be2B2B1F8beA7D7ebeCcd96c485D"},"chain":{"type":"string","enum":["base","ethereum","arbitrum","optimism","polygon"],"default":"base","description":"Chain the address will be sent on (default: base)"}},"required":["address"]}}}},"responses":{"200":{"description":"Verification report","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"Normalized EIP-55 address"},"checksum":{"type":"object","description":"{status, message}"},"chain":{"type":"object","description":"Chain facts (isContract, outgoingTxs, balances, gas)"},"verdict":{"type":"object","description":"{level: ok|caution|warn|danger, headline, next, reasons, …}"},"report":{"type":"string","description":"Copyable text report"}}}}}},"400":{"description":"Invalid address or unknown chain"},"402":{"description":"Payment required (x402 payment requirements in the body)"}},"x-payment-info":{"price":{"currency":"USD","mode":"fixed","amount":"0.01"},"protocols":[{"x402":{}}]}}},"/deep":{"post":{"operationId":"deep","tags":["verification"],"summary":"Deep verify across all five chains","description":"Deep pre-send scan: the same verification across ALL five chains (Base, Ethereum, Arbitrum, Optimism, Polygon) including wrong-network detection (address active elsewhere but not on the chain you are about to send to) and token-mismatch flags.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"EVM address to verify (0x + 40 hex chars)","example":"0x9504A5939AB5be2B2B1F8beA7D7ebeCcd96c485D"},"chain":{"type":"string","enum":["base","ethereum","arbitrum","optimism","polygon"],"default":"base","description":"Chain the address will be sent on (default: base)"}},"required":["address"]}}}},"responses":{"200":{"description":"Verification report","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"Normalized EIP-55 address"},"checksum":{"type":"object","description":"{status, message}"},"chain":{"type":"object","description":"Chain facts (isContract, outgoingTxs, balances, gas)"},"verdict":{"type":"object","description":"{level: ok|caution|warn|danger, headline, next, reasons, …}"},"report":{"type":"string","description":"Copyable text report"}}}}}},"400":{"description":"Invalid address or unknown chain"},"402":{"description":"Payment required (x402 payment requirements in the body)"}},"x-payment-info":{"price":{"currency":"USD","mode":"fixed","amount":"0.05"},"protocols":[{"x402":{}}]}}},"/validate":{"get":{"operationId":"validate","tags":["verification"],"summary":"Free checksum pre-check","description":"EIP-55 checksum status for an address, no payment. Use it to reject malformed addresses before paying for /check.","parameters":[{"name":"address","in":"query","required":true,"description":"EVM address (0x + 40 hex chars)","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Checksum verdict"},"404":{"description":"No address supplied"}}}},"/diligence":{"get":{"operationId":"diligence","tags":["data"],"summary":"Free x402 diligence digest (dated snapshot)","description":"Machine-readable diligence snapshot of the x402 directory landscape: top-50 services by measured 30-day settlements with price percentile, shared-payout flags, verification state, and 90-day settlement-address (payTo) rotation counts, plus the full rotator list. Source: x402-list.com (CC BY 4.0). Dated snapshot, not a live feed — see generated_at.","security":[],"responses":{"200":{"description":"Diligence digest JSON (summary, top_50, rotators_90d)"}}}}}}