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

# Check a link for free

> One free placement check with evidence and honest uncertainty.

`verify_link_free`

One free placement check with evidence and honest uncertainty. Supply a source page that should carry a link and the destination you care about; the source page is fetched once and the tool reports whether that page links to the destination in the HTML it served at that moment. Four states: success (link found, every occurrence with anchor and rel), valid-negative (a COMPLETE read contains no link; never a claim the link is gone), unknown (the web did not answer; never means the link was removed or lost), failed (the check never ran: invalid input, the anonymous daily limit, or service ,  never a verdict on the web). No account or any connection required. No browser rendering: a page that needs JavaScript to render returns unknown. Anonymous ceilings: 3 checks per UTC day per visitor, 1 concurrent, one page fetched per check, 15-minute result cache. Raw publisher HTML is never returned.

<Note>Anonymous hosted check. No account required.</Note>

| Access    | Behavior              |
| --------- | --------------------- |
| Anonymous | Writes or admits work |

The anonymous allowance is three checks per UTC day per visitor, one concurrent check and a fifteen-minute result cache. This inline result does not create a workspace, queued job or recurring monitor.

## Example request

Use the anonymous MCP endpoint at `/free/mcp` or HTTP `/free/check`.

<CodeGroup>
  ```json MCP theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "verify_link_free",
      "arguments": {
        "sourceUrl": "https://publisher.example.com/resources",
        "targetUrl": "https://example.com/guide"
      }
    }
  }
  ```

  ```bash HTTP theme={null}
  curl https://app.agentlinkops.com/free/check \
    -H 'Content-Type: application/json' \
    --data '{"sourceUrl":"https://publisher.example.com/resources","targetUrl":"https://example.com/guide"}'
  ```
</CodeGroup>

## Returned result

Illustrative data validated against the documented response schema. IDs and dates are examples, not a live account capture. MCP returns structured data with a Markdown explanation. The HTTP result also establishes an anonymous visitor cookie.

```json theme={null}
{
  "state": "success",
  "reason": "link_found",
  "requested_url": "https://publisher.example.com/resources",
  "inspected_url": "https://publisher.example.com/resources",
  "target_url": "https://example.com/guide",
  "scope": "exact",
  "checked_at": "2026-09-13T12:00:00.000Z",
  "complete": true,
  "occurrences": [
    {
      "targetUrl": "https://example.com/guide",
      "anchor": "Example",
      "rel": []
    }
  ],
  "checker_version": "example-checker",
  "uncertainty": [
    "This page links to https://example.com/guide in the HTML it served at 2026-09-13T12:00:00.000Z.",
    "Static HTML observation: JavaScript execution and visual visibility were not checked.",
    "Nothing here says anything about indexing, ranking or traffic."
  ],
  "result_id": "fc_example",
  "permalink": null,
  "cached": false
}
```

## Input fields

Omit optional fields when you do not want to supply them. Null is accepted only where listed. Unknown input properties are rejected.

| Field       | Type   | Presence | Meaning and constraints                                                                                                           |
| ----------- | ------ | -------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `sourceUrl` | string | Required | Public publisher page URL containing the placement to inspect. minLength: 1; maxLength: 8192                                      |
| `targetUrl` | string | Required | Public destination URL expected in the placement. minLength: 1; maxLength: 8192                                                   |
| `scope`     | string | Optional | URL matching rule: exact URL, domain, subdomain, or path prefix. default: "exact"; values: "exact", "domain", "subdomain", "path" |

### Validation and omitted values

This operation returns its result directly; it does not create a workspace job. Anonymous allowance is three checks per UTC day per visitor, one concurrent check, with a fifteen-minute result cache.

The failed state means the check did not run. Unknown and valid-negative are evidence outcomes and do not establish confirmed loss.

### Defaults when omitted

| Field   | Default   |
| ------- | --------- |
| `scope` | `"exact"` |

## Output fields

Fields inside optional or nullable parents apply only when that parent exists. [Common schema conventions](/reference/schemas) explain evidence states, empty lists and extensions.

| Field                     | Type          | Presence | Meaning and constraints                                                                                                    |
| ------------------------- | ------------- | -------- | -------------------------------------------------------------------------------------------------------------------------- |
| `state`                   | string        | Required | Saved lifecycle or evidence state, as enumerated for this record. values: "success", "valid-negative", "unknown", "failed" |
| `reason`                  | string        | Required | Recorded explanation; null when no explanation applies.                                                                    |
| `requested_url`           | string / null | Required | requested url recorded for this result.                                                                                    |
| `inspected_url`           | string / null | Required | inspected url recorded for this result.                                                                                    |
| `target_url`              | string / null | Required | Destination URL recorded in this evidence.                                                                                 |
| `scope`                   | string        | Required | scope recorded for this result.                                                                                            |
| `checked_at`              | string        | Required | UTC timestamp of the saved check.                                                                                          |
| `complete`                | boolean       | Required | complete recorded for this result.                                                                                         |
| `occurrences`             | array         | Required | occurrences recorded for this result.                                                                                      |
| `occurrences[].targetUrl` | string        | Required | target Url recorded for this result.                                                                                       |
| `occurrences[].anchor`    | string        | Required | anchor recorded for this result.                                                                                           |
| `occurrences[].rel`       | array         | Required | rel recorded for this result.                                                                                              |
| `checker_version`         | string / null | Required | checker version recorded for this result.                                                                                  |
| `uncertainty`             | array         | Required | uncertainty recorded for this result.                                                                                      |
| `failure`                 | string        | Optional | failure recorded for this result. values: "invalid\_input", "budget", "cooling", "service"                                 |
| `retry_at`                | string        | Optional | retry at recorded for this result.                                                                                         |
| `retry_after_seconds`     | number        | Optional | retry after seconds recorded for this result.                                                                              |
| `result_id`               | string        | Optional | result id recorded for this result.                                                                                        |
| `permalink`               | string / null | Optional | permalink recorded for this result.                                                                                        |
| `cached`                  | boolean       | Optional | cached recorded for this result.                                                                                           |

[Download input schema](/schemas/verify_link_free.input.json) · [Download output schema](/schemas/verify_link_free.output.json)

## Errors and retries

This command is not annotated idempotent. After a timeout, inspect existing state before repeating a write.

See [error recovery](/reference/errors) for status, scope, cooldown, cursor and retry handling. Unknown observations are result data and do not establish loss.

## HTTP resource routes

Use `POST /free/check`. HTTP also supports retrieving a cached anonymous result; see [anonymous HTTP result retrieval](/reference/http/protocol).

## Continue

Follow the [related workflow](/guides/first-result), inspect [capability status](/capability-status), or return to the [command index](/reference/index).
