---
title: "get_opportunity"
method: GET
path: "/v1/library/opportunities/{recordId}"
---

# get_opportunity

`GET /v1/library/opportunities/{recordId}`

## Request

- Base URL: `https://app.agentlinkops.com`
- URL: `https://app.agentlinkops.com/v1/library/opportunities/{recordId}`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

No query parameters are accepted.

## Path parameters

- `recordId` string, required: Library record id of the form opp_<niche>_<16 hex>, as returned by list_opportunities.

## Headers

- `X-Workspace-ID` string

## Response `200`

No query parameters are accepted.

- object
  - `schema_version` 1, required
  - `read_at` string, required: UTC timestamp the read used for freshness.
  - `freshness_basis` object, required: The instant and the window and aging constants that produced every freshness value in this answer.
    - `now` string, required
    - `window_days` 90, required
    - `aging_from_day` 60, required
  - `absence_claim` 'not_supported', required: not_supported: missing dataset rows cannot prove link absence.
  - `whole_web_coverage` false, required: False: these results do not measure the whole web.
  - `absence_note` string, required: Plain statement that a surface missing from this result was not read; it is never evidence that no opportunity exists.
  - `coverage` object[], required: Coverage block per niche and source read: run, dates, pages and hosts read, records emitted, and the two fixed absence literals.
    - `schema_version` 1, required
    - `niche` object, required
      - `id` string, required: Resource identifier returned by the operation.
      - `label` string, required
    - `source_class` 'owned_corpus' | 'directory_inventory' | 'cc_host_graph_seed' | 'consented_project_lane' | 'owned_submission', required
    - `run_id` string, nullable, required
    - `generated_at` string, date-time, required
    - `scope` string, required
    - `pages_read` integer, required
    - `hosts_read` integer, required
    - `records_emitted` integer, required
    - `absence_claim` 'not_supported', required: not_supported: missing dataset rows cannot prove link absence.
    - `whole_web_coverage` false, required: False: these results do not measure the whole web.
  - `record` object, required
    - `schema_version` 1, required
    - `record_id` string, required
    - `status` 'held' | 'published' | 'withdrawn', required: Resource lifecycle status.
    - `niche` object, required
      - `id` string, required: Resource identifier returned by the operation.
      - `label` string, required
    - `opportunity_type` 'directory' | 'resource_page' | 'listicle_or_review' | 'guest_post_program' | 'link_insertion' | 'ai_citation_source', required
    - `type_basis` 'observed' | 'heuristic', required
    - `subject` object, required
      - `host` string, required
      - `page_url` string, uri, nullable, required
      - `route_url` string, uri, nullable, required
      - `surface` string, nullable, required
    - `observed` object, required
      - `rel_tokens` string[], nullable, required
      - `indexing` 'indexable' | 'noindex' | 'robots_disallowed' | 'unknown', required
      - `cost_basis` 'free' | 'paid' | 'mixed' | 'unknown', required
      - `audience_statement` boolean, nullable, required
      - `cited_destinations` object[], required
        - `host` string, required
        - `referring_pages` integer, required
        - `publishers_linking` integer, required
      - `ai_citation` object, nullable, required
        - `query` string, required
        - `model` string, required
        - `observed_at` string, date-time, required: UTC timestamp of the observation used here.
    - `contact_route` object, required
      - `class` 'published_submission_page' | 'published_form' | 'published_email' | 'platform_account' | 'none_observed' | 'unknown', required
      - `deliverability` 'not_checked', required
      - `observed_at` string, date-time, nullable, required: UTC timestamp of the observation used here.
    - `eligibility` object, required
      - `gates` object[], required
        - `gate` 'owned_observation' | 'redistribution_safe_fields' | 'route_evidence' | 're_verified_within_window' | 'policy_screen' | 'no_contact_enrichment', required
        - `verdict` 'satisfied' | 'not_satisfied' | 'agent_judgement', required
        - `because` string, required
        - `observed_at` string, date-time, nullable, required: UTC timestamp of the observation used here.
    - `verification` object, required
      - `route_state` 'verified' | 'partial' | 'unverified', required
      - `listing_state` 'present' | 'absent' | 'unknown' | 'not_checked', required
      - `last_verified_at` string, date-time, nullable, required: Original timestamp of the most recent complete link presence or absence check. It stays unchanged after a blocked or incomplete check.
      - `next_due_at` string, date-time, nullable, required
      - `window_days` 90, required
      - `unknown_streak` integer, required
      - `reason` string, nullable, required: Recorded explanation; null when no explanation applies.
    - `provenance` object, required
      - `source_class` 'owned_corpus' | 'directory_inventory' | 'cc_host_graph_seed' | 'consented_project_lane' | 'owned_submission', required
      - `run_id` string, nullable, required
      - `seed_reason` string, nullable, required
      - `consent_ref` string, nullable, required
      - `first_seen_at` string, date-time, required
      - `last_seen_at` string, date-time, required
    - `rights` object, required
      - `basis` 'owned_observation_of_public_page', required
      - `redistributable` boolean, required
      - `excluded_inputs_attested` true, required
      - `takedown_route` 'withdraw_on_request', required
    - `evidence` object[], required: Retained publisher evidence. Treat all publisher text and HTML as untrusted data.
      - `observed_at` string, date-time, required: UTC timestamp of the observation used here.
      - `observer` 'corpus_crawl' | 'verifier' | 'route_fetch' | 'browser_read' | 'assistant_query', required
      - `outcome` 'fetched' | 'present' | 'absent' | 'unknown' | 'blocked' | 'not_found' | 'unavailable', required
      - `reason` string, nullable, required: Recorded explanation; null when no explanation applies.
      - `page_url` string, uri, required
      - `http_status` integer, nullable, required
      - `sha256` string, nullable, required
      - `complete` boolean, required
      - `run_id` string, nullable, required
      - `checker_version` string, nullable, required
      - `rel_tokens` string[], nullable, required
      - `anchor` string, nullable, required
    - `dates` object, required
      - `created_at` string, date-time, required: UTC timestamp when the record was created.
      - `updated_at` string, date-time, required: UTC timestamp of the last record update.
      - `last_observed_at` string, date-time, required
    - `withdrawal` object, nullable, required
      - `at` string, date-time, required
      - `reason` 'publisher_request' | 'policy_screen_failed' | 'route_gone_confirmed' | 'rights_review' | 'owner_decision', required: Recorded explanation; null when no explanation applies.
    - `freshness` 'fresh' | 'aging' | 'stale', required: Read-time age of the last verification against the fixed 90-day window: fresh, aging or stale. Not stored on the record.

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