Service Catalog
All services are POST endpoints under /services with a JSON body, priced at $0.01 per request and paid via x402. Every response uses the standard envelope (service, requestId, cache, providers, warnings, data); the field lists below describe data. The curl examples show the bare request — sent as-is they return the 402 quote; clients like @x402/fetch attach the payment automatically.
Machine-readable equivalents of this page: GET /services (catalog), GET /services/:slug (per-service input JSON Schema), GET /openapi.json.
Supported chains
Section titled “Supported chains”Crypto services accept either a chain slug or a numeric chainId (where the schema allows both; slug wins if both are sent):
| Slug | Chain ID | Label |
|---|---|---|
ethereum |
1 | Ethereum |
base |
8453 | Base |
bsc |
56 | BNB Smart Chain |
polygon |
137 | Polygon |
arbitrum |
42161 | Arbitrum One |
optimism |
10 | OP Mainnet |
Addresses must be 0x-prefixed 40-hex-character EVM addresses; they are lowercased server-side.
Crypto context
Section titled “Crypto context”token-risk — Token Risk Scanner
Section titled “token-risk — Token Risk Scanner”Honeypot, tax, and ownership risk for any EVM token in one call. Aggregates GoPlus Security flags with a Honeypot.is buy/sell simulation and DexScreener liquidity context into a single normalized verdict.
- Endpoint:
POST /services/token-risk· Price: $0.01 - Providers: GoPlus Security (primary), Honeypot.is (secondary), DexScreener (enrichment)
curl -X POST http://localhost:3000/services/token-risk \ -H "Content-Type: application/json" \ -d '{"chain": "ethereum", "tokenAddress": "0x6b175474e89094c44da98b954eedeac495271d0f"}'Input: chain or chainId (one required), tokenAddress. data fields: tokenAddress, riskLevel, riskFlags, honeypot, taxes, ownership, liquidity, warnings. Guardrails: EVM chains only; single token per request; responses cached for 5 minutes. Honeypot.is simulation covers ethereum, base, and bsc; on other chains the verdict leans on GoPlus flags.
pool-snapshot — Pool & Liquidity Snapshot
Section titled “pool-snapshot — Pool & Liquidity Snapshot”Price, liquidity, volume, and pair metadata for a token or a specific pair, from DexScreener with GeckoTerminal as backup.
- Endpoint:
POST /services/pool-snapshot· Price: $0.01 - Providers: DexScreener (primary), GeckoTerminal (fallback)
curl -X POST http://localhost:3000/services/pool-snapshot \ -H "Content-Type: application/json" \ -d '{"chain": "base", "tokenAddress": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"}'Input: chain or chainId (one required), plus exactly one of tokenAddress or pairAddress. data fields: pairAddress, priceUsd, liquidityUsd, volume24hUsd, fdvUsd, pairCreatedAt, txns24h, url. Guardrails: EVM chains only; when a token is given, returns its top pair by liquidity.
contract-explain — Contract Explain
Section titled “contract-explain — Contract Explain”Verification status, source/ABI availability, proxy clues, and contract name from Etherscan and the Sourcify registry, with Blockscout as a fallback.
- Endpoint:
POST /services/contract-explain· Price: $0.01 - Providers: Etherscan API V2 (primary), Sourcify (fallback), Blockscout (fallback)
curl -X POST http://localhost:3000/services/contract-explain \ -H "Content-Type: application/json" \ -d '{"chainId": 1, "contractAddress": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"}'Input: chainId (number, required), contractAddress. data fields: verified, contractName, sourceAvailable, abiAvailable, proxy, links, warnings. Guardrails: EVM chains only; read-only explorer metadata, no source dumps.
protocol-context — Protocol Context
Section titled “protocol-context — Protocol Context”DeFi protocol fundamentals from DefiLlama: category, supported chains, current TVL, fees/revenue where available, and official URLs. Falls back to Exa web discovery on slug misses.
- Endpoint:
POST /services/protocol-context· Price: $0.01 - Providers: DefiLlama (primary), Exa (fallback)
curl -X POST http://localhost:3000/services/protocol-context \ -H "Content-Type: application/json" \ -d '{"protocol": "aave"}'Input: protocol — a DefiLlama slug or human name (1–100 chars), e.g. aave or Uniswap V3. data fields: name, slug, category, chains, tvlUsd, fees, urls. Guardrails: one protocol per request; responses cached for 10 minutes.
phishing-check — Phishing URL Check
Section titled “phishing-check — Phishing URL Check”Crypto phishing verdict for a URL or domain, checked against a locally mirrored MetaMask eth-phishing-detect list: allowlist, blocklist, and fuzzy lookalike matching. Deterministic, no network calls.
- Endpoint:
POST /services/phishing-check· Price: $0.01 - Providers: MetaMask eth-phishing-detect (mirrored locally)
curl -X POST http://localhost:3000/services/phishing-check \ -H "Content-Type: application/json" \ -d '{"url": "https://uniswap-airdrop.example.com/claim"}'Input: url — URL or bare domain (3–2000 chars). data fields: domain, status, matchedList, match. Guardrails: list snapshot ships with the server build; no remote lookups.
wallet-brief — Wallet Brief
Section titled “wallet-brief — Wallet Brief”Read-only wallet snapshot via Alchemy: native balance, top ERC-20 balances with metadata, a recent-transfer summary, and notes on obviously suspicious tokens.
- Endpoint:
POST /services/wallet-brief· Price: $0.01 - Providers: Alchemy (primary)
curl -X POST http://localhost:3000/services/wallet-brief \ -H "Content-Type: application/json" \ -d '{"chainId": 1, "walletAddress": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045"}'Input: chainId (number, required), walletAddress. data fields: nativeBalance, tokenBalances, recentTransfers, suspiciousTokenNotes. Guardrails: read-only; top 10 token balances; recent transfers capped at 10.
approval-risk — Approval Risk Checker
Section titled “approval-risk — Approval Risk Checker”ERC-20 spender approvals for a wallet via Moralis (preferred) or bounded Alchemy log analysis, with unlimited/stale approvals flagged and revoke recommendations.
- Endpoint:
POST /services/approval-risk· Price: $0.01 - Providers: Moralis Token Approvals (primary), Alchemy log analysis (fallback)
curl -X POST http://localhost:3000/services/approval-risk \ -H "Content-Type: application/json" \ -d '{"chainId": 1, "walletAddress": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045"}'Input: chainId (number, required), walletAddress. data fields: approvals, unlimitedCount, recommendations, coverage, warnings. Guardrails: read-only; ERC-20 approvals only in V1; bounded block range on the Alchemy path.
Web context
Section titled “Web context”exa-search — Exa Web Search
Section titled “exa-search — Exa Web Search”Capped neural web search via Exa for agents needing fresh web context mid-task. Fast/auto search types only — summaries and deep research modes would exceed one cent and are rejected.
- Endpoint:
POST /services/exa/search· Price: $0.01 - Providers: Exa (primary)
curl -X POST http://localhost:3000/services/exa/search \ -H "Content-Type: application/json" \ -d '{"query": "x402 payment protocol adoption", "numResults": 5}'Input (strict — unknown keys rejected): query (2–500 chars), numResults (1–10, default 5), optional category (company, news, research paper, github, pdf). data fields: results, resolvedSearchType. Guardrails: max 10 results; no summaries; no deep search modes.
exa-contents — Exa Page Contents
Section titled “exa-contents — Exa Page Contents”Clean parsed text for up to 5 URLs via Exa’s contents API, truncated per page to keep responses bounded.
- Endpoint:
POST /services/exa/contents· Price: $0.01 - Providers: Exa (primary)
curl -X POST http://localhost:3000/services/exa/contents \ -H "Content-Type: application/json" \ -d '{"urls": ["https://docs.x402.org/introduction"]}'Input (strict): urls — array of 1–5 valid URLs. data fields: pages. Guardrails: max 5 URLs; per-page text truncation.
firecrawl-map — Firecrawl Map
Section titled “firecrawl-map — Firecrawl Map”Discover the URL structure of a site in one bounded call: a single Firecrawl map request returning up to 100 links. No crawling, no scraping.
- Endpoint:
POST /services/firecrawl/map· Price: $0.01 - Providers: Firecrawl (primary)
curl -X POST http://localhost:3000/services/firecrawl/map \ -H "Content-Type: application/json" \ -d '{"url": "https://docs.x402.org"}'Input (strict): url, optional search filter (max 200 chars). data fields: links. Guardrails: one URL per request; max 100 links returned; no crawl mode.
firecrawl-search — Firecrawl Search
Section titled “firecrawl-search — Firecrawl Search”Web search via Firecrawl with scrape options disabled: titles, URLs, and descriptions only.
- Endpoint:
POST /services/firecrawl/search· Price: $0.01 - Providers: Firecrawl (primary)
curl -X POST http://localhost:3000/services/firecrawl/search \ -H "Content-Type: application/json" \ -d '{"query": "EIP-3009 transferWithAuthorization"}'Input (strict): query (2–500 chars), limit (1–10, default 5). data fields: results. Guardrails: max 10 results; no scrapeOptions.
firecrawl-scrape — Firecrawl Scrape
Section titled “firecrawl-scrape — Firecrawl Scrape”Main-content markdown for exactly one page. Enhanced modes, JSON extraction, and browser interaction are not offered — they break the one-cent envelope.
- Endpoint:
POST /services/firecrawl/scrape· Price: $0.01 - Providers: Firecrawl (primary)
curl -X POST http://localhost:3000/services/firecrawl/scrape \ -H "Content-Type: application/json" \ -d '{"url": "https://docs.x402.org/introduction"}'Input (strict): url, onlyMainContent (default true). data fields: markdown, metadata. Guardrails: one page per request; markdown only; content truncated at 20,000 characters.
context7-resolve-library — Context7 Resolve Library
Section titled “context7-resolve-library — Context7 Resolve Library”Resolve a library or framework name to Context7 documentation IDs, with snippet counts, so a follow-up query-docs call can fetch current docs.
- Endpoint:
POST /services/context7/resolve-library· Price: $0.01 - Providers: Context7 (primary)
curl -X POST http://localhost:3000/services/context7/resolve-library \ -H "Content-Type: application/json" \ -d '{"libraryName": "hono"}'Input (strict): libraryName (1–200 chars). data fields: libraries. Guardrails: max 5 candidates returned.
context7-query-docs — Context7 Query Docs
Section titled “context7-query-docs — Context7 Query Docs”Up-to-date documentation snippets for a resolved Context7 library ID, optionally focused on a topic, within a bounded token budget.
- Endpoint:
POST /services/context7/query-docs· Price: $0.01 - Providers: Context7 (primary)
curl -X POST http://localhost:3000/services/context7/query-docs \ -H "Content-Type: application/json" \ -d '{"libraryId": "/honojs/hono", "topic": "middleware"}'Input (strict): libraryId — Context7 ID like /honojs/hono; optional topic (max 200 chars); tokens (500–5000, default 2500). data fields: docs. Guardrails: token budget capped at 5000; single library per request.