---
title: "Get Training Step Summaries"
method: GET
path: "/api/v1/train/{run_id}/step-summaries"
tags: ["training"]
---

# Get Training Step Summaries

`GET /api/v1/train/{run_id}/step-summaries`

## Request

- Base URL: `https://api.trajectory.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.trajectory.ai/api/v1/train/{run_id}/step-summaries`
- Auth: none declared

Per-training-step rollout, group, and termination aggregates over the caller's own trajectories, in ascending training-step order.

## Path parameters

- `run_id` string, required

## Query parameters

- `cursor` string, nullable
- `limit` integer

## Response `200`

Successful Response

- TrainingStepSummariesPage
  - `items` TrainingStepSummary[], required
    - `step` integer, required: Training step these rollout, group, and termination aggregates cover.
    - `trajectory_count` integer, required: Rollouts generated at this training step.
    - `completed_count` integer, required: Finished rollouts at this training step.
    - `avg_turns` number, nullable, required: Mean agent turns (num_steps) per finished rollout; a turn is an agent step inside a trajectory, distinct from a training step.
    - `min_turns` integer, nullable, required: Fewest agent turns among finished rollouts at this training step.
    - `max_turns` integer, nullable, required: Most agent turns among finished rollouts at this training step.
    - `avg_tokens` number, nullable, required: Mean generated tokens per finished rollout.
    - `min_tokens` integer, nullable, required: Fewest generated tokens among finished rollouts at this training step.
    - `max_tokens` integer, nullable, required: Most generated tokens among finished rollouts at this training step.
    - `tool_failure_count` integer, required: Finished rollouts with at least one tool failure (recoverable; not folded into error_count).
    - `tool_failure_exec_count` integer, required: Finished rollouts with at least one tool call that raised while executing.
    - `tool_failure_parse_count` integer, required: Finished rollouts with at least one tool call the runtime could not parse.
    - `tool_failure_unk_count` integer, required: Finished rollouts with at least one tool call that returned neither a result nor an error.
    - `correct_count` integer, required: Finished rollouts with reward = 1.
    - `partial_count` integer, required: Finished rollouts with 0 < reward < 1.
    - `incorrect_count` integer, required: Finished rollouts with reward = 0.
    - `error_count` integer, required: Finished rollouts whose termination_reason is ERROR (reward not meaningful).
    - `incomplete_count` integer, required: Finished rollouts stopped by TIMEOUT or TRUNCATION (real reward, task unfinished).
    - `termination_reasons` object, required: Finished rollouts per termination reason.
    - `group_count` integer, required: Rollout groups (distinct uid) at the training step.
    - `completed_groups` integer, required: Groups whose rollouts are all finished with a reward.
    - `no_signal_groups` integer, required: Completed groups whose rewards are all identical. Group-relative algorithms give them zero advantage; other algorithms can train on them.
    - `all_success_groups` integer, required: Subset of no_signal_groups with every reward >= 1.
    - `all_failed_groups` integer, required: Subset of no_signal_groups with every reward <= 0.
    - `used_groups` integer, required: Completed groups with non-identical rewards that the trainer consumed. This count need not equal the number of groups in the optimizer batch.
    - `discarded_groups` integer, required: Completed groups with reward contrast the trainer did not and will not consume: stale, or unconsumed once the step settled.
    - `pending_groups` integer, required: Completed groups with reward contrast the trainer has not consumed yet but still could.
    - `stale_groups` integer, required: Subset of discarded_groups with at least one STALE rollout.
    - `settled` boolean, required: True once used/discarded can no longer change: the run is terminal, or the trainer's latest step > step + max_steps_off_policy with a nonnegative staleness bound.
  - `next_cursor` string, nullable
  - `has_more` boolean, required
  - `training_run_id` string, required: Training run whose per-step summaries are returned.

## Changes

- **2026-10-15** `b42ef7e5dcfa`: 2 info
  - added the required property `items/items/max_tokens` to the response with the `200` status
  - added the required property `items/items/min_tokens` to the response with the `200` status
- **2026-10-13** `cdeafc877c06`: 1 breaking, 5 info
  - removed the required property `steps` from the response with the `200` status
  - added the new optional `query` request parameter `cursor`
  - added the new optional `query` request parameter `limit`
  - added the optional property `next_cursor` to the response with the `200` status
  - …2 more

[Operation history](https://skmtc.dev/trajectory/apis/trajectory-api/changes/api/v1/train/:run_id/step-summaries/get.md)

---

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