---
title: "Get a project issue"
method: GET
path: "/v1/projects/{projectId}/issues/{issueId}"
tags: ["projects"]
---

# Get a project issue

`GET /v1/projects/{projectId}/issues/{issueId}`

Get one tracked issue with its full details and recent run occurrences: which runs surfaced it and when.

## Path parameters

- `projectId` string, required
- `issueId` string, uuid, required

## Headers

- `Authorization` string, required

## Response `200`

Issue detail with recent occurrences

- ProjectsGetAProjectIssueResponse200
  - `issue` ProjectIssue, required
    - `id` string, uuid, required
    - `projectId` string, uuid, required
    - `testId` string, uuid, nullable, required
    - `status` 'open' | 'resolved' | 'false_positive', required — Triage status. Resolved issues reopen automatically if a run surfaces them again.
    - `issueType` 'issue' | 'warning', required
    - `source` 'agent_report' | 'step_failure', required — How the tracker learned about the issue: an explicit agent report or a failed test step.
    - `name` string, required
    - `description` string, required
    - `url` string, nullable, required
    - `severity` integer, nullable, required — 1 (low) to 5 (critical), when reported.
    - `category` string, nullable, required
    - `reproductionSteps` string[], nullable, required
    - `expectedBehavior` string, nullable, required
    - `actualBehavior` string, nullable, required
    - `screenshotUrl` string, nullable, required
    - `environment` 'production' | 'staging' | 'preview' | 'custom', required — Deployment bucket the issue is tracked on.
    - `environmentName` string, required — Resolved environment label ("Production", "Staging", "QA EU", ...). Issues are tracked per environment: the same bug on different environments is separate issues.
    - `occurrenceCount` integer, required — Number of runs that surfaced this issue.
    - `firstSeenRunId` string, uuid, nullable, required
    - `lastSeenRunId` string, uuid, nullable, required
    - `lastSeenAt` string, date-time, required
    - `resolvedAt` string, date-time, nullable, required
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
  - `occurrences` ProjectIssueOccurrence[], required
    - `runId` string, uuid, required
    - `runTitle` string, nullable, required
    - `tMs` integer, nullable, required — Recording offset (ms) when the issue was reported in that run.
    - `createdAt` string, date-time, required

## Other responses

- `400` — Bad Request - Invalid input parameters
- `401` — Unauthorized - Invalid or missing API key
- `404` — Project or issue not found
- `429` — Too Many Requests - Usage limit exceeded
- `500` — Internal Server Error
- `504` — Gateway Timeout - Test execution exceeded time limit

---

[API](https://skmtc.net/tester/apis/testerarmy-api.md) · [All operations](https://skmtc.net/tester/apis/testerarmy-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/tester/testerarmy-api/revisions/008f119d866c/schema)
