Scam checks for your bot

One call before every buy: honeypot, hidden taxes, mint/freeze authority, whales, liquidity lock. Websites too. Returns red / yellow / green with reasons.

1. Get a key (easiest)

Buy a pack on the home page (100 checks = $1, 500 = $4, USDC on Base). You get a key like sk_…. Send it in the X-API-Key header.

Python

import requests

API = "https://scam-check.safe-or-scam.workers.dev"
KEY = "sk_your_key_here"

def check_token(address, chain="base"):
    r = requests.post(f"{API}/api/check/token",
                      json={"address": address, "chain": chain},
                      headers={"X-API-Key": KEY}, timeout=30)
    r.raise_for_status()
    return r.json()

result = check_token("0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "base")
if result["verdict"] == "red":
    print("Skip, likely scam:", result["red_flags"])

JavaScript / Node

const API = "https://scam-check.safe-or-scam.workers.dev";
const KEY = "sk_your_key_here";

async function checkToken(address, chain = "base") {
  const r = await fetch(API + "/api/check/token", {
    method: "POST",
    headers: { "content-type": "application/json", "X-API-Key": KEY },
    body: JSON.stringify({ address, chain }),
  });
  return r.json();
}

const res = await checkToken("0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913");
if (res.verdict === "red") console.log("Skip:", res.red_flags);

Check a website

curl -X POST https://scam-check.safe-or-scam.workers.dev/api/check/site \
  -H "content-type: application/json" -H "X-API-Key: sk_your_key_here" \
  -d '{"url": "metamask-wallet-restore.com"}'

2. Pay per call with x402 (no key, no sign-up)

Agents with a USDC wallet can pay 0.01 USDC per call on Base. Call the endpoint without a key, read the PAYMENT-REQUIRED header, sign, and retry with PAYMENT-SIGNATURE. Any x402 client library does this for you, for example Coinbase's x402 packages (@x402/fetch, x402 for Python).

import { wrapFetchWithPayment } from "@x402/fetch"; // pays automatically on HTTP 402
const pay = wrapFetchWithPayment(fetch, yourWallet);
const r = await pay("https://scam-check.safe-or-scam.workers.dev/api/check/token", {
  method: "POST", headers: { "content-type": "application/json" },
  body: JSON.stringify({ address: "0x…", chain: "base" }),
});

Machine-readable: /openapi.json · /llms.txt · /.well-known/x402

More endpoints (same key, same x402)

Each call uses 1 credit from a key. Pay-per-call prices are shown.

# Wallet safety ($0.01): scam links, risky approvals
POST /api/check/wallet   {"address": "0x…", "chain": "base"}

# Blockchain reads on 8 chains
POST /api/chain/balances {"address": "0x…", "chain": "base"}        # $0.003
POST /api/chain/tx       {"hash": "0x…", "chain": "ethereum"}       # $0.003
POST /api/chain/token    {"address": "0x…", "chain": "base"}        # $0.002

# Web page to clean Markdown for LLMs
POST /api/read           {"url": "https://…", "max_chars": 20000}   # $0.003

# Email address check: valid / risky / invalid
POST /api/check/email    {"email": "someone@example.com"}           # $0.002

If a page or node can't be reached you get 502 and are not charged.

3. MCP server (Claude, ChatGPT, Cursor)

Add this URL as a custom connector / MCP server. Tools: check_token, check_website, check_wallet, get_wallet_balances, get_transaction, get_token_info, read_webpage, check_email. 3 free calls per day.

https://scam-check.safe-or-scam.workers.dev/mcp

Chains & response

Chains: ethereum, bsc, base, arbitrum, polygon, optimism, avalanche, solana.

{
  "verdict": "red",
  "summary": "🔴 High risk. Likely scam or dangerous…",
  "red_flags": ["Honeypot: buyers cannot sell", "Sell tax is 99%"],
  "warnings": [], "good_signs": [],
  "data": { "name": "…", "symbol": "…", "holder_count": 12 },
  "credits_left": 99
}

Bad input returns 400 and costs nothing. Out of checks returns 402.

Automated check from public data (GoPlus, honeypot.is, RDAP, public blockchain nodes). Not financial advice. A green result is not a guarantee. Never share your seed phrase.