---
title: "Update link watch"
method: POST
path: "/v1/commands/update_link_watch"
tags: ["Link monitoring and evidence"]
---

# Update link watch

`POST /v1/commands/update_link_watch`

## Request

- Base URL: `https://app.agentlinkops.com`
- URL: `https://app.agentlinkops.com/v1/commands/update_link_watch`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

Shared command transport. All logical arguments in JSON; no query or Idempotency-Key header. See canonical operation reference.

## Headers

- `X-Workspace-ID` string

## Request body

- UpdateLinkWatchInput
  - `watchId` string: watch ID from create/list.
  - `watchIds` string[]
  - `intent` 'prospect' | 'earned' | 'retired'
  - `outreachStatus` 'candidate' | 'requested' | 'pending' | 'declined' | 'won' | 'abandoned', nullable
  - `lastContactedAt` string, nullable: ISO date (YYYY-MM-DD) or UTC datetime.
  - `campaign` string, nullable
  - `status` 'active' | 'paused': Lifecycle status, separate from observed state.
  - `archived` boolean
  - `cadenceSeconds` integer: Check interval in seconds; see bounds.
  - `expectedAnchor` string, nullable: Expected anchor; null clears.
  - `expectedRel` string[], nullable: Expected rel tokens; null clears.
  - `localReference` string: Local ledger reference.

## Response `200`

Command result, including queued admission.

