x402watch

API

Free public data plus x402 micropayments for deeper queries. No signup, no rate limits behind a paywall.

Quick start

Every free endpoint returns plain JSON. No headers, no auth.

bash
curl https://api.x402.printmoneylab.com/api/v1/landing-stats
python
import requests
r = requests.get(
    "https://api.x402.printmoneylab.com/api/v1/categories"
)
print(r.json()["total_categories"])  # 33

Sample response (landing-stats)

json
{
  "stats": {
    "services_indexed": 36412,
    "transactions_analyzed": 1842993,
    "active_buyers": 2045,
    "real_volume_pct": 80.2,
    "last_updated": "2026-05-01T00:14:00Z"
  },
  "label_distribution": [...],
  "category_volume_series": [...],
  "daily_new_services": [...]
}

Free endpoints

Open to everyone, including AI agents. 60 requests per hour per IP. CC0-licensed, attribution appreciated.

EndpointRate limit
GET /api/v1/landing-stats

Real-time market overview (services, transactions, real volume %).

60/hour
GET /api/v1/categories

All 33 x402 service categories with stats.

60/hour
GET /api/v1/categories/{slug}

Category detail + 30-day time series + top services.

60/hour
GET /api/v1/services

Paginated list of indexed x402 services with filters.

60/hour
GET /api/v1/services/{id}

Service detail: stats, time series, top buyers, label distribution.

60/hour
GET /api/v1/trends

24-hour ecosystem trends: new services, volume movers, hot services.

60/hour
GET /api/v1/wash-report

Aggregate wash patterns + anonymized case studies.

60/hour

Pay-per-call (x402)

x402 is HTTP 402 Payment Required, brought back. The endpoints below return 402 with payment instructions. Pay USDC on Base or Solana, retry, get data. No signup. AI agents do this automatically — see the Quick start below.

Learn x402
EndpointPrice
GET/api/v1/services/{id}/wash-detail$0.005
GET/api/v1/buyers/{address}/profile$0.005
GET/api/v1/services/{id}/transactions$0.01
GET/api/v1/categories/{slug}/full-history$0.02
POST/api/v1/wash/check$0.05

Endpoint details

GET/api/v1/services/{id}/wash-detail$0.005

Top 50 buyers per service with full label classification, confidence scores, and signal-by-signal breakdown. Includes vanity cluster detection, cohort signals (uniform_amount, coordinated_start, etc.), and per-buyer transaction history. Operators use this to audit their own service's traffic composition.

Request

bash
curl -X GET https://api.x402.printmoneylab.com/api/v1/services/14388/wash-detail \
  -H "X-PAYMENT: <base64 payment>"

Response shape

typescript
{
  service_id: number;
  buyers: Array<{
    address: string;
    label: WashLabel;
    confidence: number;
    signals: Record<string, number>;
    tx_count: number;
    volume: number;
  }>;
  cohort_summary: {
    uniform_amount_pct: number;
    coordinated_start_pct: number;
    uniform_tx_count_cv: number;
    cohort_size: number;
  };
}

Sample response

json
{
  "service_id": 14388,
  "buyers": [
    { "address": "0x29b...725", "label": "suspected_wash",
      "confidence": 0.93,
      "signals": { "uniform_amount": 0.97, "coordinated_start": 0.88 },
      "tx_count": 79, "volume": 1.58 }
  ],
  "cohort_summary": { "cohort_size": 60, "uniform_amount_pct": 97 }
}

Use case: Operator audit

GET/api/v1/buyers/{address}/profile$0.005

Single buyer wallet's 8-label classification with confidence, all services they've used, transaction patterns, time clustering, vanity cluster membership. Researchers use this to trace specific wallets across the x402 ecosystem.

Request

bash
curl -X GET https://api.x402.printmoneylab.com/api/v1/buyers/0x29b...725/profile \
  -H "X-PAYMENT: <base64 payment>"

Response shape

typescript
{
  address: string;
  label: WashLabel;
  confidence: number;
  reason: string[];
  services_used: Array<{ id: number; category: string; tx_count: number }>;
  vanity_cluster: { strict: boolean; broad: boolean; size: number } | null;
  time_pattern: { mean_interval_s: number; cv: number };
}

Sample response

json
{
  "address": "0x29b...725",
  "label": "suspected_wash",
  "confidence": 0.90,
  "reason": ["coordinated_start", "uniform_amount", "uniform_tx_count"],
  "services_used": [{ "id": 14388, "category": "authentication", "tx_count": 79 }],
  "vanity_cluster": null
}

Use case: Wallet research

GET/api/v1/services/{id}/transactions$0.01

Raw 30-day transaction list for a single service. All USDC payment events including buyer address, amount, timestamp, transaction hash, chain. Up to ~3000 rows per service. Researchers and analysts use this for custom downstream analysis.

Request

bash
curl -X GET https://api.x402.printmoneylab.com/api/v1/services/14388/transactions \
  -H "X-PAYMENT: <base64 payment>"

Response shape

typescript
{
  service_id: number;
  transactions: Array<{
    tx_hash: string;
    chain: "base" | "solana" | "polygon" | "arbitrum";
    buyer: string;
    amount: number;       // USDC
    time: string;         // ISO 8601
  }>;
  total: number;
}

Sample response

json
{
  "service_id": 14388,
  "transactions": [
    { "tx_hash": "0xabc...", "chain": "base",
      "buyer": "0x29b...725", "amount": 0.02,
      "time": "2026-04-30T14:02:17Z" }
  ],
  "total": 2814
}

Use case: Custom analysis

GET/api/v1/categories/{slug}/full-history$0.02

365-day hourly time-series for a category: services count, total volume, transaction count, real volume %, label distribution. ~8760 rows per category. Longitudinal research, trend analysis, market reports.

