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

# Import Verification tools

> Inputs, access and errors for 6 registered import verification tools.

Generated 2026-09-13T03:11:22.248Z from `src/tool-registry.js` by `scripts/export-mint-tool-docs.mjs`. 6 of 62 registered tools. Authenticated cloud tools have REST endpoints under `/v1/`. The anonymous `verify_link_free` tool uses `POST /free/check` and `/free/mcp`.

## get\_candidate\_verification

Read a selected candidate check, immutable job observation, source-check usage and local-reference lineage. Candidate latest evidence may refer to a later explicitly requested check.

* **State**: Registered and locally tested.
* **Access**: read · scope: `discovery:read, watches:read` · defined at `src/tool-registry.js:46`

| Input   | Type   | Required | Notes                                                           |
| ------- | ------ | -------- | --------------------------------------------------------------- |
| `jobId` | string | yes      | Identifier of the job returned by its create or list operation. |

**Error codes**: `CANDIDATE_VERIFICATION_NOT_FOUND` · `CHECK_COOLDOWN` · `DISCOVERY_CANDIDATE_NOT_FOUND` · `IDEMPOTENCY_CONFLICT` · `INVALID_CANDIDATE_VERIFICATION_INPUT` · `WATCH_BUSY`

## import\_backlinks

Store a backlink export the user already owns, from Ahrefs, Search Console, Semrush, Majestic, Moz, DataForSEO, Linkody or a generic CSV, as discovery candidates. Costs nothing and buys nothing: the user already paid their supplier. The supplier is named in provenance and its dates stay supplier dates, separate from any check we run. An import NEVER claims complete coverage, because nothing in an export says whether it is the whole result or one filtered page. Rejected rows come back with the response, identified by position; none is dropped. Re-importing the same rows returns the same run rather than duplicating candidates. Imported rows are not verified links, are not enrolled in monitoring, and never enter a shared corpus.

* **State**: Registered and locally tested.
* **Access**: write · scope: `discovery:write` · defined at `src/tool-registry.js:72`

| Input                 | Type         | Required | Notes                                                                                                                                                     |
| --------------------- | ------------ | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `projectId`           | string       | yes      | Identifier of the project returned by its create or list operation.                                                                                       |
| `supplier`            | string       | yes      | Source of imported candidate evidence, retained as provenance.; one of: ahrefs, google\_search\_console, semrush, majestic, moz, dataforseo, linkody, csv |
| `targetKind`          | string       | yes      | Whether target identifies an exact URL or a domain.; one of: domain, exact\_url                                                                           |
| `target`              | string       | yes      | Exact URL or domain to query, interpreted according to targetKind.                                                                                        |
| `includeSubdomains`   | boolean      | yes      | Include subdomains of the selected domain in this query.                                                                                                  |
| `backlinksStatus`     | string       | yes      | Supplier-reported backlink status filter; this is not Linktrail verification.; one of: live, lost, all                                                    |
| `rows`                | array        | yes      | Candidate rows supplied by the caller; importing does not enroll monitoring.                                                                              |
| `supplierGeneratedAt` | string\|null | no       | Supplier export generation timestamp, distinct from import time.                                                                                          |
| `idempotencyKey`      | string       | no       | Caller-generated key reused only for retries of the same operation and arguments in this workspace.                                                       |

**Side effects**: write

**Error codes**: `DISCOVERY_RUN_NOT_FOUND` · `INVALID_CURSOR` · `PROVIDER_DISABLED` · `PROVIDER_NOT_CONFIGURED`

## import\_link\_watches

Import up to 100 known backlinks; inspect per-row errors.

* **State**: Registered.
* **Access**: write · scope: `watches:write` · defined at `src/tool-registry.js:82`

| Input       | Type   | Required | Notes                                                                              |
| ----------- | ------ | -------- | ---------------------------------------------------------------------------------- |
| `projectId` | string | yes      | Identifier of the project returned by its create or list operation.                |
| `watches`   | array  | yes      | Placements to enroll in recurring monitoring; each completed check uses allowance. |

