# Check links

Last updated: 2026-10-10

`POST /v1/check/links` checks 1 to 10 URLs in one call: status, redirect chain, final URL, `content_kind`, title and content hash for each, under one signed receipt. Price: US$0.005 per batch.

Use it to check the sources in a draft before you publish or hand it on.

## Request

```json
{ "urls": ["https://www.iana.org/help/example-domains", "https://www.iana.org/domains/reserved"] }
```

`urls` is a list of 1 to 10 http or https URLs, each at most 2,048 characters. Every URL is checked before payment; if any one is malformed, blocked or disallowed by robots.txt, the whole request is refused and not charged.

## Response

From the free sample (`GET /v1/sample/links`), shortened:

```json
{
  "results": [
    {
      "url": "https://vehcdj664efetfrsolne5umanq.srv.us/v1/sample/page",
      "final_url": "https://vehcdj664efetfrsolne5umanq.srv.us/v1/sample/page",
      "http_status": 200,
      "redirects": [],
      "content_kind": "real",
      "title": "Regional climate report 2025 (demo page)",
      "content_sha256": "0e429607…"
    },
    {
      "url": "https://vehcdj664efetfrsolne5umanq.srv.us/v1/sample/missing",
      "final_url": "https://vehcdj664efetfrsolne5umanq.srv.us/v1/sample/missing",
      "http_status": 404,
      "redirects": [],
      "content_kind": "http_error",
      "title": null,
      "content_sha256": "cb699046…"
    }
  ],
  "receipt": "eyJhbGciOiJFZERTQSIs…",
  "tier": "paid"
}
```

## Dead domains

A URL whose host name does not resolve is reported as a result: `content_kind` `http_error`, `http_status` null, and the batch is charged. If no URL in the batch resolves, the call gets 422 `host_not_found` and is not charged.

## PDF links

A live PDF link (status 2xx, content type `application/pdf`, on the same site as the URL) is reported with `content_kind` `pdf`. check/links does not read PDFs, so its `title` and `content_sha256` are null. To read a PDF's text or check a quote in it, use [fetch](/docs/fetch) or [verify/quote](/docs/verify-quote) on the full service.

## Links that are not read

check/links reads HTML, text and JSON only. Any other link (a PDF, an image, a download) with a 4xx or 5xx status is `http_error`, so a dead PDF reads as dead. Any link that redirects to another site is `off_site`, whatever its type, as for an HTML page. If the other site answers with a 4xx or 5xx status, the result also has `"off_site_error": true`, so a link that moved to a dead page is not missed; otherwise the field is left out. Where archive snapshots are on, a paid call also looks such a link up (the URL you sent) and adds `wayback`, as for a failed URL. A live link of another type on the same site is `unsupported_type`.

## Charging

If a URL turns out to be disallowed by robots.txt or rate limited after payment (for example after a redirect), the whole batch answers with an error and is not charged. See [Payments](/docs/payments).

A free-trial call covers at most 3 URLs. A larger batch is not run as a trial: it gets the normal 402 offer, with `details.reason` `trial_too_large`, and is not charged.
