FETCHX402

LIVE

Uptime check

One-shot reachability: DNS, leaf TLS, and origin headers for one hostname in a single settle. Use when you need live up/degraded/down and must not guess. Child errors stay in-field; we do not invent data.

LIVE $0.015 USDC GET /v1/bundles/uptime-check

When to use

One-shot reachability: DNS, leaf TLS, and origin headers for one hostname in a single settle. Use when you need live up/degraded/down and must not guess. Child errors stay in-field; we do not invent data.

Try

Opens the live endpoint. Unpaid browser requests show the paywall; agents should send Accept: application/json.

/v1/bundles/uptime-check?domain=example.com

Full URL: https://api.fetchx402.com/v1/bundles/uptime-check?domain=example.com

Request

GET /v1/bundles/uptime-check · x402 V2 · USDC on Base · $0.015 USDC

x402 V2 curl

Expect HTTP 402 and a PAYMENT-REQUIRED header until you retry with PAYMENT-SIGNATURE.

curl -i -H "Accept: application/json" "https://api.fetchx402.com/v1/bundles/uptime-check?domain=example.com"

Cursor mcp.json

Intended config for @fetchx402/mcp. This is not npm @x402/fetch (a payment fetch wrapper).

{
  "mcpServers": {
    "fetchx402": {
      "args": [
        "-y",
        "@fetchx402/mcp"
      ],
      "command": "npx",
      "env": {
        "X402_PRIVATE_KEY": "0xYOUR_SPENDING_KEY"
      }
    }
  }
}

Query parameters

Name Type Required Description
domain string required Public fully-qualified domain name. Same Domain guards as the child tools. IPs, localhost, and internal/mDNS names are rejected. v1 always probes https://{domain}/ on :443.

Success fields

Field Type Description
domain string Normalized FQDN that was queried
verdict string up when DNS, TLS, and HTTPS succeed with a currently valid matching cert and HTTP status < 500; degraded when the origin answers but TLS is expired, not yet valid, or hostname-mismatched, or HTTP status is >= 500; down when any child is an error object
dns object DNS Explorer JSON, or {error: {code, message}} if that child failed
ssl object SSL Inspector JSON, or {error: {code, message}} if that child failed
headers object HTTP Headers JSON, or {error: {code, message}} if that child failed

Example

Frozen fixture. Not a live lookup.

{
  "dns": {
    "domain": "example.com",
    "rcode": "NOERROR",
    "records": [
      {
        "address": "104.20.23.154"
      }
    ],
    "resolver": "1.1.1.1",
    "ttl": 20,
    "type": "A"
  },
  "domain": "example.com",
  "headers": {
    "domain": "example.com",
    "headers": {
      "access-control-allow-origin": null,
      "cache-control": "max-age=604800",
      "content-security-policy": null,
      "content-security-policy-report-only": null,
      "content-type": "text/html",
      "cross-origin-opener-policy": null,
      "cross-origin-resource-policy": null,
      "location": null,
      "permissions-policy": null,
      "referrer-policy": null,
      "server": "ECS (nyb/1D2A)",
      "strict-transport-security": "max-age=31536000",
      "www-authenticate": null,
      "x-content-type-options": null,
      "x-frame-options": null,
      "x-powered-by": null
    },
    "method": "HEAD",
    "peer_ip": "23.215.0.138",
    "status": 200,
    "url": "https://example.com/"
  },
  "ssl": {
    "cipher": "aes_256_gcm_sha384",
    "domain": "example.com",
    "expired": false,
    "fingerprint_sha256": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
    "hostname_match": true,
    "issuer": "CN=DigiCert Global G3 TLS ECC SHA384 2020 CA1, O=DigiCert Inc, C=US",
    "not_after": "2027-01-15T23:59:59Z",
    "not_before": "2026-01-15T00:00:00Z",
    "not_yet_valid": false,
    "peer_ip": "23.215.0.138",
    "port": 443,
    "sans": [
      "www.example.org",
      "example.com",
      "example.net",
      "example.org"
    ],
    "serial": "0f1a2b3c4d5e6f708192a3b4c5d6e7f8",
    "signature_algorithm": "ecdsa-with-SHA384",
    "sni": "example.com",
    "subject": "CN=www.example.org, O=Internet Corporation for Assigned Names and Numbers, C=US",
    "tls_version": "tlsv1.3"
  },
  "verdict": "up"
}

Payment

Unpaid requests return HTTP 402 with a base64 PAYMENT-REQUIRED header. Retry the same URL with PAYMENT-SIGNATURE. Settlement completes before the tool runs. Full handshake and shared payment errors: Payments.

Errors

HTTP Code When
400 invalid_domain Domain is missing, malformed, an IP address, or a blocked/internal name
402 payment_required Missing or invalid PAYMENT-SIGNATURE; decode the PAYMENT-REQUIRED header
503 overloaded Tool concurrency cap reached; retry shortly
504 uptime_check_timeout Uptime check bundle timed out
409 payment_in_progress The same authorization nonce is already being settled; retry shortly
429 rate_limited Too many requests from this client
503 settlement_uncertain Settlement is unconfirmed; retry with the same PAYMENT-SIGNATURE
503 facilitator_unavailable Payment facilitator unavailable
503 facilitator_misconfigured Payment facilitator is not configured
503 facilitator_unauthorized Payment facilitator rejected credentials
503 ledger_unavailable Payment ledger unavailable
503 payment_unavailable Payment processing unavailable

Guarantees

  • Settlement finishes before the tool executes. Uncertain settlement fails closed (HTTP 503).
  • Lookups run on our nodes — no third-party data API wrappers.
  • Localhost, IP literals, and metadata hostnames are rejected.
  • Execution is timeout-bounded and concurrency-capped.