---
title: "Read competitor backlink evidence"
method: POST
path: "/v1/commands/get_competitor_analysis_candidates"
tags: ["Competitor research"]
---

# Read competitor backlink evidence

`POST /v1/commands/get_competitor_analysis_candidates`

## Request

- Base URL: `https://app.agentlinkops.com`
- URL: `https://app.agentlinkops.com/v1/commands/get_competitor_analysis_candidates`
- 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

- GetCompetitorAnalysisCandidatesInput
  - `analysisId` string, required: Saved competitor analysis ID.
  - `evidenceRevision` integer, required: Retained retrieval evidence revision from the saved analysis. Keep this revision for every page.
  - `cursor` string: Continuation cursor returned for this retrieval snapshot. Omit for its first page.
  - `limit` integer: Maximum candidates per page, from 1 to 100. Defaults to 100.
  - `outcomeRevision` string: Outcome revision returned by the first page. Pass it on later pages to reject changed check or assessment evidence.

## Response `200`

Command result, including queued admission.

- GetCompetitorAnalysisCandidatesOutput
  - `snapshot` object, required
    - `version` 'competitor-inventory-v2', required
    - `id` string, required: Resource identifier returned by the operation.
    - `retrieval_id` string, required
    - `analysis_id` string, required
    - `workspace_id` string, required: Workspace that owns this record.
    - `project_id` string, required: Project that owns this record.
    - `competitor_binding` object, required
      - `set_id` string, required
      - `set_revision` integer, required
      - `member_id` string, required
    - `provider` 'dataforseo', required
    - `data_mode` 'provider_index', required
    - `rank_scale` 'one_thousand', required
    - `target` string, required
    - `include_subdomains` boolean, required
    - `query_hash` string, required
    - `evidence_revision` integer, required
    - `state` 'pending' | 'complete' | 'partial', required: Saved lifecycle or evidence state, as enumerated for this record.
    - `coverage` 'complete_provider_query' | 'partial_provider_query', required: Dataset scope and completeness, including limits on what these results establish.
    - `partial_reason` string, nullable, required
    - `pages` integer, required
    - `returned_rows` integer, required
    - `accepted_candidates` integer, required
    - `rejected_rows` integer, required
    - `duplicate_rows` integer, required
    - `provider_total_count` integer, nullable, required
    - `created_at` string, date-time, required: UTC timestamp when the record was created.
    - `retrieved_at` string, date-time, required
    - `expires_at` string, date-time, required
  - `items` object[], required: Records in this bounded page.
    - `v` 1, required
    - `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.
    - `discovery_run_id` string, required
    - `source_url` string, required: Publisher page URL recorded in this evidence.
    - `target_url` string, required: Destination URL recorded in this evidence.
    - `provider` 'linktrail_corpus' | 'dataforseo' | 'imported', required
    - `data_mode` 'synthetic' | 'owned_corpus' | 'provider_index' | 'imported', required
    - `provider_task_id` string, required
    - `provider_retrieved_at` string, date-time, required: Timestamp when the upstream evidence was retrieved.
    - `provider_first_seen` string, date-time, nullable, required
    - `provider_prev_seen` string, date-time, nullable, required
    - `provider_last_seen` string, date-time, nullable, required
    - `provider_status` object, required
      - `is_lost` boolean, nullable, required
      - `is_broken` boolean, nullable, required
      - `is_new` boolean, nullable, required
    - `anchor` string, nullable, required
    - `rel` string[], nullable, required
    - `dofollow` boolean, nullable, required
    - `link_type` string, nullable, required
    - `source_http_status` integer, nullable, required
    - `target_http_status` integer, nullable, required
    - `links_count` integer, nullable, required
    - `provider_metrics` union, required
      - 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
    - `verification_status` 'not_checked' | 'present' | 'absent' | 'unknown' | 'source_unavailable', required: AgentLinkOps check state, independent of supplier flags. not_checked means no AgentLinkOps check is recorded.
    - `verified_at` string, date-time, nullable, required: Timestamp of the AgentLinkOps check; null until checked.
    - `observation_id` string, nullable, required
    - `evidence_id` string, nullable, required: Reference to retained evidence from the check.
    - `analysis` object, required
      - `source_check` object, required
        - `state` 'not_started' | 'pending' | 'running' | 'completed' | 'failed' | 'unavailable', required: Saved lifecycle or evidence state, as enumerated for this record.
        - `verdict` 'present' | 'absent' | 'unknown' | 'source_unavailable', nullable, required
        - `reason` string, nullable, required: Recorded explanation; null when no explanation applies.
        - `checked_at` string, nullable, required: UTC timestamp of the saved check.
        - `job_id` string, nullable, required
      - `occurrence_context` object, required
        - `state` 'not_started' | 'pending' | 'completed' | 'partial' | 'failed' | 'unavailable' | 'previous', required: Saved lifecycle or evidence state, as enumerated for this record.
        - `reason` string, nullable, required: Recorded explanation; null when no explanation applies.
        - `capture_id` string, nullable, required
        - `occurrence_count` integer, nullable, required
      - `assessment` object, required
        - `state` 'not_started' | 'pending' | 'completed' | 'partial' | 'failed' | 'unavailable' | 'previous' | 'no_role', required: Saved lifecycle or evidence state, as enumerated for this record.
        - `reason` string, nullable, required: Recorded explanation; null when no explanation applies.
        - `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
      - `watch_id` string, nullable, required
      - `google_index` object, required
        - `state` 'unavailable', required: Saved lifecycle or evidence state, as enumerated for this record.
        - `reason` 'COMPETITOR_PROPERTY_ACCESS_UNAVAILABLE', required: Recorded explanation; null when no explanation applies.
      - `recurring_monitoring_created` false, required: Whether this operation enrolled recurring monitoring.
  - `next_cursor` string, nullable, required: Opaque continuation for the same listing; null means no further page.
  - `outcome_revision` string, 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.

---

[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/2a712a1dcfa7?raw)
