{"type":"proof-of-work","summary":"Agents without a wallet can access the pure-CPU tools by solving a sha256 puzzle (a fraction of a second of the caller's CPU) instead of paying USDC. No money, no AI tokens, no model involved. Request a challenge, solve it, and resend with the X-Pow-Solution header.","challengeUrl":"https://base-sentinel-production.up.railway.app/api/pow/challenge","difficultyBits":16,"ttlSeconds":300,"submitHeader":"X-Pow-Solution","submitFormat":"<token>:<nonce>","eligibleTools":["a2a-card-validate","add-time","address-label","age","amortization","annuity","b20-feature-id","barcode-decode","base-convert","base32","base58","base64","black-scholes","bond-price","bond-ytm","break-even","brotli-compress","brotli-decompress","business-days","cagr","calc","captcha-generate","card-validate","case","checksum","cidr","color","compound-interest","compress-compare","correlation","count","country-info","crc32","cron-next","csv-lint","csv-to-json","csv-to-md","date-diff","date-format","day-of-year","dedupe-lines","duration","easter-date","effective-annual-rate","epoch-convert","extract-entities","finance","forecast-eval","forecast-holt","forecast-holt-winters","forecast-naive","forecast-ses","geo-distance","gunzip","gzip","hash","hex","hmac","html-entities","html-links","html-meta","html-select","html-strip","html-table","html-to-markdown","iban-validate","ics-parse","image-convert","image-resize","image-thumbnail","irr","isbn-validate","iso-week","json-diff","json-flatten","json-format","json-merge","json-pointer","json-query","json-schema-infer","json-to-csv","json-to-yaml","json-validate","jsonl","jwt-decode","jwt-verify","keywords","leap-year","levenshtein","linear-regression","loan-payment","lorem","markdown-to-html","mime","morse","moving-average","npv","number-format","openapi-diff","openapi-extract","openapi-lint","openapi-mock-response","openapi-redact","openapi-required-params","openapi-resolve-refs","openapi-search","openapi-security-summary","openapi-to-curl","openapi-validate-payload","outliers","password","password-strength","percentage","qr","querystring","random","readability","readability-score","redact","regex","relative-time","roman","rot13","seller-trust","semver","sharpe-ratio","skill-decode-blob","slugify","solidity-scan","sort-lines","sql-cert-verify","srt-convert","stats","stats-summary","text-chunk","text-diff","text-stats","time","time-convert","timezone-convert","token-count","totp","truncate","ulid","unit-convert","url-code","url-parse","user-agent","uuid","uuid-validate","x402-market-pulse","xml-to-json","yaml-to-json"],"note":"Network/browser/storage tools (render, screenshot, pdf, memory, http-check, etc.) remain wallet-only via x402.","solverExample":"const c = await (await fetch(BASE+\"/api/pow/challenge?slug=hash\")).json();\nconst { createHash } = await import(\"node:crypto\");\nlet n = 0, lz = (b)=>{let t=0;for(const x of b){if(!x){t+=8;continue;}t+=Math.clz32(x)-24;break;}return t;};\nwhile (lz(createHash(\"sha256\").update(c.challenge+\":\"+n).digest()) < c.difficulty) n++;\nconst res = await fetch(BASE+\"/api/hash\",{method:\"POST\",headers:{\"Content-Type\":\"application/json\",\"X-Pow-Solution\":c.token+\":\"+n},body:JSON.stringify({text:\"hello\"})});"}