---
title: "Get Verification Drill"
method: GET
path: "/api/v1/doc-verification-suites/{suite_id}/drills/{drill_id}"
tags: ["authed"]
---

# Get Verification Drill

`GET /api/v1/doc-verification-suites/{suite_id}/drills/{drill_id}`

## Request

- Base URL: `https://api.teaflask.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.teaflask.com/api/v1/doc-verification-suites/{suite_id}/drills/{drill_id}`
- Auth: none declared

## Path parameters

- `suite_id` string, uuid, required
- `drill_id` string, uuid, required

## Response `200`

Successful Response

- VerificationDrillDetailResponse: The drill plus its full report — the per-mutant verdicts and repair resolution that make the robustness score explainable.
  - `id` string, uuid, required
  - `organization_id` string, uuid, required
  - `suite_id` string, uuid, required
  - `trigger` 'authoring' | 'manual', required: Manual drills bypass the enable/sampling gate.
  - `status` 'running' | 'succeeded' | 'failed', required
  - `mutant_count` integer, required
  - `caught_count` integer, nullable, required
  - `escaped_count` integer, nullable, required
  - `errored_count` integer, nullable, required
  - `error` string, nullable, required
  - `started_at` string, date-time, required
  - `finished_at` string, date-time, nullable, required
  - `report` SuiteDrillReport, required: The drill_report jsonb: per-mutant records plus how the repair round resolved. Escapes are recorded here, never looped on.
    - `mutants` DrillMutantRecord[], required
      - `repository` string, required
      - `claim_excerpt` string, required
      - `summary` string, required
      - `outcome` 'caught' | 'escaped' | 'error', required: How one mutant fared against the suite: caught = the run went red, escaped = it stayed green, error = the engine could not judge (the diff failed to apply, the run errored, or the tree could not be reset).
      - `outcome_after_repair` 'caught' | 'escaped' | 'error': How one mutant fared against the suite: caught = the run went red, escaped = it stayed green, error = the engine could not judge (the diff failed to apply, the run errored, or the tree could not be reset).
      - `detail` string, nullable
    - `repair` 'not_needed' | 'activated' | 'discarded' | 'stale' | 'repair_failed', required: What became of the drill's one repair round: not needed (nothing escaped), activated (the repaired suite ran green officially and superseded the drilled one), discarded (its official run was not green), stale (the drilled suite lost the revision's active slot while the drill ran — the candidate was discarded rather than clobbering the fresher suite), or repair_failed (the repair round itself broke; the measurement stands and the escapes are recorded).
    - `repaired_suite_id` string, uuid, nullable

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `405`: Method not allowed
- `422`: Validation error
- `500`: Internal server error

---

[API](https://skmtc.dev/teaflask/apis/teaflask-api.md) - [All operations](https://skmtc.dev/teaflask/apis/teaflask-api/llms.txt) - [OpenAPI document](https://skmtc.dev/teaflask/apis/teaflask-api/revisions/d23e9286b847?raw)
