---
title: "Get Run"
method: GET
path: "/internal/evals/requirement-applicability/runs/{applicability_run_id}"
tags: ["internal"]
---

# Get Run

`GET /internal/evals/requirement-applicability/runs/{applicability_run_id}`

## 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/internal/evals/requirement-applicability/runs/{applicability_run_id}`
- Auth: none declared

## Path parameters

- `applicability_run_id` string, uuid, required

## Response `200`

Successful Response

- ApplicabilityRunDetail
  - `summary` ApplicabilityRunSummary, required
    - `applicability_run_id` string, uuid, required
    - `company_id` string, uuid, required
    - `company_name` string, nullable, required
    - `file_id` string, uuid, required
    - `upload_id` string, uuid, required
    - `collateral_filename` string, nullable, required
    - `collateral_type` 'Agent Call Flow' | 'Audio' | 'Billboard' | 'Communications' | 'Conversation Design' | 'Email' | 'Help Center Article' | 'In-App' | 'Mailer' | 'Organic Social' | 'Paid Advertising' | 'Paid Search' | 'Paid Social' | 'Press Release' | 'Procedure/Decision Tree' | 'Support Agent Training' | 'TV' | 'Web' | 'Wiki' | 'Other', required
    - `status` 'queued' | 'running' | 'succeeded' | 'failed', required: Lifecycle of one dashboard run. Mirrors `DecompositionStatus` deliberately.
    - `stage` 'queued' | 'downloading' | 'narrowing' | 'evaluating' | 'comparing' | 'done', required: What the run is doing right now. Committed *before* the work it names starts, so a watcher sees the stage currently taking the time rather than the last one that finished.
    - `error` string, nullable, required
    - `created` string, date-time, required
    - `started_at` string, date-time, nullable, required
    - `finished_at` string, date-time, nullable, required
    - `requested_by_email` string, nullable, required
    - `candidates_total` integer, required
    - `candidates_surviving` integer, required
    - `risks_produced` integer, required
  - `narrowing` NarrowingSummary, required
    - `guidelines_considered` integer, required
    - `guidelines_without_rules` integer, required
    - `candidates_total` integer, required
    - `candidates_surviving` integer, required
    - `excluded_by` object, required
    - `unresolved_preset_ids` string[], required
    - `skipped` NarrowingSkipped[], required
  - `candidates` CandidateResponse[], required
    - `requirement_id` string, uuid, required
    - `revision_id` string, uuid, required
    - `guideline_file_id` string, uuid, required
    - `guideline_filename` string, nullable, required
    - `requirement_text` string, required
    - `judging_guidance` string, nullable, required
    - `state` 'active' | 'disabled' | 'archived' | 'superseded' | 'proposed', required: Whether a requirement is in the working library, and if not, why not. All of them are recorded as revisions, so every one is reversible and readable. ARCHIVED and SUPERSEDED are deliberately distinct: ARCHIVED is a person deciding this obligation does not apply to them, SUPERSEDED is a newer decomposition of the same guideline taking over. A regeneration must never overwrite the first with the second — that would erase a human decision.
    - `collateral_types` MarketingCollateralType[], nullable, required
    - `trigger_terms` string[], required
    - `matched_trigger_terms` string[], required
    - `section_label` string, nullable, required
    - `source_page` integer, nullable, required
    - `included` boolean, required
    - `exclusions` ApplicabilityExclusion[], required
    - `batch_index` integer, nullable, required
    - `batch_key` string, nullable, required
  - `risks` ProducedRiskResponse[], required
    - `applicability_risk_id` string, uuid, required
    - `requirement_id` string, uuid, required
    - `revision_id` string, uuid, required
    - `requirement_text` string, required
    - `guideline_filename` string, nullable, required
    - `guideline_file_id` string, uuid, nullable, required
    - `guideline_upload_id` string, uuid, nullable, required
    - `requirement_citation` object, nullable, required
    - `requirement_source_page` integer, nullable, required
    - `section_label` string, nullable, required
    - `batch_index` integer, required
    - `short_text` string, required
    - `explanation` string, nullable, required
    - `remediation` string, nullable, required
    - `severity` 'low' | 'medium' | 'high', required
    - `citations` object[], required
    - `match_kind` 'matches_production_risk' | 'net_new', required: A reviewer's judgment of one newly produced risk against production's risks. The ask names three outcomes — matches a flag, matches a dismissal, net-new. Only the third is recorded here: the first two are the *matched risk's* verdict, which is already stored on that risk, so recording them again would let the two disagree the moment somebody re-reviews.
    - `matched_risk_id` string, uuid, nullable, required
    - `matched_risk_short_text` string, nullable, required
    - `matched_risk_verdict` 'flagged' | 'dismissed_over_flagged' | 'dismissed_accepted' | 'dismissed_other' | 'unreviewed', required: The reviewer's decision on a production risk, derived from its stored columns. `SUPERSEDED` is deliberately **not** a member: obsoletion is a property of the run, not a decision by a reviewer, and a risk can be dismissed and later superseded. Collapsing them would throw away the reviewer's decision — which is the thing this dashboard exists to compare against. It travels as its own boolean.
    - `match_note` string, nullable, required
    - `matched_by_email` string, nullable, required
    - `matched_at` string, date-time, nullable, required
  - `comparison` ProductionComparison, required
    - `production_run_id` string, uuid, nullable, required
    - `production_run_time` string, date-time, nullable, required
    - `risks_total` integer, required
    - `internal_files_on_run` integer, required
    - `production_run_is_latest` boolean, required
    - `suppressed_guideline_risks` integer, required
    - `guideline_risks` ProductionRiskResponse[], required
      - `risk_id` string, uuid, required
      - `short_text` string, nullable, required
      - `source_clause` string, nullable, required
      - `severity` 'low' | 'medium' | 'high', required
      - `verdict` 'flagged' | 'dismissed_over_flagged' | 'dismissed_accepted' | 'dismissed_other' | 'unreviewed', required: The reviewer's decision on a production risk, derived from its stored columns. `SUPERSEDED` is deliberately **not** a member: obsoletion is a property of the run, not a decision by a reviewer, and a risk can be dismissed and later superseded. Collapsing them would throw away the reviewer's decision — which is the thing this dashboard exists to compare against. It travels as its own boolean.
      - `dismiss_reason` string, nullable, required
      - `dismiss_note` string, nullable, required
      - `reviewer_notes` string, nullable, required
      - `superseded` boolean, required
      - `suppressed_by_rule_id` string, uuid, nullable, required
      - `is_reviewer_added` boolean, required
    - `guideline_attribution_is_reliable` boolean
    - `verdict_counts` object, required
  - `report` ApplicabilityReport, required: The figures the run produced, all of them measured rather than assumed.
    - `batch_count` integer, nullable, required
    - `batch_max` integer, required
    - `llm_calls` integer, required
    - `input_tokens` integer, required
    - `output_tokens` integer, required
    - `cache_read_input_tokens` integer, required
    - `cache_creation_input_tokens` integer, required
    - `citations_returned` integer, required
    - `citations_discarded` integer, nullable, required
    - `citations_ungrounded` integer, nullable, required
    - `refused_answers` integer, required
    - `model` string, required
    - `temperature` number, required
    - `elapsed_seconds` number, nullable, required

## Other responses

- `422`: Validation Error

## Changes

- **2026-09-02** `425d5b8a3c17`: 1 warning
  - added the new `proposed` enum value to the `candidates/items/state` response property for the response status `200`

[Operation history](https://skmtc.dev/kobaltlabs/apis/kobaltlabs-api/changes/internal/evals/requirement-applicability/runs/:applicability_run_id/get.md)

---

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