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

# List issues

> Retrieves a list of Issues associated with a Project



## OpenAPI

````yaml /openapi/qlty-api.json get /gh/{ownerKeyOrId}/projects/{projectKeyOrId}/issues
openapi: 3.1.0
info:
  title: Qlty API
  version: 1.0.0
  description: >-
    The Qlty API is organized around REST. It provides predictable,
    resource-oriented URLs, accepts JSON-encoded request bodies, and returns
    JSON-encoded responses.
servers:
  - url: https://api.qlty.sh
security:
  - BearerAuth: []
  - BasicAuth: []
tags:
  - name: User
    description: Operations for the authenticated user
  - name: Workspaces
    description: Operations for managing workspaces
  - name: Projects
    description: Operations for managing projects
  - name: Issues
    description: Operations for managing issues
  - name: Metrics
    description: Operations for retrieving metrics
paths:
  /gh/{ownerKeyOrId}/projects/{projectKeyOrId}/issues:
    get:
      tags:
        - Issues
      summary: List issues
      description: Retrieves a list of Issues associated with a Project
      operationId: listIssues
      parameters:
        - name: ownerKeyOrId
          in: path
          required: true
          description: The key or ID of the Workspace that owns the Project
          schema:
            type: string
        - name: projectKeyOrId
          in: path
          required: true
          description: The key or ID of the Project to retrieve issues for
          schema:
            type: string
        - name: category
          in: query
          description: Filter issues by category
          schema:
            type: array
            items:
              $ref: '#/components/schemas/MiniIssueCategory'
        - name: level
          in: query
          description: Filter issues by severity level
          schema:
            type: array
            items:
              $ref: '#/components/schemas/MiniLevel'
        - name: status
          in: query
          description: Filter issues by status (defaults to open only)
          schema:
            type: array
            items:
              $ref: '#/components/schemas/MiniIssueStatus'
        - name: tool
          in: query
          description: >-
            Filter issues by the tool that detected them (e.g., eslint,
            typescript)
          schema:
            type: array
            items:
              type: string
        - name: page[limit]
          in: query
          description: Maximum number of items to return
          schema:
            type: integer
        - name: page[offset]
          in: query
          description: Number of items to skip
          schema:
            type: integer
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListIssuesResponse'
              example:
                meta:
                  hasMore: false
                data:
                  - id: 49b5e789-cff8-47d2-bd1c-72a469980e15
                    fingerprint: 3a1b2c3d4e5f6g7h8i9j
                    tool: eslint
                    ruleKey: no-unused-vars
                    message: Variable is defined but never used
                    category: lint
                    level: medium
                    status: open
                    documentationUrl: https://eslint.org/docs/rules/no-unused-vars
                    location:
                      path: src/components/Button.tsx
                      startLine: 15
                      endLine: 15
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/TooManyRequestsError'
components:
  schemas:
    MiniIssueCategory:
      type: string
      enum:
        - bug
        - vulnerability
        - structure
        - duplication
        - security_hotspot
        - performance
        - documentation
        - type_check
        - style
        - anti_pattern
        - accessibility
        - dead_code
        - lint
        - secret
        - dependency_alert
    MiniLevel:
      type: string
      enum:
        - note
        - fmt
        - low
        - medium
        - high
    MiniIssueStatus:
      type: string
      enum:
        - open
        - ignored
    ListIssuesResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/MiniIssue'
          description: List of Issue items returned in the response
        meta:
          $ref: '#/components/schemas/PaginationMeta'
      required:
        - data
        - meta
    MiniIssue:
      type: object
      properties:
        id:
          type: string
          description: The UUID of the Issue
        fingerprint:
          type: string
          description: A unique hash that identifies this specific issue instance
        tool:
          type: string
          description: The name of the tool that detected the issue (e.g., eslint, rubocop)
        ruleKey:
          type: string
          description: The specific rule or check that was violated
        message:
          type: string
          description: Human-readable description of the issue
        category:
          $ref: '#/components/schemas/MiniIssueCategory'
        level:
          $ref: '#/components/schemas/MiniLevel'
        status:
          $ref: '#/components/schemas/MiniIssueStatus'
        documentationUrl:
          type: string
          description: URL to documentation about this issue type or rule
        location:
          $ref: '#/components/schemas/MiniLocation'
      required:
        - id
        - fingerprint
        - tool
        - ruleKey
        - message
        - category
        - level
        - status
        - location
    PaginationMeta:
      type: object
      properties:
        hasMore:
          type: boolean
          description: Indicates if there are more items available for pagination
      required:
        - hasMore
    ErrorBody:
      type: object
      properties:
        status:
          type: string
          description: The HTTP status code of the error
        title:
          type: string
          description: A short, human-readable summary of the error
        detail:
          type: string
          description: A detailed explanation of the error
      required:
        - status
    MiniLocation:
      type: object
      properties:
        path:
          type: string
          description: >-
            The file path where the issue was detected (e.g.,
            src/components/Button.tsx)
        startLine:
          type: integer
          description: The line number where the issue begins
        endLine:
          type: integer
          description: The line number where the issue ends
      required:
        - path
  responses:
    BadRequestError:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
    UnauthorizedError:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
    ForbiddenError:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
    NotFoundError:
      description: Not Found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
    TooManyRequestsError:
      description: Too Many Requests
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBody'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: Generate an API token at https://qlty.sh/user/settings/tokens
    BasicAuth:
      type: http
      scheme: basic
      description: Use your API token as the username with an empty password

````