- union
  - object
    - `intent` 'prospect' | 'earned' | 'retired'
    - `outreachStatus` string, nullable
    - `lastContactedAt` string, nullable
    - `campaign` string, nullable
    - `id` string, required: Resource identifier returned by the operation.
    - `workspace_id` string, required: Workspace that owns this record.
    - `project_id` string, required: Project that owns this record.
    - `status` 'active' | 'paused', required: Resource lifecycle status.
    - `cadence_seconds` number, required
    - `state` string, required: Saved lifecycle or evidence state, as enumerated for this record.
    - `observation_state` object, required: Saved observation state. Before the first check, this object can be empty.
      - `state` string: Saved lifecycle or evidence state, as enumerated for this record.
      - `uncertain` boolean
      - `checked_at` string: UTC timestamp of the saved check.
      - `lastChangedAt` string, nullable
      - `firstAbsentAt` string, nullable
      - `nextCheckAt` string, nullable
      - `reason` string, nullable: Recorded explanation; null when no explanation applies.
      - `latestAttempt` object, nullable
        - `state` string: Saved lifecycle or evidence state, as enumerated for this record.
        - `reason` string, nullable: Recorded explanation; null when no explanation applies.
        - `checkedAt` string
        - `httpStatus` number, nullable
        - `occurrenceCount` number
        - `occurrences` object[]
          - `href` string, nullable
          - `targetUrl` string, nullable
          - `anchor` string, nullable
          - `rel` string[]
          - `context` string, nullable
          - `locator` object, nullable
            - `line` number, nullable
            - `column` number, nullable
            - `offset` number, nullable
        - `checkerVersion` string
      - `lastSuccessfulObservation` object, nullable
        - `state` string: Saved lifecycle or evidence state, as enumerated for this record.
        - `reason` string, nullable: Recorded explanation; null when no explanation applies.
        - `checkedAt` string
        - `httpStatus` number, nullable
        - `occurrenceCount` number
        - `occurrences` object[]
          - `href` string, nullable
          - `targetUrl` string, nullable
          - `anchor` string, nullable
          - `rel` string[]
          - `context` string, nullable
          - `locator` object, nullable
            - `line` number, nullable
            - `column` number, nullable
            - `offset` number, nullable
        - `checkerVersion` string
      - `lastSuccessfulObservationSameAsLatestAttempt` boolean
      - `confirmedState` string, nullable
      - `lastSuccessfulAt` string, nullable
      - `lastHealthyAt` string, nullable
      - `firstUnavailableAt` string, nullable
      - `unavailableCount` number
      - `wasEverHealthy` boolean
      - `retryNotBefore` string, nullable
      - `ignored` boolean
      - `absentCount` integer: Detailed source-link state: accepted complete absent observations in the current sequence. Present or source-unavailable observations reset it; an unknown attempt preserves it.
      - `wasEverPresent` boolean: Detailed source-link state: a complete present observation was recorded previously. This historical flag does not establish current presence.
      - `sourceUnavailableConfirmed` boolean: Detailed source-link state: repeated complete source-unavailability observations satisfied the confirmation window. An unknown attempt can preserve this historical flag; it does not establish link absence.
    - `created_at` string, required: UTC timestamp when the record was created.
    - `updated_at` string, required: UTC timestamp of the last record update.
    - `last_attempt_at` string, nullable, required
    - `last_success_at` string, nullable, required
    - `last_observation_id` string, nullable, required
    - `next_check_at` string, nullable, required
    - `overdue_reason` string, nullable, required
    - `google_crawlable` boolean, nullable: Googlebot robots.txt permission on the latest checked source and observed redirect hops: true allowed, false blocked, null unknown. Does not establish Google indexing, page availability or ranking.
    - `google_crawl_reason` string, nullable: Recorded Googlebot robots permission or why that permission is unknown. Separate from permission for AgentLinkOps monitoring.
    - `robots_rule` string, nullable: Publisher robots.txt path rule supporting the current Googlebot decision, or null when no matching rule was observed.
    - `noindex` boolean, nullable: Whether the most recently completely read page told Googlebot not to index it. Null means not observed; check page_observed_at for retained older evidence.
    - `page_nofollow` boolean, nullable: Whether the most recently completely read page told Googlebot not to follow its links. Independent of individual link rel attributes; null means not observed.
    - `link_rel` string[], nullable: Sorted union of rel attributes on directly observed matching link occurrences. An empty array is an observed ordinary link; null means no current or retained link attributes were observed.
    - `can_verify_reason` string, nullable: Why the latest check could not verify link presence or absence. Null means that check completed; not_checked means no check is retained.
    - `last_verified_at` string, nullable: Original timestamp of the most recent complete link presence or absence check. It stays unchanged after a blocked or incomplete check.
    - `crawlability_provenance` object: Original saved check times and observation IDs for robots permission, page directives and link attributes. Retained page/link facts can predate the latest robots check.
      - `robots_observed_at` string, nullable, required: Timestamp of the latest saved check containing the robots permission attempt, including unknown results.
      - `page_observed_at` string, nullable, required: Timestamp of the complete source page read supporting the page directives, or null when no complete page is retained.
      - `link_observed_at` string, nullable, required: Timestamp of the complete source page read where matching links were present, or null when no matching link was observed.
      - `robots_observation_id` string, nullable, required: Saved observation supporting the latest robots permission attempt, or null.
      - `page_observation_id` string, nullable, required: Saved observation supporting the page directives, or null.
      - `link_observation_id` string, nullable, required: Saved observation where the matching link was present, or null.
    - `category_contract` 'link-category-v1': Version of the shared table, API and export category projection.
    - `chosen_category` object: The saved choice and recorded account attribution. Cleared keeps the type empty; automatic permits eligible existing page evidence to supply the displayed category. Neither action reviews or starts AI work.
      - `intent` 'chosen' | 'cleared' | 'automatic', required
      - `id` 'contextual_citation' | 'guest_post' | 'recommendation' | 'resource_entry' | 'technical_reference' | 'directory_entry' | 'profile_website' | 'author_attribution' | 'discussion_contribution' | 'navigation_template' | 'badge_embed_attribution' | 'partner_sponsor' | 'other', nullable, required: Resource identifier returned by the operation.
      - `name` string, nullable, required
      - `standard_name` string, nullable, required
      - `actor_id` string, nullable, required
      - `recorded_at` string, nullable, required
      - `revision` integer, required: Saved label revision; pass as revision to set_link_type. Required for intent=automatic.
      - `deliberate_clear` boolean, required
    - `page_assessment` object: What retained page evidence says about link occurrences. Applicability separates current, previous, expired and unavailable evidence. Suggested is provisional; accepted_manual requires a recorded review; accepted_auto requires a qualified saved policy.
      - `status` 'ready' | 'unavailable', required: Resource lifecycle status.
      - `reason` string, required: Recorded explanation; null when no explanation applies.
      - `read_reason` string, nullable, required
      - `explanation` string, required
      - `applicability` string, required
      - `binding` object, nullable, required
        - `workspaceId` string, required
        - `projectId` string, required
        - `watchId` string, required
      - `capture` object, nullable, required
        - `id` string, required: Resource identifier returned by the operation.
        - `manifest_id` string, nullable, required
        - `observation_id` string, nullable, required
        - `observed_at` string, nullable, required: UTC timestamp of the observation used here.
        - `expires_at` string, nullable, required
      - `source` object, nullable, required
        - `state` string, nullable, required: Saved lifecycle or evidence state, as enumerated for this record.
        - `observed_at` string, nullable, required: UTC timestamp of the observation used here.
        - `observation_id` string, nullable, required
        - `pageUnavailable` boolean, required
      - `assessed_at` string, nullable, required
      - `revision` integer, nullable, required: Highest retained eligible occurrence decision or review revision, or null. Evidence provenance, not a write token.
      - `model_revisions` object[], required
        - `model` string, required
        - `revision` string, nullable, required: Recorded model version or revision, or null. Evidence provenance, not a write token.
      - `policy_revisions` object[], required
        - `taxonomy_version` string, nullable, required
        - `rubric_version` string, nullable, required
        - `policy_revision` union, required: Recorded policy revision as a string or number, or null. Evidence provenance, not a write token.
          - string
          - number
      - `roles` object[], required
        - `id` 'contextual_citation' | 'guest_post' | 'recommendation' | 'resource_entry' | 'technical_reference' | 'directory_entry' | 'profile_website' | 'author_attribution' | 'discussion_contribution' | 'navigation_template' | 'badge_embed_attribution' | 'partner_sponsor' | 'other', required: Resource identifier returned by the operation.
        - `name` string, required
        - `standard_name` string, required
        - `count` integer, required
        - `states` object, required
          - `suggested` integer, required
          - `accepted_manual` integer, required
          - `accepted_auto` integer, required
      - `decision_state` 'suggested' | 'accepted_manual' | 'accepted_auto' | 'mixed' | 'none', required
      - `mixed` boolean, required
      - `coverage` object, required: Occurrence counts for this watch. Null means unavailable. Assessed counts completed evaluations, including inconclusive ones. Classified counts occurrences with a determined role; partial describes type coverage. Retained includes excluded occurrences. Counts do not represent separate watched links.
        - `assessed` integer, nullable, required
        - `classified` integer, nullable, required
        - `eligible` integer, nullable, required
        - `retained` integer, nullable, required
        - `excluded` integer, nullable, required
        - `unassessed` integer, nullable, required
        - `unclassified` integer, nullable, required
        - `partial` boolean, nullable, required
      - `pending_count` integer, nullable, required
      - `failed_count` integer, nullable, required
      - `job_count` integer, nullable, required
      - `review_required_count` integer, nullable, required
    - `display_category` object: The category shown in the everyday table. A deliberate saved choice takes precedence. Otherwise page evidence supplies a category or Mixed types, with its evidence state. Read the reason when no category is available.
      - `source` 'chosen' | 'page_assessment' | 'none', required
      - `kind` 'category' | 'mixed' | 'cleared' | 'unknown', required
      - `id` 'contextual_citation' | 'guest_post' | 'recommendation' | 'resource_entry' | 'technical_reference' | 'directory_entry' | 'profile_website' | 'author_attribution' | 'discussion_contribution' | 'navigation_template' | 'badge_embed_attribution' | 'partner_sponsor' | 'other', nullable, required: Resource identifier returned by the operation.
      - `name` string, required
      - `state` string, required: Saved lifecycle or evidence state, as enumerated for this record.
      - `reason` string, required: Recorded explanation; null when no explanation applies.
      - `applicability` string, required
      - `coverage` object, required: Occurrence counts for this watch. Null means unavailable. Assessed counts completed evaluations, including inconclusive ones. Classified counts occurrences with a determined role; partial describes type coverage. Retained includes excluded occurrences. Counts do not represent separate watched links.
        - `assessed` integer, nullable, required
        - `classified` integer, nullable, required
        - `eligible` integer, nullable, required
        - `retained` integer, nullable, required
        - `excluded` integer, nullable, required
        - `unassessed` integer, nullable, required
        - `unclassified` integer, nullable, required
        - `partial` boolean, nullable, required
    - `source_url` string, required: Publisher page URL recorded in this evidence.
    - `target_url` string, required: Destination URL recorded in this evidence.
    - `target_scope` string, required
    - `expected_anchor` string, nullable, required
    - `expected_rel` string[], nullable, required
    - `local_reference` string, nullable, required: Customer reference for joining this record to a local ledger entry.
    - `last_successful_observation_id` string, nullable, required
    - `history_compacted_before` string, nullable
    - `archived_at` string, nullable
    - `provider_metrics` union
      - object
        - `dataforseo` object, required
          - `rank` integer, nullable, required
          - `page_from_rank` integer, nullable, required
          - `domain_from` string
          - `domain_from_rank` integer, nullable, required
          - `backlink_spam_score` integer, nullable, required
          - `rank_scale` 'one_thousand', required
      - object
        - `imported` object, required
          - `supplier` 'ahrefs' | 'google_search_console' | 'bing_webmaster_tools' | 'semrush' | 'majestic' | 'moz' | 'dataforseo' | 'linkody' | 'csv', required
          - `supplier_row_id` string, nullable, required
          - `target_basis` 'supplier_observed' | 'user_supplied_target_expectation'
          - `supplier_generated_at` string, date-time, nullable, required
          - `supplier_metrics` object, nullable, required
      - object
        - `linktrail_corpus` object, required
          - `source_outlink_count` integer, nullable, required
          - `source_external_outlink_count` integer, nullable, required
          - `fetch_kind` 'direct' | 'rendered' | 'proxied', required
          - `extraction_complete` boolean, required
    - `provider_metrics_retrieved_at` string, nullable
    - `provider_metrics_data_mode` string
    - `initial_check` object
      - `job_id` string, nullable, required
      - `state` string, required: Saved lifecycle or evidence state, as enumerated for this record.
      - `error_code` string, nullable, required: Latest delivery detail code; null when no failure or retry has been recorded.
    - `check_operation` object
      - `id` string, required: Resource identifier returned by the operation.
      - `watch_id` string, required
      - `operation_key` string, required
      - `state` 'pending' | 'running' | 'completed' | 'partial', required: Saved lifecycle or evidence state, as enumerated for this record.
      - `source` object, required
        - `state` 'queued' | 'running' | 'completed' | 'skipped' | 'unavailable' | 'failed' | 'waiting_source', required: Saved lifecycle or evidence state, as enumerated for this record.
        - `job_id` string, nullable, required
        - `reason` string, nullable, required: Recorded explanation; null when no explanation applies.
        - `result` string, nullable, required: Saved result; null when this operation has no completed result.
        - `lane` string, nullable, required
        - `last_crawl_at` string, nullable
      - `target` object, required
        - `state` 'queued' | 'running' | 'completed' | 'skipped' | 'unavailable' | 'failed' | 'waiting_source', required: Saved lifecycle or evidence state, as enumerated for this record.
        - `job_id` string, nullable, required
        - `reason` string, nullable, required: Recorded explanation; null when no explanation applies.
        - `result` string, nullable, required: Saved result; null when this operation has no completed result.
        - `lane` string, nullable, required
        - `last_crawl_at` string, nullable
      - `classification` object, required
        - `state` 'queued' | 'running' | 'completed' | 'skipped' | 'unavailable' | 'failed' | 'waiting_source', required: Saved lifecycle or evidence state, as enumerated for this record.
        - `job_id` string, nullable, required
        - `reason` string, nullable, required: Recorded explanation; null when no explanation applies.
        - `result` string, nullable, required: Saved result; null when this operation has no completed result.
        - `lane` string, nullable, required
        - `last_crawl_at` string, nullable
      - `google` object, required
        - `state` 'queued' | 'running' | 'completed' | 'skipped' | 'unavailable' | 'failed' | 'waiting_source', required: Saved lifecycle or evidence state, as enumerated for this record.
        - `job_id` string, nullable, required
        - `reason` string, nullable, required: Recorded explanation; null when no explanation applies.
        - `result` string, nullable, required: Saved result; null when this operation has no completed result.
        - `lane` string, nullable, required
        - `last_crawl_at` string, nullable
      - `follow_up_required` boolean, required
    - `created` boolean: True when this request created the record; false when an existing record was reused.
    - `detail` string
    - `type` 'contextual_citation' | 'guest_post' | 'recommendation' | 'resource_entry' | 'technical_reference' | 'directory_entry' | 'profile_website' | 'author_attribution' | 'discussion_contribution' | 'navigation_template' | 'badge_embed_attribution' | 'partner_sponsor' | 'other' | 'null', nullable: Saved compatibility type on enriched watch records; null when empty. Prefer display_category for the category shown in the table and page_assessment for currentness. A saved model type alone does not prove a current assessment. Reading or checking a link does not classify it. Deployments without label tables omit this field; concise list rows omit it too.
    - `type_source` 'person' | 'model' | 'null', nullable: Who supplied the saved compatibility value: person includes a team choice or deliberate clear; model identifies a saved model type. A null value can accompany automatic display; read chosen_category.intent for the team intent. Classification updates preserve team choices and clears. Deployments without label tables and concise list rows omit this field.
    - `type_revision` integer: Saved compatibility label revision; zero when no label record exists. Use chosen_category.revision for set_link_type conflict checks. Deployments without label tables and concise list rows omit this field.
    - `tags` object[]: Active workspace tags attached to this watch, ordered by name; an empty array means the watch has no active tags. Tags remain separate from the chosen category and page assessment. Checking a link does not add tags. Deployments without label tables and concise list rows omit this field.
      - `id` string, required: Workspace tag identifier returned by list_link_tags or save_link_tag.
      - `name` string, required: Saved display name of the attached workspace tag.
      - `color` string, required: Saved display color of the attached workspace tag.
    - `disavow` 'active' | 'proposed' | 'null', nullable: Saved rule coverage for this source: active for an approved rule, proposed for a suggestion, or null when no rule covers it or rule metadata is unavailable. An active rule takes precedence over a proposed rule. Concise list rows omit this field; reading this coverage does not submit a disavow file to Google.
  - object
    - `rows` object[], required
      - `index` number, required
      - `watchId` string, required
      - `watch` object
        - `intent` 'prospect' | 'earned' | 'retired'
        - `outreachStatus` string, nullable
        - `lastContactedAt` string, nullable
        - `campaign` string, nullable
        - `id` string, required: Resource identifier returned by the operation.
        - `workspace_id` string, required: Workspace that owns this record.
        - `project_id` string, required: Project that owns this record.
        - `status` 'active' | 'paused', required: Resource lifecycle status.
        - `cadence_seconds` number, required
        - `state` string, required: Saved lifecycle or evidence state, as enumerated for this record.
        - `observation_state` object, required: Saved observation state. Before the first check, this object can be empty.
          - `state` string: Saved lifecycle or evidence state, as enumerated for this record.
          - `uncertain` boolean
          - `checked_at` string: UTC timestamp of the saved check.
          - `lastChangedAt` string, nullable
          - `firstAbsentAt` string, nullable
          - `nextCheckAt` string, nullable
          - `reason` string, nullable: Recorded explanation; null when no explanation applies.
          - `latestAttempt` object, nullable
            - `state` string: Saved lifecycle or evidence state, as enumerated for this record.
            - `reason` string, nullable: Recorded explanation; null when no explanation applies.
            - `checkedAt` string
            - `httpStatus` number, nullable
            - `occurrenceCount` number
            - `occurrences` object[]
              - …
            - `checkerVersion` string
          - `lastSuccessfulObservation` object, nullable
            - `state` string: Saved lifecycle or evidence state, as enumerated for this record.
            - `reason` string, nullable: Recorded explanation; null when no explanation applies.
            - `checkedAt` string
            - `httpStatus` number, nullable
            - `occurrenceCount` number
            - `occurrences` object[]
              - …
            - `checkerVersion` string
          - `lastSuccessfulObservationSameAsLatestAttempt` boolean
          - `confirmedState` string, nullable
          - `lastSuccessfulAt` string, nullable
          - `lastHealthyAt` string, nullable
          - `firstUnavailableAt` string, nullable
          - `unavailableCount` number
          - `wasEverHealthy` boolean
          - `retryNotBefore` string, nullable
          - `ignored` boolean
          - `absentCount` integer: Detailed source-link state: accepted complete absent observations in the current sequence. Present or source-unavailable observations reset it; an unknown attempt preserves it.
          - `wasEverPresent` boolean: Detailed source-link state: a complete present observation was recorded previously. This historical flag does not establish current presence.
          - `sourceUnavailableConfirmed` boolean: Detailed source-link state: repeated complete source-unavailability observations satisfied the confirmation window. An unknown attempt can preserve this historical flag; it does not establish link absence.
        - `created_at` string, required: UTC timestamp when the record was created.
        - `updated_at` string, required: UTC timestamp of the last record update.
        - `last_attempt_at` string, nullable, required
        - `last_success_at` string, nullable, required
        - `last_observation_id` string, nullable, required
        - `next_check_at` string, nullable, required
        - `overdue_reason` string, nullable, required
        - `google_crawlable` boolean, nullable: Googlebot robots.txt permission on the latest checked source and observed redirect hops: true allowed, false blocked, null unknown. Does not establish Google indexing, page availability or ranking.
        - `google_crawl_reason` string, nullable: Recorded Googlebot robots permission or why that permission is unknown. Separate from permission for AgentLinkOps monitoring.
        - `robots_rule` string, nullable: Publisher robots.txt path rule supporting the current Googlebot decision, or null when no matching rule was observed.
        - `noindex` boolean, nullable: Whether the most recently completely read page told Googlebot not to index it. Null means not observed; check page_observed_at for retained older evidence.
        - `page_nofollow` boolean, nullable: Whether the most recently completely read page told Googlebot not to follow its links. Independent of individual link rel attributes; null means not observed.
        - `link_rel` string[], nullable: Sorted union of rel attributes on directly observed matching link occurrences. An empty array is an observed ordinary link; null means no current or retained link attributes were observed.
        - `can_verify_reason` string, nullable: Why the latest check could not verify link presence or absence. Null means that check completed; not_checked means no check is retained.
        - `last_verified_at` string, nullable: Original timestamp of the most recent complete link presence or absence check. It stays unchanged after a blocked or incomplete check.
        - `crawlability_provenance` object: Original saved check times and observation IDs for robots permission, page directives and link attributes. Retained page/link facts can predate the latest robots check.
          - `robots_observed_at` string, nullable, required: Timestamp of the latest saved check containing the robots permission attempt, including unknown results.
          - `page_observed_at` string, nullable, required: Timestamp of the complete source page read supporting the page directives, or null when no complete page is retained.
          - `link_observed_at` string, nullable, required: Timestamp of the complete source page read where matching links were present, or null when no matching link was observed.
          - `robots_observation_id` string, nullable, required: Saved observation supporting the latest robots permission attempt, or null.
          - `page_observation_id` string, nullable, required: Saved observation supporting the page directives, or null.
          - `link_observation_id` string, nullable, required: Saved observation where the matching link was present, or null.
        - `category_contract` 'link-category-v1': Version of the shared table, API and export category projection.
        - `chosen_category` object: The saved choice and recorded account attribution. Cleared keeps the type empty; automatic permits eligible existing page evidence to supply the displayed category. Neither action reviews or starts AI work.
          - `intent` 'chosen' | 'cleared' | 'automatic', required
          - `id` 'contextual_citation' | 'guest_post' | 'recommendation' | 'resource_entry' | 'technical_reference' | 'directory_entry' | 'profile_website' | 'author_attribution' | 'discussion_contribution' | 'navigation_template' | 'badge_embed_attribution' | 'partner_sponsor' | 'other', nullable, required: Resource identifier returned by the operation.
          - `name` string, nullable, required
          - `standard_name` string, nullable, required
          - `actor_id` string, nullable, required
          - `recorded_at` string, nullable, required
          - `revision` integer, required: Saved label revision; pass as revision to set_link_type. Required for intent=automatic.
          - `deliberate_clear` boolean, required
        - `page_assessment` object: What retained page evidence says about link occurrences. Applicability separates current, previous, expired and unavailable evidence. Suggested is provisional; accepted_manual requires a recorded review; accepted_auto requires a qualified saved policy.
          - `status` 'ready' | 'unavailable', required: Resource lifecycle status.
          - `reason` string, required: Recorded explanation; null when no explanation applies.
          - `read_reason` string, nullable, required
          - `explanation` string, required
          - `applicability` string, required
          - `binding` object, nullable, required
            - `workspaceId` string, required
            - `projectId` string, required
            - `watchId` string, required
          - `capture` object, nullable, required
            - `id` string, required: Resource identifier returned by the operation.
            - `manifest_id` string, nullable, required
            - `observation_id` string, nullable, required
            - `observed_at` string, nullable, required: UTC timestamp of the observation used here.
            - `expires_at` string, nullable, required
          - `source` object, nullable, required
            - `state` string, nullable, required: Saved lifecycle or evidence state, as enumerated for this record.
            - `observed_at` string, nullable, required: UTC timestamp of the observation used here.
            - `observation_id` string, nullable, required
            - `pageUnavailable` boolean, required
          - `assessed_at` string, nullable, required
          - `revision` integer, nullable, required: Highest retained eligible occurrence decision or review revision, or null. Evidence provenance, not a write token.
          - `model_revisions` object[], required
            - `model` string, required
            - `revision` string, nullable, required: Recorded model version or revision, or null. Evidence provenance, not a write token.
          - `policy_revisions` object[], required
            - `taxonomy_version` string, nullable, required
            - `rubric_version` string, nullable, required
            - `policy_revision` union, required: Recorded policy revision as a string or number, or null. Evidence provenance, not a write token.
              - …
          - `roles` object[], required
            - `id` 'contextual_citation' | 'guest_post' | 'recommendation' | 'resource_entry' | 'technical_reference' | 'directory_entry' | 'profile_website' | 'author_attribution' | 'discussion_contribution' | 'navigation_template' | 'badge_embed_attribution' | 'partner_sponsor' | 'other', required: Resource identifier returned by the operation.
            - `name` string, required
            - `standard_name` string, required
            - `count` integer, required
            - `states` object, required
              - …
          - `decision_state` 'suggested' | 'accepted_manual' | 'accepted_auto' | 'mixed' | 'none', required
          - `mixed` boolean, required
          - `coverage` object, required: Occurrence counts for this watch. Null means unavailable. Assessed counts completed evaluations, including inconclusive ones. Classified counts occurrences with a determined role; partial describes type coverage. Retained includes excluded occurrences. Counts do not represent separate watched links.
            - `assessed` integer, nullable, required
            - `classified` integer, nullable, required
            - `eligible` integer, nullable, required
            - `retained` integer, nullable, required
            - `excluded` integer, nullable, required
            - `unassessed` integer, nullable, required
            - `unclassified` integer, nullable, required
            - `partial` boolean, nullable, required
          - `pending_count` integer, nullable, required
          - `failed_count` integer, nullable, required
          - `job_count` integer, nullable, required
          - `review_required_count` integer, nullable, required
        - `display_category` object: The category shown in the everyday table. A deliberate saved choice takes precedence. Otherwise page evidence supplies a category or Mixed types, with its evidence state. Read the reason when no category is available.
          - `source` 'chosen' | 'page_assessment' | 'none', required
          - `kind` 'category' | 'mixed' | 'cleared' | 'unknown', required
          - `id` 'contextual_citation' | 'guest_post' | 'recommendation' | 'resource_entry' | 'technical_reference' | 'directory_entry' | 'profile_website' | 'author_attribution' | 'discussion_contribution' | 'navigation_template' | 'badge_embed_attribution' | 'partner_sponsor' | 'other', nullable, required: Resource identifier returned by the operation.
          - `name` string, required
          - `state` string, required: Saved lifecycle or evidence state, as enumerated for this record.
          - `reason` string, required: Recorded explanation; null when no explanation applies.
          - `applicability` string, required
          - `coverage` object, required: Occurrence counts for this watch. Null means unavailable. Assessed counts completed evaluations, including inconclusive ones. Classified counts occurrences with a determined role; partial describes type coverage. Retained includes excluded occurrences. Counts do not represent separate watched links.
            - `assessed` integer, nullable, required
            - `classified` integer, nullable, required
            - `eligible` integer, nullable, required
            - `retained` integer, nullable, required
            - `excluded` integer, nullable, required
            - `unassessed` integer, nullable, required
            - `unclassified` integer, nullable, required
            - `partial` boolean, nullable, required
        - `source_url` string, required: Publisher page URL recorded in this evidence.
        - `target_url` string, required: Destination URL recorded in this evidence.
        - `target_scope` string, required
        - `expected_anchor` string, nullable, required
        - `expected_rel` string[], nullable, required
        - `local_reference` string, nullable, required: Customer reference for joining this record to a local ledger entry.
        - `last_successful_observation_id` string, nullable, required
        - `history_compacted_before` string, nullable
        - `archived_at` string, nullable
        - `provider_metrics` union
          - object
            - `dataforseo` object, required
              - …
          - object
            - `imported` object, required
              - …
          - object
            - `linktrail_corpus` object, required
              - …
        - `provider_metrics_retrieved_at` string, nullable
        - `provider_metrics_data_mode` string
        - `initial_check` object
          - `job_id` string, nullable, required
          - `state` string, required: Saved lifecycle or evidence state, as enumerated for this record.
          - `error_code` string, nullable, required: Latest delivery detail code; null when no failure or retry has been recorded.
        - `check_operation` object
          - `id` string, required: Resource identifier returned by the operation.
          - `watch_id` string, required
          - `operation_key` string, required
          - `state` 'pending' | 'running' | 'completed' | 'partial', required: Saved lifecycle or evidence state, as enumerated for this record.
          - `source` object, required
            - `state` 'queued' | 'running' | 'completed' | 'skipped' | 'unavailable' | 'failed' | 'waiting_source', required: Saved lifecycle or evidence state, as enumerated for this record.
            - `job_id` string, nullable, required
            - `reason` string, nullable, required: Recorded explanation; null when no explanation applies.
            - `result` string, nullable, required: Saved result; null when this operation has no completed result.
            - `lane` string, nullable, required
            - `last_crawl_at` string, nullable
          - `target` object, required
            - `state` 'queued' | 'running' | 'completed' | 'skipped' | 'unavailable' | 'failed' | 'waiting_source', required: Saved lifecycle or evidence state, as enumerated for this record.
            - `job_id` string, nullable, required
            - `reason` string, nullable, required: Recorded explanation; null when no explanation applies.
            - `result` string, nullable, required: Saved result; null when this operation has no completed result.
            - `lane` string, nullable, required
            - `last_crawl_at` string, nullable
          - `classification` object, required
            - `state` 'queued' | 'running' | 'completed' | 'skipped' | 'unavailable' | 'failed' | 'waiting_source', required: Saved lifecycle or evidence state, as enumerated for this record.
            - `job_id` string, nullable, required
            - `reason` string, nullable, required: Recorded explanation; null when no explanation applies.
            - `result` string, nullable, required: Saved result; null when this operation has no completed result.
            - `lane` string, nullable, required
            - `last_crawl_at` string, nullable
          - `google` object, required
            - `state` 'queued' | 'running' | 'completed' | 'skipped' | 'unavailable' | 'failed' | 'waiting_source', required: Saved lifecycle or evidence state, as enumerated for this record.
            - `job_id` string, nullable, required
            - `reason` string, nullable, required: Recorded explanation; null when no explanation applies.
            - `result` string, nullable, required: Saved result; null when this operation has no completed result.
            - `lane` string, nullable, required
            - `last_crawl_at` string, nullable
          - `follow_up_required` boolean, required
        - `created` boolean: True when this request created the record; false when an existing record was reused.
        - `detail` string
        - `type` 'contextual_citation' | 'guest_post' | 'recommendation' | 'resource_entry' | 'technical_reference' | 'directory_entry' | 'profile_website' | 'author_attribution' | 'discussion_contribution' | 'navigation_template' | 'badge_embed_attribution' | 'partner_sponsor' | 'other' | 'null', nullable: Saved compatibility type on enriched watch records; null when empty. Prefer display_category for the category shown in the table and page_assessment for currentness. A saved model type alone does not prove a current assessment. Reading or checking a link does not classify it. Deployments without label tables omit this field; concise list rows omit it too.
        - `type_source` 'person' | 'model' | 'null', nullable: Who supplied the saved compatibility value: person includes a team choice or deliberate clear; model identifies a saved model type. A null value can accompany automatic display; read chosen_category.intent for the team intent. Classification updates preserve team choices and clears. Deployments without label tables and concise list rows omit this field.
        - `type_revision` integer: Saved compatibility label revision; zero when no label record exists. Use chosen_category.revision for set_link_type conflict checks. Deployments without label tables and concise list rows omit this field.
        - `tags` object[]: Active workspace tags attached to this watch, ordered by name; an empty array means the watch has no active tags. Tags remain separate from the chosen category and page assessment. Checking a link does not add tags. Deployments without label tables and concise list rows omit this field.
          - `id` string, required: Workspace tag identifier returned by list_link_tags or save_link_tag.
          - `name` string, required: Saved display name of the attached workspace tag.
          - `color` string, required: Saved display color of the attached workspace tag.
        - `disavow` 'active' | 'proposed' | 'null', nullable: Saved rule coverage for this source: active for an approved rule, proposed for a suggestion, or null when no rule covers it or rule metadata is unavailable. An active rule takes precedence over a proposed rule. Concise list rows omit this field; reading this coverage does not submit a disavow file to Google.
      - `error` object
        - `code` string, required
        - `message` string, required
    - `updated` number, required
    - `failed` number, required

## Other responses

- `429`: Request-rate or usage refusal. Inspect error.code and recovery details before retrying.
- `default`: Error envelope. Non-configuration 5xx messages are masked and details omitted; allowlisted configuration errors retain static operator recovery.

## Changes

- **2026-10-20** `1bf30c2912b2`: 22 breaking, 27 warning, 7 info
  - the response's body type changed from `object` to no type for status `200`
  - removed the required property `cadence_seconds` from the response with the `200` status
  - removed the required property `created_at` from the response with the `200` status
  - removed the required property `expected_anchor` from the response with the `200` status
  - …52 more

[Operation history](https://skmtc.dev/agentlinkops/apis/agentlinkops-http-api/changes/v1/commands/update_link_watch/post.md)

---

[API](https://skmtc.dev/agentlinkops/apis/agentlinkops-http-api.md) · [All operations](https://skmtc.dev/agentlinkops/apis/agentlinkops-http-api/llms.txt) · [OpenAPI document](https://skmtc.dev/agentlinkops/apis/agentlinkops-http-api/revisions/1bf30c2912b2?raw)
