---
title: "List scripts executed in a review"
method: GET
path: "/workspaces/{workspaceSlug}/practices/reviews/{reviewId}/practice-scripts"
tags: ["Practice reviews"]
---

# List scripts executed in a review

`GET /workspaces/{workspaceSlug}/practices/reviews/{reviewId}/practice-scripts`

## Request

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

## Path parameters

- `workspaceSlug` string, required
- `reviewId` string, uuid, required

## Response `200`

OK

- PracticeScriptRun[]
  - `attempt` integer, required
  - `durationMs` integer, nullable, required
  - `error` string, nullable, required
  - `finishedAt` string, date-time, required
  - `jobId` string, uuid, required
  - `models` PracticeScriptModel[], required
    - `cacheReadTokens` integer, required
    - `cacheWriteTokens` integer, required
    - `calls` integer, required
    - `dataHandlingTier` 'IN_HOUSE' | 'CLOUD' | 'UNDECLARED' | 'null', nullable, required
    - `inputTokens` integer, required
    - `kind` 'CHAT' | 'DECISION' | 'EMBEDDING' | 'RERANKING', required
    - `modelId` string, nullable, required
    - `outputTokens` integer, required
  - `noResultCause` 'EVIDENCE_NOT_READ' | 'SESSION_ENDED' | 'null', nullable, required: Why a run that stopped as OFF_FORMAT has no result, when the runner's counts or the built-in's contract prove it. Absent otherwise; then the stop reason stands alone.
  - `practiceId` string, required
  - `practiceVersionId` string, required
  - `reviewModelCalls` integer, nullable, required: Model calls of the practice's review sessions, as the runner counted them. Not the calls the proxy billed: those are counted for the whole review. Absent when the runner did not record them.
  - `scriptKind` 'BUILTIN' | 'CUSTOM', required
  - `status` 'OK' | 'WITHHELD' | 'FAILED' | 'NOT_REACHED' | 'NOT_FINISHED', required
  - `stopReason` 'UNAVAILABLE' | 'BUDGET' | 'DEADLINE' | 'TOO_LARGE' | 'OFF_FORMAT' | 'REFUSED' | 'ERROR' | 'CANCELLED' | 'INVALID_SCRIPT' | 'INVALID_CANDIDATE' | 'null', nullable, required

## Changes

- **2026-10-18** `85eca223b167`: 2 info
  - added the required property `items/noResultCause` to the response with the `200` status
  - added the required property `items/reviewModelCalls` to the response with the `200` status
- **2026-10-17** `4b8a89bf492c`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/hephaestus-build/apis/hephaestus-api/changes/workspaces/:workspaceSlug/practices/reviews/:reviewId/practice-scripts/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)
