{"openapi":"3.1.0","info":{"contact":{"email":"hello@gptshopltd.com"},"title":"x402 Agent Tools","version":"1.0.0","description":"Pay-per-call tools for AI agents. USDC on Base or Solana via x402 v2; no keys, no accounts.","x-guidance":"GET /v1/solana/token-risk?mint=<SPL mint> ($0.01) returns a rug/risk report for a Solana token. GET /v1/base/token-risk?address=<0x ERC-20> ($0.01) does the same for Base. GET /v1/prices/llm?q= and /v1/prices/gpu?q= ($0.002) return live LLM token and GPU rental prices. GET /v1/util/ping, /v1/util/uuid?n=, /v1/util/time?tz= ($0.001) are cheap x402 test utilities. GET /v1/web/markdown?url=<page> ($0.005) returns the page's main content as clean Markdown. GET /v1/web/status?url=<url> ($0.002) returns HTTP status, final URL after redirects, TTFB and content-type. GET /v1/evm/4byte?selector=<0x8hex or calldata> ($0.002) decodes an EVM function selector to its signature. GET /v1/crypto/price?q=<ids or symbols, comma-separated> ($0.002) returns USD spot price, 24h change, market cap and volume for up to 25 crypto assets (CoinGecko). GET /v1/dns/lookup?name=<hostname>&type=<A|AAAA|TXT|MX|CNAME|NS> ($0.001) returns live DNS records via Cloudflare DoH. Invalid input returns 400 and is never charged."},"servers":[{"url":"https://api.gptshopltd.com"}],"paths":{"/v1/solana/token-risk":{"get":{"operationId":"solana_token_risk","summary":"Solana token risk / rug check","description":"Use when an agent must decide whether a Solana SPL/Token-2022 token is safe to buy or accept. Returns mint & freeze authority, Metaplex metadata mutability, top-10 holder concentration, DEX liquidity/volume (DexScreener), token age and a risk verdict with plain-English findings. $0.01 per check.","tags":["solana_token_risk"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"mint","in":"query","required":true,"description":"SPL token mint address (base58)","schema":{"type":"string"},"example":"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"}],"responses":{"200":{"description":"Result (payment settles only on 2xx)","content":{"application/json":{"schema":{"type":"object","properties":{"mint":{"type":"string"},"mintAuthority":{"type":["string","null"]},"freezeAuthority":{"type":["string","null"]},"metadata":{"type":"object"},"holders":{"type":"object"},"liquidity":{"type":"object"},"age":{"type":"object"},"summary":{"type":"object"}}}}}},"400":{"description":"Bad input, not charged"},"402":{"description":"Payment Required"}}}},"/v1/web/markdown":{"get":{"operationId":"web_to_markdown","summary":"Web page to clean Markdown","description":"Use when an agent needs the readable main content of a web page as clean Markdown for an LLM. Fetches the URL, strips nav/ads/scripts with Mozilla Readability, converts to Markdown, returns title, byline, site, publish date, language and word count. $0.005 per page.","tags":["web_to_markdown"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"url","in":"query","required":true,"description":"Absolute public http(s) URL","schema":{"type":"string"},"example":"https://en.wikipedia.org/wiki/HTTP_402"}],"responses":{"200":{"description":"Result (payment settles only on 2xx)","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"title":{"type":["string","null"]},"wordCount":{"type":"integer"},"markdown":{"type":"string"}}}}}},"400":{"description":"Bad input, not charged"},"402":{"description":"Payment Required"}}}},"/v1/base/token-risk":{"get":{"operationId":"base_token_risk","summary":"Base ERC-20 token risk / honeypot check","description":"Use when an agent must decide whether an ERC-20 token on Base is safe to buy or accept. Returns honeypot/tax/owner-privilege flags (GoPlus), verified source, proxy/mint/pause/blacklist, top-10 holder share, DEX liquidity/volume (DexScreener), pool age and a risk verdict with plain-English findings. $0.01 per check.","tags":["base_token_risk"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"address","in":"query","required":true,"description":"ERC-20 contract address on Base","schema":{"type":"string"},"example":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"}],"responses":{"200":{"description":"Result (payment settles only on 2xx)","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"security":{"type":["object","null"]},"liquidity":{"type":"object"},"age":{"type":"object"},"summary":{"type":"object"}}}}}},"400":{"description":"Bad input, not charged"},"402":{"description":"Payment Required"}}}},"/v1/util/ping":{"get":{"operationId":"util_ping","summary":"x402 ping","description":"Cheapest possible paid call for testing an x402 client end to end. Returns pong plus server time. $0.001.","tags":["util_ping"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[],"responses":{"200":{"description":"Result (payment settles only on 2xx)","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"Bad input, not charged"},"402":{"description":"Payment Required"}}}},"/v1/util/uuid":{"get":{"operationId":"util_uuid","summary":"Random UUID v4","description":"Returns cryptographically random UUID v4 values (n=1..100). $0.001.","tags":["util_uuid"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"n","in":"query","required":false,"description":"How many (1-100)","schema":{"type":"string"},"example":"1"}],"responses":{"200":{"description":"Result (payment settles only on 2xx)","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"Bad input, not charged"},"402":{"description":"Payment Required"}}}},"/v1/util/time":{"get":{"operationId":"util_time","summary":"Current UTC time","description":"Returns authoritative current UTC time as ISO 8601, unix seconds/ms, and optionally the time in an IANA timezone (tz). $0.001.","tags":["util_time"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"tz","in":"query","required":false,"description":"IANA timezone","schema":{"type":"string"},"example":"UTC"}],"responses":{"200":{"description":"Result (payment settles only on 2xx)","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"Bad input, not charged"},"402":{"description":"Payment Required"}}}},"/v1/prices/llm":{"get":{"operationId":"llm_prices","summary":"LLM token price feed","description":"Current USD per 1M input/output token prices for ~300 LLMs from OpenRouter's public model list (refreshed every 5 min). Optional q filters by model id/name. $0.002.","tags":["llm_prices"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"q","in":"query","required":false,"description":"Model filter","schema":{"type":"string"},"example":"gpt-4o"}],"responses":{"200":{"description":"Result (payment settles only on 2xx)","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"Bad input, not charged"},"402":{"description":"Payment Required"}}}},"/v1/prices/gpu":{"get":{"operationId":"gpu_prices","summary":"GPU rental price feed","description":"Current on-demand GPU rental prices (min and median USD per GPU-hour by GPU model) from Vast.ai's public marketplace, refreshed every 5 min. Optional q filters by GPU name. $0.002.","tags":["gpu_prices"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"q","in":"query","required":false,"description":"GPU filter","schema":{"type":"string"},"example":"H100"}],"responses":{"200":{"description":"Result (payment settles only on 2xx)","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"Bad input, not charged"},"402":{"description":"Payment Required"}}}},"/v1/evm/4byte":{"get":{"operationId":"evm_4byte_decode","summary":"Decode EVM 4-byte function selector","description":"Use when an agent sees raw EVM calldata or a 4-byte function selector (e.g. 0xa9059cbb) and needs the human-readable function signature. Queries the Sourcify signature DB and 4byte.directory, de-duplicates collisions and ranks the most likely match first (verified-contract usage, then oldest registration). Accepts a bare selector or full calldata. $0.002.","tags":["evm_4byte_decode"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"selector","in":"query","required":true,"description":"4-byte selector (0x + 8 hex) or full calldata","schema":{"type":"string"},"example":"0xa9059cbb"}],"responses":{"200":{"description":"Result (payment settles only on 2xx)","content":{"application/json":{"schema":{"type":"object","properties":{"selector":{"type":"string"},"found":{"type":"boolean"},"best":{"type":["string","null"]},"count":{"type":"integer"},"matches":{"type":"array"}}}}}},"400":{"description":"Bad input, not charged"},"402":{"description":"Payment Required"}}}},"/v1/web/status":{"get":{"operationId":"web_url_status","summary":"Check URL status / uptime","description":"Use when an agent needs to know whether a URL is up before relying on it. Returns final HTTP status, ok flag, final URL after redirects (full redirect chain), time-to-first-byte and total ms, content-type, content-length and server header. HEAD first with GET fallback, 8s cap, max 10 redirects. $0.002 per check.","tags":["web_url_status"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"url","in":"query","required":true,"description":"Absolute public http(s) URL","schema":{"type":"string"},"example":"https://example.com"}],"responses":{"200":{"description":"Result (payment settles only on 2xx)","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"ok":{"type":"boolean"},"status":{"type":["integer","null"]},"finalUrl":{"type":["string","null"]},"redirects":{"type":"integer"},"ttfbMs":{"type":["integer","null"]},"totalMs":{"type":"integer"},"contentType":{"type":["string","null"]},"chain":{"type":"array"},"error":{"type":["string","null"]}}}}}},"400":{"description":"Bad input, not charged"},"402":{"description":"Payment Required"}}}},"/v1/crypto/price":{"get":{"operationId":"crypto_price","summary":"Crypto spot price in USD (CoinGecko)","description":"Use when an agent needs the current USD spot price of one or more crypto assets. Accepts up to 25 comma-separated CoinGecko ids or ticker symbols (btc, eth, sol, usdc...; symbols resolve to the highest market-cap match) and returns usd, 24h % change, market cap, 24h volume and last-updated time per asset from CoinGecko, cached 60s. $0.002 per call.","tags":["crypto_price"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"q","in":"query","required":true,"description":"Comma-separated CoinGecko ids or symbols (max 25)","schema":{"type":"string"},"example":"solana,btc,eth"}],"responses":{"200":{"description":"Result (payment settles only on 2xx)","content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array"},"count":{"type":"integer"},"found":{"type":"integer"},"prices":{"type":"array"},"source":{"type":"string"},"fetchedAt":{"type":"string"}}}}}},"400":{"description":"Bad input, not charged"},"402":{"description":"Payment Required"}}}},"/v1/dns/lookup":{"get":{"operationId":"dns_lookup","summary":"DNS lookup via DNS-over-HTTPS","description":"Use when an agent needs live DNS records for a public hostname: A, AAAA, TXT (SPF/DMARC/domain verification), MX (mail routing), CNAME or NS. Resolves via Cloudflare DNS-over-HTTPS and returns the response code (NOERROR/NXDOMAIN), cleaned answer and authority records with TTLs, MX priority/exchange, joined TXT strings and the DNSSEC-validated flag. $0.001 per lookup.","tags":["dns_lookup"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"name","in":"query","required":true,"description":"Public hostname","schema":{"type":"string"},"example":"example.com"},{"name":"type","in":"query","required":false,"description":"A (default), AAAA, TXT, MX, CNAME, NS","schema":{"type":"string","enum":["A","AAAA","TXT","MX","CNAME","NS"]},"example":"A"}],"responses":{"200":{"description":"Result (payment settles only on 2xx)","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"status":{"type":"integer"},"statusText":{"type":"string"},"found":{"type":"boolean"},"answer":{"type":"array"},"authority":{"type":"array"},"dnssecValidated":{"type":"boolean"}}}}}},"400":{"description":"Bad input, not charged"},"402":{"description":"Payment Required"}}}},"/healthz":{"get":{"operationId":"health","security":[],"summary":"Health check","responses":{"200":{"description":"ok"}}}}}}