---
title: "List Requirement Tests"
method: GET
path: "/marketing/requirement-tuning/requirements/{requirement_id}/tests"
tags: ["marketing-requirement-tuning"]
---

# List Requirement Tests

`GET /marketing/requirement-tuning/requirements/{requirement_id}/tests`

## Request

- Base URL: `https://api.kobaltlabs.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.kobaltlabs.com/marketing/requirement-tuning/requirements/{requirement_id}/tests`
- Auth: none declared

This rule's recent tests, newest first — the attempts the loop is made of.

Reaps first, so a test abandoned by a restarted process reads as stopped rather than running. A
read that writes, deliberately: the alternative is a row nobody can ever leave, which is worse
than a GET with a side effect nobody can observe except as the truth.

## Path parameters

- `requirement_id` string, uuid, required

## Query parameters

- `limit` integer

## Response `200`

Successful Response

- RequirementTestSummary[]
  - `test_id` string, uuid, required
  - `status` 'running' | 'succeeded' | 'partial' | 'failed', required: Where a test is, and how it ended. `RUNNING` is the state the request returns in: the row is written and the fan-out dispatched, so the surface has something to poll from the first tick rather than a spinner with nothing behind it. `PARTIAL` is its own member rather than a flag on `SUCCEEDED`. A test where two of twenty-two assets never answered is a real result worth keeping — eighteen answers is the answer — but a suggestion built from it has to know it is reading an incomplete picture, and a reviewer deciding whether their edit worked must not be shown eighteen verdicts as if they were twenty-two.
  - `created` string, date-time, required
  - `finished_at` string, date-time, nullable
  - `requirement_text` string, required
  - `totals` RequirementTestTotals: The sentence the surface leads with, as numbers. `agree + disagree == reviewed_judged`, and `unreviewed`, `undetermined`, `not_considered`, `unfinished` and `omitted` all sit outside both — so a reader can always tell what the ratio is a ratio *of*. That is the one arithmetic property this surface cannot get wrong: a bench claiming twenty of twenty-two while silently counting the nine nobody reviewed is worse than no bench.
    - `total` integer
    - `reviewed_judged` integer
    - `agree` integer
    - `disagree` integer
    - `unreviewed` integer
    - `undetermined` integer
    - `not_considered` integer
    - `unfinished` integer
    - `pending` integer
    - `omitted` integer
  - `tests_current_revision` boolean

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/kobaltlabs/apis/fastapi.md) - [All operations](https://skmtc.dev/kobaltlabs/apis/fastapi/llms.txt) - [OpenAPI document](https://skmtc.dev/kobaltlabs/apis/fastapi/revisions/8587332d5e43?raw)
