---
title: "Read a scan report"
method: GET
path: "/workspaces/{workspaceSlug}/practices/scans/{scanId}/report"
tags: ["scan"]
---

# Read a scan report

`GET /workspaces/{workspaceSlug}/practices/scans/{scanId}/report`

## Request

- Base URL: `/` (relative, and the document was published on a file host, not at the API’s origin)
- URL: `/workspaces/{workspaceSlug}/practices/scans/{scanId}/report`
- Auth: HTTP bearer

## Path parameters

- `workspaceSlug` string, required
- `scanId` string, uuid, required

## Response `200`

OK

- ScanReport
  - `availability` ScanAvailability, required
    - `expired` boolean, required
    - `expiredProofPairs` integer, required
    - `rawRetentionEndsAt` string, date-time, nullable, required
    - `withheldProofPairs` integer, required
  - `baselineScanId` string, uuid, nullable, required
  - `comparison` 'COMPARABLE' | 'FIRST_SCAN' | 'METHOD_CHANGED' | 'STANDARD_CHANGED' | 'INCOMPLETE' | 'MIXED', required
  - `complete` boolean, required
  - `counts` ScanCounts, required
    - `couldNotDetermine` integer, required
    - `doesNotApply` integer, required
    - `files` integer, nullable, required
    - `met` integer, required
    - `notMet` integer, required
    - `notReviewed` integer, required
    - `openProblems` integer, required
    - `practiceItemPairs` integer, nullable, required
    - `problems` integer, required
    - `reused` integer, required
    - `reviewed` integer, required
    - `withheld` integer, required
  - `exclusions` ScanExcludedFile[], nullable, required
    - `itemId` string, required
    - `path` string, required
    - `reason` 'FILE_TOO_LARGE' | 'BINARY_FILE', required
    - `sizeBytes` integer, required
  - `listingComplete` boolean, required
  - `notReviewedReasons` ReasonCount[], required
    - `count` integer, required
    - `description` string, required
    - `reason` string, required
  - `practices` ScanPracticeReport[], required
    - `comparison` 'COMPARABLE' | 'FIRST_SCAN' | 'METHOD_CHANGED' | 'STANDARD_CHANGED' | 'INCOMPLETE' | 'MIXED', required
    - `counts` ScanCounts, required
      - `couldNotDetermine` integer, required
      - `doesNotApply` integer, required
      - `files` integer, nullable, required
      - `met` integer, required
      - `notMet` integer, required
      - `notReviewed` integer, required
      - `openProblems` integer, required
      - `practiceItemPairs` integer, nullable, required
      - `problems` integer, required
      - `reused` integer, required
      - `reviewed` integer, required
      - `withheld` integer, required
    - `listingComplete` boolean, required
    - `method` ReviewMethod, required
      - `epoch` integer, required
      - `modelDigest` string, required
      - `models` BoundModelSlot[], required
        - `kind` 'CHAT' | 'DECISION' | 'EMBEDDING' | 'RERANKING', required
        - `model` FrozenModel, required
          - `modelId` string, required
          - `options` object, required
          - `providerModelId` string, required
          - `providerProtocol` string, required
          - `reasoningEffort` string, nullable, required
        - `slot` string, required
    - `number` integer, required
    - `practiceId` string, required
    - `practiceName` string, required
    - `practiceSlug` string, required
    - `practiceVersionId` string, required
    - `reason` string, nullable, required
    - `reviewDigest` string, required
    - `status` 'QUEUED' | 'READY' | 'RUNNING' | 'DONE' | 'WITHHELD' | 'FAILED', required
  - `problemChanges` ProblemChanges, required
    - `absent` integer, required
    - `new` integer
    - `unchanged` integer, required
    - `updated` integer, required
  - `recordedCounts` ScanCounts, required
    - `couldNotDetermine` integer, required
    - `doesNotApply` integer, required
    - `files` integer, nullable, required
    - `met` integer, required
    - `notMet` integer, required
    - `notReviewed` integer, required
    - `openProblems` integer, required
    - `practiceItemPairs` integer, nullable, required
    - `problems` integer, required
    - `reused` integer, required
    - `reviewed` integer, required
    - `withheld` integer, required
  - `removalGuard` RemovalGuard, required
    - `previousFiles` integer, required
    - `state` 'APPLIED' | 'NOT_NEEDED' | 'INCOMPLETE_LISTING' | 'SUSPECT_LISTING', required
    - `wouldRemove` integer, required
  - `scan` ScanSummary, required
    - `baselineScanId` string, uuid, nullable, required
    - `completedAt` string, date-time, nullable, required
    - `counts` ScanCounts, required
      - `couldNotDetermine` integer, required
      - `doesNotApply` integer, required
      - `files` integer, nullable, required
      - `met` integer, required
      - `notMet` integer, required
      - `notReviewed` integer, required
      - `openProblems` integer, required
      - `practiceItemPairs` integer, nullable, required
      - `problems` integer, required
      - `reused` integer, required
      - `reviewed` integer, required
      - `withheld` integer, required
    - `createdAt` string, date-time, required
    - `id` string, uuid, required
    - `itemVersion` string, required
    - `origin` 'EVENT' | 'REQUEST' | 'SCHEDULE' | 'BACKFILL', required
    - `practiceCount` integer, required
    - `ref` string, required
    - `repository` ItemRef, required
      - `container` string, nullable, required
      - `id` string, required
      - `kind` string, required
      - `label` string, required
      - `parentId` string, nullable, required
      - `path` string, nullable, required
      - `provider` 'GITHUB' | 'GITLAB' | 'SLACK' | 'OUTLINE' | 'null', nullable, required
      - `removedAt` string, date-time, nullable, required
      - `title` string, nullable, required
      - `url` string, nullable, required
    - `requestedBy` AccountRef, required
      - `avatarUrl` string, nullable, required
      - `displayName` string, nullable, required
      - `id` string, required
      - `identities` ProviderIdentityRef[], required
        - `avatarUrl` string, nullable, required
        - `displayName` string, nullable, required
        - `login` string, nullable, required
        - `provider` 'GITHUB' | 'GITLAB' | 'SLACK' | 'OUTLINE', required
      - `status` 'UNCLAIMED' | 'ACTIVE' | 'SUSPENDED' | 'DELETING' | 'DELETED', required
    - `startedAt` string, date-time, nullable, required
    - `status` 'QUEUED' | 'RUNNING' | 'COMPLETE' | 'PARTIAL' | 'FAILED' | 'CANCELLED', required
    - `stopReason` 'TIMED_OUT' | 'EXECUTION_FAILED' | 'PREPARATION_FAILED' | 'PROCESSING_FAILED' | 'PERSON_DATA_ERASED' | 'STALE_ROLLOUT_REVISION' | 'CANCELLED_BY_ADMIN' | 'REPLACED' | 'LEGACY_FAILURE' | 'EXECUTION_INCOMPLETE' | 'RESULT_WITHHELD' | 'READINESS_REFUSED' | 'SUSPECT_LISTING' | 'BUDGET' | 'USAGE_UNVERIFIABLE' | 'DEADLINE' | 'CANCELLED' | 'ENUMERATION_FAILED' | 'ENUMERATION_LIMIT' | 'NO_SCAN_PRACTICES' | 'MODEL_CHANGED' | 'MODEL_UNAVAILABLE' | 'ERROR' | 'LEGACY_SCOPE_UNKNOWN' | 'CONTRACT_CHANGED' | 'null', nullable, required
  - `withheldReasons` ReasonCount[], required
    - `count` integer, required
    - `description` string, required
    - `reason` string, required

## Changes

- **2026-10-17** `4b8a89bf492c`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/hephaestus-build/apis/hephaestus-api/changes/workspaces/:workspaceSlug/practices/scans/:scanId/report/get.md)

---

[API](https://skmtc.dev/hephaestus-build/apis/hephaestus-api.md) · [All operations](https://skmtc.dev/hephaestus-build/apis/hephaestus-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hephaestus-build/apis/hephaestus-api/revisions/3592ab716973?raw)
