> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pocketutils.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Down Checker

> Check whether a site is reachable, with HTTP status, latency, and resolved IP.

Makes a single HTTP(S) request to the URL (following up to 5 redirects) and reports whether it responded, with what status, how long it took, and which IP it resolved to. The request is made from PocketUtils' servers in India, so results reflect reachability from that vantage point.

<Info>
  **1 credit** per call · Typical response time \~140ms
</Info>

## Query parameters

<ParamField query="url" type="string" required>
  The URL to check. `https://` is assumed if the scheme is omitted.
</ParamField>

## Response

<ResponseField name="data" type="object" required>
  <Expandable title="properties" defaultOpen>
    <ResponseField name="url" type="string" required>
      The normalized URL that was tested.
    </ResponseField>

    <ResponseField name="testedFrom" type="string" required>
      Always `"India (Mumbai)"`.
    </ResponseField>

    <ResponseField name="httpsStatus" type="integer | null" required>
      The HTTP status code returned, including 4xx/5xx — any status counts as "reachable." `null` only when the request couldn't complete at all (DNS failure, connection refused, timeout).
    </ResponseField>

    <ResponseField name="responseTimeMs" type="integer | null" required>
      Round-trip time. `null` only when the hostname never resolved.
    </ResponseField>

    <ResponseField name="ipAddress" type="string | null" required>
      Resolved IPv4 address (falls back to whatever DNS returns if no A record exists). `null` if DNS resolution failed.
    </ResponseField>
  </Expandable>
</ResponseField>

<Note>
  A `null` `httpsStatus` with a non-null `ipAddress` means DNS resolved but the connection itself failed or timed out (15s timeout) — that's a genuinely down host, not a bad request. A `null` `ipAddress` means the domain doesn't resolve at all.
</Note>

## Errors

| Status | Cause                         |
| ------ | ----------------------------- |
| `400`  | `url` query parameter missing |

A target that's actually down is **not** an error — you get a `200` with `httpsStatus: null`. See the full [error reference](/errors) for the platform-level codes (`401`, `402`, `429`) that apply to every endpoint.

<RequestExample>
  ```bash cURL theme={null}
  curl "https://api.pocketutils.com/v1/down-check?url=https://example.com" \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```

  ```javascript JavaScript theme={null}
  const res = await fetch(
    "https://api.pocketutils.com/v1/down-check?url=https://example.com",
    { headers: { Authorization: "Bearer YOUR_API_KEY" } },
  );
  const { data } = await res.json();
  ```

  ```python Python theme={null}
  import requests

  res = requests.get(
      "https://api.pocketutils.com/v1/down-check",
      params={"url": "https://example.com"},
      headers={"Authorization": "Bearer YOUR_API_KEY"},
  )
  data = res.json()["data"]
  ```
</RequestExample>

<ResponseExample>
  ```json Site is up theme={null}
  {
    "success": true,
    "data": {
      "url": "https://example.com",
      "testedFrom": "India (Mumbai)",
      "httpsStatus": 200,
      "responseTimeMs": 214,
      "ipAddress": "93.184.216.34"
    }
  }
  ```

  ```json Site is down theme={null}
  {
    "success": true,
    "data": {
      "url": "https://this-domain-does-not-resolve.example",
      "testedFrom": "India (Mumbai)",
      "httpsStatus": null,
      "responseTimeMs": null,
      "ipAddress": null
    }
  }
  ```
</ResponseExample>


## Related topics

- [Introduction](/index.md)
- [Broken Link Checker](/api-reference/broken-links.md)
- [XBEL Decryptor](/api-reference/xbel-decrypt.md)
- [XBEL to HTML](/api-reference/xbel-to-html.md)
- [Quickstart](/quickstart.md)
