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.
curl https://api.x402.printmoneylab.com/api/v1/landing-statsimport requests
r = requests.get(
"https://api.x402.printmoneylab.com/api/v1/categories"
)
print(r.json()["total_categories"]) # 33Sample response (landing-stats)
{
"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.
| Endpoint | Rate limit |
|---|---|
GET /api/v1/landing-statsReal-time market overview (services, transactions, real volume %). | 60/hour |
GET /api/v1/categoriesAll 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/servicesPaginated 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/trends24-hour ecosystem trends: new services, volume movers, hot services. | 60/hour |
GET /api/v1/wash-reportAggregate 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| Endpoint | Price |
|---|---|
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
curl -X GET https://api.x402.printmoneylab.com/api/v1/services/14388/wash-detail \
-H "X-PAYMENT: <base64 payment>"Response shape
{
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
{
"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
curl -X GET https://api.x402.printmoneylab.com/api/v1/buyers/0x29b...725/profile \
-H "X-PAYMENT: <base64 payment>"Response shape
{
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
{
"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
curl -X GET https://api.x402.printmoneylab.com/api/v1/services/14388/transactions \
-H "X-PAYMENT: <base64 payment>"Response shape
{
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
{
"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
curl -X GET https://api.x402.printmoneylab.com/api/v1/categories/ai_inference/full-history \
-H "X-PAYMENT: <base64 payment>"Response shape
{
category: string;
points: Array<{
time: string; // ISO hour bucket
services_count: number;
volume: number;
tx_count: number;
real_volume_pct: number;
}>;
}Sample response
{
"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
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
{
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
{
"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)
# 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 body2. JavaScript / TypeScript (x402-axios)
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)
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.
- ·/llms.txt— discovery hint
- ·/openapi.json— full machine-readable spec
- ·/.well-known/x402— x402 service manifest
- ·/feed.xml— RSS of recent ecosystem changes
- ·MCP server— live at
https://api.x402.printmoneylab.com/mcp
MCP server
livestreamable-http · MCP 2025-06-18Five 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_categories— All 33 x402 service categories with stats - ·
x402_get_service— Service detail with label distribution - ·
x402_check_wash— Aggregate wash report (per-address via paid /wash/check) - ·
x402_search_services— Search 36k+ services with filters - ·
x402_get_trends— 24h trends, hot services, category movers
smithery mcp add bakyang2/x402watchio.github.printmoneylab/x402watchOr connect manually via Claude Desktop, Cursor, or any MCP client
{
"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.