01 Quick Start

Three integration paths — pick the one that fits your stack.

# Install
npm install @x402/fetch

# BaseGuard — token safety check
import { wrapFetchWithPayment } from "@x402/fetch";

const fetch = wrapFetchWithPayment(globalThis.fetch, wallet);

const verdict = await fetch("https://baseguard.scoopflashman.tech/verdict", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    contractAddress: "0x4ed4e862860bed51a9570b96d89af5e1b0efefed",
    chainId: "base"
  })
}).then(r => r.json());

// verdict.recommendation → "SAFE" | "CAUTION" | "AVOID"
// verdict.riskScore      → 0–100  (lower = safer)
// verdict.confidence     → "HIGH" | "MEDIUM" | "LOW"
// Payment: $0.20 USDC deducted automatically from wallet
# Works with any CDP AgentKit wallet — no extra setup
import { CdpWalletProvider } from "@coinbase/agentkit";
import { wrapFetchWithPayment } from "@x402/fetch";

// Configure agent wallet — CDP handles key management
const wallet = await CdpWalletProvider.configureWithWallet(config);
const fetch  = wrapFetchWithPayment(globalThis.fetch, wallet);

// Same fetch call — x402 payment handled automatically by the agent's wallet
const verdict = await fetch("https://baseguard.scoopflashman.tech/verdict", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ contractAddress: "0x...", chainId: "base" })
}).then(r => r.json());

// No API keys. No subscription. Agent pays per query from its wallet.
// Wallet is charged $0.20 USDC per full verdict, $0.02 for lite.
# No installation needed — add to your MCP client config:
{
  "mcpServers": {
    "baseguard": {
      "command": "npx",
      "args": ["-y", "baseguard-walletguard-mcp"]
    }
  }
}

# Works with: Claude Desktop, Cursor, Windsurf, and any MCP-compatible client
# Then ask: "Is 0x4ed4... safe to trade on Base?"
Self-hosted / VPS config
{
  "mcpServers": {
    "baseguard": {
      "command": "ssh",
      "args": ["-T", "[email protected]",
               "node /root/mcp-server/index.js"]
    }
  }
}
Try it free. Use the Live Explorer on the home page to run real verdicts with no wallet required (10 checks/hour limit).

02 Endpoints

All endpoints accept POST with a JSON body. Content-Type: application/json required.

BaseGuard — baseguard.scoopflashman.tech

Endpoint Method Price Description
/verdict POST $0.20 Full verdict — deployer history, LP lock status, holder concentration, risk score 0–100. Cold call ~4–14s.
/verdict/lite POST $0.02 Fast pre-trade check — deployer age + LP lock only. No holder data. Typically <3s.

WalletGuard — walletguard.scoopflashman.tech

Endpoint Method Price Description
/wallet POST $0.10 Full wallet profile — bot score, whale classification, rug history, mixer flag, chain footprint.
/wallet/quick POST $0.02 Fast check — wallet age and transaction count only. Typically <2s.
/wallet/batch POST $0.50 Analyse up to 10 wallets in a single call. Results returned per address; individual errors don't fail the batch.

03 Request & Response Schemas

All timestamps are Unix seconds. All scores are integers 0–100.

BaseGuard request

JSON
{
  "contractAddress": "0x...",  // required — ERC-20 token contract
  "chainId":         "base"   // base | ethereum | arbitrum | solana
}

BaseGuard response

JSON
{
  "riskScore":      22,           // 0-100 — lower is safer
  "recommendation": "SAFE",       // SAFE | CAUTION | AVOID
  "confidence":     "HIGH",       // HIGH | MEDIUM | LOW
  "checks": {
    "deployer": {
      "walletAgeDays":  847,
      "priorLaunches":  3,
      "flag":           "SEASONED"   // SEASONED | CLEAN | NEW_WALLET | NO_HISTORY
    },
    "liquidity": {
      "lpLocked":      true,
      "liquidityUsd":  84200,
      "flag":          "LOCKED"     // LOCKED | UNLOCKED | UNKNOWN
    },
    "holders": {
      "top10Concentration": 31.4,   // percent
      "flag":               "DISTRIBUTED"
      // DISTRIBUTED | CONCENTRATED | HIGHLY_CONCENTRATED | UNKNOWN
    }
  },
  "token": {
    "name":            "Degen Token",
    "symbol":          "DEGEN",
    "deployerAddress": "0x..."
  },
  "processingMs":   3847
}

WalletGuard request

JSON
{ "address": "0x..." }  // EVM 0x address or Solana base58 address

WalletGuard response

JSON
{
  "verdict":        "CLEAN",    // CLEAN | SUSPICIOUS | FLAGGED
  "riskScore":      15,
  "classification": "RETAIL",   // WHALE | MID | RETAIL
  "botScore":       8,         // 0-100 — higher = more bot-like
  "age": {
    "days":     820,
    "firstSeen": "2022-01-14"
  },
  "txCount":      1240,
  "rugHistory":   0,           // count of contract deploys in recent 100 txs
  "chains": {
    "base":     true,
    "ethereum": true,
    "arbitrum": false
  },
  "riskFlags":    [],          // e.g. ["MIXER_INTERACTIONS", "HIGH_BOT_SCORE"]
  "processingMs": 2341
}
Risk flags include: VERY_NEW_WALLET (<7d), NEW_WALLET (<30d), HIGH_BOT_SCORE (≥70), ELEVATED_BOT_SCORE (≥45), MIXER_INTERACTIONS, SERIAL_DEPLOYER (≥5 deploys), NEVER_TRANSACTED.

04 Rate Limits

x402 payment is required per query — rate limits apply on top of payment gating.

LimitScopeWindowNotes
60 req / min Per IP address Rolling 60s Global across all endpoints
300 req / hr Per wallet address Rolling 60min Counted by x402 payer wallet
10 req / hr Free demo proxy Rolling 60min /check-token and /check-wallet at oracle.scoopflashman.tech only

Rate limit response 429

JSON
{
  "error":       "rate_limit_exceeded",
  "retryAfter":  60   // seconds until window resets
}
Rate limit headers (RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset) are included in every response.

05 Supported Chains

Pass chainId as a string in the request body. Solana uses base58 address format.

Base
chainId: "base" · EIP-155: 8453
PRIMARY · FASTEST
Ethereum
chainId: "ethereum" · EIP-155: 1
STANDARD
Arbitrum
chainId: "arbitrum" · EIP-155: 42161
STANDARD
Solana
chainId: "solana" · base58 address
BASEGUARD ONLY
Payment is always settled in USDC on Base mainnet, regardless of which chain you're querying. Your agent only needs one USDC balance on Base.