// integration guide
Add on-chain intelligence
to any agent.
Pay-per-query token safety and wallet intelligence oracles. x402 native. No API keys. No subscriptions.
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.
| Limit | Scope | Window | Notes |
|---|---|---|---|
| 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.