{"openapi":"3.1.0","info":{"title":"netintel","version":"1.0.0","summary":"Network, DNS, TLS and email intelligence, priced per call over x402.","description":"netintel runs entirely on Cloudflare Workers, which makes it unusually good at this class of work: DNS-over-HTTPS to eleven public resolvers, a raw TLS handshake over TCP sockets that can read certificates a normal HTTPS client refuses to look at (expired, self-signed, wrong host), and `request.cf` edge metadata.\n\n**Payment.** Every paid endpoint speaks [x402](https://x402.org) v2. Call it, get a 402 with a challenge, pay in USDC on Base, retry. No account, no API key, no minimum. Any 4xx or 5xx response skips settlement, so you never pay for a failed or refused request, and input is validated *before* the challenge is issued so malformed input is free.\n\n**Honesty policy.** Every external data source used here was empirically confirmed to work from inside the Workers runtime. Sources that do not work from a Worker (Quad9's DoH endpoint, Spamhaus's blocklists) are named in the responses that would otherwise have used them, with the reason. No field is ever populated with a plausible guess: if a lookup failed, the field is null and `warnings[]` says so.","contact":{"name":"netintel","url":"https://netintel.x.c00l.site"},"license":{"name":"Proprietary"}},"servers":[{"url":"https://netintel.x.c00l.site","description":"This deployment"}],"tags":[{"name":"dns","description":"DNS resolution and propagation"},{"name":"email","description":"Email deliverability"},{"name":"tls","description":"TLS and HTTPS posture"},{"name":"ip","description":"IP and ASN intelligence"},{"name":"free","description":"Free endpoints — no payment required"}],"paths":{"/":{"get":{"tags":["free"],"summary":"HTML documentation","description":"Free. Human-readable documentation for every endpoint.","responses":{"200":{"description":"HTML page.","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/openapi.json":{"get":{"tags":["free"],"summary":"This document","description":"Free. OpenAPI 3.1 specification.","responses":{"200":{"description":"OpenAPI document.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/health":{"get":{"tags":["free"],"summary":"Liveness probe","description":"Free.","responses":{"200":{"description":"Service is up.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"service":{"type":"string"}},"required":["ok"]}}}}}}},"/whoami":{"get":{"tags":["free"],"summary":"Everything netintel can see about your own connection","description":"**Free.** Echoes your IP, city-level geolocation, ASN and AS organisation, negotiated TLS version and cipher, HTTP protocol, Cloudflare colo, and TCP round-trip time — all from `request.cf` at the edge. Fields Cloudflare did not supply come back null rather than guessed.\n\nUseful on its own as a connection-debugging endpoint, and a good way to see the shape of the data before paying for `/ip` or `/tls` against a host you name.","responses":{"200":{"description":"Your connection metadata.","content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":["string","null"]},"ipVersion":{"type":["string","null"],"enum":["IPv4","IPv6",null]},"geo":{"type":"object","properties":{"country":{"type":["string","null"]},"region":{"type":["string","null"]},"city":{"type":["string","null"]},"timezone":{"type":["string","null"]},"latitude":{"type":["number","null"]},"longitude":{"type":["number","null"]},"continent":{"type":["string","null"]},"postalCode":{"type":["string","null"]},"countryIsEU":{"type":["boolean","null"]}}},"network":{"type":"object","properties":{"asn":{"type":["integer","null"]},"asOrganization":{"type":["string","null"]},"colo":{"type":["string","null"]}}},"tls":{"type":"object","properties":{"version":{"type":["string","null"]},"cipher":{"type":["string","null"]}}},"http":{"type":"object","properties":{"protocol":{"type":["string","null"]},"userAgent":{"type":["string","null"]}}},"performance":{"type":"object","properties":{"clientTcpRttMs":{"type":["number","null"]}}},"caveats":{"type":"array","items":{"type":"string"}}}},"examples":{"typical":{"value":{"ip":"203.0.113.9","ipVersion":"IPv4","ipClass":"documentation","geo":{"country":"GB","region":"England","city":"Slough","timezone":"Europe/London","latitude":51.50949,"longitude":-0.59541,"continent":"EU","postalCode":"SL1","countryIsEU":false},"network":{"asn":2856,"asOrganization":"BTBROADBAND","colo":"LHR"},"tls":{"version":"TLSv1.3","cipher":"AEAD-AES256-GCM-SHA384"},"http":{"protocol":"HTTP/2","userAgent":"curl/8.14.1"},"performance":{"clientTcpRttMs":7}}}}}}}}}},"/dns":{"post":{"tags":["dns"],"summary":"DNS lookup with DNSSEC status and a second-resolver cross-check","description":"**Price: $0.002** per call, paid with x402 (USDC on Base, CAIP-2 `eip155:8453`). An unpaid request returns HTTP 402 with a `PAYMENT-REQUIRED` header carrying the challenge; any x402-capable client pays and retries automatically. Failed work (any 4xx/5xx) is never charged for.\n\nQueries up to 12 record types concurrently over DNS-over-HTTPS and returns, per type: the answers with TTLs, the RCODE, the authoritative (AA) and DNSSEC-validated (AD) flags, and the resolution time.\n\n**Cross-check.** Every type is also queried against a second, independently-operated resolver (Google Public DNS). Disagreements are reported in `disagreements[]` with an interpretation, which is a genuinely useful signal for stale caches, split-horizon DNS and interception. Set `crossCheck: false` to skip it.\n\n**DNSSEC.** With `dnssec: true` (the default) the query carries the DO bit and the response reports `secure` / `insecure` / `bogus`, including the resolver's Extended DNS Errors when validation fails.\n\nCAA and HTTPS/SVCB records are decoded from the wire format into structured fields; TXT strings are concatenated per RFC 1035 rather than returned with embedded quotes.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Domain or hostname. Internationalised names are converted to punycode. Also accepts in-addr.arpa / ip6.arpa names.","examples":["cloudflare.com","münchen.de"]},"types":{"type":"array","maxItems":12,"items":{"type":"string","enum":["A","NS","CNAME","SOA","PTR","MX","TXT","AAAA","SRV","NAPTR","SSHFP","DS","RRSIG","NSEC","DNSKEY","NSEC3","TLSA","SVCB","HTTPS","CAA"]},"default":["A","AAAA","MX","TXT","NS"]},"dnssec":{"type":"boolean","default":true,"description":"Set the DO bit and report DNSSEC validation status."},"crossCheck":{"type":"boolean","default":true,"description":"Query a second resolver and report disagreements."}},"required":["name"]},"examples":{"basic":{"summary":"Common records","value":{"name":"cloudflare.com","types":["A","AAAA","MX","NS"]}},"dnssec":{"summary":"DNSSEC chain","value":{"name":"cloudflare.com","types":["DNSKEY","DS","SOA"],"dnssec":true}},"caa":{"summary":"Certificate issuance policy","value":{"name":"google.com","types":["CAA"]}}}}}},"responses":{"200":{"description":"Success.","headers":{"PAYMENT-RESPONSE":{"description":"Base64 settlement receipt from the facilitator.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"unicodeName":{"type":["string","null"],"description":"Original IDN form, when the input was not ASCII."},"types":{"type":"array","items":{"type":"string"}},"exists":{"type":"boolean"},"records":{"type":"object","additionalProperties":{"type":"object","properties":{"status":{"type":["string","null"],"description":"DNS RCODE name: NOERROR, NXDOMAIN, SERVFAIL, REFUSED…"},"authoritative":{"type":"boolean"},"authenticatedData":{"type":"boolean","description":"The resolver's AD bit — the answer was DNSSEC-validated."},"answerCount":{"type":"integer"},"ms":{"type":"integer"},"answers":{"type":["array","null"],"items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"ttl":{"type":["integer","null"]},"data":{"type":"string"},"priority":{"type":"integer","description":"MX only."},"exchange":{"type":"string","description":"MX only."},"parsed":{"type":"object","additionalProperties":true,"description":"Decoded rdata for CAA, SRV, HTTPS/SVCB."}}}},"crossCheck":{"type":"object","properties":{"resolver":{"type":"string"},"agrees":{"type":["boolean","null"]},"ok":{"type":"boolean"}}},"queryFailed":{"type":"boolean"},"error":{"type":"string"}}}},"dnssec":{"type":"object","properties":{"requested":{"type":"boolean"},"authenticatedData":{"type":"boolean"},"validation":{"type":"string","enum":["secure","insecure","bogus","not-requested"]},"meaning":{"type":"string"},"extendedDnsErrors":{"type":"array","items":{"type":"string"}}}},"disagreements":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"reason":{"type":"string"},"interpretation":{"type":"string"}}}},"timing":{"type":"object","properties":{"totalMs":{"type":"integer"},"perTypeMs":{"type":"object","additionalProperties":{"type":"integer"}}}},"warnings":{"type":"array","items":{"type":"string"},"description":"Human-readable notes about partial results. Any sub-lookup that failed is described here and its field is null rather than falsely reported as an empty/negative result."}}}}}},"400":{"description":"Malformed input. Validated before the payment challenge, so this costs nothing.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"402":{"description":"Payment required. The `PAYMENT-REQUIRED` response header contains the base64 x402 challenge.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Target refused by the SSRF/abuse guard (private, loopback, link-local, cloud-metadata, or a disallowed scheme/port).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The named host or domain does not exist (NXDOMAIN).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"413":{"description":"Request body too large.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"422":{"description":"Input was well-formed but cannot be acted on (for example a hostname with no address records).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"500":{"description":"Internal error. Settlement is skipped, so the caller is not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The payment facilitator could not be reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}}}}},"/email":{"post":{"tags":["email"],"summary":"Email deliverability audit — no message sent","description":"**Price: $0.003** per call, paid with x402 (USDC on Base, CAIP-2 `eip155:8453`). An unpaid request returns HTTP 402 with a `PAYMENT-REQUIRED` header carrying the challenge; any x402-capable client pays and retries automatically. Failed work (any 4xx/5xx) is never charged for.\n\nA full DNS-side audit of one address. Nothing is ever sent to it and no SMTP connection is opened.\n\n- **Syntax** — a real RFC 5322 §3.4.1 addr-spec parse, not a regex. Handles quoted local parts, quoted-pairs, domain literals, and IDN domains (converted to punycode), and enforces the RFC 5321 length limits.\n- **Domain and MX** — existence, MX records with priorities and TTLs, whether each MX host actually resolves, null-MX (RFC 7505) detection, and the implicit-MX A-record fallback.\n- **SPF** — full parse, plus a *recursive* expansion of every `include`/`redirect` to count the real DNS-lookup total against the hard limit of 10 (RFC 7208 §4.6.4). Flags `+all`, missing `all`, multiple records, and `ptr`.\n- **DMARC** — policy, pct, rua/ruf, sp, adkim/aspf alignment, with fallback to the organizational domain per RFC 7489 §6.6.3.\n- **DKIM** — probes 9 common selectors and reports each key's algorithm and bit length.\n- **Classification** — disposable/throwaway domain, role account, free consumer provider, and the mail platform.\n- **Score** — 0–100 with a per-signal `breakdown[]` giving the exact delta and reason for every point.\n\nCatch-all status is reported as *not determinable* with a DNS-based likelihood and an explanation, because proving it requires an SMTP RCPT TO probe.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","maxLength":320,"examples":["info@example.com"]}},"required":["email"]},"examples":{"role":{"summary":"Role account at a real domain","value":{"email":"info@github.com"}},"disposable":{"summary":"Throwaway inbox","value":{"email":"test@mailinator.com"}},"strict":{"summary":"Strict DMARC policy","value":{"email":"billing@paypal.com"}},"idn":{"summary":"Internationalised domain","value":{"email":"kontakt@münchen.de"}}}}}},"responses":{"200":{"description":"Success.","headers":{"PAYMENT-RESPONSE":{"description":"Base64 settlement receipt from the facilitator.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"score":{"type":"integer","minimum":0,"maximum":100},"grade":{"type":"string","enum":["A","B","C","D","E","F"]},"verdict":{"type":"string","enum":["high","moderate","low","very-low","undeliverable"]},"syntax":{"type":"object","properties":{"valid":{"type":"boolean"},"normalized":{"type":["string","null"]},"localPart":{"type":"string"},"localPartQuoted":{"type":"boolean"},"domain":{"type":["string","null"]},"isInternationalized":{"type":"boolean"},"punycodeDomain":{"type":["string","null"]},"unicodeDomain":{"type":["string","null"]},"errors":{"type":"array","items":{"type":"string"}},"standard":{"type":"string"}}},"domain":{"type":["object","null"],"properties":{"name":{"type":"string"},"exists":{"type":"boolean"},"nxdomain":{"type":"boolean"},"organizationalDomain":{"type":"string"},"addresses":{"type":"array","items":{"type":"string"}}}},"mx":{"type":"object","properties":{"present":{"type":"boolean"},"nullMx":{"type":"boolean"},"count":{"type":"integer"},"primaryExchange":{"type":["string","null"]},"allResolve":{"type":["boolean","null"]},"fallbackToA":{"type":"boolean"},"provider":{"type":["string","null"]},"records":{"type":"array","items":{"type":"object","properties":{"priority":{"type":"integer"},"exchange":{"type":"string"},"ttl":{"type":["integer","null"]},"resolves":{"type":["boolean","null"]},"addresses":{"type":["array","null"],"items":{"type":"string"}}}}}}},"spf":{"type":"object","properties":{"present":{"type":"boolean"},"record":{"type":"string"},"valid":{"type":"boolean"},"allQualifier":{"type":["string","null"],"enum":["+","-","~","?",null]},"allMeaning":{"type":["string","null"]},"includes":{"type":"array","items":{"type":"string"}},"dnsLookups":{"type":"object","properties":{"totalLookups":{"type":"integer"},"limit":{"type":"integer","const":10},"exceedsLimit":{"type":"boolean"},"exact":{"type":"boolean"},"method":{"type":"string"}}},"issues":{"type":"array","items":{"type":"string"}}}},"dmarc":{"type":"object","properties":{"present":{"type":"boolean"},"foundAt":{"type":["string","null"]},"inheritedFromOrganizationalDomain":{"type":"boolean"},"policy":{"type":["string","null"],"enum":["none","quarantine","reject",null]},"subdomainPolicy":{"type":["string","null"]},"percent":{"type":"integer"},"dkimAlignment":{"type":"string","enum":["strict","relaxed"]},"spfAlignment":{"type":"string","enum":["strict","relaxed"]},"aggregateReportAddresses":{"type":"array","items":{"type":"string"}},"strength":{"type":"string"},"issues":{"type":"array","items":{"type":"string"}}}},"dkim":{"type":"object","properties":{"selectorsProbed":{"type":"array","items":{"type":"string"}},"foundCount":{"type":"integer"},"anyValid":{"type":"boolean"},"found":{"type":"array","items":{"type":"object","properties":{"selector":{"type":"string"},"keyType":{"type":"string"},"keySize":{"type":["integer","null"]},"revoked":{"type":"boolean"},"issues":{"type":"array","items":{"type":"string"}}}}},"note":{"type":"string"}}},"transportSecurity":{"type":"object","properties":{"mtaSts":{"type":"object"},"tlsRpt":{"type":"object"},"bimi":{"type":"object"}}},"classification":{"type":"object","properties":{"disposable":{"type":"boolean"},"disposableMatch":{"type":["object","null"]},"freeProvider":{"type":"boolean"},"roleAccount":{"type":"boolean"},"mailProvider":{"type":["string","null"]}}},"catchAll":{"type":"object","properties":{"determinable":{"type":"boolean","const":false},"likelihood":{"type":"string"},"basis":{"type":"array","items":{"type":"string"}},"method":{"type":"string"}}},"breakdown":{"type":"array","items":{"type":"object","properties":{"signal":{"type":"string"},"delta":{"type":"integer"},"reason":{"type":"string"}},"required":["signal","delta","reason"]}},"scoringMethod":{"type":"string"},"failedLookups":{"type":"array","items":{"type":"object","properties":{"lookup":{"type":"string"},"error":{"type":"string"}}}},"warnings":{"type":"array","items":{"type":"string"},"description":"Human-readable notes about partial results. Any sub-lookup that failed is described here and its field is null rather than falsely reported as an empty/negative result."}}}}}},"400":{"description":"Malformed input. Validated before the payment challenge, so this costs nothing.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"402":{"description":"Payment required. The `PAYMENT-REQUIRED` response header contains the base64 x402 challenge.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Target refused by the SSRF/abuse guard (private, loopback, link-local, cloud-metadata, or a disallowed scheme/port).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The named host or domain does not exist (NXDOMAIN).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"413":{"description":"Request body too large.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"422":{"description":"Input was well-formed but cannot be acted on (for example a hostname with no address records).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"500":{"description":"Internal error. Settlement is skipped, so the caller is not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The payment facilitator could not be reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}}}}},"/tls":{"post":{"tags":["tls"],"summary":"Certificate and HTTPS security posture, graded A–F","description":"**Price: $0.004** per call, paid with x402 (USDC on Base, CAIP-2 `eip155:8453`). An unpaid request returns HTTP 402 with a `PAYMENT-REQUIRED` header carrying the challenge; any x402-capable client pays and retries automatically. Failed work (any 4xx/5xx) is never charged for.\n\n**How the certificate is read.** A Worker's `fetch()` exposes nothing about the peer certificate and refuses outright to connect to a host whose certificate does not validate — so the two cases you most want to inspect (expired, self-signed) are the ones it cannot report on. netintel instead opens a raw TCP socket and performs its own TLS 1.2 ClientHello, reading the `Certificate` message from the server's first flight in the clear and parsing the X.509 DER directly. This works on `expired.badssl.com` and `self-signed.badssl.com`.\n\n**What you get:** subject, issuer, all SANs, validity window, days until expiry, serial number (hex and decimal), signature algorithm, public-key algorithm and size, SHA-256/SHA-1 fingerprints, validation level (DV/OV/EV), key usage, EKU, OCSP/CRL URLs, embedded SCT count, the full presented chain, RFC 6125 wildcard-aware hostname matching, TLS 1.0–1.3 support probed with separate handshakes, negotiated cipher with forward-secrecy and AEAD flags, ALPN, the redirect chain, and every security header graded with per-header reasons.\n\n**What it deliberately does not claim.** No trust-path validation against a root store, no signature verification, and no OCSP/CRL fetch — Workers have no root store and we do not complete the handshake. Those fields are `null` and named in `unavailableFields`, never guessed. `validity.expired` and `hostnameMatch` are computed locally and are reliable.\n\n**Abuse guard.** Private, loopback, link-local, CGNAT, reserved and cloud-metadata targets (including `169.254.169.254`) are refused with 403, as are non-HTTP(S) schemes and non-TLS ports. Hostnames are resolved and *every* resulting address re-checked before connecting, which defeats DNS rebinding, and the connection is made to the pinned address with the hostname supplied only as SNI. Redirects are re-validated at every hop.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"host":{"type":"string","description":"Hostname or http(s) URL.","examples":["github.com","https://cloudflare.com/"]},"port":{"type":"integer","default":443,"description":"Must be a TLS port. Allowed: 443, 465, 636, 853, 990, 993, 995, 2083, 2087, 2096, 4443, 5061, 8443, 8843, 9443, 10443."},"probeVersions":{"type":"boolean","default":true,"description":"Probe TLS 1.0–1.3 support with two extra handshakes."},"httpHeaders":{"type":"boolean","default":true,"description":"Also fetch over HTTPS and grade security headers."}},"required":["host"]},"examples":{"healthy":{"summary":"A well-configured host","value":{"host":"github.com"}},"expired":{"summary":"Expired certificate (fetch() cannot see this)","value":{"host":"expired.badssl.com"}},"selfSigned":{"summary":"Self-signed certificate","value":{"host":"self-signed.badssl.com"}},"certOnly":{"summary":"Skip the HTTP stage","value":{"host":"cloudflare.com","httpHeaders":false,"probeVersions":false}},"refused":{"summary":"Refused by the guard (returns 403)","value":{"host":"http://169.254.169.254/"}}}}}},"responses":{"200":{"description":"Success.","headers":{"PAYMENT-RESPONSE":{"description":"Base64 settlement receipt from the facilitator.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"target":{"type":"object","properties":{"hostname":{"type":"string"},"port":{"type":"integer"},"resolvedAddresses":{"type":"array","items":{"type":"string"}},"connectedTo":{"type":"string"}}},"grade":{"type":["string","null"],"enum":["A+","A","B","C","D","E","F",null]},"score":{"type":["integer","null"]},"certificate":{"type":["object","null"],"properties":{"version":{"type":"string"},"serialNumber":{"type":"string"},"serialNumberDecimal":{"type":"string"},"subject":{"type":"object","properties":{"commonName":{"type":["string","null"]},"organization":{"type":["string","null"]},"country":{"type":["string","null"]},"dn":{"type":"string"}}},"issuer":{"type":"object","properties":{"commonName":{"type":["string","null"]},"organization":{"type":["string","null"]},"dn":{"type":"string"}}},"validity":{"type":"object","properties":{"notBefore":{"type":["string","null"],"format":"date-time"},"notAfter":{"type":["string","null"],"format":"date-time"},"daysUntilExpiry":{"type":["integer","null"]},"expired":{"type":["boolean","null"]},"notYetValid":{"type":["boolean","null"]},"lifetimeDays":{"type":["integer","null"]}}},"signatureAlgorithm":{"type":"object","properties":{"name":{"type":"string"},"oid":{"type":"string"},"hash":{"type":["string","null"]},"weak":{"type":"boolean"}}},"publicKey":{"type":"object","properties":{"algorithm":{"type":"string"},"keySize":{"type":["integer","null"]},"curve":{"type":"string"},"exponent":{"type":"string"},"weak":{"type":"boolean"}}},"subjectAltNames":{"type":"array","items":{"type":"string"}},"hostnameMatch":{"type":"object","properties":{"matches":{"type":"boolean"},"matchedName":{"type":["string","null"]},"viaWildcard":{"type":"boolean"},"usedCommonNameFallback":{"type":"boolean"}}},"isSelfSigned":{"type":"boolean"},"isCa":{"type":"boolean"},"validationLevel":{"type":["string","null"],"enum":["DV","OV","IV","EV",null]},"keyUsage":{"type":"array","items":{"type":"string"}},"extendedKeyUsage":{"type":"array","items":{"type":"string"}},"ocspUrls":{"type":"array","items":{"type":"string"}},"crlUrls":{"type":"array","items":{"type":"string"}},"embeddedSctCount":{"type":["integer","null"]},"fingerprints":{"type":"object","properties":{"sha256":{"type":"string"},"sha1":{"type":["string","null"]}}}}},"chain":{"type":"array","items":{"type":"object","properties":{"position":{"type":"integer"},"role":{"type":"string"},"subjectCommonName":{"type":["string","null"]},"issuerCommonName":{"type":["string","null"]},"notAfter":{"type":["string","null"]},"daysUntilExpiry":{"type":["integer","null"]},"sha256Fingerprint":{"type":["string","null"]}}}},"handshake":{"type":["object","null"],"properties":{"completed":{"type":"boolean"},"connectedTo":{"type":"string"},"sni":{"type":"string"},"negotiatedVersion":{"type":["string","null"]},"cipherSuite":{"type":["string","null"]},"forwardSecrecy":{"type":["boolean","null"]},"aead":{"type":["boolean","null"]},"alpn":{"type":["string","null"]},"ocspStapled":{"type":"boolean"},"handshakeMs":{"type":"integer"},"alert":{"type":["object","null"],"properties":{"level":{"type":"string"},"description":{"type":"string"},"code":{"type":"integer"}}}}},"supportedVersions":{"type":["object","null"],"properties":{"TLSv1.3":{"type":["boolean","null"]},"TLSv1.2":{"type":["boolean","null"]},"TLSv1.1":{"type":["boolean","null"]},"TLSv1.0":{"type":["boolean","null"]},"method":{"type":"string"}}},"certificateIssues":{"type":"array","items":{"type":"string"}},"certificateScore":{"type":["integer","null"]},"verification":{"type":["object","null"],"properties":{"trustPathVerified":{"type":"boolean","const":false},"signatureVerified":{"type":"boolean","const":false},"revocationChecked":{"type":"boolean","const":false},"note":{"type":"string"}}},"http":{"type":["object","null"],"properties":{"reachable":{"type":"boolean"},"finalStatus":{"type":["integer","null"]},"redirectCount":{"type":"integer"},"finalUrl":{"type":["string","null"]},"negotiatedHttpVersion":{"type":["string","null"]},"httpVersionSource":{"type":"string"},"redirectChain":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"status":{"type":"integer"},"location":{"type":["string","null"]},"server":{"type":["string","null"]}}}}}},"securityHeaders":{"type":["object","null"],"properties":{"grade":{"type":"string","enum":["A+","A","B","C","D","E","F"]},"score":{"type":"integer"},"reasons":{"type":"array","items":{"type":"object","properties":{"header":{"type":"string"},"points":{"type":"integer"},"severity":{"type":"string"},"reason":{"type":"string"}}}},"headers":{"type":"object","additionalProperties":{"type":["string","null"]}},"analysis":{"type":"object","properties":{"hsts":{"type":"object","properties":{"present":{"type":"boolean"},"maxAge":{"type":["integer","null"]},"includeSubDomains":{"type":"boolean"},"preload":{"type":"boolean"},"issues":{"type":"array","items":{"type":"string"}}}},"csp":{"type":"object","properties":{"present":{"type":"boolean"},"strength":{"type":"string"},"usesNonceOrHash":{"type":"boolean"},"weaknesses":{"type":"array","items":{"type":"object","properties":{"severity":{"type":"string"},"directive":{"type":"string"},"issue":{"type":"string"}}}}}}}},"gradingMethod":{"type":"string"}}},"unavailableFields":{"type":"object","description":"Fields a Worker cannot populate, named explicitly so no value is ever fabricated."},"warnings":{"type":"array","items":{"type":"string"},"description":"Human-readable notes about partial results. Any sub-lookup that failed is described here and its field is null rather than falsely reported as an empty/negative result."}}}}}},"400":{"description":"Malformed input. Validated before the payment challenge, so this costs nothing.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"402":{"description":"Payment required. The `PAYMENT-REQUIRED` response header contains the base64 x402 challenge.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Target refused by the SSRF/abuse guard (private, loopback, link-local, cloud-metadata, or a disallowed scheme/port).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The named host or domain does not exist (NXDOMAIN).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"413":{"description":"Request body too large.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"422":{"description":"Input was well-formed but cannot be acted on (for example a hostname with no address records).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"500":{"description":"Internal error. Settlement is skipped, so the caller is not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The payment facilitator could not be reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}}}}},"/ip":{"post":{"tags":["ip"],"summary":"IP / CIDR / hostname intelligence with ASN and blocklist status","description":"**Price: $0.002** per call, paid with x402 (USDC on Base, CAIP-2 `eip155:8453`). An unpaid request returns HTTP 402 with a `PAYMENT-REQUIRED` header carrying the challenge; any x402-capable client pays and retries automatically. Failed work (any 4xx/5xx) is never charged for.\n\nAccepts a bare IPv4 or IPv6 address, a CIDR block, or a hostname to resolve first.\n\n- **Network class** — public, private, loopback, link-local, CGNAT, reserved, documentation, benchmarking, multicast or broadcast, with the governing RFC and the matching range. Cloud-metadata addresses are flagged.\n- **Reverse DNS** — the PTR record, plus a *forward-confirmed* check (does the PTR hostname resolve back to this address?), which many mail servers require.\n- **ASN** — AS number, AS name, organisation, announced prefix, RIR and country, from Team Cymru's DNS service, plus the upstream peer ASNs.\n- **Blocklists** — six DNS blocklists queried concurrently. Lists that refuse queries from public resolvers (Spamhaus ZEN and CBL) are reported in `blocklists.unavailable` with the reason and are **never** counted as clean, because 'we were not allowed to ask' is not the same as 'not listed'.\n\nPrivate addresses are perfectly acceptable input and are described in full — netintel simply never opens a connection to any address given to this endpoint, so it cannot be used to probe a network.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":"string","maxLength":260,"description":"IPv4, IPv6, CIDR block, or hostname.","examples":["8.8.8.8","2606:4700::1111","10.0.0.0/8","github.com"]},"dnsbl":{"type":"boolean","default":true,"description":"Query DNS blocklists (IPv4 public addresses only)."}},"required":["ip"]},"examples":{"publicV4":{"summary":"Public IPv4","value":{"ip":"8.8.8.8"}},"v6":{"summary":"IPv6","value":{"ip":"2606:4700:4700::1111"}},"cidr":{"summary":"CIDR block","value":{"ip":"192.168.0.0/16"}},"metadata":{"summary":"Cloud metadata address — reported, never connected to","value":{"ip":"169.254.169.254"}},"hostname":{"summary":"Hostname, resolved first","value":{"ip":"github.com"}}}}}},"responses":{"200":{"description":"Success.","headers":{"PAYMENT-RESPONSE":{"description":"Base64 settlement receipt from the facilitator.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"input":{"type":"string"},"ip":{"type":"string"},"version":{"type":"string","enum":["IPv4","IPv6"]},"resolvedFrom":{"type":["object","null"],"properties":{"hostname":{"type":"string"},"allAddresses":{"type":"array","items":{"type":"string"}},"selected":{"type":"string"}}},"cidr":{"type":["object","null"],"properties":{"block":{"type":"string"},"prefixLength":{"type":"integer"},"networkAddress":{"type":"string"},"firstAddress":{"type":"string"},"lastAddress":{"type":"string"},"totalAddresses":{"type":"string"},"usableHosts":{"type":"string"}}},"network":{"type":"object","properties":{"class":{"type":"string","enum":["public","private","loopback","link-local","cgnat","reserved","documentation","benchmarking","multicast","broadcast","ipv4-mapped"]},"scope":{"type":"string"},"description":{"type":"string"},"isPublic":{"type":"boolean"},"isCloudMetadata":{"type":"boolean"},"specialRange":{"type":["string","null"]}}},"reverseDns":{"type":"object","properties":{"queried":{"type":"string"},"present":{"type":["boolean","null"]},"hostnames":{"type":"array","items":{"type":"string"}},"primary":{"type":["string","null"]},"error":{"type":["string","null"]}}},"forwardConfirmedReverseDns":{"type":"object","properties":{"checked":{"type":"boolean"},"confirmed":{"type":["boolean","null"]},"hostname":{"type":"string"},"forwardAddresses":{"type":"array","items":{"type":"string"}},"note":{"type":"string"}}},"asn":{"type":["object","null"],"properties":{"asn":{"type":["integer","null"]},"asnText":{"type":["string","null"]},"asName":{"type":["string","null"]},"organization":{"type":["string","null"]},"prefix":{"type":["string","null"]},"countryCode":{"type":["string","null"]},"registry":{"type":["string","null"]},"allocated":{"type":["string","null"]},"upstreamPeers":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":"string"},"error":{"type":["string","null"]}}},"blocklists":{"type":["object","null"],"properties":{"checked":{"type":"integer"},"listedCount":{"type":"integer"},"clean":{"type":"boolean"},"listedOn":{"type":"array","items":{"type":"string"}},"results":{"type":"array","items":{"type":"object","properties":{"zone":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["listed","not-listed","unavailable","error"]},"listed":{"type":["boolean","null"]},"returnCodes":{"type":"array","items":{"type":"string"}},"reasons":{"type":"array","items":{"type":"string"}}}}},"unavailable":{"type":"array","items":{"type":"object","properties":{"zone":{"type":"string"},"name":{"type":"string"},"reason":{"type":"string"}}}}}},"outboundConnectionPolicy":{"type":"string"},"failedLookups":{"type":"array","items":{"type":"object","properties":{"lookup":{"type":"string"},"error":{"type":"string"}}}},"warnings":{"type":"array","items":{"type":"string"},"description":"Human-readable notes about partial results. Any sub-lookup that failed is described here and its field is null rather than falsely reported as an empty/negative result."}}}}}},"400":{"description":"Malformed input. Validated before the payment challenge, so this costs nothing.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"402":{"description":"Payment required. The `PAYMENT-REQUIRED` response header contains the base64 x402 challenge.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Target refused by the SSRF/abuse guard (private, loopback, link-local, cloud-metadata, or a disallowed scheme/port).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The named host or domain does not exist (NXDOMAIN).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"413":{"description":"Request body too large.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"422":{"description":"Input was well-formed but cannot be acted on (for example a hostname with no address records).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"500":{"description":"Internal error. Settlement is skipped, so the caller is not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The payment facilitator could not be reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}}}}},"/propagation":{"post":{"tags":["dns"],"summary":"Check one record across many public resolvers at once","description":"**Price: $0.005** per call, paid with x402 (USDC on Base, CAIP-2 `eip155:8453`). An unpaid request returns HTTP 402 with a `PAYMENT-REQUIRED` header carrying the challenge; any x402-capable client pays and retries automatically. Failed work (any 4xx/5xx) is never charged for.\n\nQueries the same record against up to 11 independently-operated public resolvers **concurrently** and reports each one's answers, TTLs, RCODE, latency and AD bit, then groups them into distinct answer sets and tells you whether they agree.\n\nAvailable resolver ids: cloudflare, google, opendns, adguard, adguardFiltered, dnssb, nextdns, controld, cleanbrowsing, dnspod, alidns. The default set is eight resolvers across eight different operators and two jurisdictions, which makes it useful for spotting regional DNS divergence and filtering as well as ordinary propagation lag.\n\nA resolver that fails is excluded from the consistency calculation and reported in `warnings[]` — it is never counted as a disagreement. Resolvers that cannot be reached from a Worker at all (Quad9, Comodo and others) are listed in `unavailableResolvers` with the technical reason.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","examples":["example.com"]},"type":{"type":"string","default":"A","enum":["A","NS","CNAME","SOA","PTR","MX","TXT","AAAA","SRV","NAPTR","SSHFP","DS","RRSIG","NSEC","DNSKEY","NSEC3","TLSA","SVCB","HTTPS","CAA"]},"resolvers":{"type":"array","maxItems":11,"items":{"type":"string","enum":["cloudflare","google","opendns","adguard","adguardFiltered","dnssb","nextdns","controld","cleanbrowsing","dnspod","alidns"]},"description":"Defaults to eight resolvers across eight operators."}},"required":["name"]},"examples":{"basic":{"summary":"Default resolver set","value":{"name":"example.com","type":"A"}},"mx":{"summary":"MX propagation","value":{"name":"github.com","type":"MX"}},"all":{"summary":"Every available resolver","value":{"name":"cloudflare.com","type":"A","resolvers":["cloudflare","google","opendns","adguard","adguardFiltered","dnssb","nextdns","controld","cleanbrowsing","dnspod","alidns"]}}}}}},"responses":{"200":{"description":"Success.","headers":{"PAYMENT-RESPONSE":{"description":"Base64 settlement receipt from the facilitator.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"consistent":{"type":"boolean"},"agreementRatio":{"type":["number","null"],"minimum":0,"maximum":1},"resolversQueried":{"type":"integer"},"resolversAnswered":{"type":"integer"},"resolversFailed":{"type":"integer"},"distinctAnswerSets":{"type":"integer"},"majorityAnswer":{"type":["object","null"],"properties":{"answers":{"type":"array","items":{"type":"string"}},"status":{"type":"string"},"resolverCount":{"type":"integer"}}},"answerSets":{"type":"array","items":{"type":"object","properties":{"rank":{"type":"integer"},"isMajority":{"type":"boolean"},"status":{"type":"string"},"answers":{"type":"array","items":{"type":"string"}},"resolverCount":{"type":"integer"},"resolvers":{"type":"array","items":{"type":"string"}},"ttlRange":{"type":["object","null"]}}}},"resolvers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"operator":{"type":"string"},"resolverIp":{"type":"string"},"filtering":{"type":"string"},"ok":{"type":"boolean"},"ms":{"type":["integer","null"]},"status":{"type":["string","null"]},"answers":{"type":["array","null"],"items":{"type":"string"}},"ttls":{"type":"array","items":{"type":["integer","null"]}},"agreesWithMajority":{"type":["boolean","null"]},"error":{"type":"string"}}}},"interpretation":{"type":"string"},"unavailableResolvers":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"reason":{"type":"string"}}}},"timing":{"type":"object","properties":{"totalMs":{"type":"integer"},"fastestMs":{"type":["integer","null"]},"slowestMs":{"type":["integer","null"]}}},"warnings":{"type":"array","items":{"type":"string"},"description":"Human-readable notes about partial results. Any sub-lookup that failed is described here and its field is null rather than falsely reported as an empty/negative result."}}}}}},"400":{"description":"Malformed input. Validated before the payment challenge, so this costs nothing.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"402":{"description":"Payment required. The `PAYMENT-REQUIRED` response header contains the base64 x402 challenge.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Target refused by the SSRF/abuse guard (private, loopback, link-local, cloud-metadata, or a disallowed scheme/port).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The named host or domain does not exist (NXDOMAIN).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"413":{"description":"Request body too large.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"422":{"description":"Input was well-formed but cannot be acted on (for example a hostname with no address records).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"500":{"description":"Internal error. Settlement is skipped, so the caller is not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The payment facilitator could not be reached.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}}}}}},"components":{"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","examples":["invalid_target"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["code","message"]}},"required":["error"]}},"securitySchemes":{"x402":{"type":"http","scheme":"x402","description":"x402 v2 micropayment. Call the endpoint with no credentials; the 402 response carries a `PAYMENT-REQUIRED` header with a base64 challenge naming the amount, asset (USDC), network (`eip155:8453`, Base mainnet) and recipient. Sign an EIP-3009 transfer authorisation and retry with the `X-PAYMENT` header. Libraries such as `@x402/fetch` do this transparently."}}},"security":[{"x402":[]}],"externalDocs":{"description":"x402 protocol","url":"https://x402.org"}}