**Side effects**: write

**Error codes**: `CHECK_COOLDOWN` · `CHECK_QUOTA_EXCEEDED` · `CURSOR_EXPIRED` · `IDEMPOTENCY_CONFLICT` · `INVALID_CURSOR` · `INVALID_GRANT` · `INVALID_INPUT` · `INVALID_LIMIT` · `INVALID_URL` · `JOB_NOT_FOUND` · `PROJECT_GRANT_RESTRICTED` · `PROJECT_NOT_FOUND` · `READ_ONLY_MEMBER` · `UNAUTHORIZED` · `WATCH_BUSY` · `WATCH_NOT_FOUND` · `WATCH_PAUSED` · `WATCH_QUOTA_EXCEEDED` · `WORKSPACE_ACCESS_DENIED`

## request\_link\_check

Queue metered verification. Reuse the idempotency key when retrying this request.

* **State**: Registered and locally tested.
* **Access**: write · scope: `watches:write` · defined at `src/tool-registry.js:84`

| Input            | Type   | Required | Notes                                                                                               |
| ---------------- | ------ | -------- | --------------------------------------------------------------------------------------------------- |
| `watchId`        | string | yes      | Identifier of the watch returned by its create or list operation.                                   |
| `idempotencyKey` | string | yes      | Caller-generated key reused only for retries of the same operation and arguments in this workspace. |

**Side effects**: write; dispatchJobs(jobId)

**Error codes**: `CHECK_COOLDOWN` · `CHECK_QUOTA_EXCEEDED` · `CURSOR_EXPIRED` · `IDEMPOTENCY_CONFLICT` · `INVALID_CURSOR` · `INVALID_GRANT` · `INVALID_INPUT` · `INVALID_LIMIT` · `INVALID_URL` · `JOB_NOT_FOUND` · `PROJECT_GRANT_RESTRICTED` · `PROJECT_NOT_FOUND` · `READ_ONLY_MEMBER` · `UNAUTHORIZED` · `WATCH_BUSY` · `WATCH_NOT_FOUND` · `WATCH_PAUSED` · `WATCH_QUOTA_EXCEEDED` · `WORKSPACE_ACCESS_DENIED`

## get\_check\_job

Read progress and usage reservation for an asynchronous source-link check job.

* **State**: Registered and locally tested.
* **Access**: read · scope: `watches:read` · defined at `src/tool-registry.js:85`

| Input   | Type   | Required | Notes                                                           |
| ------- | ------ | -------- | --------------------------------------------------------------- |
| `jobId` | string | yes      | Identifier of the job returned by its create or list operation. |

**Error codes**: `CHECK_COOLDOWN` · `CHECK_QUOTA_EXCEEDED` · `CURSOR_EXPIRED` · `IDEMPOTENCY_CONFLICT` · `INVALID_CURSOR` · `INVALID_GRANT` · `INVALID_INPUT` · `INVALID_LIMIT` · `INVALID_URL` · `JOB_NOT_FOUND` · `PROJECT_GRANT_RESTRICTED` · `PROJECT_NOT_FOUND` · `READ_ONLY_MEMBER` · `UNAUTHORIZED` · `WATCH_BUSY` · `WATCH_NOT_FOUND` · `WATCH_PAUSED` · `WATCH_QUOTA_EXCEEDED` · `WORKSPACE_ACCESS_DENIED`

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

* **State**: Registered and locally tested.
* **Access**: write · scope: `none` · defined at `src/tool-registry.js:110`

| Input       | Type   | Required | Notes                                                                                                    |
| ----------- | ------ | -------- | -------------------------------------------------------------------------------------------------------- |
| `sourceUrl` | string | yes      | Public publisher page URL containing the placement to inspect.                                           |
| `targetUrl` | string | yes      | Public destination URL expected in the placement.                                                        |
| `scope`     | string | no       | URL matching rule: exact URL, domain, subdomain, or path prefix.; one of: exact, domain, subdomain, path |

**Side effects**: write
