# Get a generation's transcript

> Returns one generation's turn read back as an ordered sequence of steps: what it was asked, each model step with its tool calls and results, and how it ended.

<Heading
  as={"h1"}
  className={"openapi__heading"}
  children={"Get a generation's transcript"}
>
</Heading>

<MethodEndpoint
  method={"get"}
  path={"/api/v1/generations/{generation_id}/transcript"}
  context={"endpoint"}
>
  
</MethodEndpoint>

Returns one generation's turn read back as an ordered sequence of steps: what it was asked, each model step with its tool calls and results, and how it ended.

The transcript is assembled at read time from the generation record and the trace's steps object; nothing is stored, so it cannot outlive the content it projects. Requires `traces:GetTrace` in addition to `generations:GetGeneration`, because the response merges content from both resources.

A generation whose content is unavailable — never written under zero-retention, or cleared by a purge — returns `200` with the skeleton rather than an error: `input` and `output` are null, `steps` is empty, and the `content_redacted_*` fields say which happened. `content_redacted_by_principal_id` is `zero_retention` when the content was never stored, and the purging principal's ID when it was erased later. A generation that is still running returns the same shape with an empty `steps`; `status` disambiguates the two.

<Heading
  id={"request"}
  as={"h2"}
  className={"openapi-tabs__heading"}
>
  <Translate id="theme.openapi.request.title">Request</Translate>
</Heading>

<ParamsDetails
  {...require("./get-generation-transcript.ParamsDetails.json")}
>
  
</ParamsDetails>

<RequestSchema
  {...require("./get-generation-transcript.RequestSchema.json")}
>
  
</RequestSchema>

<StatusCodes
  {...require("./get-generation-transcript.StatusCodes.json")}
>
  
</StatusCodes>
