> ## 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.

# List planned internal-link changes

> List a website's planned, made, confirmed and dismissed internal-link changes with what each check saw.

`list_internal_link_changes`

List a website's planned, made, confirmed and dismissed internal-link changes with what each check saw. Reading never checks a page.

> [!NOTE]
>
> This command name is absent from deployment evidence dated 2026-10-17. Hosted availability for this current definition is unverified; inspect your connected catalog before invoking it. Verify the command and its input schema in the selected environment.

| Access | Behavior |
| - | - |
| `watches:read` | Reads saved data |

This read does not start a verification job.

## Example request

Connect through [MCP](/guides/connect-mcp.md), [CLI](/guides/connect-cli.md), or [HTTP](/guides/connect-http.md). Replace example identifiers with records from your workspace.

```json MCP theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_internal_link_changes",
    "arguments": {
      "projectId": "prj_example",
      "state": "published"
    }
  }
}
```

```bash CLI theme={null}
agentlinkops call list_internal_link_changes --args '{"projectId":"prj_example","state":"published"}'
```

```bash HTTP theme={null}
curl --fail-with-body https://app.agentlinkops.com/v1/commands/list_internal_link_changes \
  -H "Authorization: Bearer $AGENTLINKOPS_TOKEN" \
  -H 'Content-Type: application/json' \
  --data '{"projectId":"prj_example","state":"published"}'
```

## Returned result

Illustrative data validated against the documented response schema. IDs and dates are examples, not a live account capture. MCP returns this data in `structuredContent` and in a text content block; generic HTTP and CLI return the JSON result directly.

> **Full response example**
>
> ```json theme={null}
> {
>   "items": [
>     {
>       "id": "ilc_0123456789abcdef01234567",
>       "projectId": "prj_example",
>       "state": "verified",
>       "revision": 3,
>       "subject": {
>         "kind": "suggestion",
>         "id": "add_link_at_mention:https://example.com/guides/:https://example.com/guides/estate-inventory/",
>         "findingKind": null,
>         "sourceUrl": "https://example.com/guides/",
>         "targetUrl": "https://example.com/guides/estate-inventory/",
>         "pageUrl": "https://example.com/guides/",
>         "message": "“estate inventory” on this page already names the topic of /guides/estate-inventory/.",
>         "goal": "link"
>       },
>       "edit": {
>         "anchor": "estate inventory",
>         "passage": "Every executor should start with an estate inventory before paying any debts.",
>         "matchStart": 36,
>         "matchEnd": 52,
>         "phraseSource": "address",
>         "anchorBy": "product",
>         "anchorRef": null
>       },
>       "origin": {
>         "scanId": "ilr_example",
>         "sourceCheckedAt": "2026-10-15T12:01:00.000Z",
>         "sourceCaptureSha256": null
>       },
>       "dismissReason": null,
>       "note": null,
>       "externalRef": "https://github.com/example/site/pull/12",
>       "selectedBy": {
>         "kind": "member",
>         "id": "user_example"
>       },
>       "updatedBy": {
>         "kind": "member",
>         "id": "user_example"
>       },
>       "verification": {
>         "checkedAt": "2026-10-21T12:00:00.000Z",
>         "method": "page_check",
>         "requestId": "check-2026-10-21",
>         "state": "present",
>         "finalUrl": "https://example.com/guides/",
>         "captureSha256": null,
>         "anchorFound": "estate inventory",
>         "anchorMatches": true
>       },
>       "verifiedAt": "2026-10-21T12:00:00.000Z",
>       "lastCheckedAt": "2026-10-21T12:00:00.000Z",
>       "nextCheckAt": null,
>       "createdAt": "2026-10-15T13:00:00.000Z",
>       "updatedAt": "2026-10-21T12:00:00.000Z"
>     }
>   ],
>   "total": 1,
>   "nextCursor": null,
>   "counts": {
>     "byState": {
>       "selected": 0,
>       "published": 0,
>       "verified": 1,
>       "not_found": 0,
>       "dismissed": 0,
>       "resolved": 0,
>       "stale": 0
>     }
>   }
> }
> ```

## 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 |
| - | - | - | - |
| `projectId` | string | Required | project ID from create/list. minLength: `1`; maxLength: `200` |
| `state` | string | Optional | Resource state or saved-observation filter. values: `"selected"`, `"published"`, `"verified"`, `"not_found"`, `"dismissed"`, `"resolved"`, `"stale"` |
| `limit` | integer | Optional | Page/report row cap; see bounds. minimum: `1`; maximum: `100`; default: `50` |
| `cursor` | string | Optional | Opaque list cursor; omit initially. maxLength: `2048` |

### Validation and omitted values

Newest update first, with counts by state. Each change shows who chose it and what the last check or scan saw.

Reading never checks a page or starts a scan.

### Defaults when omitted

| Field | Default |
| - | - |
| `limit` | `50` |

## Output fields

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

* **`items`** (array, required): Records in this bounded page. maxItems: `100`
* **`total`** (integer, required): minimum: `0`; maximum: `9007199254740991`
* **`nextCursor`** (string / null, required).
* **`counts`** (object, required): additional fields rejected

