{"uid":"cap_69aY7_wXEZ-5u8WU9nhQZ","slug":"tanod-x402-lint-4a2c42a8","name":"Tanod x402 Lint","description":"One MCP server and HTTP API with 193 pay-per-call tools for AI agents (security checks, chain data, finance, aviation, documents), plus free uptime and MikroTik monitoring and 130+ free browser tools. No signup; free daily tier. Operated by an AI.","url":"https://tanod.dev/v1/x402/lint?utm_source=zero.xyz","method":"POST","headers":{},"bodySchema":{"type":"object","properties":{"url":{"anyOf":[{"type":"string","maxLength":2048,"minLength":9},{"type":"null"}],"default":null,"description":"An https x402 endpoint: it is fetched once (GET, else POST if GET is 405) and its 402 response (PAYMENT-REQUIRED header, else body) is linted. Public https hosts only. Mode lint: send this or `listing`."},"host":{"anyOf":[{"type":"string","maxLength":253,"minLength":4},{"type":"null"}],"default":null,"description":"Mode coverage: the seller's public host name (such as api.example.com, no scheme or path). Its /openapi.json and /.well-known/x402 are read. Send this or `openapi_url`."},"mode":{"enum":["lint","coverage"],"type":"string","default":"lint","description":"`lint` (default, USD 0.001): lint one listing, send `listing` or `url`. `coverage` (USD 0.01): compare a seller's paid routes with the CDP Bazaar, send `host` or `openapi_url`."},"listing":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"string"},{"type":"null"}],"default":null,"description":"The listing to lint, as JSON: an x402 PaymentRequired object (v1 or v2), a bare accepts[] entry or a Bazaar discovery item. The JSON text or the base64 PAYMENT-REQUIRED header value of one is accepted as a string. At most 1 MB. Mode lint: send this or `url`."},"openapi_url":{"anyOf":[{"type":"string","maxLength":2048,"minLength":9},{"type":"null"}],"default":null,"description":"Mode coverage: an https URL of the seller's OpenAPI document (JSON, at most 2 MB). The seller host is the URL's host. Send this or `host`."}}},"responseSchema":{"type":"json","example":{"url":null,"note":"Automated checks of the listing rules Tanod knows (Coinbase CDP's 500-character description limit, the Bazaar's https requirement, required fields); the facilitator or catalog may apply others. The suggested description is a draft to review, not a rewrite of your meaning.","score":95,"errors":0,"source":"listing","problems":[{"code":"missing_use_when","message":"When-to-use sentence: No \"use when\" sentence found. Fix: Add one, for example: \"Use when an agent needs X before doing Y.\" Curators look for it; 94% of Bazaar listings lack it.","severity":"warning"}],"warnings":1,"checked_at":"2026-10-09T08:00:00Z","checks_passed":9,"suggested_length":85,"description_length":28,"suggested_description":"Weather forecast for a city. Use when an agent needs weather data from this endpoint."}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.001","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.001/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.001","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.001","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_sBNz8nQaqpKySzsZHBNEN","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.001","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Validates and scores an x402 PaymentRequired listing or live endpoint against known rules, returning errors, warnings, and a suggested description.","exampleAgentPrompt":"Can you lint my x402 listing and tell me what's wrong with it? Here's the listing JSON: {\"description\":\"Weather data\",\"price\":\"0.001 USDC\",\"accepts\":[{\"scheme\":\"exact\",\"network\":\"base\"}]}","exampleUseCases":[{"title":"Pre-publish Bazaar listing audit","prompt":"Before I submit this x402 listing to the Bazaar, can you run it through the linter and tell me what errors or warnings show up? Here's the listing object: {\"description\":\"Stock price lookup\",\"price\":\"0.005 USDC\",\"accepts\":[{\"scheme\":\"exact\",\"network\":\"base-sepolia\"}]}"},{"title":"Live endpoint compliance check","prompt":"Can you check if my live x402 endpoint at https://myapi.example.com/v1/data is correctly returning a valid PaymentRequired response? I want to know the score and any problems."},{"title":"Description quality improvement","prompt":"My x402 listing keeps getting low scores — can you lint it and show me the suggested description? The listing JSON is {\"description\":\"Data\",\"accepts\":[{\"scheme\":\"exact\",\"network\":\"base\"}],\"price\":\"0.001 USDC\"}."}],"resultDescription":"Returns a JSON object with a numeric score (0–100), counts of errors and warnings, a list of problems each with a code, message, and severity, the number of checks passed, the source type, the detected description length, a suggested description draft, and a timestamp of when the check was performed.","failureModes":["Neither url nor listing provided — returns validation error","URL is not a public HTTPS host — rejected","Listing JSON exceeds 1 MB limit — rejected","Live URL returns non-402 response — cannot lint","Malformed JSON listing string — parse error","URL times out or is unreachable — fetch error"],"whenToPreferThis":"Use this endpoint when you need to validate an x402 PaymentRequired listing or live endpoint against the known rules of the Bazaar and Coinbase CDP before publishing, or when debugging why a listing was rejected or scored poorly. It is the only known automated linter purpose-built for the x402 protocol and Bazaar catalog rules, including the 500-character description limit, HTTPS requirement, required fields, and 'use when' sentence heuristics.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-10-10T12:40:32.330Z","isFirstParty":false,"canonicalSlug":"tanod-x402-lint-4a2c42a8"}