> ## Documentation Index
> Fetch the complete documentation index at: https://docs.perquery.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# List opportunities

> Returns the opportunities of the site with their score, effort and priority tier. Use `type`, `tier`, `subject_kind`, `subject_ref` and `q` to filter, and `sort` and `direction` to order. Set `include_dismissed` to also get dismissed opportunities. Use `date_range` to select the period (`7g`, `1a`, `3a`, `6a`, `1y` or `custom` with `since` and `until`). The list is paged with `page` and `page_size`.



## OpenAPI

````yaml /api-reference/openapi.json get /v1/sites/{site_uuid}/opportunities
openapi: 3.0.3
info:
  title: Perquery API
  version: 1.0.0
  description: Read-only access to the data of your Perquery organization.
servers:
  - url: https://perquery.ai/api
security:
  - apiKey: []
paths:
  /v1/sites/{site_uuid}/opportunities:
    get:
      tags:
        - Opportunities
      summary: List opportunities
      description: >-
        Returns the opportunities of the site with their score, effort and
        priority tier. Use `type`, `tier`, `subject_kind`, `subject_ref` and `q`
        to filter, and `sort` and `direction` to order. Set `include_dismissed`
        to also get dismissed opportunities. Use `date_range` to select the
        period (`7g`, `1a`, `3a`, `6a`, `1y` or `custom` with `since` and
        `until`). The list is paged with `page` and `page_size`.
      operationId: list_opportunities
      parameters:
        - in: query
          name: date_range
          schema:
            enum:
              - 7g
              - 1a
              - 3a
              - 6a
              - 1y
              - custom
            type: string
            default: 1a
            minLength: 1
          description: |-
            * `7g` - 7g
            * `1a` - 1a
            * `3a` - 3a
            * `6a` - 6a
            * `1y` - 1y
            * `custom` - custom
        - in: query
          name: direction
          schema:
            enum:
              - asc
              - desc
              - null
            type: string
            nullable: true
            minLength: 1
          description: |-
            * `asc` - asc
            * `desc` - desc
        - in: query
          name: include_dismissed
          schema:
            type: boolean
            default: false
        - in: query
          name: llm
          schema:
            type: array
            items:
              enum:
                - chatgpt
                - gemini
                - claude
                - perplexity
                - googleai
                - grok
                - deepseek
              type: string
              description: |-
                * `chatgpt` - chatgpt
                * `gemini` - gemini
                * `claude` - claude
                * `perplexity` - perplexity
                * `googleai` - googleai
                * `grok` - grok
                * `deepseek` - deepseek
        - in: query
          name: page
          schema:
            type: integer
            minimum: 1
            default: 1
        - in: query
          name: page_size
          schema:
            type: integer
            maximum: 100
            minimum: 1
            default: 50
        - in: query
          name: q
          schema:
            type: string
            nullable: true
        - in: query
          name: since
          schema:
            type: string
            format: date
          description: The first day of a `custom` range.
        - in: path
          name: site_uuid
          schema:
            type: string
            format: uuid
          required: true
        - in: query
          name: sort
          schema:
            enum:
              - score
              - effort
              - volume
              - type
              - subject
            type: string
            default: score
            minLength: 1
          description: |-
            * `score` - score
            * `effort` - effort
            * `volume` - volume
            * `type` - type
            * `subject` - subject
        - in: query
          name: subject_kind
          schema:
            enum:
              - site
              - page
              - prompt
              - domain
              - null
            type: string
            nullable: true
            minLength: 1
          description: |-
            * `site` - site
            * `page` - page
            * `prompt` - prompt
            * `domain` - domain
        - in: query
          name: subject_ref
          schema:
            type: string
            nullable: true
        - in: query
          name: tier
          schema:
            enum:
              - now
              - plan
              - quick
              - watch
              - null
            type: string
            nullable: true
            minLength: 1
          description: |-
            * `now` - now
            * `plan` - plan
            * `quick` - quick
            * `watch` - watch
        - in: query
          name: type
          schema:
            enum:
              - technical
              - content
              - offpage
              - null
            type: string
            nullable: true
            minLength: 1
          description: |-
            * `technical` - technical
            * `content` - content
            * `offpage` - offpage
        - in: query
          name: until
          schema:
            type: string
            format: date
          description: The last day of a `custom` range.
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OpportunityListResponse'
          description: ''
      security:
        - apiKey: []