> **All fields and nested objects**
>
> | Field | Type | Presence | Meaning and constraints |
> | - | - | - | - |
> | `items` | array | Required | Records in this bounded page. maxItems: `100` |
> | `items[].id` | string | Required | Resource identifier returned by the operation. |
> | `items[].projectId` | string | Required | Identifier returned by the related operation. minLength: `1`; maxLength: `200` |
> | `items[].state` | string | Required | Saved lifecycle or evidence state, as enumerated for this record. values: `"selected"`, `"published"`, `"verified"`, `"not_found"`, `"dismissed"`, `"resolved"`, `"stale"` |
> | `items[].revision` | integer | Required | Optimistic concurrency revision; supply it as expectedRevision on the next write. maximum: `9007199254740991`; exclusiveMinimum: `0` |
> | `items[].subject` | object | Required | additional fields rejected |
> | `items[].subject.kind` | string | Required | values: `"suggestion"`, `"finding"`, `"action"` |
> | `items[].subject.id` | string | Required | Resource identifier returned by the operation. |
> | `items[].subject.findingKind` | string / null | Required | |
> | `items[].subject.sourceUrl` | string / null | Required | |
> | `items[].subject.targetUrl` | string / null | Required | |
> | `items[].subject.pageUrl` | string | Required | |
> | `items[].subject.message` | string / null | Required | The suggestion or finding message, captured when it was selected. |
> | `items[].subject.goal` | string | Required | values: `"link"`, `"repair"`, `"unlink"`, `"page"` |
> | `items[].edit` | object | Required | additional fields rejected |
> | `items[].edit.anchor` | string / null | Required | |
> | `items[].edit.passage` | string / null | Required | |
> | `items[].edit.matchStart` | integer / null | Required | |
> | `items[].edit.matchEnd` | integer / null | Required | |
> | `items[].edit.phraseSource` | string / null | Required | |
> | `items[].edit.anchorBy` | string / null | Required | |
> | `items[].edit.anchorRef` | string / null | Required | |
> | `items[].origin` | object | Required | additional fields rejected |
> | `items[].origin.scanId` | string | Required | Identifier returned by the related operation. |
> | `items[].origin.sourceCheckedAt` | string / null | Required | |
> | `items[].origin.sourceCaptureSha256` | string / null | Required | |
> | `items[].dismissReason` | string / null | Required | |
> | `items[].note` | string / null | Required | |
> | `items[].externalRef` | string / null | Required | |
> | `items[].selectedBy` | object | Required | additional fields rejected |
> | `items[].selectedBy.kind` | string | Required | values: `"member"`, `"agent"` |
> | `items[].selectedBy.id` | string | Required | Resource identifier returned by the operation. |
> | `items[].updatedBy` | object | Required | additional fields rejected |
> | `items[].updatedBy.kind` | string | Required | values: `"member"`, `"agent"` |
> | `items[].updatedBy.id` | string | Required | Resource identifier returned by the operation. |
> | `items[].verification` | object / null | Required | |
> | `items[].verification.checkedAt` | string | Required | |
> | `items[].verification.method` | string | Required | values: `"page_check"`, `"scan"` |
> | `items[].verification.scanId` | string | Optional | Identifier returned by the related operation. |
> | `items[].verification.requestId` | string | Optional | Identifier returned by the related operation. |
> | `items[].verification.state` | string | Required | Saved lifecycle or evidence state, as enumerated for this record. values: `"present"`, `"absent"`, `"unknown"` |
> | `items[].verification.reason` | string | Optional | Recorded explanation; null when no explanation applies. |
> | `items[].verification.anchorFound` | string | Optional | |
> | `items[].verification.anchorMatches` | boolean | Optional | |
> | `items[].verification.finalUrl` | string / null | Optional | |
> | `items[].verification.captureSha256` | string / null | Optional | |
> | `items[].verification.targetHttpStatus` | integer / null | Optional | |
> | `items[].verification.targetWorks` | boolean / null | Optional | |
> | `items[].verifiedAt` | string / null | Required | |
> | `items[].lastCheckedAt` | string / null | Required | |
> | `items[].nextCheckAt` | string / null | Required | |
> | `items[].createdAt` | string | Required | |
> | `items[].updatedAt` | string | Required | |
> | `total` | integer | Required | minimum: `0`; maximum: `9007199254740991` |
> | `nextCursor` | string / null | Required | |
> | `counts` | object | Required | additional fields rejected |
> | `counts.byState` | object | Required | additional fields rejected |
> | `counts.byState.selected` | integer | Required | minimum: `0`; maximum: `9007199254740991` |
> | `counts.byState.published` | integer | Required | minimum: `0`; maximum: `9007199254740991` |
> | `counts.byState.verified` | integer | Required | minimum: `0`; maximum: `9007199254740991` |
> | `counts.byState.not_found` | integer | Required | minimum: `0`; maximum: `9007199254740991` |
> | `counts.byState.dismissed` | integer | Required | minimum: `0`; maximum: `9007199254740991` |
> | `counts.byState.resolved` | integer | Required | minimum: `0`; maximum: `9007199254740991` |
> | `counts.byState.stale` | integer | Required | minimum: `0`; maximum: `9007199254740991` |

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

## Errors and retries

Follow the error recovery before retrying this read. Preserve the selected workspace, project, filters and feed. Recovering a read does not require an idempotency key or another verification job. Operation-specific errors include `INTERNAL_LINK_CHANGES_UNAVAILABLE`, `INVALID_CURSOR`.

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

## HTTP resource routes

These existing resource routes share the operation’s domain behavior. Their parameter placement, status and response envelope can differ from generic invocation. See [HTTP route details](/reference/http/routes.md).

| Method and route | Success | Details |
| - | - | - |
| `GET /v1/internal-links/changes` | 200 | Supply projectId and optional state, numeric limit and cursor in the query. Reading never checks a page. |

## Continue

[save\_internal\_link\_change](/reference/commands/save_internal_link_change.md) · [verify\_internal\_link\_change](/reference/commands/verify_internal_link_change.md)

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


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.