# 402utils Link Checker

> 402utils Link Checker is a paid API for AI agents from 402utils.com, paid per call via x402, $0.002/call, status unknown (last checked 2026-10-12).

Checks a URL's HTTP status, redirect chain, final URL, latency, and content metadata with SSRF-safe hop-by-hop validation

## Facts

- Endpoint: GET https://402utils.com/v1/link-check?utm_source=zero.xyz
- Price: $0.002/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-12
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/402utils-link-checker-fb8c8978
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_ohxQxCnDLSAXxmIuC5i6U

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability 402utils-link-checker-fb8c8978
```

Example prompt: Can you check whether https://openai.com/blog/gpt-4 is still live, follow any redirects, and tell me the final URL and HTTP status it ends up at?

## When to prefer this

Use this endpoint when you need to validate a URL's liveness, trace redirects, or confirm the final destination before citing, embedding, or acting on a link. It is safer than a raw HTTP fetch because SSRF validation is applied on every redirect hop and response bodies are never downloaded, making it suitable for untrusted user-supplied URLs. Prefer it over DNS-only checks when you need HTTP-layer status, or over full page scrapers when you only need headers and routing.

## Known failure modes

- SSRF validation blocks private/internal IP targets — returns an error rather than a result
- Redirect chain exceeds 10 hops — truncatedRedirects is set to true and final hop is not fetched
- Target server times out — latency will be high and status may reflect a timeout error
- Invalid or non-HTTP(S) URL supplied — request is rejected with a validation error
- Server returns no Content-Type header — contentType field will be absent from response

## How this service works

Verify a link before you cite or use it: HTTP status, the full redirect chain, the final URL, latency, and the final Content-Type/Content-Length. Redirects are followed manually (max 10) with SSRF validation on every hop; probes with HEAD by default and falls back to GET automatically when a server rejects HEAD. A dead or broken target (404, 410, 500…) is a valid result, not an error. Response bodies are never downloaded.

## Output

Returns the original URL, the final URL after all redirects, the HTTP status of the final response, the method used (HEAD or GET), the full redirect chain as an array of URL+status pairs, wall-clock latency in milliseconds, Content-Type and Content-Length when available, and a flag indicating if the 10-redirect cap was hit.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET"
     ],
     "type": "string"
    },
    "queryParams": {
     "type": "object",
     "required": [
      "url"
     ],
     "properties": {
      "url": {
       "type": "string",
       "format": "uri",
       "description": "Public http(s) URL to check (required)."
      },
      "method": {
       "enum": [
        "HEAD",
        "GET"
       ],
       "type": "string",
       "default": "HEAD",
       "description": "Probe method, case-insensitive. HEAD retries as GET on 405/501."
      }
     },
     "description": "Query string only."
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "required": [
      "url",
      "finalUrl",
      "status",
      "method",
      "redirectChain",
      "latencyMs"
     ],
     "properties": {
      "url": {
       "type": "string",
       "description": "The URL that was checked, as given."
      },
      "method": {
       "enum": [
        "HEAD",
        "GET"
       ],
       "type": "string",
       "description": "Method actually used for the final request (GET after an automatic 405/501 fallback)."
      },
      "status": {
       "type": "integer",
       "description": "HTTP status of the final response (404/500… is a valid answer)."
      },
      "finalUrl": {
       "type": "string",
       "description": "Last URL actually fetched after redirects."
      },
      "latencyMs": {
       "type": "integer",
       "description": "Wall-clock ms across the whole chain."
      },
      "contentType": {
       "type": "string",
       "description": "Content-Type of the final response, when sent."
      },
      "contentLength": {
       "type": "integer",
       "description": "Content-Length of the final response, when parseable."
      },
      "redirectChain": {
       "type": "array",
       "items": {
        "type": "object",
        "required": [
         "url",
         "status"
        ],
        "properties": {
         "url": {
          "type": "string"
         },
         "status": {
      
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "url": "https://example.com/pricing",
  "method": "HEAD",
  "status": 200,
  "finalUrl": "https://example.com/pricing/",
  "latencyMs": 142,
  "contentType": "text/html; charset=utf-8",
  "contentLength": 5120,
  "redirectChain": [
   {
    "url": "https://example.com/pricing",
    "status": 301
   }
  ]
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/402utils-link-checker-fb8c8978/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from 402utils.com](https://www.zero.xyz/host/402utils.com/llms.txt)
