---
title: "Get Training Sample"
method: GET
path: "/training/samples/{sample_id}"
tags: ["training"]
---

# Get Training Sample

`GET /training/samples/{sample_id}`

## Request

- Base URL: `https://api.verdun.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.verdun.ai/training/samples/{sample_id}`
- Auth: HTTP bearer

## Path parameters

- `sample_id` string, required

## Response `200`

Successful Response

- TrainingSampleDetailModel
  - `id` string, uuid, required: UUID of the training sample
  - `event_id` string, uuid, nullable: Drill-back to the live event; null once that event is deleted
  - `source_event_id` string, uuid, required: Permanent provenance key: the event this sample snapshotted
  - `created_at` string, date-time, required: When the sample was captured
  - `occurred_at` string, date-time, required: Motion time (ingestor-reported, falling back to event creation)
  - `evaluated_at` string, date-time, required: When the disposition was written
  - `ai_incident_type` string, nullable: AI incident classification snapshot
  - `ai_severity` string, nullable: AI severity snapshot
  - `ai_confidence_band` string, nullable: AI self-reported confidence band snapshot
  - `ai_recommended_action` string, nullable: AI operator-aligned recommendation snapshot; null when the eval carried none
  - `operator_disposition` string, required: Enum member name (stable across display-label renames)
  - `expected_action` string, nullable: The operator disposition crosswalked into the recommendation's 4-class space
  - `is_disagreement` boolean, nullable: Three-state: true/false when AI and operator are comparable; null when the AI carried no recommendation
  - `actor` string, required: Who authored the disposition; only 'operator' rows are ground truth
  - `llm_prompt_version` string, nullable: Prompt version the original eval ran under
  - `llm_model` string, nullable: Model that served the original eval
  - `clip_copy_status` string, required: Whether the clip was durably copied into the training prefix
  - `kvs_stream_name` string, nullable: Source camera stream
  - `zone` string, nullable: Camera zone label
  - `is_demo` boolean, required: Sample originated from an owner-uploaded demo clip
  - `rerun_count` integer, required: Number of rerun experiments recorded for this sample
  - `capture_version` string, required: Version of the capture logic that wrote this snapshot
  - `original_clip_s3_key` string, required: S3 key of the source clip at capture time
  - `training_clip_s3_key` string, nullable: S3 key of the durable corpus copy; null when the copy failed
  - `clip_copy_error` string, nullable: Copy failure detail, when any
  - `ai_suggested_disposition` string, nullable: AI suggested disposition snapshot
  - `ai_needs_human_review` boolean, nullable: AI ambiguity flag snapshot
  - `ai_rationale` string, nullable: AI rationale snapshot
  - `llm_provider` string, nullable: Provider that served the original eval
  - `detection_provider` string, nullable: CV detection provider snapshot
  - `detection_model_version` string, nullable: CV detection model version snapshot
  - `pipeline_version` string, nullable: Pipeline version the original eval ran under
  - `roi_config_version` string, nullable: ROI config version snapshot
  - `schema_version` string, nullable: Interpretation schema version snapshot
  - `ai_total_ms` integer, nullable: Original eval end-to-end latency in milliseconds
  - `ai_cost_usd` string, nullable: Original eval inference cost
  - `ai_artifacts` object, nullable: {debug, detections, keyframes, roi_hits} snapshotted from the interpretation's child tables
  - `operator_notes` string, required: Disposition notes (agent rows carry the agent's rationale)
  - `operator_closeout` object, nullable: Structured close-out snapshot {schema_version, observed, actions[], outcome, outcome_note}; null for rows captured before the feature, false-alarm fast-path rows that submitted none, and agent rows
  - `operator_id` string, uuid, nullable: Human who dispositioned; null for agent rows
  - `camera_context` string, nullable: The composed SITE/CAMERA context snapshot re-runs replay against
  - `site_timezone` string, nullable: Site timezone at capture time
  - `event_local_time` string, nullable: Event time in the site's local timezone (ISO)
  - `camera_id` string, uuid, nullable: Camera the event came from (denormalized)
  - `site_id` string, uuid, nullable: Site the event came from (denormalized)
  - `parent_id` string, uuid, nullable: Client the event came from (denormalized)
  - `event_source` string, nullable: Ingest source label from the event
  - `motion_score` number, nullable: Ingestor motion score from the event
  - `event_summary` string, nullable: Event summary text at capture time
  - `thread_id` string, uuid, nullable: Cross-camera incident thread, when any
  - `reruns` TrainingRerunModel[], required: Replay experiments against this sample, newest first
    - `id` string, uuid, required: UUID of the rerun row
    - `sample_id` string, uuid, required: Training sample this rerun replayed
    - `created_at` string, date-time, required: When the rerun was executed
    - `requested_by` string, uuid, nullable: Owner who requested the rerun
    - `prompt_profile` string, required: Prompt profile the clip was replayed against
    - `status` string, required: Whether the AI pipeline returned a result; failures are persisted too
    - `error` string, nullable: Failure detail when status is 'failed'
    - `rerun_incident_type` string, nullable: Incident type from the rerun result
    - `rerun_severity` string, nullable: Severity from the rerun result
    - `rerun_confidence_band` string, nullable: Confidence band from the rerun result
    - `rerun_recommended_action` string, nullable: Operator-aligned recommendation from the rerun result
    - `rerun_rationale` string, nullable: Model rationale from the rerun result
    - `llm_provider` string, nullable: Provider that served the rerun
    - `llm_model` string, nullable: Model that served the rerun
    - `llm_prompt_version` string, nullable: Prompt version the rerun ran under
    - `pipeline_version` string, nullable: Pipeline version the rerun ran under
    - `latency_ms` integer, nullable: Wall-clock rerun latency in milliseconds
    - `cost_usd` string, nullable: Inference cost reported by the pipeline
    - `matches_original` boolean, nullable: Rerun recommendation vs the sample's original AI recommendation; null when either side carries none
    - `matches_operator` boolean, nullable: Rerun recommendation vs the human's crosswalked expected action; null when either side carries none

## Other responses

- `422`: Validation Error

---

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