---
title: "Cancel a practice review"
method: POST
path: "/workspaces/{workspaceSlug}/practices/reviews/{reviewId}/cancel"
tags: ["Practice reviews"]
---

# Cancel a practice review

`POST /workspaces/{workspaceSlug}/practices/reviews/{reviewId}/cancel`

## 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}/cancel`
- Auth: HTTP bearer

## Path parameters

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

## Response `200`

Completed

- Review
  - `activeJobCount` integer, required
  - `batchId` string, uuid, nullable, required
  - `completedAt` string, date-time, nullable, required
  - `createdAt` string, date-time, required
  - `feedback` ReviewFeedbackCounts, required
    - `awaitingApproval` integer, required
    - `delivered` integer, required
    - `failed` integer, required
    - `ready` integer, required
    - `rejected` integer, required
    - `replaced` integer, required
    - `unconfirmed` integer, required
    - `withheld` integer, required
  - `id` string, uuid, required
  - `item` 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
  - `itemVersion` string, nullable, required
  - `jobCount` integer, required
  - `kind` 'ITEM' | 'SCAN', required
  - `model` string, nullable, required
  - `orderedAt` string, date-time, required
  - `origin` 'EVENT' | 'REQUEST' | 'SCHEDULE' | 'BACKFILL', required
  - `practices` ReviewPractice[], required
    - `itemCounts` ReviewItemCounts, required
      - `listed` integer, required
      - `notReviewed` integer, required
      - `reused` integer, required
      - `reviewed` integer, required
      - `withheld` integer, required
    - `number` integer, nullable, required
    - `practiceName` string, required
    - `practiceSlug` string, required
    - `practiceVersionId` string, nullable, required
    - `reason` string, nullable, required
    - `results` ReviewResultCounts, required
      - `couldNotDetermine` integer, required
      - `doesNotApply` integer, required
      - `met` integer, required
      - `notMet` integer, required
    - `script` PracticeScriptRun, required
      - `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
    - `status` 'QUEUED' | 'READY' | 'RUNNING' | 'DONE' | 'WITHHELD' | 'FAILED', 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
  - `results` ReviewResultCounts, required
    - `couldNotDetermine` integer, required
    - `doesNotApply` integer, required
    - `met` integer, required
    - `notMet` integer, required
  - `startedBy` ItemEvent, required
    - `decidedAt` string, date-time, nullable, required
    - `foundBy` 'WEBHOOK' | 'SYNC' | 'REQUEST' | 'BACKFILL' | 'SCHEDULE', required
    - `id` string, uuid, required
    - `itemId` string, required
    - `itemVersion` string, nullable, required
    - `name` string, required
    - `occurredAt` string, date-time, required
    - `reason` 'GATE_WITHHELD' | 'COOLDOWN_ACTIVE' | 'REQUEST_COOLDOWN_ACTIVE' | 'REQUESTER_QUOTA_EXHAUSTED' | 'CONCURRENT_DUPLICATE' | 'COALESCED' | 'OUT_OF_REVIEW_SCOPE' | 'BOT_AUTHOR' | 'BOT_REVIEWER' | 'STALE_ROLLOUT_REVISION' | 'WORKSPACE_INACTIVE' | 'PRACTICES_DISABLED' | 'NO_ACTIVE_PRACTICE' | 'REVIEW_MODEL_UNBOUND' | 'MEMBER_AI_DECLINED' | 'PERSON_DATA_ERASED' | 'FEEDBACK_MODE_OFF' | 'SUBJECT_UNLINKED' | 'MERGE_ACTOR_UNAVAILABLE' | 'MODEL_UNAVAILABLE' | 'BUDGET_EXHAUSTED' | 'ITEM_NOT_VISIBLE' | 'VERSION_SUPERSEDED' | 'PENDING_DEADLINE_EXCEEDED' | 'ITEM_GONE' | 'LEGACY_REVIEW_UNBOUND' | 'OCCASION_EVIDENCE_UNAVAILABLE' | 'null', nullable, required
    - `reviewId` string, uuid, nullable, required
    - `state` 'RECORDED' | 'WAITING' | 'STARTED' | 'WITHHELD' | 'EXPIRED', 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

## Other responses

- `202`: Accepted

## Changes

- **2026-10-22** `3592ab716973`: 2 warning
  - added the new `OCCASION_EVIDENCE_UNAVAILABLE` enum value to the `startedBy/anyOf[#/components/schemas/ItemEvent]/reason` response property for the response status `200`
  - added the new `OCCASION_EVIDENCE_UNAVAILABLE` enum value to the `startedBy/anyOf[#/components/schemas/ItemEvent]/reason` response property for the response status `202`
- **2026-10-18** `85eca223b167`: 4 info
  - added the required property `practices/items/script/anyOf[#/components/schemas/PracticeScriptRun]/noResultCause` to the response with the `200` status
  - added the required property `practices/items/script/anyOf[#/components/schemas/PracticeScriptRun]/noResultCause` to the response with the `202` status
  - added the required property `practices/items/script/anyOf[#/components/schemas/PracticeScriptRun]/reviewModelCalls` to the response with the `200` status
  - added the required property `practices/items/script/anyOf[#/components/schemas/PracticeScriptRun]/reviewModelCalls` to the response with the `202` 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/cancel/post.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)
