Obol has three APIs, all gated by x402 payments on Base. Every request without a payment header returns a 402 with the payment requirements embedded in the response body.
{
"accepts": [{
"scheme": "exact",
"network": "base",
"maxAmountRequired": "5000000",
"resource": "/site",
"payTo": "0xBe2C...",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"maxTimeoutSeconds": 300
}]
}/site$5 USDCCrawls a website, extracts its visual identity and content, then generates a complete Next.js 15 TypeScript project matching the same vibe.
urlstring — website URL to analyzerepostring — "owner/repo" to fork and PR intobranchstring? — target branch (default: "main")emailstring? — receive a completion emailcurl -X POST https://api.obol.sh/site \
-H 'X-Payment: <base64-encoded-x402-payment>' \
-H 'Content-Type: application/json' \
-d '{
"url": "https://acme.com",
"repo": "you/my-site",
"email": "you@example.com"
}'{
"pr": "https://github.com/you/repo/pull/42",
"fork": "https://github.com/obol-sh/repo",
"branch": "obol/site-1234567890",
"files": ["..."]
}/miniapp$5 USDCGenerates a complete Farcaster mini app from a plain-English idea. Includes manifest.json (frames.v2.manifest), wagmi v2, @farcaster/miniapp-sdk, and Tailwind v4.
ideastring — describe the mini apprepostring — "owner/repo" to fork and PR intonamestring? — app name (Claude picks if omitted)branchstring? — target branch (default: "main")emailstring? — receive a completion emailcurl -X POST https://api.obol.sh/miniapp \
-H 'X-Payment: <base64-encoded-x402-payment>' \
-H 'Content-Type: application/json' \
-d '{
"idea": "A tipping jar where users send USDC to creators",
"repo": "you/miniapp-template",
"name": "TipJar"
}'{
"pr": "https://github.com/you/repo/pull/42",
"fork": "https://github.com/obol-sh/repo",
"branch": "obol/miniapp-1234567890",
"files": ["..."]
}/api$5 USDCGenerates an OpenAPI 3.1 spec (openapi.yaml) and a complete Hono Cloudflare Worker server from a plain-English description.
descriptionstring — describe the API you needrepostring — "owner/repo" to fork and PR intobranchstring? — target branch (default: "main")emailstring? — receive a completion emailcurl -X POST https://api.obol.sh/api \
-H 'X-Payment: <base64-encoded-x402-payment>' \
-H 'Content-Type: application/json' \
-d '{
"description": "REST API for a todo app with user auth, CRUD for todos and tags",
"repo": "you/api-starter"
}'{
"pr": "https://github.com/you/repo/pull/42",
"fork": "https://github.com/obol-sh/repo",
"branch": "obol/api-1234567890",
"files": ["..."]
}/tests$1 USDCReads a file from a public GitHub repo and generates comprehensive unit tests — happy paths, edge cases, error paths, mocked dependencies.
repostring — "owner/repo" containing the source filepathstring — file path within the repoframeworkstring? — test framework (default: "vitest")branchstring? — branch to read from (default: "main")emailstring? — receive a completion emailcurl -X POST https://api.obol.sh/tests \
-H 'X-Payment: <base64-encoded-x402-payment>' \
-H 'Content-Type: application/json' \
-d '{
"repo": "you/my-project",
"path": "src/lib/utils.ts",
"framework": "vitest"
}'{
"pr": "https://github.com/you/repo/pull/42",
"fork": "https://github.com/obol-sh/repo",
"branch": "obol/tests-1234567890",
"files": ["..."]
}/docs$5 USDCClaude reads the key files in your repo (README, index files, config) and generates a full MDX documentation site under docs/.
repostring — "owner/repo" to documentbranchstring? — branch to read from (default: "main")emailstring? — receive a completion emailcurl -X POST https://api.obol.sh/docs \
-H 'X-Payment: <base64-encoded-x402-payment>' \
-H 'Content-Type: application/json' \
-d '{
"repo": "you/my-library",
"branch": "main"
}'{
"pr": "https://github.com/you/repo/pull/42",
"fork": "https://github.com/obol-sh/repo",
"branch": "obol/docs-1234567890",
"files": ["..."]
}/deploy$5 USDCGenerates GitHub Actions CI/CD workflow and platform-specific deploy config for Vercel, Cloudflare Workers, or Railway.
repostring — "owner/repo" to configureplatform"vercel" | "cloudflare" | "railway"branchstring? — target branch (default: "main")emailstring? — receive a completion emailcurl -X POST https://api.obol.sh/deploy \
-H 'X-Payment: <base64-encoded-x402-payment>' \
-H 'Content-Type: application/json' \
-d '{
"repo": "you/my-project",
"platform": "vercel"
}'{
"pr": "https://github.com/you/repo/pull/42",
"fork": "https://github.com/obol-sh/repo",
"branch": "obol/deploy-1234567890",
"files": ["..."]
}/refactor$1 USDCModernizes a TypeScript/JavaScript file: adds strict types, JSDoc comments, removes dead code, improves naming, and splits large functions. Preserves all existing functionality.
repostring — "owner/repo" containing the filepathstring — file path to refactorbranchstring? — branch to read from (default: "main")emailstring? — receive a completion emailcurl -X POST https://api.obol.sh/refactor \
-H 'X-Payment: <base64-encoded-x402-payment>' \
-H 'Content-Type: application/json' \
-d '{
"repo": "you/my-project",
"path": "src/lib/old-utils.js"
}'{
"pr": "https://github.com/you/repo/pull/42",
"fork": "https://github.com/obol-sh/repo",
"branch": "obol/refactor-1234567890",
"files": ["..."]
}/label$5 USDC (initial) · $25/1yr · $40/2yrApplies a Verified Builder badge to any Bluesky account via the Obol AT Protocol labeler. The label appears on the account's Bluesky profile for anyone subscribed to the Obol labeler.
didstring — Bluesky DID (e.g. "did:plc:abc123...")duration"initial" | "1y" | "2y"emailstring? — receive a confirmation emailcurl -X POST https://api.obol.sh/label \
-H 'X-Payment: <base64-encoded-x402-payment>' \
-H 'Content-Type: application/json' \
-d '{
"did": "did:plc:abc123...",
"duration": "initial"
}'{
"pr": "https://github.com/you/repo/pull/42",
"fork": "https://github.com/obol-sh/repo",
"branch": "obol/label-1234567890",
"files": ["..."]
}/fix$5 USDCReads a GitHub issue, fetches the key source files from the repo, generates a targeted fix, and opens a pull request. Includes "Fixes #N" in the PR body.
issuestring — full GitHub issue URL (e.g. "https://github.com/owner/repo/issues/42")branchstring? — branch to base the fix on (default: "main")emailstring? — receive a completion emailcurl -X POST https://api.obol.sh/fix \
-H 'X-Payment: <base64-encoded-x402-payment>' \
-H 'Content-Type: application/json' \
-d '{
"issue": "https://github.com/you/my-project/issues/42"
}'{
"pr": "https://github.com/you/repo/pull/42",
"fork": "https://github.com/obol-sh/repo",
"branch": "obol/fix-1234567890",
"files": ["..."]
}Clanker tokens indexed from Base, enriched with DexScreener market data. Refreshed every 5 minutes for new tokens, every hour for metrics. All endpoints are GET requests — payment header required, no request body.
/tokens/count$0.01 USDCCount of Clanker tokens deployed within a time window.
periodstring? — "1h" | "24h" | "7d" | "30d" (default: "7d")curl https://api2.obol.sh/tokens/count?period=7d \ -H 'X-Payment: <base64-encoded-x402-payment>'
{ "count": 1842, "period": "7d" }/tokens/volume$0.01 USDCNumber and percentage of tokens in a period that have had any 24h trading volume.
periodstring? — "1h" | "24h" | "7d" | "30d" (default: "7d")curl https://api2.obol.sh/tokens/volume?period=7d \ -H 'X-Payment: <base64-encoded-x402-payment>'
{ "period": "7d", "total": 1842, "with_volume": 431, "pct_with_volume": 23.4 }/tokens/top$0.01 USDCTop Clanker tokens ranked by 24h volume or liquidity depth. Includes full metrics.
periodstring? — time window for deployment filter (default: "7d")by"volume" | "liquidity" — ranking metric (default: "volume")limitnumber? — max results, up to 50 (default: 10)curl "https://api2.obol.sh/tokens/top?period=7d&by=volume&limit=10" \ -H 'X-Payment: <base64-encoded-x402-payment>'
{ "period": "7d", "by": "volume_h24", "tokens": [...] }/tokens/new$0.01 USDCLatest tokens deployed, ordered by deploy time descending.
sincestring? — window: "1h", "6h", "24h", "7d" (default: "24h")limitnumber? — max results, up to 100 (default: 20)curl "https://api2.obol.sh/tokens/new?since=24h" \ -H 'X-Payment: <base64-encoded-x402-payment>'
{ "since": "24h", "tokens": [...] }/tokens/search$0.01 USDCFuzzy search across all Clanker tokens by name or symbol.
qstring — search query (required)curl "https://api2.obol.sh/tokens/search?q=pepe" \ -H 'X-Payment: <base64-encoded-x402-payment>'
{ "query": "pepe", "tokens": [...] }/tokens/by-fid/:fid$0.01 USDCAll tokens ever deployed by a Farcaster user (by FID), ordered by deploy time.
fidnumber — Farcaster FIDcurl https://api2.obol.sh/tokens/by-fid/3 \ -H 'X-Payment: <base64-encoded-x402-payment>'
{ "fid": 3, "count": 4, "tokens": [...] }/tokens/:address$0.01 USDCFull enriched record for a single token: metadata, deployer info, and latest price, volume, liquidity, FDV, and transaction count.
addressstring — ERC-20 contract address (checksummed or lowercase)curl https://api2.obol.sh/tokens/0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 \ -H 'X-Payment: <base64-encoded-x402-payment>'
{ "contract_address": "0x...", "name": "...", "symbol": "...", "clanker_metrics": { "price_usd": 0.00042, "volume_h24": 15200, ... } }/stats/summary$0.01 USDCAggregate stats across the entire dataset: total tokens, deployment counts for 24h and 7d windows, and how many had trading volume.
curl https://api2.obol.sh/stats/summary \ -H 'X-Payment: <base64-encoded-x402-payment>'
{ "total_tokens": 639842, "tokens_24h": 284, "tokens_7d": 1842, "tokens_with_volume_7d": 431 }/stats/trending$0.01 USDCTokens where 24h volume exceeds 5% of their fully-diluted market cap — high-signal relative activity, not just raw volume.
curl https://api2.obol.sh/stats/trending \ -H 'X-Payment: <base64-encoded-x402-payment>'
{ "count": 12, "tokens": [...] }A marketplace for shared Claude compute. Sellers run a daemon on their machine that executes buyer prompts using Claude Code plan tokens. Buyers pay per-job with USDC — 25% cheaper than direct API pricing. No API key needed on either side.
POST /jobsclaude --print using their plan tokens/jobsvariable · x402Submit a compute job. Without an X-Payment header, returns 402 with payment requirements for the budget amount.
promptstring — the prompt to execute (required, max 100K chars)budget_usdnumber — max budget in USD (required, min $0.01)modelstring? — "sonnet" | "opus" | "haiku" (default: "sonnet")timeout_secondsnumber? — max execution time (default: 300)system_promptstring? — optional system promptcurl -X POST https://loom.obol.sh/jobs \
-H 'X-Payment: <base64-encoded-x402-payment>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "Explain x402 in 3 sentences", "budget_usd": 0.05 }'{
"job_id": "4580dffc-3ac2-4ee5-a750-8cad9e1f4f75",
"status": "assigned",
"payment": "escrowed",
"message": "Job assigned to a seller"
}/jobs/:idfreeCheck job status. No payment required.
{
"id": "4580dffc-...",
"status": "completed",
"model": "sonnet",
"budget_usd": 0.05,
"duration_ms": 3799,
"created_at": "2026-03-27T18:18:59Z",
"assigned_at": "2026-03-27T18:18:59Z",
"completed_at": "2026-03-27T18:19:04Z"
}/jobs/:id/resultfreeFetch job output. Returns 202 if still in progress. Settles escrowed payment on first fetch of a completed job.
{
"id": "4580dffc-...",
"status": "completed",
"output": "x402 is an HTTP payment protocol that...",
"duration_ms": 3799
}/sellers/registerfreeRegister as a compute seller. Returns an auth token for the daemon. Save it — it won't be shown again.
wallet_addressstring — Base wallet for USDC payouts (required)capacitynumber? — max concurrent jobs (default: 1)curl -X POST https://loom.obol.sh/sellers/register \
-H 'Content-Type: application/json' \
-d '{ "wallet_address": "0xYour...", "capacity": 1 }'
# Response:
# { "seller_id": "2b14eb54-...", "auth_token": "aec113f6-..." }Seller Daemon EndpointsThese endpoints are used by the seller daemon. All require Authorization: Bearer <auth_token>.
/sellers/heartbeatKeep seller online. Send every 30s. Body: { active_jobs: number }
/sellers/pollPoll for assigned jobs. Returns 204 if none available, or the job object.
/sellers/completeReport job completion. Body: { job_id, claim_token, output, status, duration_ms }
Quick Start — Selling Compute# 1. Install the daemon
git clone https://github.com/obol-sh/loom-daemon
cd loom-daemon && npm install
# 2. Register as a seller
curl -X POST https://loom.obol.sh/sellers/register \
-H 'Content-Type: application/json' \
-d '{ "wallet_address": "0xYour..." }'
# Save the auth_token from the response
# 3. Configure
echo '{ "coordinator": "https://loom.obol.sh", "authToken": "<your-token>", "walletAddress": "0xYour..." }' > ~/.loom/config.json
# 4. Start earning
npx tsx src/index.ts daemon
# → [daemon] Online — polling for jobs