{"openapi":"3.1.0","info":{"title":"toolbelt402","version":"1.1.0","summary":"Deterministic utilities for AI agents, paid per call with x402.","description":"Twenty-one deterministic utility endpoints — JSON repair and validation, format conversion, regex testing, hashing, time and cron maths, URL inspection and web-article extraction.\n\nNo account, no API key, no signup: each call is paid on demand with USDC on Base using the x402 protocol (HTTP 402). Unpaid requests return 402 with machine-readable payment requirements; pay and repeat the request to receive the result. Prices range from $0.001 to $0.02 per call.\n\nEvery endpoint is deterministic: no model inference, no randomness, same input gives the same output.","license":{"name":"Best-effort service, no SLA"}},"servers":[{"url":"https://toolbelt402.tpoborne.workers.dev"}],"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","asset":"USDC","manifest":"https://toolbelt402.tpoborne.workers.dev/.well-known/x402"},"tags":[{"name":"cron"},{"name":"csv"},{"name":"encode"},{"name":"hash"},{"name":"html"},{"name":"json"},{"name":"jwt"},{"name":"markdown"},{"name":"ping"},{"name":"regex"},{"name":"service"},{"name":"text"},{"name":"time"},{"name":"url"},{"name":"validate"},{"name":"web"},{"name":"xml"}],"paths":{"/json/repair":{"post":{"operationId":"postJsonRepair","summary":"Fix invalid, malformed, or truncated JSON","description":"Fix invalid, malformed, or truncated JSON — repairs trailing commas, single quotes, unquoted keys, and cut-off LLM output; returns the parsed object plus corrected JSON text. Deterministic, no LLM.\n\nPrice: $0.005 per call, paid via x402 (no account or API key required).","tags":["json"],"x-x402-price":"$0.005","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"alreadyValid":false,"repaired":true,"data":{"a":1,"b":[1,2]},"repairedText":"{\"a\": 1, \"b\": [1, 2]}"}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.005 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"Possibly-broken JSON as a string"}}},"example":{"text":"{'a': 1, 'b': [1, 2,], }"}}}}}},"/json/validate":{"post":{"operationId":"postJsonValidate","summary":"Validate JSON data against a JSON Schema (draft-07, 2019-09, 2020-12)","description":"Validate JSON data against a JSON Schema (draft-07, 2019-09, 2020-12) — returns exact error locations, keywords, and messages for programmatic handling. Deterministic schema validation.\n\nPrice: $0.002 per call, paid via x402 (no account or API key required).","tags":["json"],"x-x402-price":"$0.002","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"valid":false,"errors":[{"location":"#","keyword":"required","error":"Instance does not have required property \"name\"."}]}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.002 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["schema","data"],"properties":{"schema":{"type":"object","description":"JSON Schema to validate against"},"data":{"description":"Instance to validate"},"draft":{"type":"string","description":"Optional: 7, 2019-09 or 2020-12 (default)"}}},"example":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"}}},"data":{"age":3}}}}}}},"/regex/test":{"post":{"operationId":"postRegexTest","summary":"Test and debug a regular expression against up to 50 sample strings","description":"Test and debug a regular expression against up to 50 sample strings — real match results, capture groups, named groups, and pass/fail against expectations. Deterministic regex testing.\n\nPrice: $0.002 per call, paid via x402 (no account or API key required).","tags":["regex"],"x-x402-price":"$0.002","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"allPassed":true,"results":[{"input":"a.b@example.com","matched":true,"match":"a.b@example.com","namedGroups":{"user":"a.b","host":"example.com"},"passed":true}]}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.002 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["pattern","cases"],"properties":{"pattern":{"type":"string"},"flags":{"type":"string","description":"Any of g i m s u y v d"},"cases":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string"},"expectMatch":{"type":"boolean"}}}}}},"example":{"pattern":"^(?<user>[\\w.]+)@(?<host>[\\w.]+)$","flags":"","cases":[{"input":"a.b@example.com","expectMatch":true}]}}}}}},"/cron/next":{"get":{"operationId":"getCronNext","summary":"Parse and validate a cron expression","description":"Parse and validate a cron expression — returns the next N run times as ISO timestamps in any IANA timezone. Cron schedule checker.\n\nPrice: $0.001 per call, paid via x402 (no account or API key required).","tags":["cron"],"x-x402-price":"$0.001","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"expr":"*/15 * * * *","timezone":"Europe/London","count":3,"nextRuns":["2026-07-30T09:15:00.000Z","2026-07-30T09:30:00.000Z","2026-07-30T09:45:00.000Z"]}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.001 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"parameters":[{"name":"expr","in":"query","required":true,"description":"Cron expression","schema":{"type":"string"},"example":"*/15 * * * *"},{"name":"n","in":"query","required":false,"description":"How many runs (default 5, max 100)","schema":{"type":"string"},"example":"3"},{"name":"tz","in":"query","required":false,"description":"IANA timezone (default UTC)","schema":{"type":"string"},"example":"Europe/London"}]}},"/url/preflight":{"get":{"operationId":"getUrlPreflight","summary":"Check a URL before fetching it: is it alive, final URL after redirects, HTTP status, content type, HTML title, and whether robots","description":"Check a URL before fetching it: is it alive, final URL after redirects, HTTP status, content type, HTML title, and whether robots.txt allows your user-agent. Link checker and fetch preflight for agents.\n\nPrice: $0.005 per call, paid via x402 (no account or API key required).","tags":["url"],"x-x402-price":"$0.005","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"requestedUrl":"https://example.com/","finalUrl":"https://example.com/","alive":true,"status":200,"redirects":[],"contentType":"text/html; charset=UTF-8","title":"Example Domain","robots":{"fetched":true,"allowed":true,"matchedRule":null,"group":"*"},"timingMs":350}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.005 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"parameters":[{"name":"url","in":"query","required":true,"description":"Absolute http(s) URL to check","schema":{"type":"string"},"example":"https://example.com/"},{"name":"ua","in":"query","required":false,"description":"User-agent to evaluate robots.txt against","schema":{"type":"string"},"example":"my-agent/1.0"}]}},"/html/to-markdown":{"post":{"operationId":"postHtmlToMarkdown","summary":"Convert HTML to clean Markdown","description":"Convert HTML to clean Markdown — turn scraped web pages into LLM-ready text. Handles headings, lists, tables, links, code blocks. Deterministic, no LLM.\n\nPrice: $0.005 per call, paid via x402 (no account or API key required).","tags":["html"],"x-x402-price":"$0.005","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"markdown":"# Title\n\nSome **bold** text and a [link](https://example.com).","inputBytes":89,"outputBytes":58}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.005 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["html"],"properties":{"html":{"type":"string","description":"HTML to convert (max 256 KB)"},"options":{"type":"object","properties":{"bulletMarker":{"type":"string","enum":["-","*"]},"linkReferences":{"type":"boolean"}}}}},"example":{"html":"<h1>Title</h1><p>Some <b>bold</b> text and a <a href=\"https://example.com\">link</a>.</p>"}}}}}},"/text/diff":{"post":{"operationId":"postTextDiff","summary":"Compare two texts","description":"Compare two texts — unified diff patch plus added/removed/unchanged counts, by lines, words, or characters. Verify edits and detect changes deterministically.\n\nPrice: $0.002 per call, paid via x402 (no account or API key required).","tags":["text"],"x-x402-price":"$0.002","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"mode":"lines","identical":false,"stats":{"added":1,"removed":1,"unchanged":1,"unit":"lines"},"unifiedPatch":"--- a\n+++ b\n@@ -1,2 +1,2 @@\n-the quick brown fox\n+the quick red fox\n jumps high\n"}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.002 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["a","b"],"properties":{"a":{"type":"string","description":"Original text (max 128 KB)"},"b":{"type":"string","description":"Changed text (max 128 KB)"},"mode":{"type":"string","enum":["lines","words","chars"],"description":"Diff granularity (default lines)"}}},"example":{"a":"the quick brown fox\njumps high\n","b":"the quick red fox\njumps high\n","mode":"lines"}}}}}},"/time/math":{"get":{"operationId":"getTimeMath","summary":"Date and time arithmetic done right: difference between two datetimes, add or subtract ISO-8601 durations, convert an instant into any IANA timezone with UTC offset and weekday","description":"Date and time arithmetic done right: difference between two datetimes, add or subtract ISO-8601 durations, convert an instant into any IANA timezone with UTC offset and weekday.\n\nPrice: $0.001 per call, paid via x402 (no account or API key required).","tags":["time"],"x-x402-price":"$0.001","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"op":"diff","from":"2026-07-30T09:00:00.000Z","to":"2026-08-02T15:30:00.000Z","milliseconds":282600000,"seconds":282600,"minutes":4710,"hours":78.5,"days":3.270833,"humanized":"3d 6h 30m 0s"}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.001 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"parameters":[{"name":"op","in":"query","required":true,"description":"diff needs from+to; add/subtract need start+duration (ISO-8601, e.g. P1DT2H30M); convert needs time+tz","schema":{"type":"string","enum":["diff","add","subtract","convert"]},"example":"diff"},{"name":"from","in":"query","required":false,"schema":{"type":"string"},"example":"2026-07-30T09:00:00Z"},{"name":"to","in":"query","required":false,"schema":{"type":"string"},"example":"2026-08-02T15:30:00Z"},{"name":"start","in":"query","required":false,"schema":{"type":"string"}},{"name":"duration","in":"query","required":false,"schema":{"type":"string"}},{"name":"time","in":"query","required":false,"schema":{"type":"string"}},{"name":"tz","in":"query","required":false,"description":"IANA timezone, e.g. Europe/London","schema":{"type":"string"}}]}},"/jwt/decode":{"post":{"operationId":"postJwtDecode","summary":"Decode a JWT","description":"Decode a JWT — header, payload, and timing analysis (issued/not-before/expiry as ISO timestamps, expired flag, seconds until expiry). Decode only; signature is NOT verified.\n\nPrice: $0.002 per call, paid via x402 (no account or API key required).","tags":["jwt"],"x-x402-price":"$0.002","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"verified":false,"note":"Decode only — the signature is NOT verified.","header":{"alg":"HS256","typ":"JWT"},"payload":{"sub":"1234567890","name":"John Doe","iat":1516239022},"timing":{"iat":"2018-01-18T01:30:22.000Z","nbf":null,"exp":null,"expired":null,"notYetValid":null,"secondsUntilExpiry":null}}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.002 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["token"],"properties":{"token":{"type":"string","description":"JWS compact JWT (max 16 KB). Decode only — signature is NOT verified."}}},"example":{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}}}}}},"/validate/checksum":{"post":{"operationId":"postValidateChecksum","summary":"Validate identifiers by checksum: IBAN (mod-97), card numbers (Luhn), EAN-13, ISBN-10/13, UUID (RFC-4122), ULID","description":"Validate identifiers by checksum: IBAN (mod-97), card numbers (Luhn), EAN-13, ISBN-10/13, UUID (RFC-4122), ULID. Batch up to 100 per call with per-item reasons.\n\nPrice: $0.002 per call, paid via x402 (no account or API key required).","tags":["validate"],"x-x402-price":"$0.002","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"supported":["luhn","iban","ean13","isbn10","isbn13","uuid","ulid"],"results":[{"index":0,"type":"iban","value":"GB82 WEST 1234 5698 7654 32","valid":true,"normalized":"GB82WEST12345698765432"},{"index":1,"type":"luhn","valid":true,"normalized":"4242424242424242"},{"index":2,"type":"uuid","valid":true,"version":4}]}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.002 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["items"],"properties":{"items":{"type":"array","maxItems":100,"items":{"type":"object","required":["type","value"],"properties":{"type":{"type":"string","enum":["iban","luhn","ean13","isbn10","isbn13","uuid","ulid"]},"value":{"type":"string","maxLength":256}}}}}},"example":{"items":[{"type":"iban","value":"GB82 WEST 1234 5698 7654 32"},{"type":"luhn","value":"4242 4242 4242 4242"},{"type":"uuid","value":"550e8400-e29b-41d4-a716-446655440000"}]}}}}}},"/csv/to-json":{"post":{"operationId":"postCsvToJson","summary":"Parse CSV into JSON rows","description":"Parse CSV into JSON rows — auto-detects the delimiter, handles quoted fields and headers, optional type coercion. Returns columns, row count, and per-row parse errors.\n\nPrice: $0.003 per call, paid via x402 (no account or API key required).","tags":["csv"],"x-x402-price":"$0.003","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"rowCount":2,"truncated":false,"columns":["name","age"],"delimiter":",","rows":[{"name":"Ada","age":36},{"name":"Grace","age":45}],"errors":[]}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.003 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["csv"],"properties":{"csv":{"type":"string","description":"CSV text (max 256 KB); delimiter auto-detected"},"options":{"type":"object","properties":{"headers":{"type":"boolean","description":"first row is headers (default true)"},"delimiter":{"type":"string"},"typed":{"type":"boolean","description":"coerce numbers/booleans"}}}}},"example":{"csv":"name,age\nAda,36\nGrace,45\n","options":{"typed":true}}}}}}},"/json/to-csv":{"post":{"operationId":"postJsonToCsv","summary":"Convert an array of JSON objects into CSV","description":"Convert an array of JSON objects into CSV — column union across rows or explicit column order; nested values are JSON-stringified into cells.\n\nPrice: $0.002 per call, paid via x402 (no account or API key required).","tags":["json"],"x-x402-price":"$0.002","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"csv":"name,age,city\nAda,36,\nGrace,45,NYC","columns":["name","age","city"],"rowCount":2}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.002 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["rows"],"properties":{"rows":{"type":"array","maxItems":5000,"items":{"type":"object"},"description":"Array of objects; column union across rows"},"options":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"string"},"description":"Explicit column order"}}}}},"example":{"rows":[{"name":"Ada","age":36},{"name":"Grace","age":45,"city":"NYC"}]}}}}}},"/json/query":{"post":{"operationId":"postJsonQuery","summary":"Query JSON with a JMESPath expression","description":"Query JSON with a JMESPath expression — extract, filter, project, and reshape nested data with the AWS-standard query language. Deterministic JSON extraction.\n\nPrice: $0.003 per call, paid via x402 (no account or API key required).","tags":["json"],"x-x402-price":"$0.003","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"query":"users[?active].name","result":["Ada"]}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.003 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["data","query"],"properties":{"data":{"description":"Any JSON document"},"query":{"type":"string","description":"JMESPath expression"}}},"example":{"data":{"users":[{"name":"Ada","active":true},{"name":"Bob","active":false}]},"query":"users[?active].name"}}}}}},"/json/diff":{"post":{"operationId":"postJsonDiff","summary":"Structural diff of two JSON documents","description":"Structural diff of two JSON documents — add/remove/change operations with JSON-Pointer paths, before/after values, and an identical flag. Compare API responses and configs.\n\nPrice: $0.003 per call, paid via x402 (no account or API key required).","tags":["json"],"x-x402-price":"$0.003","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"identical":false,"opCount":2,"truncated":false,"ops":[{"path":"/age","op":"change","before":36,"after":37},{"path":"/city","op":"add","after":"London"}],"note":"arrays are compared positionally; paths use JSON-Pointer escaping"}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.003 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["a","b"],"properties":{"a":{"description":"Original JSON document"},"b":{"description":"Changed JSON document"}}},"example":{"a":{"name":"Ada","age":36},"b":{"name":"Ada","age":37,"city":"London"}}}}}}},"/xml/to-json":{"post":{"operationId":"postXmlToJson","summary":"Parse XML into JSON","description":"Parse XML into JSON — validates first with line-numbered errors, preserves attributes, optional type coercion. Works for RSS feeds, sitemaps, and SOAP-ish payloads.\n\nPrice: $0.003 per call, paid via x402 (no account or API key required).","tags":["xml"],"x-x402-price":"$0.003","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"json":{"rss":{"channel":{"title":"Feed","item":{"#text":"Hello","@_id":1}}}}}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.003 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["xml"],"properties":{"xml":{"type":"string","description":"XML text (max 256 KB); validated before parsing"},"options":{"type":"object","properties":{"attributes":{"type":"boolean","description":"keep attributes as @_ keys (default true)"},"typed":{"type":"boolean","description":"coerce numeric tag values (default true)"}}}}},"example":{"xml":"<rss><channel><title>Feed</title><item id=\"1\">Hello</item></channel></rss>"}}}}}},"/markdown/to-html":{"post":{"operationId":"postMarkdownToHtml","summary":"Render Markdown to HTML","description":"Render Markdown to HTML — CommonMark with autolinking; raw HTML in the input is escaped, not executed. The inverse of /html/to-markdown.\n\nPrice: $0.003 per call, paid via x402 (no account or API key required).","tags":["markdown"],"x-x402-price":"$0.003","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"html":"<h1>Title</h1>\n<p>Some <strong>bold</strong> text and a <a href=\"https://example.com\">link</a>.</p>\n","note":"raw HTML in the input is escaped (not executed); sanitize downstream if rendering untrusted content","inputBytes":58,"outputBytes":94}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.003 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["markdown"],"properties":{"markdown":{"type":"string","description":"CommonMark text (max 256 KB); raw HTML is escaped, not executed"}}},"example":{"markdown":"# Title\n\nSome **bold** text and a [link](https://example.com)."}}}}}},"/hash":{"post":{"operationId":"postHash","summary":"Hash a string or bytes with multiple algorithms in one call: SHA-1, SHA-256, SHA-384, SHA-512, SHA3-256, and keccak-256 (Ethereum)","description":"Hash a string or bytes with multiple algorithms in one call: SHA-1, SHA-256, SHA-384, SHA-512, SHA3-256, and keccak-256 (Ethereum). Input as UTF-8, base64, or hex; hex digests out.\n\nPrice: $0.002 per call, paid via x402 (no account or API key required).","tags":["hash"],"x-x402-price":"$0.002","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"inputBytes":11,"digests":{"sha-256":"b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9","keccak-256":"47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"}}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.002 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["input"],"properties":{"input":{"type":"string"},"algorithms":{"type":"array","items":{"type":"string","enum":["sha-1","sha-256","sha-384","sha-512","sha3-256","keccak-256"]},"description":"default [\"sha-256\"]"},"inputEncoding":{"type":"string","enum":["utf8","base64","hex"],"description":"how to read input bytes (default utf8)"}}},"example":{"input":"hello world","algorithms":["sha-256","keccak-256"]}}}}}},"/encode":{"post":{"operationId":"postEncode","summary":"Encode or decode text: base64, base64url (padding handled), hex, URL percent-encoding, and HTML entities","description":"Encode or decode text: base64, base64url (padding handled), hex, URL percent-encoding, and HTML entities. The conversions agents most often get wrong.\n\nPrice: $0.001 per call, paid via x402 (no account or API key required).","tags":["encode"],"x-x402-price":"$0.001","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"output":"hello world"}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.001 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["op","format","input"],"properties":{"op":{"type":"string","enum":["encode","decode"]},"format":{"type":"string","enum":["base64","base64url","hex","url","html"]},"input":{"type":"string"}}},"example":{"op":"decode","format":"base64url","input":"aGVsbG8gd29ybGQ"}}}}}},"/url/parse":{"get":{"operationId":"getUrlParse","summary":"Parse a URL into parts","description":"Parse a URL into parts — host, path, query params as JSON, fragment, origin — or resolve a relative reference against a base URL correctly.\n\nPrice: $0.001 per call, paid via x402 (no account or API key required).","tags":["url"],"x-x402-price":"$0.001","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"mode":"parse","href":"https://user@example.com:8443/a/b?x=1&y=2&y=3#frag","protocol":"https","host":"example.com:8443","hostname":"example.com","port":"8443","path":"/a/b","query":{"x":"1","y":["2","3"]},"fragment":"frag","origin":"https://example.com:8443","credentialsPresent":true}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.001 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"parameters":[{"name":"url","in":"query","required":false,"description":"Absolute URL to parse","schema":{"type":"string"},"example":"https://user@example.com:8443/a/b?x=1&y=2&y=3#frag"},{"name":"base","in":"query","required":false,"description":"Resolve mode: base URL","schema":{"type":"string"}},{"name":"ref","in":"query","required":false,"description":"Resolve mode: relative reference to resolve against base","schema":{"type":"string"}}]}},"/cron/describe":{"get":{"operationId":"getCronDescribe","summary":"Translate a cron expression into plain English (e","description":"Translate a cron expression into plain English (e.g. \"Every 15 minutes, weekdays\") — the companion to /cron/next.\n\nPrice: $0.001 per call, paid via x402 (no account or API key required).","tags":["cron"],"x-x402-price":"$0.001","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"expr":"*/15 9-17 * * 1-5","description":"Every 15 minutes, between 09:00 and 17:59, Monday through Friday"}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.001 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"parameters":[{"name":"expr","in":"query","required":true,"description":"Cron expression to translate to plain English","schema":{"type":"string"},"example":"*/15 9-17 * * 1-5"}]}},"/web/extract":{"post":{"operationId":"postWebExtract","summary":"Read a web page for me: fetches up to 5 URLs and returns the main article content as clean Markdown (nav, ads, and footers stripped) plus title, author, published date, canonical URL, links, images, word count and reading time","description":"Read a web page for me: fetches up to 5 URLs and returns the main article content as clean Markdown (nav, ads, and footers stripped) plus title, author, published date, canonical URL, links, images, word count and reading time. Typically 15-30x smaller than the raw HTML, so it saves far more in context tokens than it costs. Honors robots.txt by default. No browser or network access needed on your side.\n\nPrice: $0.02 per call, paid via x402 (no account or API key required).","tags":["web"],"x-x402-price":"$0.02","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"requested":1,"succeeded":1,"failed":0,"robotsRespected":true,"results":[{"url":"https://example.com/article","finalUrl":"https://example.com/article","ok":true,"status":200,"format":"markdown","metadata":{"title":"How Widgets Work","description":"A deep dive into widgets.","siteName":"Example","author":"Ada Lovelace","publishedAt":"2026-07-01T09:00:00Z","modifiedAt":null,"lang":"en","canonicalUrl":"https://example.com/article","image":"https://example.com/hero.jpg","schemaType":"NewsArticle"},"content":"# How Widgets Work\n\nWidgets are small components that…","stats":{"htmlBytes":184320,"contentChars":7412,"compressionRatio":24.9,"wordCount":1183,"readingTimeMinutes":5,"truncated":false,"extraction":"scored:article","linkDensity":0.06},"links":[{"url":"https://example.com/widgets/spec","text":"the widget spec"}],"images":[{"url":"https://example.com/hero.jpg","alt":"A widget"}],"timingMs":512}]}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.02 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Single URL to extract (or use urls)"},"urls":{"type":"array","maxItems":5,"items":{"type":"string"},"description":"Up to 5 absolute http(s) URLs"},"format":{"type":"string","enum":["markdown","text"],"description":"Output format (default markdown)"},"respectRobots":{"type":"boolean","description":"Honor robots.txt for the given user-agent (default true)"},"userAgent":{"type":"string","description":"User-agent to send and to evaluate robots.txt against"},"includeLinks":{"type":"boolean","description":"Include links found in the article body (default true)"},"includeImages":{"type":"boolean","description":"Include images found in the article body (default true)"},"maxBytes":{"type":"integer","description":"Cap HTML read per page (default 524288)"}}},"example":{"urls":["https://example.com/article"],"format":"markdown"}}}}}},"/ping":{"get":{"operationId":"getPing","summary":"Test your x402 client end to end at the minimum possible price","description":"Test your x402 client end to end at the minimum possible price. Returns a pong with the payer address the server actually saw, your echoed nonce, and server time — the safest way to verify wallet, payment signing, settlement and retry all work before you point your agent at anything expensive. Deterministic, idempotent, no side effects, no rate limit, no signup.\n\nPrice: $0.001 per call, paid via x402 (no account or API key required).","tags":["ping"],"x-x402-price":"$0.001","x-x402-network":"eip155:8453","responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"},"example":{"pong":true,"paymentVerified":true,"payer":"0xAC02f881881135a24Ec83808897Ec9a69918D2BD","nonce":"my-test-123","price":"$0.001","network":"eip155:8453","serverTime":"2026-07-30T14:05:00.000Z","note":"Your x402 client works: it read the 402, signed a payment, and retried successfully."}}}},"400":{"description":"Invalid or missing parameters."},"402":{"description":"Payment required. Pay $0.001 in USDC on Base mainnet (eip155:8453) using the x402 protocol, then repeat the request. The PAYMENT-REQUIRED response header carries base64-encoded payment requirements (amount, asset, payTo, scheme). Any x402 client (e.g. @x402/fetch) handles this automatically.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON payment requirements.","schema":{"type":"string"}}}},"405":{"description":"Wrong HTTP method for this resource."},"413":{"description":"Input exceeds a documented limit."},"422":{"description":"Input was well-formed but could not be processed."}},"parameters":[{"name":"nonce","in":"query","required":false,"description":"Optional value echoed back so you can correlate the response with your request","schema":{"type":"string"},"example":"my-test-123"}]}},"/":{"get":{"operationId":"get","summary":"Machine-readable service index: endpoints, prices, limits, terms.","description":"Machine-readable service index: endpoints, prices, limits, terms. Free — no payment required.","tags":["service"],"x-x402-price":"$0","responses":{"200":{"description":"Success."}}}},"/health":{"get":{"operationId":"getHealth","summary":"Liveness probe.","description":"Liveness probe. Free — no payment required.","tags":["service"],"x-x402-price":"$0","responses":{"200":{"description":"Success."}}}},"/llms.txt":{"get":{"operationId":"getLlmsTxt","summary":"Plain-text summary of the service for LLM agents.","description":"Plain-text summary of the service for LLM agents. Free — no payment required.","tags":["service"],"x-x402-price":"$0","responses":{"200":{"description":"Success."}}}},"/stats":{"get":{"operationId":"getStats","summary":"Public scoreboard: settled external payments and a recent-traffic tail.","description":"Public scoreboard: settled external payments and a recent-traffic tail. Free — no payment required.","tags":["service"],"x-x402-price":"$0","responses":{"200":{"description":"Success."}}}},"/openapi.json":{"get":{"operationId":"getOpenapiJson","summary":"This document.","description":"This document. Free — no payment required.","tags":["service"],"x-x402-price":"$0","responses":{"200":{"description":"Success."}}}},"/.well-known/x402":{"get":{"operationId":"getWellKnownX402","summary":"x402 payment manifest for automated discovery.","description":"x402 payment manifest for automated discovery. Free — no payment required.","tags":["service"],"x-x402-price":"$0","responses":{"200":{"description":"Success."}}}}}}