Request

bash
curl -X GET https://api.x402.printmoneylab.com/api/v1/categories/ai_inference/full-history \
  -H "X-PAYMENT: <base64 payment>"

Response shape

typescript
{
  category: string;
  points: Array<{
    time: string;          // ISO hour bucket
    services_count: number;
    volume: number;
    tx_count: number;
    real_volume_pct: number;
  }>;
}

Sample response

json
{
  "category": "ai_inference",
  "points": [
    { "time": "2025-05-01T00:00:00Z",
      "services_count": 1240, "volume": 312.55,
      "tx_count": 1820, "real_volume_pct": 81.2 }
  ]
}

Use case: Longitudinal research

POST/api/v1/wash/check$0.05

On-demand wash analysis for any wallet or seller address. Returns 8-label classification with confidence, signal breakdown (vanity, cohort, concentration, etc.), and similar pattern matching. Real-time computed (not cached). Use for due diligence, fraud detection, or analyzing new addresses not yet in our index.

Request

bash
curl -X POST https://api.x402.printmoneylab.com/api/v1/wash/check \
  -H "Content-Type: application/json" \
  -H "X-PAYMENT: <base64 payment>" \
  -d '{"address": "0x29b...725"}'

Response shape

typescript
{
  address: string;
  label: WashLabel;
  confidence: number;
  signals: {
    vanity: { strict: boolean; broad: boolean };
    cohort: { uniform_amount: number; coordinated_start: number };
    concentration: { top_service_share: number };
  };
  similar_patterns: Array<{ anonymous_id: string; pattern_type: string }>;
}

Sample response

json
{
  "address": "0x29b...725",
  "label": "suspected_wash",
  "confidence": 0.90,
  "signals": {
    "vanity": { "strict": false, "broad": false },
    "cohort": { "uniform_amount": 0.97, "coordinated_start": 0.88 },
    "concentration": { "top_service_share": 0.98 }
  },
  "similar_patterns": [{ "anonymous_id": "A", "pattern_type": "sophisticated_sybil" }]
}

Use case: Real-time wash check

x402 quick start

The full pay-and-fetch flow in three forms.

1. The raw flow (curl + manual)

bash
# Step 1: hit the endpoint without payment.
curl -X POST https://api.x402.printmoneylab.com/api/v1/wash/check \
  -H "Content-Type: application/json" \
  -d '{"address": "0x29b...725"}'

# → 402 Payment Required
# Body lists the accepted networks, payTo addresses, and amounts.

# Step 2: pay USDC, build the X-PAYMENT header (base64 EIP-3009 sig
# for Base / signed transfer for Solana). The x402 SDK does this for
# you — see below.

# Step 3: retry with the payment header.
curl -X POST https://api.x402.printmoneylab.com/api/v1/wash/check \
  -H "Content-Type: application/json" \
  -H "X-PAYMENT: <base64 payload>" \
  -d '{"address": "0x29b...725"}'

# → 200 OK + JSON body

2. JavaScript / TypeScript (x402-axios)

typescript
import axios from "axios";
import { withPayment } from "x402-axios";
import { createWalletClient, http } from "viem";
import { privateKeyToAccount } from "viem/accounts";
import { base } from "viem/chains";

const wallet = createWalletClient({
  account: privateKeyToAccount(process.env.PRIVATE_KEY!),
  chain: base,
  transport: http(),
});

const client = withPayment(axios.create(), { wallet });

const r = await client.post(
  "https://api.x402.printmoneylab.com/api/v1/wash/check",
  { address: "0x29b...725" }
);
console.log(r.data.label, r.data.confidence);

3. Python (x402-httpx)

python
import httpx
from x402.clients.httpx import x402HttpxClient
from eth_account import Account

acct = Account.from_key(os.environ["PRIVATE_KEY"])

async with x402HttpxClient(account=acct, base_url="https://api.x402.printmoneylab.com") as client:
    r = await client.post(
        "/api/v1/wash/check",
        json={"address": "0x29b...725"},
    )
    print(r.json()["label"])

Networks

Pay USDC on either of two settlement chains. The 402 response lists the active payTo addresses; clients pick the cheapest.

Base

USDC native

Lowest fees. Confirmation in ~1s. EIP-3009 signed transfer.

Solana

USDC SPL

Sub-second finality. SPL Token signed transfer.

Settlement is finalized via the Coinbase Developer Platform x402 facilitator.

For AI agents

This API is built for autonomous agents. Every paid endpoint is x402-native — your agent pays and receives data in a single HTTP round-trip, no API keys to rotate.

MCP server

livestreamable-http · MCP 2025-06-18

Five read-only tools wrapping the public free endpoints. Per-address wash analysis is the paid HTTP endpoint POST /api/v1/wash/check — the MCP x402_check_wash tool returns aggregate data and a pointer.

  • ·x402_get_categoriesAll 33 x402 service categories with stats
  • ·x402_get_serviceService detail with label distribution
  • ·x402_check_washAggregate wash report (per-address via paid /wash/check)
  • ·x402_search_servicesSearch 36k+ services with filters
  • ·x402_get_trends24h trends, hot services, category movers
Smitheryone-command install
bash
smithery mcp add bakyang2/x402watch
MCP Registryofficial listing
text
io.github.printmoneylab/x402watch

Or connect manually via Claude Desktop, Cursor, or any MCP client

json
{
  "mcpServers": {
    "x402watch": {
      "transport": "streamable-http",
      "url": "https://api.x402.printmoneylab.com/mcp"
    }
  }
}

SLA & limits

Free tier
60 req/hour per IP
Paid tier
No rate limit per address (within reason)
Cache
5 minutes on most endpoints
Uptime target
99% (free-tier infra)

Issues / questions: GitHub Issues.