components:
  schemas:
    OpportunityListResponse:
      type: object
      properties:
        rows:
          type: array
          items:
            $ref: '#/components/schemas/OpportunityResponse'
        total:
          type: integer
        page:
          type: integer
        page_size:
          type: integer
        total_pages:
          type: integer
        open_total:
          type: integer
        open_by_type:
          type: object
          additionalProperties:
            type: integer
      required:
        - open_by_type
        - open_total
        - page
        - page_size
        - rows
        - total
        - total_pages
    OpportunityResponse:
      type: object
      properties:
        identity:
          type: string
        type:
          $ref: '#/components/schemas/OpportunityType'
        subject_kind:
          $ref: '#/components/schemas/SubjectKind'
        subject_ref:
          type: string
          nullable: true
        subject_label:
          type: string
        score:
          type: integer
        effort:
          type: integer
        effort_band:
          $ref: '#/components/schemas/Level'
        tier:
          $ref: '#/components/schemas/PriorityTier'
        volume:
          type: integer
          nullable: true
        demand_known:
          type: boolean
        persona:
          type: string
          nullable: true
        page:
          type: string
          nullable: true
        acted_on_at:
          type: string
          format: date
          nullable: true
        dismissed:
          type: boolean
        reasons:
          type: array
          items:
            $ref: '#/components/schemas/ReasonResponse'
        suggested_tool:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/SuggestedTool'
      required:
        - acted_on_at
        - demand_known
        - dismissed
        - effort
        - effort_band
        - identity
        - page
        - persona
        - reasons
        - score
        - subject_kind
        - subject_label
        - subject_ref
        - suggested_tool
        - tier
        - type
        - volume
    OpportunityType:
      enum:
        - technical
        - content
        - offpage
      type: string
      description: |-
        * `technical` - technical
        * `content` - content
        * `offpage` - offpage
    SubjectKind:
      enum:
        - site
        - page
        - prompt
        - domain
      type: string
      description: |-
        * `site` - site
        * `page` - page
        * `prompt` - prompt
        * `domain` - domain
    Level:
      enum:
        - high
        - medium
        - low
      type: string
      description: |-
        * `high` - high
        * `medium` - medium
        * `low` - low
    PriorityTier:
      enum:
        - now
        - plan
        - quick
        - watch
      type: string
      description: |-
        * `now` - now
        * `plan` - plan
        * `quick` - quick
        * `watch` - watch
    ReasonResponse:
      type: object
      properties:
        code:
          $ref: '#/components/schemas/ReasonCode'
        identity:
          type: string
        facts:
          type: object
          additionalProperties:
            type: string
        suggested_tool:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/SuggestedTool'
        acted_on_at:
          type: string
          format: date
          nullable: true
      required:
        - code
        - facts
        - identity
        - suggested_tool
    SuggestedTool:
      enum:
        - content_brief
        - content_draft
        - schema
        - robots
        - llms_txt
        - inspect
        - meta_tags
      type: string
      description: |-
        * `content_brief` - content_brief
        * `content_draft` - content_draft
        * `schema` - schema
        * `robots` - robots
        * `llms_txt` - llms_txt
        * `inspect` - inspect
        * `meta_tags` - meta_tags
    ReasonCode:
      enum:
        - brand_absent
        - competitor_leads
        - no_page_serves
        - weak_match
        - bot_blocked
        - missing_structured_data
        - missing_llms_txt
        - renders_client_side
        - broken_pages
        - missing_sitemap
        - orphan_pages
        - thin_metadata
        - cited_competitor_not_brand
        - no_backlink_from_source
        - target_page_broken
      type: string
      description: |-
        * `brand_absent` - brand_absent
        * `competitor_leads` - competitor_leads
        * `no_page_serves` - no_page_serves
        * `weak_match` - weak_match
        * `bot_blocked` - bot_blocked
        * `missing_structured_data` - missing_structured_data
        * `missing_llms_txt` - missing_llms_txt
        * `renders_client_side` - renders_client_side
        * `broken_pages` - broken_pages
        * `missing_sitemap` - missing_sitemap
        * `orphan_pages` - orphan_pages
        * `thin_metadata` - thin_metadata
        * `cited_competitor_not_brand` - cited_competitor_not_brand
        * `no_backlink_from_source` - no_backlink_from_source
        * `target_page_broken` - target_page_broken
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: Authorization
      description: '`ApiKey pq_<prefix>_<secret>`. An API key gives read-only access.'

````

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